Sunteți pe pagina 1din 5

Proiect - POO - BOBOESCU DAN ALEXANDRU - SERIA A , GRUPA 1022

Sa se creeze o biblioteca in care sa se introduca date despre clientii care


imprumuta carti si sa se afiseze la final catalogul imprumuturilor.

#include<iostream>

using namespace std;

struct nod{char nr[20];


nod *next;};

class lista{nod *f,*l;


public:
lista (nod*fg = NULL);
void inserare(char *key);
void stergere(char *key);
void afis();
};

lista::lista(nod *fg)
{f=fg;
l=f;
}

void lista::inserare(char *key)


{nod *p;
p=new nod;
strcpy(p->nr,key);
//p->nr=key;
p->next=NULL;
if(f==NULL)
{f=p;
f->next=f;
l=f;
}
else
if(f==l)
{f->next=p;
l=p;
l->next=f;}
else
{l->next=p;
l=p;
l->next=f;}
}

void lista::stergere(char *key)


{nod *p=this->f,*q=this->f,*j;
if(strcmp(f->nr,key)==0)
{j=f;
f=f->next;
l->next=f;
delete j;
return;}
while(strcmp(p->nr,key)!=0 && p!=l)
{q=p;
p=p->next;}
if(strcmp(p->nr,key)!=0)
cout<<"Clientul "<<key<<" nu exista in lista."<<endl;
else
{if(l==p)
{l=q;
j=p;
l->next=f;
delete j;}
else
{j=p;
q->next=p->next;
delete j;}
}
}

void lista::afis()
{nod *p=this->f;
while(p!=l)
{cout<<p->nr<<" , ";
p=p->next;}
cout<<p->nr<<endl;
}

class carte{
char *nume,*autor;
int cantitate;
public:
carte(char *nm,char *aut,int cnt){
nume = new char[50];
autor = new char[50];
strcpy(nume,nm);
strcpy(autor,aut);
cantitate = cnt;}
carte(){nume = new char[50];
autor = new char[50];
cout<<"dati numele cartii "<<endl;
cin.get();
gets(nume);
cout<<"dati cantitatea de carti "<<endl;
cin>>cantitate;
cin.get();
cout<<"dati numele autorului"<<endl;
gets(autor);
}
carte(carte &a){
nume = new char[50];
autor = new char[50];
strcpy(nume,a.nume);
strcpy(autor,a.autor);
cantitate = a.cantitate;}

carte operator =(carte &a){


strcpy(nume,a.nume);
strcpy(autor,a.autor);
cantitate = a.cantitate;
return *this;}

carte operator +(int nr)


{carte p(*this);
p.cantitate = p.cantitate + nr;
return p;
}
carte operator -(int nr)
{carte p(*this);
p.cantitate = p.cantitate - nr;
return p;
}
char* getnume(){
return nume;
}
int getcant(){
return cantitate;
}
~carte(){
delete[]nume;
delete[]autor;
}
};

class Biblioteca{
carte *carti;
int nr_carti;
lista catalog[100];
//int ctnr;
public:
Biblioteca(){//ctnr = 0;
cout<<"dati numarul cartilor ";
cin>>nr_carti;
carti=new carte[nr_carti];

int search(char *nm){


for(int i = 0 ;i<nr_carti;i++)
if(strcmp(carti[i].getnume(),nm)==0)
return i;
return -1;
}

void add_client(char *crte,char *numeclient ){


int nr;
nr =search(crte);
if(nr==-1)
cout<<"cartea nu exista";
else
if(carti[nr].getcant() !=0){
carti[nr] = carti[nr]-1;
catalog[nr].inserare(numeclient);
}
else cout<<"cartea nu mai este in stoc";
}
void remove_client(char *crte,char *numeclient ){
int nr;
nr =search(crte);
if(nr==-1)
cout<<"cartea nu exista";
else
{
carti[nr] = carti[nr]+1;
catalog[nr].stergere(numeclient);
}
}
void afisare_catalog(){
for(int i=0;i<nr_carti;i++)
{cout<<"Cartea "<<carti[i].getnume()<<" este imprumutata de ";
catalog[i].afis();
cout<<"(mai sunt disponibile "<<carti[i].getcant()<<")"<<endl;
}

}
~Biblioteca(){
delete[]carti;
delete[]catalog;}

} ;

int main(){
Biblioteca asd;
cout<<"1.Adauga Client"<<endl;
cout<<"2.Sterge Client"<<endl;
cout<<"3.Afisare catalog"<<endl;
cout<<"4.Exit"<<endl;
bool a=true;
int nr;
char book[50],nume[50];
cin>>nr;
while(a)
{switch(nr){
case 1: {cout<<"dati numele cartii "<<endl;
cin.get();
gets(book);
cout<<"dati numele clientului"<<endl;
gets(nume);
asd.add_client(book,nume);}break;
case 2: {cout<<"dati numele cartii "<<endl;
cin.get();
gets(book);
cout<<"dati numele clientului"<<endl;
gets(nume);
asd.remove_client(book,nume);}break;
case 3: asd.afisare_catalog();break;
case 4: a=false;break;
default: cout<<"optiunea nu exista;";break;}
cout<<"1.Adauga Client"<<endl;
cout<<"2.Sterge Client"<<endl;
cout<<"3.Afisare catalog"<<endl;
cout<<"4.Exit"<<endl;;
cin>>nr;
}

return 0;
}

S-ar putea să vă placă și