Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <Windows.h>
- using namespace std;
- void sleep(int rarely_used);
- class CPerson
- {
- private:
- string name;
- string EGN;
- public:
- CPerson()
- {
- name = "Lucian";
- EGN = "8904162244";
- }
- CPerson(string name, string EGN)
- {
- this -> name = name;
- this -> EGN = EGN;
- }
- string get_name()
- {
- return name;
- }
- string get_EGN()
- {
- return EGN;
- }
- void overwrite_name(string name)
- {
- this -> name = name;
- }
- void overwrite_EGN(string EGN)
- {
- this -> EGN = EGN;
- }
- void getYMD(const string& strEGN,int &iYear,int &iMonth, int &iDay)const
- {
- iYear = stoi(strEGN.substr(0,2));
- if(iYear < 18) iYear+=2000;
- else iYear+=1900;
- iMonth = stoi(strEGN.substr(2,2));
- iDay = stoi(strEGN.substr(4,2));
- }
- int get_age()
- {
- return 2017-stoi(EGN.substr(0,2));
- }
- bool isValid(const string& strEGN)
- {
- int d = strEGN[strEGN.length()-1]-'0';
- int weight[9] = {2,4,8,5,10,9,7,3,6};
- int res = 0;
- for(int i=0; i < strEGN.length()-1; i++)
- res+= (strEGN[i]-'0')*weight[i];
- if(res%11 < 10) res%=11;
- else res = 0;
- if(d == res) return true;
- return false;
- }
- friend ostream& operator<<(ostream& toStream, const CPerson& pers);
- friend istream& operator>>(istream& fromStream, CPerson& pers);
- };
- ostream& operator<<(ostream& toStream, const CPerson& pers)
- {
- if(&toStream==&cout)
- {
- cout << "\tObject of class CPerson: ";
- toStream << "\nName: " << pers.name;
- toStream << "\nEGN: " << pers.EGN;
- }
- else
- {
- toStream << pers.name << endl;
- toStream << pers.EGN << endl;
- }
- return toStream;
- }
- istream& operator>>(istream& fromStream, CPerson& pers)
- {
- bool p = false;
- if(&fromStream==&cin)
- {
- cout << "\nEnter name: ";
- }
- fromStream >> pers.name;
- //getline(fromStream,per.name);
- do
- {
- if(&fromStream==&cin) cout << "Enter EGN: ";
- fromStream >> pers.EGN;
- if(pers.isValid(pers.EGN)) p = true;
- if(!p) cout << "Invalid EGN! " << endl;
- }while(pers.EGN.length()!=10 || pers.EGN.find_first_of("0123456789") || !p);
- //getline(fromStream,per.EGN);
- return fromStream;
- }
- class CAddress
- {
- private:
- string street;
- string code;
- string city;
- public:
- CAddress()
- {
- street = "Angel Kunchev #15";
- code = "9000";
- city = "Varna";
- }
- CAddress(string street, string code, string city)
- {
- this -> street = street;
- this -> code = code;
- this -> city = city;
- }
- CAddress(const CAddress& x)
- {
- street = x.street;
- code = x.code;
- city = x.city;
- }
- string get_street()
- {
- return street;
- }
- string get_code()
- {
- return code;
- }
- string get_city()
- {
- return city;
- }
- ostream& Output(ostream& toStream) const
- {
- if(&toStream == &cout)
- {
- toStream << "\ncity: " << city;
- toStream << "\nstreet: " << street;
- toStream << "\ncode: " << code;
- }
- else
- {
- toStream << city << endl;
- toStream << street << endl;
- toStream << code << endl;
- }
- return toStream;
- }
- friend ostream& operator<<(ostream& toStream, const CAddress& addr);
- friend istream& operator>>(istream& fromStream, CAddress& addr);
- };
- ostream& operator<<(ostream& toStream, const CAddress& addr) // !!!!
- {
- if(&toStream==&cout)
- {
- toStream << "\nCity name: " << addr.city;
- toStream << "\nStreet name: " << addr.street;
- toStream << "\nCode: " << addr.code;
- }
- else
- {
- toStream << addr.city << endl;
- toStream << addr.street << endl;
- toStream << addr.code << endl;
- }
- return toStream;
- }
- istream& operator>>(istream& fromStream, CAddress& addr)
- {
- if(&fromStream==&cin)
- {
- cout << "Enter city name: ";
- }
- fromStream >> addr.city;
- if(&fromStream==&cin) cout << "Enter street name: ";
- fromStream >> addr.street;
- if(&fromStream==&cin) cout << "Enter city's code: ";
- fromStream >> addr.code;
- return fromStream;
- }
- class CGSM
- {
- private:
- string model;
- double tariff_plan;
- public:
- CGSM()
- {
- model = "Samsung Galaxy";
- tariff_plan = 14.99;
- }
- CGSM(string model, double tariff_plan)
- {
- this -> model = model;
- this -> tariff_plan = tariff_plan;
- }
- string get_model() { return model; }
- double get_tariff_plan() { return tariff_plan; }
- void set_model(string model) { this -> model = model; }
- void set_tariff_plain(double tariff_plan) { this -> tariff_plan = tariff_plan; }
- virtual ostream& OutputGSM(ostream& toStream) = 0;
- virtual string getGSMNumber() const = 0;
- virtual istream& InputGSM(istream& fromStream) = 0;
- };
- class CStudent : public CPerson, public CGSM
- {
- private:
- string FN;
- friend class CAddress;
- CAddress *a; // !!
- string phone;
- public:
- CStudent()
- {
- FN = "61662115";
- a = new CAddress();
- phone = "0892467472";
- }
- CStudent(string name, string EGN, string street, string code, string city, string phone, string model, double tariff_plan):CPerson(name, EGN),CGSM(model, tariff_plan)
- {
- FN = "61662115";
- this -> phone = phone;
- a = new CAddress(street, code, city);
- }
- CStudent(string name, string EGN, string phone, string model, double tariff_plan, CAddress* a):CPerson(name,EGN),CGSM(model,tariff_plan)
- {
- FN = "61662115";
- this -> phone = phone;
- this->a = new CAddress(a->get_street(),a->get_code(),a->get_city());
- }
- CStudent(string name, string EGN, string FN, string street, string code, string city, string phone, string model, double tariff_plan):CPerson(name, EGN),CGSM(model, tariff_plan)
- {
- this -> FN = FN;
- this -> phone = phone;
- a = new CAddress(street, code, city);
- }
- CStudent(CStudent& obj1):CPerson(obj1.get_name(),obj1.get_EGN()),CGSM(obj1.get_model(),obj1.get_tariff_plan())
- {
- FN = obj1.FN;
- a = obj1.a;
- }
- CStudent(CStudent& x, int unused)
- {
- *a = *x.a;
- }
- ~CStudent()
- {
- a = NULL;
- delete[] a;
- }
- string get_street()
- {
- return (*a).get_street();
- }
- string get_FN()
- {
- return FN;
- }
- string get_code()
- {
- return (*a).get_code();
- }
- string get_city()
- {
- return (*a).get_city();
- }
- ostream& Output(ostream& toStream)
- {
- if(&toStream == &cout)
- {
- toStream << "Name: " << get_name();
- toStream << "\nEGN: " << get_EGN();
- toStream << "\nFN: " << FN;
- (*a).Output(toStream);
- toStream << "\nPhone number: " << phone;
- toStream << "\nModel: " << get_model();
- toStream << "\nTariff plan: " << get_tariff_plan();
- }
- else
- {
- toStream << get_name() << endl;
- toStream << get_EGN() << endl;
- toStream << FN << endl;
- (*a).Output(toStream);
- toStream << phone << endl;
- toStream << get_model() << endl;
- toStream << get_tariff_plan() << endl;
- }
- return toStream;
- }
- void overwrite()
- {
- string name,street, code, city, EGN;
- cout << "\n\t\tOverwrite function ";
- cout << "\nEnter the new name: ";
- getline(cin,name);
- cout << "Enter the new EGN: ";
- getline(cin, EGN);
- cout << "Enter the FN: ";
- getline(cin, FN);
- cout << "\tEnter the new address ";
- cout << "\nStreet name: ";
- getline(cin, street);
- cout << "\nZip code: ";
- getline(cin, code);
- cout << "\nCity: ";
- getline(cin, city);
- a = new CAddress(street, code, city);
- CPerson::overwrite_name(name);
- CPerson::overwrite_EGN(EGN);
- }
- ostream& OutputGSM(ostream& toStream)
- {
- if(&toStream == &cout)
- {
- toStream << "\nModel: " << get_model();
- toStream << "\nTelephone number: " << phone;
- toStream << "\nTariff plan: " << get_tariff_plan();
- }
- else
- {
- toStream << get_model() << endl;
- toStream << phone << endl;
- toStream << get_tariff_plan() << endl;
- }
- return toStream;
- }
- string getGSMNumber() const
- {
- return phone;
- }
- istream& InputGSM(istream& fromStream)
- {
- if(&fromStream==&cin)
- cout << "\nEnter new telephone number: ";
- fromStream >> phone;
- return fromStream;
- }
- bool operator>(CStudent& studR)
- {
- return get_tariff_plan() > studR.get_tariff_plan();
- }
- friend void ConsoleInputEGN(CStudent& stud);
- friend ostream& operator<<(ostream& toStream, CStudent& stud);
- friend bool operator ==(CStudent& stud1, CStudent& stud2);
- friend bool operator !=(CStudent& stud1, CStudent& stud2);
- friend bool operator <(CStudent& stud1, CStudent& stud2);
- friend bool operator >=(CStudent& stud1, CStudent& stud2);
- friend istream& operator>>(istream& fromStream, CStudent& stud);
- };
- void ConsoleInputEGN(CStudent& stud)
- {
- string EGN;
- cout << "\nEnter EGN: ";
- getline(cin,EGN);
- stud.overwrite_EGN(EGN);
- }
- ostream& operator<<(ostream& toStream, CStudent& stud)
- {
- if(&toStream==&cout)
- {
- toStream << "\tObject of class CStudent: ";
- toStream << "\nName: " << stud.get_name();
- toStream << "\nEGN: " << stud.get_EGN();
- toStream << "\nFN: " << stud.FN;
- toStream << "\nPhone number: " << stud.phone;
- }
- else
- {
- toStream << stud.get_name() << endl;
- toStream << stud.get_EGN() << endl;
- toStream << stud.FN << endl;
- toStream << stud.phone << endl;
- }
- toStream << *stud.a;
- return toStream;
- }
- istream& operator>>(istream& fromStream, CStudent& stud)
- {
- CPerson per;
- cin >> per;
- stud.CPerson::CPerson(per);
- CAddress p;
- cin.ignore();
- cin >> p;
- *stud.a = p;
- if(&fromStream==&cin)
- {
- cout << "Enter FN: ";
- }
- cin.seekg(0,ios::end);
- cin.clear();
- string s;
- double c;
- getline(fromStream,stud.FN);
- if(&fromStream==&cin)
- { cout << "Enter phone's model: "; }
- fromStream >> s;
- stud.set_model(s);
- if(&fromStream==&cin)
- { cout << "Enter phone's number: "; }
- fromStream >> stud.phone;
- if(&fromStream==&cin)
- { cout << "Enter phone's tariff: "; }
- fromStream >> c;
- stud.set_tariff_plain(c);
- return fromStream;
- }
- bool operator ==( CStudent& stud1, CStudent& stud2)
- {
- return stud1.get_age() == stud2.get_age();
- }
- bool operator !=(CStudent& stud1, CStudent& stud2)
- {
- return stud1.get_age() != stud2.get_age();
- }
- bool operator <(CStudent& stud1, CStudent& stud2)
- {
- return stud1.get_age() < stud2.get_age();
- }
- bool operator >=(CStudent& stud1, CStudent& stud2)
- {
- return stud1.get_age() >= stud2.get_age();
- }
- void main()
- {
- CPerson *p = new CPerson;
- CAddress *a = new CAddress;
- CStudent *s1 = new CStudent;
- cout << "Enter values for the object of class CPerson: ";
- cin >> *p;
- sleep(-2000);
- cout << "Enter values for the object of class CAddress: " << endl;
- cin >> *a;
- sleep(-2000);
- cout << "Object of class CStudent: " << endl;
- cin >> *s1;
- sleep(-2000);
- cout << *p;
- sleep(1000);
- cout << "Object of class CAddress: ";
- (*a).Output(cout);
- sleep(2500);
- cout << *s1;
- sleep(4000);
- CStudent *s2 = new CStudent("Rabia", "9708271063", "0892467472", "Samsung", 13.05, a);
- (*s2).Output(cout);
- sleep(4000);
- cout << "Output GSM function for s1: " << endl;
- (*s1).OutputGSM(cout);
- sleep(1500);
- cout << "InputGSM function for s2: " << endl;
- (*s2).InputGSM(cin);
- cout << "\nResult from Get GSM number function for s2: " << (*s2).getGSMNumber();
- sleep(0);
- if(*s1 > *s2) cout << "\t\t\t\ts1 > s2 ";
- else cout << "\t\t\t\ts1 <= s2 ";
- sleep(1000);
- delete p;
- delete a;
- delete s1;
- delete s2;
- CStudent *s = new CStudent[20];
- fstream oFile;
- oFile.open("Tema04.txt", ios::in);
- if(!oFile)
- {
- cout << "File cannot be opened!";
- exit(1);
- }
- int i = 0;
- while(!oFile.eof()) // while(oFile.good())
- {
- oFile >> *(s+i);
- i++;
- }
- oFile.close();
- cout << endl;
- system("pause");
- }
- void sleep(int rarely_used)
- {
- Sleep(3000+rarely_used);
- system("cls");
- }
Advertisement
Add Comment
Please, Sign In to add comment