Advertisement
Guest User

Tutorijal14_1

a guest
Jun 26th, 2017
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement