Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <conio.h>
- #include <string.h>
- using namespace std;
- class Evidenta;
- class Cursa {
- private:
- int nrCursa;
- char sursa[50];
- char destinatie[50];
- int ora;
- int minut;
- public:
- Cursa(int nrCursa=0,const char* sursa="", const char *destinatie="", int ora=0, int minut=0);
- Cursa(const Cursa &c);
- void afisare();
- void setNrCursa(int nrCursa);
- int getNrCursa();
- void setSursa(char *sursa);
- char* getSursa();
- void setDestinatie(char *destinatie);
- char* getDestinatie();
- void setOra(int ora);
- int getOra();
- void setMinut(int minut);
- int getMinut();
- int getTimp();
- friend class Evidenta;
- friend int comparaDupaPlecare(Cursa &c1, Cursa &c2);
- friend int comparaDupaDestinatie(Cursa &c1, Cursa &c2);
- friend int comparaDupaNrCursa(Cursa &c1, Cursa &c2);
- };
- Cursa::Cursa(int nrCursa,const char* sursa,const char* destinatie, int ora, int minut) {
- if(nrCursa>0) {
- this->nrCursa=nrCursa;
- }
- strcpy(this->sursa, sursa);
- strcpy(this->destinatie, destinatie);
- if(ora>=0 && ora<24) {
- this->ora=ora;
- }
- if(minut>=0 && minut<60) {
- this->minut=minut;
- }
- //cout<<"constructor cu parametri"<<endl;
- }
- Cursa::Cursa(const Cursa &c) {
- this->nrCursa=c.nrCursa;
- strcpy(this->sursa, c.sursa);
- strcpy(this->destinatie, c.destinatie);
- this->ora=c.ora;
- this->minut=c.minut;
- // cout<<"constructor de copiere"<<endl;
- }
- void Cursa:: afisare() {
- cout<<"Detalii cursa: "<<"("<<nrCursa<<", "<<sursa<<", "<<destinatie<<", "<<ora<<":"<<minut<<")"<<endl;
- }
- void Cursa::setNrCursa(int nrCursa) {
- if(nrCursa >0) {
- this->nrCursa=nrCursa;
- }
- }
- int Cursa::getNrCursa() {
- return nrCursa;
- }
- char *Cursa::getDestinatie() {
- return destinatie;
- }
- //calculam cate minute au trecut de la ora 00.00 pana la o ora data
- int Cursa:: getTimp() {
- int timpCurent=ora*60+minut;
- return timpCurent;
- }
- class Evidenta {
- int capacitate;
- int nrCurse;
- Cursa *curse;
- public:
- Evidenta(int capacitate);
- Evidenta(const Evidenta &e);
- ~Evidenta();
- void afisare();
- void adaugaCursa(Cursa c);
- void eliminaCursa(Cursa c);
- void sortareDupaOra();
- void sortareDupaDestinatie();
- void listare(int h1, int m1, int h2, int m2); //listare curse intre h1:m1 - h2:m2
- //complicat cu pointer de functie
- void sortare(int (*compara)(Cursa &c1, Cursa &c2));
- };
- Evidenta::Evidenta(int capacitate) {
- this->capacitate=capacitate;
- this->nrCurse=0;
- this->curse=new Cursa[capacitate];
- //cout<<"C initializare"<<endl;
- }
- Evidenta::Evidenta(const Evidenta &e) {
- this->capacitate=e.capacitate;
- this->nrCurse=e.nrCurse;
- this->curse=new Cursa[e.capacitate];//alocam tabloul
- for(int i=0; i<e.capacitate; i++) {
- this->curse[i]=e.curse[i];
- }
- }
- Evidenta::~Evidenta() {
- if(curse!=0)
- delete []curse;
- }
- void Evidenta::adaugaCursa(Cursa c) {
- if(nrCurse<capacitate) {
- curse[nrCurse]=c;
- nrCurse++;
- } else {
- cout<<"indisponibilitate "<<endl;
- }
- }
- void Evidenta::afisare() {
- cout<<endl;
- cout<<"Lista tuturor curselor este:"<<endl;//folosim functia de afisare din clasa Cursa
- for(int i=0; i<nrCurse; i++) {
- curse[i].afisare();
- }
- }
- void Evidenta::eliminaCursa(Cursa c) { //eliminam dupa nr cursei
- int pozitie=0;
- for(int i=0; i<nrCurse; i++) {
- if(curse[i].getNrCursa()==c.getNrCursa()) {
- pozitie=i;
- cout<<"Cursa a fost gasita, urmeaza a fi eliminata"<<endl;
- break;
- } else {
- cout<<"Cursa nu a fost gasita"<< endl;
- }
- }
- if(pozitie) {
- for(int i=pozitie; i<nrCurse; i++) {
- curse[i]=curse[i+1];
- }
- nrCurse--;
- }
- }
- void Evidenta:: sortareDupaOra() {
- int ok,i;
- Cursa aux;
- do {
- ok=1;
- for(i=0; i<nrCurse - 1; i++)
- if(curse[i].getTimp()>curse[i+1].getTimp()) {
- ok=0;
- aux=curse[i];
- curse[i]=curse[i+1];
- curse[i+1]=aux;
- }
- } while(ok!=1);
- }
- void Evidenta:: sortareDupaDestinatie() {
- int ok,i;
- Cursa aux;
- do {
- ok=1;
- for(i=0; i<nrCurse - 1; i++)
- if(strcmp(curse[i].destinatie,curse[i+1].destinatie)>0) {
- ok=0;
- aux=curse[i];
- curse[i]=curse[i+1];
- curse[i+1]=aux;
- }
- } while(ok!=1);
- }
- void Evidenta::listare(int h1, int m1, int h2, int m2) {
- int t1 = h1*60 + m1;
- int t2 = h2*60 + m2;
- cout<<"Cursele din interval"<<endl;
- for(int i=0; i<nrCurse; i++)
- if(curse[i].getTimp()>=t1 && curse[i].getTimp()<=t2) {
- curse[i].afisare();
- }
- }
- void Evidenta:: sortare(int (*compara)(Cursa &c1, Cursa &c2)) {
- int ok,i;
- Cursa aux;
- do {
- ok=1;
- for(i=0; i<nrCurse - 1; i++)
- if(compara(curse[i],curse[i+1] )>0) {
- ok=0;
- aux=curse[i];
- curse[i]=curse[i+1];
- curse[i+1]=aux;
- }
- } while(ok!=1);
- }
- int comparaDupaPlecare(Cursa &c1, Cursa &c2) {
- return strcmp(c1.sursa, c2.sursa);
- }
- int comparaDupaDestinatie(Cursa &c1, Cursa &c2) {
- return strcmp(c1.destinatie, c2.destinatie);
- }
- int comparaDupaNrCursa(Cursa &c1, Cursa &c2) {
- return c2.nrCursa-c1.nrCursa;
- }
- int main() {
- int curse[6];
- Cursa c1(235,"Craiova", "Barcelona", 18,30);
- c1.afisare();
- cout<<endl;
- Cursa c2(234,"Craiova", "Roma", 17,30);
- c2.afisare();
- cout<<endl;
- Cursa c3(239,"Timisoara", "Barcelona", 18,01);
- c3.afisare();
- cout<<endl;
- Cursa c4(238,"Bailesti", "Milano", 4,30);
- c4.afisare();
- Evidenta e(6);
- e.adaugaCursa(c1);
- e.adaugaCursa(c3);
- e.adaugaCursa(c4);
- e.adaugaCursa(c2);
- e.afisare();
- e.listare(18,0,19,0);
- cout<<"curse sortate dupa ora :";
- e.sortareDupaOra();
- e.afisare();
- cout<<"curse sortate dupa destinatie :";
- e.sortareDupaDestinatie();
- e.afisare();
- cout<<"curse sortate dupa sursa :";
- e.sortare(comparaDupaPlecare);
- e.afisare();
- cout<<"curse sortate dupa destinatie :";
- e.sortare(comparaDupaDestinatie);
- e.afisare();
- cout<<"curse sortate dupa nr cursa :";
- e.sortare(comparaDupaNrCursa);
- e.afisare();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement