View difference between Paste ID: gKPAZZyV and 8F2dxD5L
SHOW: | | - or go back to the newest paste.
1
/* 
2
    TP 16/17 (Tutorijal 14, Zadatak 1)
3
	Autotestovi by Enil Pajic.
4
	NOTE: ukoliko smatrate da je greska u autotestu, radite po postavci, bice uvazeno
5
	NOTE: vrsit ce se provjera na prepisivanje tutorijala (i kaznjavati sa oduzimanjem poena od ukupno osvojenih)
6
	NOTE: ovaj tutorijal se salje kao zadaca na Zamger
7
*/
8
#include <iostream>
9
#include <fstream>
10
#include <string>
11
#include <vector>
12
#include <algorithm>
13
#include <iomanip>
14
#include <sstream>
15
using namespace std;
16
17
struct Student {
18
	string iip;
19
	int indeks;
20
	int dan, mjesec, godina;
21
	double prosjek;
22
};
23
24
int main ()
25
{
26
	//orbob
27
	ifstream ulaz("STUDENTI.TXT");
28
	if(!ulaz) {
29
		cout << "Datoteka STUDENTI.TXT ne postoji!" << endl;
30
		return 0;
31
	}
32
	string iip;
33
	int dani[12]{31,28,31,30,31,30,31,31,30,31,30,31};
34
	int indeks, dan, mjesec, godina, ocjena;
35
	vector<int> ocjene;
36
	vector<Student> studenti;
37
	while(getline(ulaz, iip)) {
38
		if(ulaz.eof()) {
39
			break;
40
		} else if(ulaz.bad()) {
41
			cout << "Problemi pri citanju datoteke STUDENTI.TXT" << endl;
42
			return 0;
43
		}
44
		ulaz >> indeks;
45
		if(!ulaz || indeks < 0) {
46
			cout << "Neispravan format datoteke STUDENTI.TXT" << endl;
47
			return 0;
48
		}
49
		char znak;
50
		ulaz >> dan >> znak;
51
		if(!ulaz || znak != '/') {
52
			cout << "Neispravan format datoteke STUDENTI.TXT" << endl;
53
			return 0;
54
		}
55
		ulaz >> mjesec >> znak;
56
		if(!ulaz || znak != '/') {
57
			cout << "Neispravan format datoteke STUDENTI.TXT" << endl;
58
			return 0;
59
		}
60
		ulaz >> godina;
61
		if(!ulaz) {
62
			cout << "Neispravan format datoteke STUDENTI.TXT" << endl;
63
			return 0;
64
		}
65
		if(godina%400==0 || (godina%100!=0 && godina%4==0)) {
66
			dani[1] = 29;
67
		} else {
68
			dani[1] = 28;
69
		}
70
		if(mjesec < 1 || mjesec > 12 || dan < 1 || dan > dani[mjesec - 1] || godina < 0) {
71
			cout << "Neispravan format datoteke STUDENTI.TXT" << endl;
72
			return 0;
73
		}
74
		while(ulaz) {
75
			if(ulaz.eof()) {
76
				break;
77
			} else if(!ulaz) {
78
				cout << "Neispravan format datoteke STUDENTI.TXT" << endl;
79
				return 0;
80
			} else if(ulaz >> ocjena) {
81
				if(ocjena < 0 || ocjena > 10) {
82
					cout << "Neispravan format datoteke STUDENTI.TXT" << endl;
83
					return 0;
84
				}
85
				if(ulaz.peek() == ',') {
86
					ulaz.get();
87
				}
88
			}
89
			ocjene.push_back(ocjena);
90
		}
91
		ulaz.clear();
92
		int suma(0), brojac(0);
93
		for(int i=0; i < ocjene.size(); i++) {
94
			if(ocjene[i] > 5) {
95
				suma += ocjene[i];
96
				brojac++;
97
			}
98
		}
99
		if(suma == 0) {
100
			suma = 5;
101
			brojac = 1;
102
		}
103
		Student temp{iip, indeks, dan, mjesec, godina, (double)suma / brojac};
104
		studenti.push_back(temp);
105
		ocjene.resize(0);
106
	}
107
	sort(studenti.begin(),studenti.end(),[](Student a, Student b) { if(a.prosjek == b.prosjek) return a.indeks < b.indeks; return a.prosjek > b.prosjek; });
108
	ofstream izlaz("IZVJESTAJ.TXT");
109
	izlaz << left;
110
	izlaz << setw(30) << "Student" << setw(10) << "Indeks" << setw(20) << "Datum rodjenja" << setw(10) << "Prosjek" << endl;
111
	izlaz << setw(30) << "-------" << setw(10) << "------" << setw(20) << "--------------" << setw(10) << "-------" << endl;
112
	for(int i=0; i < studenti.size(); i++) {
113
		izlaz << setw(30) << studenti[i].iip << setw(10) << studenti[i].indeks;
114
		stringstream rodjendan;
115
		rodjendan << studenti[i].dan << "/" << studenti[i].mjesec << "/" << studenti[i].godina;
116
		izlaz << setw(20) << rodjendan.str() << setw(10) << fixed << setprecision(2) << studenti[i].prosjek << endl;
117
	}
118
	return 0;
119
}