24.11.2.24012030. Proširiti klasu “Liga” razvijenu u zadatku 18.4 sa dvije nove metode “Snimi” i “Obnovi” koje će snimati kompletan sadržaj lige u datoteku pod imenom koje se zadaje kao parametar, kao i obnovu sadržaja lige iz datoteke zadanog imena. Nakon dodavanja te dvije metode, uklopiti klasu “Liga” i njoj pripadnu klasu “Tim” u funkcionalan program, koji korisniku nudi sljedeće opcije:
Opis rješenja: Listing programa: #include <iostream> #include <conio.h> #include <cstring> #include <algorithm> #include <fstream> using namespace std; //klasa Tim class Tim{ char ime[20]; int broj_odigranih,broj_pobjeda, broj_nerijesenih,broj_poraza, broj_datih,broj_primljenih,broj_poena; Tim(ifstream &ulaz); public: Tim(const char ime[]){ strcpy(Tim::ime,ime); broj_odigranih=broj_pobjeda=0; broj_nerijesenih=broj_poraza=0; broj_datih=broj_primljenih=broj_poena=0; } void ObradiUtakmicu(int broj_datih, int broj_primljenih); const char *ImeTima() const{ return &ime[0]; } int BrojPoena() const{ return broj_poena; } int GolRazlika() const{ return broj_datih-broj_primljenih; } void IspisiPodatke() const; friend class Liga; }; Tim::Tim(ifstream &ulaz){ ulaz.read((char*)this, sizeof *this); if(!ulaz) throw "Nešto nije u redu sa èitanjem!\n"; } void Tim::ObradiUtakmicu(int broj_datih, int broj_primljenih){ broj_odigranih++; if(broj_datih>broj_primljenih){ broj_pobjeda++; broj_poena+=3; } else if(broj_datih<<<<<<<<< br_timova; i++) { timovi[i] = new Tim(ulaz); ulaz.read((char*)timovi[i], sizeof **timovi); } if(!ulaz) throw "Nešto nije u redu sa èitanjem!\n"; } void Liga::RegistrirajUtakmicu(const char tim1[], const char tim2[], int rezultat_1, int rezultat_2){ bool t(true),t2(true); int j(0),j2(0); for(int i=0;iImeTima(),tim1)==0){t=false;j=i;break;} if(t)throw "error!"; for(int i=0;iImeTima(),tim2)==0){t2=false;j2=i;break;} if(t2)throw "error!"; timovi[j]->ObradiUtakmicu(rezultat_1,rezultat_2); timovi[j2]->ObradiUtakmicu(rezultat_2,rezultat_1); } bool Liga::kriterij(Tim *a,Tim *b){ if((a->BrojPoena())>(b->BrojPoena()))return true; if((a->BrojPoena())==(b->BrojPoena())){ if((a->GolRazlika())>=(b->GolRazlika()))return true; return false; } return false; } void Liga::IspisiTabelu(){ sort(timovi,timovi+br_timova,kriterij); cout<< br_timova; i++) izlaz.write((char*)timovi[i], sizeof **timovi); if(!izlaz) throw "Nešto nije u redu sa upisom!\n"; } void Liga::Obnovi(const char ime_dat[]){ ifstream ulaz(ime_dat, ios::in | ios::binary); if(!ulaz) throw "Datoteka ne postoji!\n"; for(int i = 0; i < br_timova; i++) delete timovi[i]; delete[] timovi; ulaz.read((char*)this, sizeof *this); timovi = new Tim*[max_br_timova]; for(int i = 0; i < br_timova; i++) { timovi[i] = new Tim("Prvi");//mogao se pozvat i konstruktor od Tim-a ulaz.read((char*)timovi[i], sizeof **timovi); } if(!ulaz) throw "Nešto nije u redu sa èitanjem!\n"; } int main(){ try{ //Ovdje testirati metode razvijene klase Liga... } catch(const char a[]){ cout<<a; } getch(); return 0; } Ispis na ekranu:
|
||||||||
|