View difference between Paste ID: nsV4kQ2A and ieWvjc47
SHOW: | | - or go back to the newest paste.
1
#include <iostream>
2
3
using namespace std;
4
5
//narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
6
#pragma warning(disable:4996)
7
#pragma warning(disable:4244)
8
9
10
enum enumKursevi { HtmlCSSJavaScript, SoftwareEngeneeringFundamentals, MasteringSQL, WindowsSecurity };
11
char *KurseviChar[] = { "HtmlCSSJavaScript", "SoftwareEngeneeringFundamentals", "MasteringSQL", "WindowsSecurity" };
12
char *crt = "\n--------------------------------------------\n";
13
14
struct Datum {
15
	int * _dan, *_mjesec, *_godina;
16
	void Unos(int d, int m, int g) {
17
		_dan = new int(d);
18
		_mjesec = new int(m);
19
		_godina = new int(g);
20
	}
21
	void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl; }
22
	void Dealociraj() { delete _dan; delete _mjesec; delete _godina; }
23
	bool Period(Datum pocetak) {
24
		if (*_godina != *pocetak._godina)
25
			return true;
26
		else if (*_godina == *pocetak._godina && *_mjesec != *pocetak._mjesec)
27
			return true;
28
		else if (*_mjesec == *pocetak._mjesec && *_dan != *pocetak._dan)
29
			return true;
30
		return false;
31
	}
32
	bool ODDO(Datum OD, Datum DO) {
33
		if (*_godina < *OD._godina || *_godina > *DO._godina)
34
			return false;
35
		else if ((*_godina < *OD._godina || *_godina > *DO._godina) && (*_mjesec < *OD._mjesec || *_mjesec > *DO._mjesec))
36
			return false;
37
		else if ((*_mjesec < *OD._mjesec || *_mjesec > *DO._mjesec) && (*_dan < *OD._dan || *_dan > *DO._dan))
38
			return false;
39
		return true;
40
	}
41
};
42
43
struct Kurs {
44
	enumKursevi _kurs;
45
	Datum _pocetak;
46
	Datum _kraj;
47
	char * _imePredavaca;
48
	bool _aktivan;//SVAKI KURS JE NA POCETKU AKTIVAN
49
50
	void Dealociraj() {
51
		_pocetak.Dealociraj();
52
		_kraj.Dealociraj();
53
		delete[] _imePredavaca; _imePredavaca = nullptr;
54
	}
55
	void Unos(enumKursevi KursUnos, Datum pocetak, Datum kraj, char *ime) {
56
		_kurs = KursUnos;
57
		_pocetak.Unos(*pocetak._dan, *pocetak._mjesec, *pocetak._godina);
58
		_kraj.Unos(*kraj._dan, *kraj._mjesec, *kraj._godina);
59
		int vel = strlen(ime) + 1;
60
		_imePredavaca = new char[vel];
61
		strcpy(_imePredavaca, ime);
62
		_aktivan = true;
63
	}
64
	void Ispis() {
65
		cout << "Kurs:" << KurseviChar[_kurs] << endl;
66
		_pocetak.Ispis();
67
		_kraj.Ispis();
68
		cout << "Ime predavaca:" << _imePredavaca << endl;
69
		if (_aktivan)
70
			cout << "Kurs je jos aktivan." << endl;
71
		else
72
			cout << "Kurs  nije aktivan." << endl;
73
	}
74
};
75
struct Polaznik {
76
	int _polaznikID;
77
	char * _imePrezime;
78
	void Unos(int polaznikID, char * imePrezime) {
79
		_polaznikID = polaznikID;
80
		int size = strlen(imePrezime) + 1;
81
		_imePrezime = new char[size];
82
		strcpy_s(_imePrezime, size, imePrezime);
83
	}
84
	void Ispis() { cout << _polaznikID << " " << _imePrezime << endl; }
85
	void Dealociraj() {
86
		delete[] _imePrezime; _imePrezime = nullptr;
87
	}
88
89
};
90
struct Polaganja {
91
	Polaznik _polaznik;
92
	Kurs _kurs;
93
	Datum _datumPolaganja;
94
	float _ostvareniUspjeh;
95
	void Unos(Polaznik	polaznikUnos, Kurs KursUnos, Datum datumPolaganja, int uspijeh) {
96
		_polaznik.Unos(polaznikUnos._polaznikID, polaznikUnos._imePrezime);
97
		_kurs = KursUnos;
98
		_datumPolaganja.Unos(*datumPolaganja._dan, *datumPolaganja._mjesec, *datumPolaganja._godina);
99
		_ostvareniUspjeh = uspijeh;
100
	}
101
	void Dealokacija() {
102
		_polaznik.Dealociraj();
103
		_kurs.Dealociraj();
104
		_datumPolaganja.Dealociraj();
105
	}
106
	void Ispis() {
107
		_polaznik.Ispis();
108
		_datumPolaganja.Ispis();
109
		cout << "Uspijeh:" << _ostvareniUspjeh << "%" << endl;
110
	}
111
};
112
struct SkillsCentar {
113
	char * _nazivCentra;
114
	Kurs * _kursevi[50];//JEDAN EDUKACIJSKI CENTAR MOZE NUDITI NAJVISE 50 KURSEVA
115
	int _trenutnoKurseva;
116
	Polaganja * _polaganja;
117
	int _trenutnoPolaganja;
118
	void Unos(char *imeCentra) {
119
		int vel = strlen(imeCentra) + 1;
120
		_nazivCentra = new char[vel];
121
		strcpy(_nazivCentra, imeCentra);
122
		_trenutnoKurseva = 0;
123
		_trenutnoPolaganja = 0;
124
	}
125
	bool DodajKurs(Kurs k) {
126
		if (_trenutnoKurseva > 0) {
127
			for (int i = 0; i < _trenutnoKurseva; i++)
128
			{
129
				if (_kursevi[i]->_kurs == k._kurs && !_kursevi[i]->_kraj.Period(k._pocetak))
130
					return false;
131
			}
132
		}
133
		_kursevi[_trenutnoKurseva] = new Kurs;
134
		_kursevi[_trenutnoKurseva]->Unos(k._kurs, k._pocetak, k._kraj, k._imePredavaca);
135
		_trenutnoKurseva++;
136
		return true;
137
	}
138
	bool DodajPolaganje(Polaganja p) {
139
		if (_trenutnoPolaganja > 0) {
140
			for (int i = 0; i < _trenutnoKurseva; i++)
141
			{
142
				if (_polaganja[i]._polaznik._polaznikID == p._polaznik._polaznikID && _polaganja[i]._ostvareniUspjeh > p._ostvareniUspjeh)
143
					return false;
144
				if (!_kursevi[i]->_aktivan)
145
					return false;
146
				if (!(_kursevi[i]->_kraj._dan + 5 > p._datumPolaganja._dan))
147
					return false;
148
				if (_kursevi[i]->_kurs == p._kurs._kurs && !p._datumPolaganja.ODDO(_kursevi[i]->_pocetak, _kursevi[i]->_kraj))
149
					return false;
150
			}
151
		}
152
		for (int i = 0; i < _trenutnoKurseva; i++)
153
		{			
154
			if (p._kurs._kurs == _kursevi[i]->_kurs) {
155
				Povecaj();
156
				_polaganja[_trenutnoPolaganja].Unos(p._polaznik, p._kurs, p._datumPolaganja, p._ostvareniUspjeh);
157
				_trenutnoPolaganja++;
158
				return true;
159
			}
160
		}
161
		return false;
162
	}
163
	void Povecaj() {
164
		if (_trenutnoPolaganja == 0)
165
			_polaganja = new Polaganja[1];
166
		else {
167
			Polaganja *novo = new Polaganja[_trenutnoPolaganja];
168
			for (int i = 0; i < _trenutnoPolaganja; i++)
169
				novo->Unos(_polaganja[i]._polaznik, _polaganja[i]._kurs, _polaganja[i]._datumPolaganja, _polaganja[i]._ostvareniUspjeh);
170
			for (int i = 0; i < _trenutnoPolaganja; i++)
171
				_polaganja[i].Dealokacija();
172
			_polaganja = new Polaganja[_trenutnoPolaganja + 1];
173
			for (int i = 0; i < _trenutnoPolaganja; i++)
174
				_polaganja->Unos(novo[i]._polaznik, novo[i]._kurs, novo[i]._datumPolaganja, novo[i]._ostvareniUspjeh);
175
			for (int i = 0; i < _trenutnoPolaganja; i++)
176
				novo[i].Dealokacija();
177
			novo = nullptr;
178
		}
179
	}
180
	Polaganja *PolaganjaByDatum(Datum OD, Datum DO, int &brojPolaganja) {
181
		for (int i = 0; i < _trenutnoPolaganja; i++)
182
		{
183
			if (_polaganja[i]._datumPolaganja.ODDO(OD, DO))
184
				brojPolaganja++;
185
		}
186
		if (brojPolaganja > 0) {
187
			Polaganja *vrati = new Polaganja[brojPolaganja];
188
			int j = 0;
189
			for (int i = 0; i < _trenutnoPolaganja; i++)
190
			{
191
				if (_polaganja[i]._datumPolaganja.ODDO(OD, DO)) {
192
					vrati[j].Unos(_polaganja[i]._polaznik, _polaganja[i]._kurs, _polaganja[i]._datumPolaganja, _polaganja[i]._ostvareniUspjeh);
193
					j++;
194
				}
195
			}
196
			return vrati;
197
		}
198
		return NULL;
199
	}
200
	void Dealokacija() {
201
		delete[]_nazivCentra; _nazivCentra = nullptr;
202
		for (int i = 0; i < _trenutnoKurseva; i++)
203
			_kursevi[i]->Dealociraj();
204
		for (int i = 0; i < _trenutnoPolaganja; i++)
205
			_polaganja[i].Dealokacija();
206
	}
207
	void Ispis() {
208
		cout << crt << "KURSEVI" << crt;
209
		for (int i = 0; i < _trenutnoKurseva; i++){
210
			cout << crt;
211
			_kursevi[i]->Ispis();
212
		}
213
		cout << crt << "POLAGANJA" << crt;
214
		for (int i = 0; i < _trenutnoPolaganja; i++){
215
			_polaganja[i].Ispis();
216
		}
217
	}
218
};
219
float PretragaRekurzivno(Polaganja *p, int brojac, float uspijeh, int broj, enumKursevi kurs) {
220
	if (brojac < 0)
221
		return uspijeh / broj;
222
	else {
223
		if (p[brojac]._kurs._kurs == kurs) {
224
			uspijeh += p[brojac]._ostvareniUspjeh;
225
			broj++;
226
			return PretragaRekurzivno(p, brojac - 1, uspijeh, broj, kurs);
227
		}
228
		else
229
			return PretragaRekurzivno(p, brojac - 1, uspijeh, broj, kurs);
230
	}
231
}
232
233
void main() {
234
235
	/*
236
	1. BROJ I TIPOVI PARAMETARA MORAJU BITI IDENTICNI ONIMA U TESTNOM CODE-U (OSIM UKOLIKO IMATE OPRAVDANU POTREBU ZA MODIFIKACIJOM). U SUPROTNOM SE RAD NEĆE BODOVATI
237
	2. KREIRAJTE .DOC FAJL SA VAŠIM BROJEM INDEKSA ( NPR. IB130030.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJEŠENJA VAŠIH ZADATAKA. NE PREDAVATI .TXT ILI .CPP FAJLOVE. TAKOĐER, UKLONITE SVE DIJELOVE CODE-A KOJI NISU IMPLEMENTIRANI
238
	3. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
239
	4. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI ĆETE KOPIRATI VAŠA RJEŠENJA)
240
	5. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAĐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
241
	*/
242
243
	Datum datum1, datum2, datum3, datum4, datum5, datum6;
244
	datum1.Unos(26, 11, 2015);
245
	datum2.Unos(29, 5, 2016);
246
	datum3.Unos(5, 6, 2016);
247
	datum4.Unos(15, 8, 2016);
248
	datum5.Unos(13, 7, 2016);
249
	datum6.Unos(22, 9, 2016);
250
251
	Kurs softverski, html, sql, security;
252
	softverski.Unos(SoftwareEngeneeringFundamentals, datum1, datum2, "Emina Junuz");
253
	html.Unos(HtmlCSSJavaScript, datum2, datum3, "Larisa Tipura");
254
	sql.Unos(MasteringSQL, datum3, datum4, "Jasmin Azemovic");
255
	security.Unos(WindowsSecurity, datum3, datum4, "Adel Handzic");
256
257
	Polaznik denis, zanin, indira;
258
	denis.Unos(1, "Denis Music");
259
	zanin.Unos(2, "Zanin Vejzovic");
260
	indira.Unos(3, "Indira Hamulic");
261
262
	Polaganja denisHtml, zaninHtml, indiraSql;
263
	denisHtml.Unos(denis, html, datum5, 61);
264
	////61 predstavlja ostvareni uspjeh/procenat, a uspjesno polozenim se smatra svaki kurs na kome je polaznik ostvari vise od 55%
265
	zaninHtml.Unos(zanin, html, datum6, 93);
266
	indiraSql.Unos(indira, sql, datum4, 85);
267
268
	SkillsCentar mostar;
269
	mostar.Unos("Skills Center Mostar");
270
	////jedan edukacijski centar moze nuditi vise istih kurseva (npr. MasteringSQL), ali se oni moraju realizovati u razlictim periodima (pocetak-kraj) tj. ne smiju se preklapati
271
	////novi kurs istog tipa (npr. MasteringSQL) se mora realizovati nakon prethodno dodanog npr. ako prethodni kurs MasteringSQL traje 01.03.2016 - 01.04.2016, onda se 
272
	////novi kurs MasteringSQL moze dodati jedino ako pocinje nakon 01.04.2016
273
	if (mostar.DodajKurs(softverski)) {
274
		cout << crt << "KURS USPJESNO REGISTROVAN" << crt;
275
		softverski.Ispis();
276
		cout << crt;
277
	}
278
	if (mostar.DodajKurs(html)) {
279
		cout << crt << "KURS USPJESNO REGISTROVAN" << crt;
280
		html.Ispis();
281
		cout << crt;
282
	}
283
	if (mostar.DodajKurs(sql)) {
284
		cout << crt << "KURS USPJESNO REGISTROVAN" << crt;
285
		sql.Ispis();
286
		cout << crt;
287
	}
288
	////nije moguce dodati polaganje onog kursa koji nije evidentiran (registrovan, ponudjen) u tom edukacijskom centru
289
	////moguce je polagati samo aktivne kurseve i to najkasnije 5 dana od dana zavrsetka (kraja) posljednje dodanog (aktivnog) kursa iste vrste (npr. MasteringSQL)
290
	////jedan polaznik moze vise puta polagati isti kurs, ali novi procenat mora biti veci od prethodno dodanog (na istom kursu)
291
	if (mostar.DodajPolaganje(denisHtml)) {
292
		cout << crt << "POLAGANJE EVIDENTIRANO" << crt;
293
		denisHtml.Ispis();
294
	}
295
	if (mostar.DodajPolaganje(indiraSql)) {
296
		cout << crt << "POLAGANJE EVIDENTIRANO" << crt;
297
		indiraSql.Ispis();
298
	}
299
	if (mostar.DodajPolaganje(zaninHtml)) {
300
		cout << crt << "POLAGANJE EVIDENTIRANO" << crt;
301
		zaninHtml.Ispis();
302
	}
303
	Datum OD, DO;
304
	int brojPolaganja = 0;
305
	OD.Unos(1, 6, 2016);
306
	DO.Unos(1, 8, 2016);
307
	////PolaganjaByDatum – vraca niz polaganja koja su uspjesno realizovana u periodu OD-DO
308
	Polaganja * polaganjaByDatum = mostar.PolaganjaByDatum(OD, DO, brojPolaganja);
309
	cout << "U periodu od "<<endl;
310
	OD.Ispis();
311
	cout << " do ";
312
	DO.Ispis();
313
	cout << " uspjesno je realizovano " << brojPolaganja << " polaganja--->>>"<<endl;
314
	for (size_t i = 0; i < brojPolaganja; i++)
315
		polaganjaByDatum[i].Ispis();
316
317
	////PretragaRekurzivno - rekurzivna funkcija pronalazi prosjecni uspjeh koji su polaznici tokom godine (npr.2016) ostvarili na odredjenom kursu (npr. MasteringSQL)
318
	cout << "Prosjecan uspjeh na kursu MasteringSQL u 2016 godini je " << PretragaRekurzivno(mostar._polaganja, mostar._trenutnoPolaganja - 1, 0, 0, MasteringSQL) << endl;
319
	////Ispis - ispisuje sve informacije o edukacijskom centru. prije ispisa sortirati sve kurseve na osnovu pocetka odrzavanja kursa
320
	mostar.Ispis();
321
	mostar.Dealokacija();
322
323
	////izvrsiti potrebne dealokacije
324
	system("pause");
325
326
}