// proiect1.cpp : Defines the entry point for the console application. // #include #include #include //clasa activitate class activitate { public: int cod; char denumire; int nr_prec; //nr de activitati direct precedente int prec[50]; unsigned durata,tmi,tMi,tmt,tMt; friend ostream & operator<<(ostream &,activitate); friend istream & operator>>(istream &,activitate &); }; //clasa proiect class proiect { public: activitate a[50]; int nr_act;// nr de cativitati din proiect int adiac[50][50]; proiect(); proiect& timp(); void print(); void drum(); void gantt(); activitate gasit(int); void isConditionatDe(activitate,activitate); proiect& operator+(activitate); proiect& operator-(int); friend ifstream& operator>>(ifstream&, proiect &); friend ofstream& operator<<(ofstream&, proiect); }; //constructorul clasei proiect proiect::proiect() { int i,j; for(i=0;i<50;i++) for(j=0;j<50;j++) adiac[i][j]=0; nr_act=0; a[0].cod=0; a[0].denumire='s'; a[0].durata=0; a[0].nr_prec=0; } //calcularea timpului maxim si minm de incepere si timpului maxim si minm de terminare //pt fiecere activitate a proiectului proiect& proiect::timp() { int i,j,vb; unsigned max,min; nr_act++; a[nr_act].cod=nr_act; a[nr_act].denumire='t'; a[nr_act].durata=0; a[nr_act].nr_prec=0; for(i=0;i=0;i--) { min=max; for(j=0;j<=nr_act;j++) if((adiac[i][j]==1)&&(min>a[j].tMi)) min=a[j].tMi; a[i].tMt=min; a[i].tMi=min-a[i].durata; } nr_act--; return *this; } //afisarea timpului minim si maxim de incepere si a timpului minim si maxim de terminare //pentru fiecare activitate a proiectului void proiect::print() { int i; cout<<"Timp minim si maxim de incepere si timp minim si maxim de terminare:\n"; for(i=1;i<=nr_act;i++) cout<<"Activitatea "<=1;i--) { cout<9) { for (i=1;i<=9;i++) cout<<' '<a2.cod) { k++; v[k]=a1.prec[j]; } while((i>(istream & intrare, activitate & a) { cout<<"Codul activitatii: "; intrare>>a.cod; cout<<"Denumirea activitatii: "; intrare>>a.denumire; cout<<"Durata activitatii: "; intrare>>a.durata; cout<<"Numarul de activitati direct precedente: "; intrare>>a.nr_prec; for (int i=0;i>a.prec[i]; } return intrare; } //restaurare proiect din fisier ifstream& operator >> (ifstream& intrare, proiect& p) { intrare>>p.nr_act; for(int i=1;i<=p.nr_act;i++) { intrare>>p.a[i].cod; intrare>>p.a[i].denumire; intrare>>p.a[i].durata; intrare>>p.a[i].nr_prec; for(int j=0;j>p.a[i].prec[j]; p.adiac[p.a[i].prec[j]][i]=1; } } return intrare; } //scriere proiect in fisier ofstream& operator << (ofstream& iesire, proiect p) { iesire<>p; fisin.close(); do { cout<<"\n\n\n"; cout<<"\t1.Afisare timp minim si maxim de incepere si de terminare"<>ch; system("cls"); switch (ch) { case '1': p.timp(); p.print(); break; case '2': p.timp(); p.drum(); break; case '3': p.timp(); p.gantt(); break; case '4': cout<<"Dati codul primei activitati: "; cin>>c1; cout<<"Dati codul celei de-a doua activitati: "; cin>>c2; p.isConditionatDe(p.gasit(c1),p.gasit(c2)); break; case '5': cin>>a; p+a; break; case '6': cout<<"Dati codul activitatii pe care doriti sa o stergeti: "; cin>>c; p-c; break; case '0': exit(0); } } while (ch!='0'); ofstream fisout("lala.dat"); if(!fisout) { cout<<"Nu se poate deschide fisierul"; exit(1); } fisout<