#include #include #include #include #include #include #include #include class fisier; class carte {char isbn[6]; char titlu[60]; char autor[60]; char editura[20]; int an_ap; public: carte(){;} carte(char *c,char *t,char *a,char *ed,int an) {strcpy(isbn,c); strcpy(titlu,t); strcpy(autor,a); strcpy(editura,ed); an_ap=an; } carte(carte&); ~carte(){;} char* get_titlu(){return titlu;} char* get_autor(){return autor;} friend ostream &operator<<(ostream &stream,carte o); friend istream &operator>>(istream &stream,carte &o); biblioteca operator+=(int nr)//cand se primesc inca nr exexmplare {nr_total_exemplare+=nr; nr_disponibile+=nr; return *this; } void pierdere_ex(int nr=1) {nr_total_exemplare-=nr; nr_disponibile-=nr;} void imprumut_ex(){ nr_disponibile-=1;} void restituire_ex(){ nr_disponibile++;} biblioteca& operator++() {nr_total_exemplare++; return *this; } friend class fisier; }; class fisier { FILE *f; char *nume_fis; public: fisier(char*); ~fisier(){fclose(f);} FILE* get_f(){return f;} void adaugare(biblioteca c); int cautare(char*,char*,int&);//dupa titlu si autor,pozitia prin referinta int cautare(char *,int &);//caut dupa cota,pozitia prin referinta void afisare(); void afisare_domeniu(char*); void afisare_autor(char*); int LungimeF(); void imprumut(char*); void restituire(char*); void pierdere(char*); void cresc_ex_existente(int,char*); void afis_carte(char*,char*); friend class biblioteca; }; //888888888888888888888888888888888888888888888888888888888888888888888888 // metode clasa fisier //888888888888888888888888888888888888888888888888888888888888888888888888 fisier::fisier(char *nume_f) {char ch; nume_fis=nume_f; if((f=fopen(nume_f,"r+b"))==NULL) {cout<<"Fisierul nu se poate deschide!!!"<>ch; if(toupper(ch)=='Y') f=fopen(nume_fis,"w+b"); else exit(1); }; } void fisier::adaugare(biblioteca c) {rewind(f); biblioteca tmp; while(!feof(f)) fread(&tmp,sizeof(class biblioteca),1,f); fwrite(&c,sizeof(class biblioteca),1,f); } int fisier::cautare(char *c,char *aut,int &poz) {biblioteca tmp; rewind(f); int gasit=0; poz=0; while((!feof(f))&&(gasit==0)) {fread(&tmp,sizeof(class biblioteca),1,f); poz++; if(!strcmp(tmp.titlu,c)&&!strcmp(tmp.autor,aut)) gasit=1; } return gasit; } int fisier::cautare(char *c,int &poz) {biblioteca tmp; rewind(f); int gasit=0; poz=0; while((!feof(f))&&(gasit==0)) {fread(&tmp,sizeof(class biblioteca),1,f); poz++; if(!strcmp(tmp.cota,c)) gasit=1; } return gasit; } void fisier::afisare() {biblioteca tmp; rewind(f); fread(&tmp,sizeof(biblioteca),1,f); if(feof(f)) cout<>(istream &stream,biblioteca &o) {fflush(stdin); cout<<"Introduceti cota cartii: ";stream>>o.cota; cout<<"Introduceti titlul cartii: ";stream>>o.titlu; cout<<"Introduceti autorul cartii: ";stream>>o.autor; cout<<"Introduceti editura cartii: ";stream>>o.editura; do{ cout<<"Introduceti anul de aparitie al cartii(>1200): "; stream>>o.an_ap;}while(o.an_ap<1200); cout<<"Introduceti domeniul din care face parte cartea: "; stream>>o.domeniu; cout<<"Introduceti numarul total de exemplare: "; stream>>o.nr_total_exemplare; o.nr_disponibile=o.nr_total_exemplare; cout<<"Introduceti numarul de pagini: ";stream>>o.nr_pag; return stream; } //8888888888888888888888888888888888888888888888888888888888888888888 //meniu //88888888888888888888888888888888888888888888888888888888888888888888 void meniu() {//clrscr(); cout<>nume_fis; fisier f(nume_fis); do {do{meniu();cin>>opt;}while(opt<1||opt>11); switch(opt) {case 1://clrscr(); //intrare de titluri noi in biblioteca cin>>a; poz=0; if(f.cautare(a.get_titlu(),a.get_autor(),poz)) {cout<<" Cartea exista deja in biblioteca!!!"<>cota; f.restituire(cota); getch(); break; case 3://clrscr(); //imprumut carte //se scade 1 din numarul cartilor disponibile cout<<"Introduceti cota cartii:"; cin>>cota; f.imprumut(cota); getch(); break; case 4://clrscr(); //pierdere carte //se scade 1 din numarul tota de carti si din nr de carti disponibile cout<<"Introduceti cota cartii:"; cin>>cota; f.pierdere(cota); getch(); break; case 5://lrscr(); //se adauga nr la nr total de exemplare cout<<"Introduceti cota cartii:"; cin>>cota; cout<<"Cate exemplare se adauga? "; cin>>nr; f.cresc_ex_existente(nr,cota); getch(); break; case 6://clrscr(); //numarul de titluri din biblioteca cout<<"In biblioteca exista "<>autor; f.afisare_autor(autor); getch(); break; case 8://clrscr(); //afisare carti din acelasi domeniu cout<<"Introduceti domeniul: "; cin>>domeniu; f.afisare_domeniu(domeniu); getch(); break; case 9://c/lrscr(); //informatiile despre o anumita carte cout<<"Introduceti titlul cartii: "; cin>>titlu; cout<<"Introduceti autorul: "; cin>>autor; f.afis_carte(titlu,autor); getch(); break; case 10://clrscr(); //afisare fisier f.afisare(); getch(); break; case 11:f.~fisier(); break; } } while(opt!=11);}