Treceți la conținutul principal

biblioteca cpp




#include<iostream.h>
#include<stdio.h>
#include<fstream.h>
#include<conio.h>
#include<ctype.h>
#include<string.h>
#include<process.h>
#include<stdlib.h>
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!!!"<<endl;
    cout<<"Doriti sa creati unul?(y/n)";
    cin>>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<<endl<<"  Biblioteca nu contine nici o carte!!"<<endl;
 else
   {cout<<"            CARTILE EXISTENTE IN BIBLIOTECA"<<endl<<endl;
    cout<<" COTA     TITLU        AUTOR    EDITURA  AN_AP  DOMENIU TOTAL  DISP  PAG"<<endl;
    cout<<tmp;
    cout<<endl<<"----------------------------------------------------------------------------"<<endl;
    while(!feof(f))
    {fread(&tmp,sizeof(class biblioteca),1,f);
     if(!feof(f))
     {
      cout<<tmp;
      cout<<endl<<"----------------------------------------------------------------------------"<<endl;
     }
    }
   }

}

void fisier::afisare_domeniu(char *dom)
{fseek(f,0,SEEK_SET);
 biblioteca tmp;
 fread(&tmp,sizeof(biblioteca),1,f); 
 if(feof(f)) cout<<endl<<"   Biblioteca nu contine nici o carte !!"<<endl;
 else
   {int l=0;
    cout<<" COTA     TITLU        AUTOR    EDITURA  AN_AP  DOMENIU TOTAL  DISP  PAG "<<endl;
    while(!feof(f))
    {fread(&tmp,sizeof(class biblioteca),1,f);
     if(!strcmp(tmp.domeniu,dom)&&!feof(f))
   {cout<<tmp;
           l++;
   cout<<endl<<"--------------------------------------------------------------------------"<<endl;
          }
    }
   if(l==0)
      cout<<endl<<" In biblioteca nu exista carti din domeniul "<<dom;
   }
}

void fisier::afisare_autor(char *aut)
{fseek(f,0,SEEK_SET);
 if(feof(f)) cout<<endl<<"   Biblioteca nu contine nici o carte !!"<<endl;
 else
   {int l=0;
    cout<<" COTA     TITLU        AUTOR    EDITURA  AN_AP  DOMENIU TOTAL  DISP  PAG"<<endl;
    while(!feof(f))
    {biblioteca tmp;
     fread(&tmp,sizeof(class biblioteca),1,f);
     if(!strcmp(tmp.autor,aut)&&!feof(f))
   {cout<<tmp;
           l++;
   cout<<endl<<"----------------------------------------------------------------------------"<<endl;
          }
    }
    if(l==0)
      cout<<endl<<" In biblioteca nu exista carti scrise de "<<aut;
   }

}


int fisier::LungimeF()
{int poz_curenta,lungime;
 poz_curenta=ftell(f);
 fseek(f,0,SEEK_END);
 lungime=ftell(f);
 fseek(f,poz_curenta,SEEK_SET);
 return lungime/sizeof(biblioteca);
}

void fisier::restituire(char *cota)
{rewind(f);
 int poz=0;
 biblioteca tmp;
 fread(&tmp,sizeof(biblioteca),1,f);
 if(feof(f)) cout<<endl<<"  Biblioteca nu contine nici o carte !!"<<endl;
 else
   if(!cautare(cota,poz))
     cout<<endl<<"     Ati introdus cota gresit!!!";
   else
     {
      fseek(f,(poz-1)*sizeof(biblioteca),SEEK_SET);
      fread(&tmp,sizeof(biblioteca),1,f);
      if(tmp.nr_disponibile==tmp.nr_total_exemplare)
 cout<<endl<<"    Toate exemplarele au fost restituite!!";
      else
 {tmp.restituire_ex();
  fseek(f,(poz-1)*sizeof(biblioteca),SEEK_SET);
  fwrite(&tmp,sizeof(biblioteca),1,f);
  cout<<endl<<endl;
         cout<<endl<<"     Va multumim pentru restituire!!";
        }
     }  
}

void fisier::imprumut(char *cota)
{rewind(f);
 int poz=0;
 biblioteca tmp;
 fread(&tmp,sizeof(biblioteca),1,f);
 if(feof(f)) cout<<endl<<"     Biblioteca nu contine nici o carte !!"<<endl;
 else
   if(!cautare(cota,poz))
     cout<<endl<<"       Ati introdus cota gresit!!!";
   else
     {fseek(f,(poz-1)*sizeof(biblioteca),SEEK_SET);
      fread(&tmp,sizeof(biblioteca),1,f);
      if(tmp.nr_disponibile==0)
 cout<<endl<<"    Toate exemplarele sunt imprumutate!!";
      else
 {tmp.imprumut_ex();
  fseek(f,(poz-1)*sizeof(biblioteca),SEEK_SET);
  fwrite(&tmp,sizeof(biblioteca),1,f);
  cout<<endl<<"           Cartea se poate imprumuta!!"<<endl<<endl;
         cout<<" Va rugam sa nu depasiti termenul de doua saptamani!!";
        }
     }  
}


void fisier::pierdere(char *cota)
{rewind(f);
 int poz=0;
 biblioteca tmp;
 fread(&tmp,sizeof(biblioteca),1,f);
 if(feof(f)) cout<<endl<<"    Biblioteca nu contine nici o carte !!"<<endl;
 else
   if(!cautare(cota,poz))
     cout<<endl<<"     Ati introdus cota gresit!!!";
   else
     {
      fseek(f,(poz-1)*sizeof(biblioteca),SEEK_SET);
      fread(&tmp,sizeof(biblioteca),1,f);
      if(tmp.nr_total_exemplare==0)
 cout<<endl<<"    Nu mai exista nici un exemplar in biblioteca!!";
      else
 {tmp.pierdere_ex();
  fseek(f,(poz-1)*sizeof(biblioteca),SEEK_SET);
  fwrite(&tmp,sizeof(biblioteca),1,f);
         cout<<endl<<"     Permis suspendat pe doua saptamani!!";
        }
     }  
}



void fisier::cresc_ex_existente(int nr,char *cota)
{rewind(f);
 int poz=0;
 biblioteca tmp;
 fread(&tmp,sizeof(biblioteca),1,f);
 if(feof(f)) cout<<endl<<"    Biblioteca nu contine nici o carte !!"<<endl;
 else
   if(!cautare(cota,poz))
     cout<<endl<<"     Ati introdus cota gresit!!!";
   else
     {
      fseek(f,(poz-1)*sizeof(biblioteca),SEEK_SET);
      fread(&tmp,sizeof(biblioteca),1,f);     
      tmp+=nr;
      fseek(f,(poz-1)*sizeof(biblioteca),SEEK_SET);
      fwrite(&tmp,sizeof(biblioteca),1,f);
      cout<<endl<<"    Numarul de exemplare existente cu aceasta cota a crescut cu "<<nr;       
     }
}


void fisier::afis_carte(char *t,char *aut)
{  biblioteca tmp;
  rewind(f);
 fread(&tmp,sizeof(biblioteca),1,f);
 if(feof(f)) cout<<endl<<"    Biblioteca nu contine nici o carte !!"<<endl;
 else
   {cout<<" COTA     TITLU        AUTOR    EDITURA  AN_AP  DOMENIU TOTAL  DISP  PAG "<<endl;
    if(!strcmp(tmp.autor,aut)&&!strcmp(tmp.titlu,t))
  cout<<tmp;
    else
    {
     while(!feof(f))
     {fread(&tmp,sizeof(class biblioteca),1,f);
      if(!strcmp(tmp.autor,aut)&&!strcmp(tmp.titlu,t)&&!feof(f))
  {cout<<tmp;
          break;}
      }
      if(feof(f))
        cout<<endl<<"Biblioteca nu contine cartea respectiva!!";
    } 
   }
}





//888888888888888888888888888888888888888888888888888888888888888888888
//metode clasa biblioteca
//888888888888888888888888888888888888888888888888888888888888888888888


biblioteca::biblioteca(biblioteca &a)
{   strcpy(cota,a.cota);
    strcpy(titlu,a.titlu);
    strcpy(autor,a.autor);
    strcpy(editura,a.editura);
    an_ap=a.an_ap;
    strcpy(domeniu,a.domeniu);
    nr_total_exemplare=a.nr_total_exemplare;
    nr_disponibile=a.nr_disponibile;   
    nr_pag=a.nr_pag;
}


ostream &operator<<(ostream &stream,biblioteca o)
{/*stream<<endl<<o.cota<<"  "<<o.titlu<<"   "<<o.autor<<"    "
             <<o.editura<<"    "<<o.an_ap<<"    "<<o.domeniu
             <<"   "<<o.nr_total_exemplare<<"    "<<o.nr_disponibile
      <<"   "<<o.nr_pag<<endl;*/
 printf("%6s %10s %10s %10s %5d %8s %5d %5d %5d",o.cota,o.titlu,o.autor,o.editura,o.an_ap,o.domeniu,o.nr_total_exemplare,o.nr_disponibile,o.nr_pag);
 return stream;
}



istream &operator>>(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<<endl<<endl;
 cout<<"\t 1.Intrare carte noua in biblioteca "<<endl;
 cout<<"\t 2.Restituire carte"<<endl;
 cout<<"\t 3.Imprumut carte"<<endl;
 cout<<"\t 4.Pierdere carte"<<endl;
 cout<<"\t 5.Marirea numarului de exemplare a unei carti existente"<<endl;
 cout<<"\t 6.Numarul de carti din biblioteca"<<endl;
 cout<<"\t 7.Afisarea cartilor ce au acelasi autor "<<endl;
 cout<<"\t 8.Afisarea cartilor ce apartin aceluiasi domeniu"<<endl;
 cout<<"\t 9.Afisarea datelor unei anumite carti"<<endl;
 cout<<"\t10.Afisare fisier "<<endl;
 cout<<"\t11.Iesire din meniu"<<endl;
 cout<<"\t    Introduceti optiunea: ";
}



//8888888888888888888888888888888888888888888888888888888888888888888
//program principal
//88888888888888888888888888888888888888888888888888888888888888888888




void main()
{int opt,nr;
 char cota[6],autor[60],domeniu[15],titlu[60];
 int poz;
 biblioteca a,b;
 char nume_fis[8];
 cout<<endl<<"Introduceti numele fisierului in care se afla cartile: ";
 cin>>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!!!"<<endl;
       cout<<"Daca doriti sa mariti numarul de exemplare existente"<<endl;
       cout<<"             apelati optiunea numarul 5."<<endl;
      }
    else      
              f.adaugare(a);          
  
    getch();
    break;
    case 2://system (cls);
    //restituire carte
           //se adauga 1 la numarul cartilor disponibile
    cout<<"Introduceti cota cartii: ";
    cin>>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 "<<f.LungimeF()<<" titluri de carti";
           getch();   
    break;
    case 7://clrscr();          
           //afisare carti de acelasi autor
    cout<<"Introduceti autorul: ";
    cin>>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);}

Comentarii

Postări populare de pe acest blog

program principal cpp

#include "clasa.h" #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define DELAY 9000000 void delay() { for(long i=0;i<DELAY;i++); } //constructor cu initializare de la tastatura BigInt::BigInt() {char x; signed char t[400]; int i; printf("\nNumarul cu semn "); do s=getche(); while((s!='+')&&(s!='-')); n=0; do {x=getche(); t[n]=x-'0'; n++; } while((x>='0')&&(x<='9')); n--; for(i=0;i<n;i++) nr[i]=t[n-i-1]; } //constructor cu initializare prin parametri BigInt::BigInt(char semn,signed char numar[],int dim) {int i; s=semn; n=dim; for(i=0;i<n;i++) nr[i]=numar[n-i-1]; } //transform un int negativ in pozitiv int BigInt::Pozitiv(int x) {int a,vb; a=0; vb=0; while(vb==0) if((x+a)==0) vb=1; else a=a+1; x=a; return x; } //constructor dintr-un nr int obisnuit BigInt::BigInt(int x) {int i; if(x>=0) s='+'…

NUMERE PRIME ALGORITM C++

// NUMERE PRIME ALGORITM C++//  reediting from scratch //on this page is just the study for a next algoritm for generating the parime nr series like Fibonnaci or ....if possibile

74111121313417374414124343447 if u know the red part you can generate the orange part
1 0 1 111112222 1 1 23

o aplicatie php localitati romania

//APLICATIA SE REFERA LA BAZA DE DATE SIRUTA

//dragtable.js


/* dragtable v1.0 June 26, 2008 Dan Vanderkam, http://danvk.org/dragtable/ http://code.google.com/p/dragtable/ \Bsortabledraggable\B Instructions: - Download this file - Add <script src="dragtable.js"></script> to your HTML. - Add class="draggable" to any table you might like to reorder. - Drag the headers around to reorder them. This is code was based on: - Stuart Langridge's SortTable (kryogenix.org/code/browser/sorttable) - Mike Hall's draggable class (http://www.brainjar.com/dhtml/drag/) - A discussion of permuting table columns on comp.lang.javascript Licensed under the MIT license. */ // Here's the notice from Mike Hall's draggable script: //***************************************************************************** // Do not remove this notice. // // Copyright 2001 by Mike Hall. // See http…