17
gorazd
c_cpp
a month ago
4.3 kB
3
Indexable
1kolok_OOP
#include <iostream> #include <cstring> #include <iomanip> using namespace std; enum osE{DEFAULT=-1,LINUX,UNIX,WINDOWS}; class OperativenSistem { char *name; float version; osE type; float size_gb; public: OperativenSistem() { name = nullptr; version = 0; type = DEFAULT; size_gb = 0; } OperativenSistem(const char *_name,float _version, osE _type,float _size) { version = _version; type = _type; size_gb = _size; if (_name!=nullptr) { name = new char[strlen(_name)+1]; strcpy(name,_name); } else name = nullptr; } ~OperativenSistem() { delete[] name; } OperativenSistem(const OperativenSistem &os) { version = os.version; type = os.type; size_gb = os.size_gb; if (os.name!=nullptr) { name = new char[strlen(os.name)+1]; strcpy(name,os.name); } else name = nullptr; } OperativenSistem &operator=(const OperativenSistem &os) { if (this!=&os) { delete[] name; version = os.version; type = os.type; size_gb = os.size_gb; if (os.name!=nullptr) { name = new char[strlen(os.name)+1]; strcpy(name,os.name); } else name = nullptr; return *this; } } float getVersion()const {return version;} void pecati() { cout<<"Ime: "<<name<<" Verzija: "<<version<<" Tip: "<<type<<" Golemina:"<<size_gb<<"GB"<<endl; } bool ednakviSe(const OperativenSistem &os) { return (strcmp(name,os.name)==0) and (version == os.version) and (type == os.type) and (size_gb == os.size_gb); } int sporediVerzija(const OperativenSistem &os) { if (version == os.version) return 0; else if (os.version>version) return -1; else return 1; } bool istaFamilija(const OperativenSistem &os) const { return (strcmp(name,os.name)==0) and (type == os.type); } }; class Repozitorium { char name[20]; OperativenSistem *o; int n; public: Repozitorium(const char *ime) { strcpy(name,ime); o = nullptr; n = 0; } ~Repozitorium(){delete[] o;} void pecatiOperativniSistemi() { cout<<"Repozitorium: "<<name<<endl; for (int i = 0; i<n; i++) { o[i].pecati(); } } void izbrishi(const OperativenSistem &os) { for (int i = 0; i<n; i++) { if (o[i].ednakviSe(os)) { OperativenSistem *temp = new OperativenSistem[n-1]; for (int j = 0; j < i; j++) { temp[j] = o[j]; } for (int j = i+1; j<n; j++) { temp[j-1] = o[j]; } delete[] o; o = temp; i--; n--; } } } void dodadi(const OperativenSistem &os) { for (int i = 0; i<n; i++) { if (os.istaFamilija(o[i]) and o[i].getVersion()<os.getVersion()) { o[i] = os; return; } } OperativenSistem *temp = new OperativenSistem[n+1]; for (int j = 0; j<n; j++) { temp[j] = o[j]; } temp[n] = os; delete[] o; o = temp; n++; } }; int main() { char repoName[20]; cin>>repoName; Repozitorium repozitorium=Repozitorium(repoName); int brojOperativniSistemi = 0; cin>>brojOperativniSistemi; char ime[20]; float verzija; int tip; float golemina; for (int i = 0; i<brojOperativniSistemi; i++){ cin>>ime; cin>>verzija; cin>>tip; cin>>golemina; OperativenSistem os = OperativenSistem(ime, verzija, (osE)tip, golemina); repozitorium.dodadi(os); } repozitorium.pecatiOperativniSistemi(); cin>>ime; cin>>verzija; cin>>tip; cin>>golemina; OperativenSistem os = OperativenSistem(ime, verzija, (osE)tip, golemina); cout<<"=====Brishenje na operativen sistem====="<<endl; repozitorium.izbrishi(os); repozitorium.pecatiOperativniSistemi(); return 0; }
Editor is loading...
Leave a Comment