Advertisement
madalinaradu

Curse aeroport

Apr 15th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.55 KB | None | 0 0
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <string.h>
  4.  
  5. using namespace std;
  6. class Evidenta;
  7. class Cursa {
  8. private:
  9.     int nrCursa;
  10.     char sursa[50];
  11.     char destinatie[50];
  12.     int ora;
  13.     int minut;
  14. public:
  15.     Cursa(int nrCursa=0,const char* sursa="", const char *destinatie="", int ora=0, int minut=0);
  16.     Cursa(const Cursa &c);
  17.     void afisare();
  18.     void setNrCursa(int nrCursa);
  19.     int getNrCursa();
  20.     void setSursa(char *sursa);
  21.     char* getSursa();
  22.     void setDestinatie(char *destinatie);
  23.     char* getDestinatie();
  24.     void setOra(int ora);
  25.     int getOra();
  26.     void setMinut(int minut);
  27.     int getMinut();
  28.     int getTimp();
  29.     friend class Evidenta;
  30.     friend int comparaDupaPlecare(Cursa &c1, Cursa &c2);
  31.     friend int comparaDupaDestinatie(Cursa &c1, Cursa &c2);
  32.     friend int comparaDupaNrCursa(Cursa &c1, Cursa &c2);
  33. };
  34. Cursa::Cursa(int nrCursa,const char* sursa,const  char* destinatie, int ora, int minut) {
  35.     if(nrCursa>0) {
  36.         this->nrCursa=nrCursa;
  37.     }
  38.     strcpy(this->sursa, sursa);
  39.     strcpy(this->destinatie, destinatie);
  40.     if(ora>=0 && ora<24) {
  41.         this->ora=ora;
  42.     }
  43.     if(minut>=0 && minut<60) {
  44.         this->minut=minut;
  45.     }
  46.     //cout<<"constructor cu parametri"<<endl;
  47. }
  48. Cursa::Cursa(const Cursa &c) {
  49.     this->nrCursa=c.nrCursa;
  50.     strcpy(this->sursa, c.sursa);
  51.     strcpy(this->destinatie, c.destinatie);
  52.     this->ora=c.ora;
  53.     this->minut=c.minut;
  54.  
  55.     // cout<<"constructor de copiere"<<endl;
  56. }
  57. void Cursa:: afisare() {
  58.     cout<<"Detalii cursa: "<<"("<<nrCursa<<", "<<sursa<<",  "<<destinatie<<", "<<ora<<":"<<minut<<")"<<endl;
  59. }
  60.  
  61. void Cursa::setNrCursa(int nrCursa) {
  62.     if(nrCursa >0) {
  63.         this->nrCursa=nrCursa;
  64.     }
  65. }
  66. int Cursa::getNrCursa() {
  67.     return nrCursa;
  68. }
  69. char *Cursa::getDestinatie() {
  70.     return destinatie;
  71. }
  72.  
  73.  
  74.  
  75. //calculam cate minute au trecut de la ora 00.00 pana la o ora data
  76.  
  77. int Cursa:: getTimp() {
  78.     int timpCurent=ora*60+minut;
  79.     return timpCurent;
  80. }
  81.  
  82.  
  83.  
  84. class Evidenta {
  85.     int capacitate;
  86.     int nrCurse;
  87.     Cursa *curse;
  88. public:
  89.     Evidenta(int capacitate);
  90.     Evidenta(const Evidenta &e);
  91.     ~Evidenta();
  92.     void afisare();
  93.     void adaugaCursa(Cursa c);
  94.     void eliminaCursa(Cursa c);
  95.  
  96.     void sortareDupaOra();
  97.     void sortareDupaDestinatie();
  98.     void listare(int h1, int m1, int h2, int m2); //listare curse intre h1:m1 - h2:m2
  99.  
  100.     //complicat cu pointer de functie
  101.     void sortare(int (*compara)(Cursa &c1, Cursa &c2));
  102.  
  103. };
  104. Evidenta::Evidenta(int capacitate) {
  105.     this->capacitate=capacitate;
  106.     this->nrCurse=0;
  107.     this->curse=new Cursa[capacitate];
  108.     //cout<<"C initializare"<<endl;
  109. }
  110. Evidenta::Evidenta(const Evidenta &e) {
  111.     this->capacitate=e.capacitate;
  112.     this->nrCurse=e.nrCurse;
  113.     this->curse=new Cursa[e.capacitate];//alocam tabloul
  114.     for(int i=0; i<e.capacitate; i++) {
  115.         this->curse[i]=e.curse[i];
  116.     }
  117. }
  118. Evidenta::~Evidenta() {
  119.     if(curse!=0)
  120.         delete []curse;
  121. }
  122.  
  123. void Evidenta::adaugaCursa(Cursa c) {
  124.     if(nrCurse<capacitate) {
  125.         curse[nrCurse]=c;
  126.         nrCurse++;
  127.     } else {
  128.         cout<<"indisponibilitate "<<endl;
  129.     }
  130. }
  131.  
  132. void Evidenta::afisare() {
  133.     cout<<endl;
  134.     cout<<"Lista tuturor curselor este:"<<endl;//folosim functia de afisare din clasa Cursa
  135.     for(int i=0; i<nrCurse; i++) {
  136.         curse[i].afisare();
  137.     }
  138. }
  139. void Evidenta::eliminaCursa(Cursa c) { //eliminam dupa nr cursei
  140.     int pozitie=0;
  141.     for(int i=0; i<nrCurse; i++) {
  142.         if(curse[i].getNrCursa()==c.getNrCursa()) {
  143.             pozitie=i;
  144.             cout<<"Cursa a fost gasita, urmeaza a fi eliminata"<<endl;
  145.             break;
  146.         } else {
  147.             cout<<"Cursa nu a fost gasita"<< endl;
  148.         }
  149.     }
  150.     if(pozitie) {
  151.         for(int i=pozitie; i<nrCurse; i++) {
  152.             curse[i]=curse[i+1];
  153.         }
  154.         nrCurse--;
  155.     }
  156. }
  157. void Evidenta:: sortareDupaOra() {
  158.     int ok,i;
  159.     Cursa aux;
  160.     do {
  161.         ok=1;
  162.         for(i=0; i<nrCurse - 1; i++)
  163.             if(curse[i].getTimp()>curse[i+1].getTimp()) {
  164.                 ok=0;
  165.                 aux=curse[i];
  166.                 curse[i]=curse[i+1];
  167.                 curse[i+1]=aux;
  168.             }
  169.     } while(ok!=1);
  170. }
  171.  
  172. void Evidenta:: sortareDupaDestinatie() {
  173.     int ok,i;
  174.     Cursa aux;
  175.     do {
  176.         ok=1;
  177.         for(i=0; i<nrCurse - 1; i++)
  178.             if(strcmp(curse[i].destinatie,curse[i+1].destinatie)>0) {
  179.                 ok=0;
  180.                 aux=curse[i];
  181.                 curse[i]=curse[i+1];
  182.                 curse[i+1]=aux;
  183.             }
  184.     } while(ok!=1);
  185. }
  186.  
  187.  
  188.  
  189. void Evidenta::listare(int h1, int m1, int h2, int m2) {
  190.     int t1 = h1*60 + m1;
  191.     int t2 = h2*60 + m2;
  192.     cout<<"Cursele din interval"<<endl;
  193.     for(int i=0; i<nrCurse; i++)
  194.         if(curse[i].getTimp()>=t1 && curse[i].getTimp()<=t2) {
  195.             curse[i].afisare();
  196.         }
  197. }
  198.  
  199.  
  200. void Evidenta:: sortare(int (*compara)(Cursa &c1, Cursa &c2)) {
  201.     int ok,i;
  202.     Cursa aux;
  203.     do {
  204.         ok=1;
  205.         for(i=0; i<nrCurse - 1; i++)
  206.             if(compara(curse[i],curse[i+1] )>0) {
  207.                 ok=0;
  208.                 aux=curse[i];
  209.                 curse[i]=curse[i+1];
  210.                 curse[i+1]=aux;
  211.             }
  212.     } while(ok!=1);
  213. }
  214.  
  215. int comparaDupaPlecare(Cursa &c1, Cursa &c2) {
  216.     return strcmp(c1.sursa, c2.sursa);
  217. }
  218.  
  219. int comparaDupaDestinatie(Cursa &c1, Cursa &c2) {
  220.     return strcmp(c1.destinatie, c2.destinatie);
  221. }
  222.  
  223. int comparaDupaNrCursa(Cursa &c1, Cursa &c2) {
  224.     return c2.nrCursa-c1.nrCursa;
  225. }
  226.  
  227.  
  228.  
  229.  
  230. int main() {
  231.     int curse[6];
  232.     Cursa c1(235,"Craiova", "Barcelona", 18,30);
  233.     c1.afisare();
  234.     cout<<endl;
  235.     Cursa c2(234,"Craiova", "Roma", 17,30);
  236.     c2.afisare();
  237.     cout<<endl;
  238.     Cursa c3(239,"Timisoara", "Barcelona", 18,01);
  239.     c3.afisare();
  240.     cout<<endl;
  241.     Cursa c4(238,"Bailesti", "Milano", 4,30);
  242.     c4.afisare();
  243.     Evidenta e(6);
  244.     e.adaugaCursa(c1);
  245.  
  246.     e.adaugaCursa(c3);
  247.     e.adaugaCursa(c4);
  248.     e.adaugaCursa(c2);
  249.     e.afisare();
  250.  
  251.  
  252.     e.listare(18,0,19,0);
  253.     cout<<"curse sortate dupa ora :";
  254.     e.sortareDupaOra();
  255.     e.afisare();
  256.     cout<<"curse sortate dupa destinatie :";
  257.     e.sortareDupaDestinatie();
  258.     e.afisare();
  259.  
  260.     cout<<"curse sortate dupa sursa :";
  261.     e.sortare(comparaDupaPlecare);
  262.     e.afisare();
  263.     cout<<"curse sortate dupa destinatie :";
  264.     e.sortare(comparaDupaDestinatie);
  265.     e.afisare();
  266.     cout<<"curse sortate dupa nr cursa :";
  267.     e.sortare(comparaDupaNrCursa);
  268.     e.afisare();
  269.  
  270.     return 0;
  271. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement