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 | } |