Repository navigation
Expand file tree
/
Copy pathTank.cpp
More file actions
101 lines (84 loc) · 2.25 KB
/
Copy pathTank.cpp
File metadata and controls
101 lines (84 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "Tank.h"
//#define TEST
/**
* Konstruktor tridy Tank.
* @param capacity maximalni kapacita akumulacni nadrze
*/
Tank::Tank(int capacity) {
maxCapacity = capacity;
waterLevel = 0;
}
/**
* Funkce, ktera vraci aktualni zaplneni vodni nadrze
* @return aktualni zaplneni
*/
int Tank::getWaterLevel() {
return waterLevel;
}
/**
* Metoda, ktera vraci maximalni kapacitu vodni nadrze.
* @return maximalni mozne zaplneni
*/
int Tank::getMaxCapacity() {
return maxCapacity;
}
/**
* Metoda, ktera repzerentuje prepad vody.
* @param amount mnozstvi vody, ktera se vypusti do kanalizace
*/
void Tank::dropWater(int amount) {
Stats::droppedWater(amount);
waterLevel = maxCapacity;
#ifdef TEST
cout<<"prepad vody: " << amount<<endl;
#endif
}
/**
* Metoda, ktera naplni nadrz urcitym mnozstvim vody. Zavola funkci, ktera zjisti, zda by nadrz naplnenim nebyla preplněná.
* @param amount mnozstvi vody
*/
void Tank::fill(int amount) {
int waterToDrop = 0;
waterLevel += amount;
#ifdef TEST
cout<<"do nadrze nateklo: " << amount <<endl;
#endif
if (isTankOverfull()) {
waterToDrop = waterLevel - maxCapacity;
dropWater(waterToDrop);
}
Stats::containedWater(amount - waterToDrop);
}
/**
* Metoda, ktera zjistuje, zda nebude mit nadrz po napusteni vetsi kapacitu, nez je maximalni. Pokud ano, vypusti prebytecnou vodu do kanalu
* @return
*/
bool Tank::isTankOverfull() {
return waterLevel > maxCapacity;
}
/**
* Metoda, ktera zajistuje odcerpani vody z nadrze kvuli zavlažovaní.
* @param amount Množství vody
*/
void Tank::drainWater(int amount) {
if (amount > maxCapacity) {
cout << "Nadrz s kapacitou " << maxCapacity << " litrů není vhodná pro vase potreby zavlazovani." << endl;
exit(0);
}
if (waterLevel >= amount) {
waterLevel -= amount;
}
else{
cerr<<"Cerpani vetsiho mnozstvi vody z nadrze nez kolik obsahuje."<<endl;
exit(0);
}
}
/**
* Metoda, která předvyplní nádrž.
* @param volumeOfWater množství vody
*/
void Tank::prefill(int volumeOfWater){
int amountToGet = ( (volumeOfWater - waterLevel) < 0) ? 0 : volumeOfWater - waterLevel;
WaterSupply::getWater(amountToGet);
waterLevel += amountToGet;
}