blodwen_argent

exam oop

Oct 31st, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.33 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <Windows.h>
  5.  
  6. using namespace std;
  7.  
  8. void sleep(int rarely_used);
  9.  
  10. class CPerson
  11. {
  12. private:
  13.     string name;
  14.     string EGN;
  15.  
  16. public:
  17.     CPerson()
  18.     {
  19.         name = "Lucian";
  20.         EGN = "8904162244";
  21.     }
  22.    
  23.     CPerson(string name, string EGN)
  24.     {
  25.         this -> name = name;
  26.         this -> EGN = EGN;
  27.     }
  28.  
  29.     string get_name()
  30.     {
  31.         return name;
  32.     }
  33.  
  34.     string get_EGN()
  35.     {
  36.         return EGN;
  37.     }
  38.  
  39.     void overwrite_name(string name)
  40.     {
  41.         this -> name = name;
  42.     }
  43.  
  44.     void overwrite_EGN(string EGN)
  45.     {
  46.         this -> EGN = EGN;
  47.     }
  48.  
  49.     void getYMD(const string& strEGN,int &iYear,int &iMonth, int &iDay)const
  50.     {
  51.         iYear = stoi(strEGN.substr(0,2));
  52.         if(iYear < 18) iYear+=2000;
  53.         else iYear+=1900;
  54.         iMonth = stoi(strEGN.substr(2,2));
  55.         iDay = stoi(strEGN.substr(4,2));
  56.     }
  57.  
  58.     int get_age()
  59.     {
  60.         return 2017-stoi(EGN.substr(0,2));
  61.     }
  62.  
  63.         bool isValid(const string& strEGN)
  64.     {
  65.             int d = strEGN[strEGN.length()-1]-'0';
  66.             int weight[9] = {2,4,8,5,10,9,7,3,6};
  67.             int res = 0;
  68.             for(int i=0; i < strEGN.length()-1; i++)
  69.                 res+= (strEGN[i]-'0')*weight[i];
  70.             if(res%11 < 10) res%=11;
  71.             else res = 0;
  72.             if(d == res) return true;
  73.  
  74.         return false;
  75.     }
  76.        
  77.     friend ostream& operator<<(ostream& toStream, const CPerson& pers);
  78.     friend istream& operator>>(istream& fromStream, CPerson& pers);
  79. };
  80.  
  81. ostream& operator<<(ostream& toStream, const CPerson& pers)
  82. {
  83.     if(&toStream==&cout)
  84.     {
  85.         cout << "\tObject of class CPerson: ";
  86.         toStream << "\nName: " << pers.name;
  87.         toStream << "\nEGN: " << pers.EGN;
  88.     }
  89.     else
  90.     {
  91.         toStream << pers.name << endl;
  92.         toStream << pers.EGN << endl;
  93.     }
  94.     return toStream;
  95. }
  96.  
  97. istream& operator>>(istream& fromStream, CPerson& pers)
  98. {
  99.     bool p = false;
  100.     if(&fromStream==&cin)
  101.     {
  102.         cout << "\nEnter name: ";
  103.     }
  104.     fromStream >> pers.name;
  105.     //getline(fromStream,per.name);
  106.     do
  107.     {  
  108.         if(&fromStream==&cin) cout << "Enter EGN: ";
  109.         fromStream >> pers.EGN;
  110.         if(pers.isValid(pers.EGN)) p = true;
  111.         if(!p) cout << "Invalid EGN! " << endl;
  112.     }while(pers.EGN.length()!=10 || pers.EGN.find_first_of("0123456789") || !p);
  113.     //getline(fromStream,per.EGN);
  114.     return fromStream;
  115. }
  116.  
  117. class CAddress
  118. {
  119. private:
  120.     string street;
  121.     string code;
  122.     string city;
  123.  
  124. public:
  125.     CAddress()
  126.     {
  127.         street = "Angel Kunchev #15";
  128.         code = "9000";
  129.         city = "Varna";
  130.     }
  131.  
  132.     CAddress(string street, string code, string city)
  133.     {
  134.         this -> street = street;
  135.         this -> code = code;
  136.         this -> city = city;
  137.     }
  138.  
  139.     CAddress(const CAddress& x)
  140.     {
  141.         street = x.street;
  142.         code = x.code;
  143.         city = x.city;
  144.     }
  145.  
  146.     string get_street()
  147.     {
  148.         return street;
  149.     }
  150.  
  151.     string get_code()
  152.     {
  153.         return code;
  154.     }
  155.  
  156.     string get_city()
  157.     {
  158.         return city;
  159.     }
  160.  
  161.     ostream& Output(ostream& toStream) const
  162.     {
  163.         if(&toStream == &cout)
  164.         {
  165.             toStream << "\ncity: " << city;
  166.             toStream << "\nstreet: " << street;
  167.             toStream << "\ncode: " << code;
  168.         }
  169.  
  170.         else
  171.         {
  172.             toStream << city << endl;
  173.             toStream << street << endl;
  174.             toStream << code << endl;
  175.         }
  176.         return toStream;
  177.     }
  178.  
  179.     friend ostream& operator<<(ostream& toStream, const CAddress& addr);
  180.     friend istream& operator>>(istream& fromStream, CAddress& addr);
  181. };
  182.  
  183. ostream& operator<<(ostream& toStream, const CAddress& addr)  // !!!!
  184. {
  185.     if(&toStream==&cout)
  186.     {
  187.         toStream << "\nCity name: " << addr.city;
  188.         toStream << "\nStreet name: " << addr.street;
  189.         toStream << "\nCode: " << addr.code;
  190.     }
  191.     else
  192.     {
  193.         toStream << addr.city << endl;
  194.         toStream << addr.street << endl;
  195.         toStream << addr.code << endl;
  196.     }
  197.     return toStream;
  198. }
  199.  
  200. istream& operator>>(istream& fromStream, CAddress& addr)
  201. {
  202.     if(&fromStream==&cin)
  203.     {
  204.         cout << "Enter city name: ";
  205.     }
  206.     fromStream >> addr.city;
  207.     if(&fromStream==&cin) cout << "Enter street name: ";
  208.     fromStream >> addr.street;
  209.     if(&fromStream==&cin) cout << "Enter city's code: ";
  210.     fromStream >> addr.code;
  211.     return fromStream;
  212. }
  213.  
  214. class CGSM
  215. {
  216. private:
  217.     string model;
  218.     double tariff_plan;
  219. public:
  220.     CGSM()
  221.     {
  222.         model = "Samsung Galaxy";
  223.         tariff_plan = 14.99;
  224.     }
  225.  
  226.     CGSM(string model, double tariff_plan)
  227.     {
  228.         this -> model = model;
  229.         this -> tariff_plan = tariff_plan;
  230.     }
  231.  
  232.     string get_model() { return model; }
  233.     double get_tariff_plan() { return tariff_plan; }
  234.     void set_model(string model) { this -> model = model; }
  235.     void set_tariff_plain(double tariff_plan) { this -> tariff_plan = tariff_plan; }
  236.     virtual ostream& OutputGSM(ostream& toStream) = 0;
  237.     virtual string getGSMNumber() const = 0;
  238.     virtual istream& InputGSM(istream& fromStream) = 0;
  239. };
  240.  
  241. class CStudent : public CPerson, public CGSM
  242. {
  243. private:
  244.     string FN;
  245.     friend class CAddress;
  246.     CAddress *a; // !!
  247.     string phone;
  248. public:
  249.     CStudent()
  250.     {  
  251.         FN = "61662115";
  252.         a = new CAddress();
  253.         phone = "0892467472";
  254.     }
  255.  
  256.     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)
  257.     {
  258.         FN = "61662115";
  259.         this -> phone = phone;
  260.         a = new CAddress(street, code, city);
  261.     }
  262.     CStudent(string name, string EGN, string phone, string model, double tariff_plan, CAddress* a):CPerson(name,EGN),CGSM(model,tariff_plan)
  263.     {
  264.         FN = "61662115";
  265.         this -> phone = phone;
  266.         this->a = new CAddress(a->get_street(),a->get_code(),a->get_city());
  267.     }
  268.     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)
  269.     {
  270.         this -> FN = FN;
  271.         this -> phone = phone;
  272.         a = new CAddress(street, code, city);
  273.     }
  274.  
  275.     CStudent(CStudent& obj1):CPerson(obj1.get_name(),obj1.get_EGN()),CGSM(obj1.get_model(),obj1.get_tariff_plan())
  276.     {
  277.         FN = obj1.FN;
  278.         a = obj1.a;
  279.     }
  280.  
  281.     CStudent(CStudent& x, int unused)
  282.     {
  283.         *a = *x.a;
  284.     }
  285.     ~CStudent()
  286.     {
  287.             a = NULL;
  288.             delete[] a;    
  289.     }
  290.  
  291.     string get_street()
  292.     {
  293.         return (*a).get_street();
  294.     }
  295.  
  296.     string get_FN()
  297.     {
  298.         return FN;
  299.     }
  300.  
  301.     string get_code()
  302.     {
  303.         return (*a).get_code();
  304.     }
  305.  
  306.     string get_city()
  307.     {
  308.         return (*a).get_city();
  309.     }
  310.  
  311.     ostream& Output(ostream& toStream)
  312.     {
  313.         if(&toStream == &cout)
  314.         {
  315.             toStream << "Name: " << get_name();
  316.             toStream << "\nEGN: " << get_EGN();
  317.             toStream << "\nFN: " << FN;
  318.             (*a).Output(toStream);
  319.             toStream << "\nPhone number: " << phone;
  320.             toStream << "\nModel: " << get_model();
  321.             toStream << "\nTariff plan: " << get_tariff_plan();
  322.         }
  323.        
  324.         else
  325.         {
  326.             toStream << get_name() << endl;
  327.             toStream << get_EGN() << endl;
  328.             toStream << FN << endl;
  329.             (*a).Output(toStream);
  330.             toStream << phone << endl;
  331.             toStream << get_model() << endl;
  332.             toStream << get_tariff_plan() << endl;
  333.         }
  334.  
  335.         return toStream;
  336.     }
  337.    
  338.     void overwrite()
  339.     {
  340.         string name,street, code, city, EGN;
  341.         cout << "\n\t\tOverwrite function ";
  342.         cout << "\nEnter the new name: ";
  343.         getline(cin,name);
  344.         cout << "Enter the new EGN: ";
  345.         getline(cin, EGN);
  346.         cout << "Enter the FN: ";  
  347.         getline(cin, FN);
  348.         cout << "\tEnter the new address ";
  349.         cout << "\nStreet name: ";
  350.         getline(cin, street);  
  351.         cout << "\nZip code: ";
  352.         getline(cin, code);
  353.         cout << "\nCity: ";
  354.         getline(cin, city);
  355.         a = new CAddress(street, code, city);
  356.         CPerson::overwrite_name(name);
  357.         CPerson::overwrite_EGN(EGN);
  358.     }
  359.  
  360.     ostream& OutputGSM(ostream& toStream)
  361.     {
  362.         if(&toStream == &cout)
  363.         {
  364.             toStream << "\nModel: " << get_model();
  365.             toStream << "\nTelephone number: " << phone;
  366.             toStream << "\nTariff plan: " << get_tariff_plan();
  367.         }
  368.         else
  369.         {
  370.             toStream << get_model() << endl;
  371.             toStream << phone << endl;
  372.             toStream << get_tariff_plan() << endl;
  373.         }
  374.         return toStream;
  375.     }
  376.    
  377.     string getGSMNumber() const
  378.     {
  379.         return phone;
  380.     }
  381.    
  382.     istream& InputGSM(istream& fromStream)
  383.     {
  384.         if(&fromStream==&cin)
  385.             cout << "\nEnter new telephone number: ";
  386.         fromStream >> phone;
  387.         return fromStream;
  388.     }
  389.  
  390.     bool operator>(CStudent& studR)
  391.     {
  392.         return get_tariff_plan() > studR.get_tariff_plan();
  393.     }
  394.  
  395.     friend void ConsoleInputEGN(CStudent& stud);
  396.     friend ostream& operator<<(ostream& toStream, CStudent& stud);
  397.     friend bool operator ==(CStudent& stud1, CStudent& stud2);
  398.     friend bool operator !=(CStudent& stud1, CStudent& stud2);
  399.     friend bool operator <(CStudent& stud1, CStudent& stud2);
  400.     friend bool operator >=(CStudent& stud1, CStudent& stud2);
  401.     friend istream& operator>>(istream& fromStream, CStudent& stud);
  402. };
  403.  
  404.  
  405. void ConsoleInputEGN(CStudent& stud)
  406. {
  407.     string EGN;
  408.     cout << "\nEnter EGN: ";
  409.     getline(cin,EGN);
  410.     stud.overwrite_EGN(EGN);
  411. }
  412.  
  413. ostream& operator<<(ostream& toStream, CStudent& stud)
  414. {
  415.     if(&toStream==&cout)
  416.     {
  417.         toStream << "\tObject of class CStudent: ";
  418.         toStream << "\nName: " << stud.get_name();
  419.         toStream << "\nEGN: " << stud.get_EGN();
  420.         toStream << "\nFN: " << stud.FN;
  421.         toStream << "\nPhone number: " << stud.phone;
  422.     }
  423.     else
  424.     {
  425.         toStream << stud.get_name() << endl;
  426.         toStream << stud.get_EGN() << endl;
  427.         toStream << stud.FN << endl;
  428.         toStream << stud.phone << endl;
  429.     }
  430.     toStream << *stud.a;
  431.     return toStream;
  432. }
  433.  
  434. istream& operator>>(istream& fromStream, CStudent& stud)
  435. {
  436.     CPerson per;
  437.     cin >> per;
  438.     stud.CPerson::CPerson(per);
  439.     CAddress p;
  440.     cin.ignore();
  441.     cin >> p;
  442.     *stud.a = p;
  443.     if(&fromStream==&cin)
  444.     {
  445.         cout << "Enter FN: ";
  446.     }
  447.     cin.seekg(0,ios::end);
  448.     cin.clear();    
  449.     string s;
  450.     double c;
  451.     getline(fromStream,stud.FN);
  452.     if(&fromStream==&cin)
  453.         { cout << "Enter phone's model: "; }
  454.     fromStream >> s;
  455.         stud.set_model(s);
  456.     if(&fromStream==&cin)
  457.        { cout << "Enter phone's number: "; }
  458.        fromStream >> stud.phone;
  459.     if(&fromStream==&cin)
  460.         { cout << "Enter phone's tariff: "; }
  461.     fromStream >> c;
  462.     stud.set_tariff_plain(c);
  463.  
  464.     return fromStream;
  465. }
  466.  
  467. bool operator ==( CStudent& stud1, CStudent& stud2)
  468. {
  469.     return stud1.get_age() == stud2.get_age();
  470. }
  471.  
  472. bool operator !=(CStudent& stud1, CStudent& stud2)
  473. {
  474.     return stud1.get_age() != stud2.get_age();
  475. }
  476.  
  477. bool operator <(CStudent& stud1, CStudent& stud2)
  478. {
  479.     return stud1.get_age() < stud2.get_age();
  480. }
  481.  
  482. bool operator >=(CStudent& stud1, CStudent& stud2)
  483. {
  484.     return stud1.get_age() >= stud2.get_age();
  485. }
  486.  
  487. void main()
  488. {
  489.     CPerson *p = new CPerson;
  490.     CAddress *a = new CAddress;
  491.     CStudent *s1 = new CStudent;
  492.     cout << "Enter values for the object of class CPerson: ";
  493.     cin >> *p;
  494.     sleep(-2000);
  495.     cout << "Enter values for the object of class CAddress: " << endl;
  496.     cin >> *a;
  497.     sleep(-2000);
  498.  
  499.     cout << "Object of class CStudent: " << endl;
  500.     cin >> *s1;
  501.     sleep(-2000);
  502.  
  503.     cout << *p;
  504.     sleep(1000);
  505.     cout << "Object of class CAddress: ";
  506.     (*a).Output(cout);
  507.     sleep(2500);
  508.     cout << *s1;
  509.     sleep(4000);
  510.     CStudent *s2 = new CStudent("Rabia", "9708271063", "0892467472", "Samsung", 13.05, a);
  511.     (*s2).Output(cout);
  512.     sleep(4000);
  513.  
  514.     cout << "Output GSM function for s1: " << endl;
  515.     (*s1).OutputGSM(cout);
  516.     sleep(1500);
  517.     cout << "InputGSM function for s2: " << endl;
  518.     (*s2).InputGSM(cin);
  519.     cout << "\nResult from Get GSM number function for s2: " << (*s2).getGSMNumber();
  520.     sleep(0);
  521.    
  522.     if(*s1 > *s2) cout << "\t\t\t\ts1 > s2 ";
  523.     else cout << "\t\t\t\ts1 <= s2 ";
  524.     sleep(1000);
  525.  
  526.     delete p;
  527.     delete a;
  528.     delete s1;
  529.     delete s2;
  530.  
  531.     CStudent *s = new CStudent[20];
  532.     fstream oFile;
  533.     oFile.open("Tema04.txt", ios::in);
  534.     if(!oFile)
  535.     {
  536.         cout << "File cannot be opened!";
  537.         exit(1);
  538.     }
  539.     int i = 0;
  540.     while(!oFile.eof()) // while(oFile.good())
  541.     {
  542.         oFile >> *(s+i);
  543.         i++;
  544.     }
  545.     oFile.close();
  546.  
  547.     cout << endl;
  548.     system("pause");
  549. }
  550.  
  551. void sleep(int rarely_used)
  552. {
  553.     Sleep(3000+rarely_used);
  554.     system("cls");
  555. }
Advertisement
Add Comment
Please, Sign In to add comment