Alx09

Untitled

Nov 23rd, 2020
1,101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string>
  4. using namespace std;
  5.  
  6. class Persoana {
  7. private:
  8.     static Persoana *head;
  9.     Persoana *next;
  10.     string nume, prenume, numeLiceu;
  11. public:
  12.     Persoana(string nume, string prenume, string numeLiceu){
  13.         this->nume = nume;
  14.         this->prenume = prenume;
  15.         this->numeLiceu = numeLiceu;
  16.         this->next = NULL;
  17.         if (head == NULL) {
  18.             head = this;
  19.             return;
  20.         }
  21.         if (head->nume > this->nume) {
  22.             this->next = head;
  23.             head = this;
  24.             return;
  25.         }
  26.         Persoana *q = head;
  27.         while (q->next && q->next->nume < this->nume) q = q->next;
  28.         this->next = q->next;
  29.         q->next = this;
  30.     }
  31.     virtual void Show() {
  32.         cout << "\nNume: "<< nume;
  33.         cout << "\nPrenume: " << prenume;
  34.         cout << "\nNume Liceu: " << numeLiceu;
  35.     }
  36.     static void Showlist() {
  37.         Persoana *q = head;
  38.         while (q) {
  39.             q->Show();
  40.             q = q->next;
  41.         }
  42.     }
  43. };
  44. Persoana *Persoana::head = NULL;
  45. class Profesor : public Persoana {
  46. private:
  47.     string materie, gradDidactic;
  48.     unsigned short vechime;
  49.     double salar;
  50. public:
  51.     Profesor(string nume, string prenume, string numeLiceu, string materie, string gradDidactic, unsigned short vechime, double salar) :Persoana(nume, prenume, numeLiceu) {
  52.         this->gradDidactic = gradDidactic;
  53.         this->materie = materie;
  54.         this->vechime = vechime;
  55.         this->salar = salar;
  56.     }
  57.      void Show() {
  58.         Persoana::Show();
  59.         cout << "\nMaterie: " << materie;
  60.         cout << "\nGrad Didactic: " << gradDidactic;
  61.         cout << "\nVechime: " << vechime;
  62.         cout << "\nSalariu: " << salar << endl;;
  63.     }
  64.    
  65. };
  66.  
  67. class Elev : public Persoana {
  68. private:
  69.     string specializare;
  70.     unsigned short an;
  71.     double mediaGen;
  72. public:
  73.     Elev(string nume, string prenume, string numeLiceu, string specializare, unsigned short an, double mediaGen) :Persoana(nume, prenume, numeLiceu) {
  74.         this->specializare = specializare;
  75.         this->an = an;
  76.         this->mediaGen= mediaGen;
  77.     }
  78.     void Show() {
  79.         Persoana::Show();
  80.         cout << "\nSpecializare: " << specializare;
  81.         cout << "\nAn: " << an ;
  82.         cout << "\nMedia Generala: " << mediaGen<< endl;
  83.        
  84.     }
  85. };
  86.  
  87. ostream& operator<<(ostream& iesire, Profesor *P)
  88. {
  89.     iesire << "Date despre persoana" << endl;
  90.     Persoana::Showlist();
  91.     return iesire;
  92. }
  93. ostream& operator<<(ostream& iesire, Elev &E)
  94. {
  95.     iesire << "Date despre persoana" << endl;
  96.     Persoana::Showlist();
  97.     return iesire;
  98. }
  99. istream& operator>>(istream& in, Elev *E)
  100. {
  101.     string nume, prenume, numeLiceu, specializare;
  102.     unsigned short an;
  103.     double mediaGen;
  104.     cout << "Nume: "; cin >> nume;
  105.     cout << "Prenume: "; cin >> prenume;
  106.     cout << "Liceu: "; cin >> numeLiceu;
  107.     cout << "Specializare: "; cin >> specializare;
  108.     cout << "An: "; cin >> an;
  109.     cout << "Media Generala: "; cin >> mediaGen;
  110.     new Elev(nume, prenume, numeLiceu, specializare, an, mediaGen);
  111.     return in;
  112. }
  113. istream& operator>>(istream& in, Profesor *P)
  114. {
  115.     string nume, prenume, numeLiceu, materie, gradDidactic;
  116.     unsigned short vechime;
  117.     double salar;
  118.     cout << "Nume: "; cin >> nume;
  119.     cout << "Prenume: "; cin >> prenume;
  120.     cout << "Liceu: "; cin >> numeLiceu;
  121.     cout << "Materie: "; cin >> materie;
  122.     cout << "Grad Didactic: "; cin >> gradDidactic;
  123.     cout << "Vechime: "; cin >> vechime;
  124.     cout << "Salariu: "; cin >> salar;
  125.     new Profesor(nume, prenume, numeLiceu, materie, gradDidactic, vechime, salar);
  126.     return in;
  127. }
  128.  
  129. int main() {
  130.     Elev *elev= NULL;
  131.     Profesor *prof= NULL;
  132.     unsigned short opt;
  133.    
  134.     do {
  135.         cout << "\n0. Iesire";
  136.         cout << "\n1. Citire Persoana";
  137.         cout << "\n2. Afisare Persoana";
  138.         cout << "\nOptiunea aleasa: "; cin >> opt;
  139.        
  140.         system("cls");
  141.         switch (opt)
  142.         {
  143.         case 0: return 0;
  144.         case 1:
  145.             cout << "\nEste elev - 0/ profesor - 1: "; cin >> opt;
  146.             if (opt)
  147.                 cin >> prof;
  148.             else
  149.                 cin >> elev;
  150.             break;
  151.         case 2:
  152.             cout << prof;
  153.         default:
  154.             break;
  155.         }
  156.     } while (1);
  157.    
  158.     system("pause");
  159. }
Advertisement
Add Comment
Please, Sign In to add comment