17
gorazd
c_cpp
9 months ago
4.3 kB
8
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