-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCD.cpp
137 lines (100 loc) · 2.09 KB
/
CD.cpp
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include "CD.h"
#include "Tokenizer.h"
#include <sstream>
using namespace std;
int CD::_number = 1;
CD::CD() {
_titel = "";
_interpret = "";
_typ = 0;
_id = 0;
_ausleihe = NULL;
}
CD::CD(string titel, string interpret, int typ) {
if (titel.find(":") == titel.npos)
_titel = titel;
else
throw "ERROR: invalid input";
_interpret = interpret;
_id = CD::_number++;
_typ = typ;
_ausleihe = NULL;
setzeTyp(typ);
}
CD::CD(string titel, string interpret, int typ, int id) {
_titel = titel;
_interpret = interpret;
_id = id;
_typ = typ;
_ausleihe = NULL;
setzeTyp(typ);
if (id >= _number)
_number = id + 1;
}
void CD::setzeTyp(int typ) {
_typ = typ;
if (typ == CD::NORMAL) {
_dauer = 4;
_basispreis = 200;
_strafeProTag = 100;
} else if (typ == CD::ANGEBOT) {
_dauer = 10;
_basispreis = 100;
_strafeProTag = 40;
} else if (typ == CD::BESTSELLER) {
_dauer = 1;
_basispreis = 200;
_strafeProTag = 500;
} else
throw "ERROR: no such CD-type found!!";
}
int CD::ident() {
return _id;
}
void CD::ausleihen(AusleihPos *apos) {
if(!this->holeAusleihe()) {
_ausleihe = apos;
}
else {
throw "ERROR: CD already loan";
}
}
void CD::rueckgabe() {
_ausleihe = NULL;
}
AusleihPos *CD::holeAusleihe() {
return this->_ausleihe;
}
string CD::toString() {
ostringstream os;
os << _id << ":" << _titel << ":" << _interpret << ":" << _typ;
return os.str();
}
CD CD::parse(string cd) {
string idStr, titel, interpret, typStr;
int id, typ;
Tokenizer tok(cd, ':');
id = atoi((tok.getSubstr()).c_str());
titel = tok.getSubstr();
interpret = tok.getSubstr();
typ = atoi((tok.getSubstr()).c_str());
CD neueCD(titel, interpret, typ, id);
return neueCD;
}
int CD::preis(int dauer) {
if(dauer <= _dauer)
return _basispreis;
else {
dauer -= _dauer;
return (_basispreis + (dauer * _strafeProTag));
}
}
string CD::titel() {
return _titel;
}
string CD::interpret() {
return _interpret;
}
int CD::holeTyp() {
return _typ;
}