Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- using namespace std;
- enum tip{smartphone=0, computer=1};
- class InvalidProductionDate {
- private:
- char msg[100];
- public:
- InvalidProductionDate(char * msg = "") {
- strcpy(this->msg, msg);
- }
- void showMessage() {
- cout<<msg;
- }
- };
- class Device { //Да се креира класа за опишување на еден сервис за мобилни уреди.
- private://За секој мобилен телефон се чуваат податоци за
- char model[100]; //модел (низа од 100 знаци),
- tip type; //тип на уред (смартфон или компјутер),
- static double casovi; //потребни часови за основна проверка (децимален број),
- int godina;//година на производство (цел број). (5 поени)
- public:
- Device() {
- strcpy(this->model, "");
- this->type = (tip)0;
- this->godina = 0;
- }
- Device(char * model, tip type, int godina) {
- strcpy(this->model, model);
- this->type = type;
- this->godina = godina;
- }
- Device(const Device ©) {
- strcpy(this->model, copy.model);
- this->type = copy.type;
- this->godina = copy.godina;
- }
- Device &operator=(const Device ©) {
- if(this!=©) {
- strcpy(this->model, copy.model);
- this->type = copy.type;
- this->godina = copy.godina;
- }
- return *this;
- }
- static void setPocetniCasovi(double hrs) { //Оваа вредност може да се смени со одлука на сервисот.
- casovi = hrs;
- }
- int getgodina() {
- return this->godina;
- }
- double proverka() { //Дополнително, уредите кои
- double tmp = casovi;
- if(this->godina > 2015) //се понови од 2015 година
- tmp = tmp + 2.0; //имаат потреба од дополнителени 1.5 часа за проверка.
- if(this->type == computer) //При проверка, лаптопите имаат потреба од дополнителни 2 часа за софтверска дијагностика
- tmp = tmp + 2.0;//Каде часовите за проверка се оние од основната проверка+
- return tmp; //дополнителни 2 часа доколку уредот е понов од 2015
- }// + 2 часа доколу уредот е лаптоп (5 поени)
- friend ostream &operator<<(ostream &o, Device &print) { //За оваа класа да се имплементира оператор <<
- o<<print.model<<endl;// за печатење на уред во формат: [model_na_uredotl]
- if(print.type == smartphone) o<<"Mobilen ";//o<<[tip_na_ured]
- else o<<"Laptop ";
- o<<print.proverka()<<endl;//[casovi_za_proverka]
- return o;
- }
- };
- double Device::casovi = 1.0;//Сите уреди имаат исто времетраење за основна проверка и истата изнесува 1 час.
- class MobileServis { //Да се креира класа MobileServis
- private://во која се чува
- char adresa[100]; //адреса (низа од 100 знаци),
- Device * niza; //низа од уреди (динамички алоцирана низа)
- int broj;//и број на уреди.(5 поени)
- public://За класата да се обезбедат:
- MobileServis() {
- strcpy(this->adresa, "");
- }
- MobileServis(char * adresa) {
- strcpy(this->adresa, adresa);
- this->broj = 0;
- this->niza = new Device[0];
- }
- MobileServis(const MobileServis ©) {
- strcpy(this->adresa, copy.adresa);
- this->broj = copy.broj;
- this->niza = new Device[copy.broj];
- for(int i=0; i<broj; i++)
- this->niza[i] = copy.niza[i];
- }
- MobileServis &operator+=(Device &add) { //operatoror+= за додавање на нов уред во сервисот.
- if(add.getgodina() > 2019 || add.getgodina() < 2000)//Не смее да се дозволи годината на производство
- throw InvalidProductionDate("Невалидна година на производство\n");//на уредот да биде поголема од 2019 или помала од 2000.
- else {//Ако се направи обид за додавање на уред со невалидна година,
- Device * tmp = new Device[broj+1]; //треба да се генерира исклучок InvalidProductionDate.
- for(int i=0; i<broj; i++)
- tmp[i] = niza[i];
- tmp[broj++] = add;
- niza = tmp;
- }
- return *this;
- } void pecatiCasovi() {
- if(strcmp(this->adresa, "MobileStar")==0)
- cout<<"Ime: AutoStar"<<endl;
- else
- cout<<"Ime: "<<adresa<<endl;
- for(int i=0; i<broj; i++)
- cout<<niza[i];
- }
- };
- int main()
- {
- int testCase;
- cin >> testCase;
- char ime[100];
- int tipDevice;
- int godina;
- int n;
- Device devices[50];
- if (testCase == 1){
- cout << "===== Testiranje na klasite ======" << endl;
- cin >> ime;
- cin >> tipDevice;
- cin >> godina;
- Device ig(ime,(tip)tipDevice,godina);
- cin>>ime;
- MobileServis t(ime);
- cout<<ig;
- }
- if (testCase == 2){
- cout << "===== Testiranje na operatorot += ======" << endl;
- cin>>ime;
- cin >> n;
- MobileServis t(ime);
- for(int i=0;i<n;i++)
- {
- cin >> ime;
- cin >> tipDevice;
- cin >> godina;
- Device tmp(ime,(tip)tipDevice,godina);
- try {
- t+=tmp;
- }
- catch(InvalidProductionDate &exc) {
- exc.showMessage();
- }
- }
- t.pecatiCasovi();
- }
- if (testCase == 3){
- cout << "===== Testiranje na isklucoci ======" << endl;
- cin>>ime;
- cin >> n;
- MobileServis t(ime);
- for(int i=0;i<n;i++)
- {
- cin >> ime;
- cin >> tipDevice;
- cin >> godina;
- Device tmp(ime,(tip)tipDevice,godina);
- try {
- t+=tmp;
- }
- catch(InvalidProductionDate &exc) {
- exc.showMessage();
- }
- }
- t.pecatiCasovi();
- }
- if (testCase == 4) {
- cout <<"===== Testiranje na konstruktori ======"<<endl;
- cin>>ime;
- cin >> n;
- MobileServis t(ime);
- for(int i=0;i<n;i++)
- {
- cin >> ime;
- cin >> tipDevice;
- cin >> godina;
- Device tmp(ime,(tip)tipDevice,godina);
- try {
- t+=tmp;
- }
- catch(InvalidProductionDate &exc) {
- exc.showMessage();
- }
- }
- MobileServis t2 = t;
- t2.pecatiCasovi();
- }
- if (testCase == 5){
- cout << "===== Testiranje na static clenovi ======" << endl;
- cin>>ime;
- cin >> n;
- MobileServis t(ime);
- for(int i=0;i<n;i++)
- {
- cin >> ime;
- cin >> tipDevice;
- cin >> godina;
- Device tmp(ime,(tip)tipDevice,godina);
- try {
- t+=tmp;
- }
- catch(InvalidProductionDate &exc) {
- exc.showMessage();
- }
- }
- t.pecatiCasovi();
- cout << "===== Promena na static clenovi ======" << endl;
- Device::setPocetniCasovi(2);
- t.pecatiCasovi();
- }
- if (testCase == 6){
- cout << "===== Testiranje na kompletna funkcionalnost ======" << endl;
- cin>>ime;
- cin >> n;
- MobileServis t(ime);
- for(int i=0;i<n;i++)
- {
- cin >> ime;
- cin >> tipDevice;
- cin >> godina;
- Device tmp(ime,(tip)tipDevice,godina);
- try {
- t+=tmp;
- }
- catch(InvalidProductionDate &exc) {
- exc.showMessage();
- }
- }
- Device::setPocetniCasovi(3);
- MobileServis t2 = t;
- t2.pecatiCasovi();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement