Am ceva nelamuriri...
Problema vrea sa simuleze o biblioteca.Aceasta este declarata ca vector cu elemente de tipul carte(o clasa).In program se va face cautare dupa titlu,autor si dupa an precum si adaugarea unei noi carti.
Problema este ca, clasa contine o functie ce afiseaza titlul/autorul/editura care trebuie sa returneze un string...nu reusesc cum sa ii dau de cap.
O alta chestie pe care va trebui sa o adaug este supradefinirea unui operator(ma gandeam sa "adun" titlul cu autorul) si sa construiesc o functie friend.
Asta e codul pe care am reusit sa il fac pana acum:
//#include "stdafx.h"
#include <iostream.h>
#include <string.h>
#define IN 1
#define OUT 0
/*class biblioteca
{
int nr_carti;
int * tab;
public:
biblioteca(int=10);
~biblioteca();
void citire();
void cautare();
}; */
class carte
{
char autor[40];
char titlu[40];
char editura[30];
int an;
int stare;
public:
carte();//constructor fara parametrii
~carte()
{
cout<<"Sa apelat destructorul"<<endl;
}
//carte(char *n,char *t,char *e,int a,int s);
void ia_autor(char *n)
{
strcpy(autor,n);
}
void ia_titlu(char *t)
{
strcpy(titlu,t);
}
void ia_editura(char *e)
{
strcpy(editura,e);
}
void ia_an(int x)
{
an=x;
}
void ia_stare(int s) //functie inline
{
stare=s;
}
char da_autor()
{
return autor;
}
char da_titlu()
{
return titlu;
}
int da_an()
{
return an;
}
int da_stare() //functie inline
{
return stare;
}
void arata();
}
/*
biblioteca::biblioteca(int n)
{ nr_carti=n;
tab=new int[nr_carti];
for (int i=0; i<nr_carti; i++)
tab[i]=0;
}
biblioteca::~biblioteca()
{
delete []tab;
}
void biblioteca::citire()
{
for(int i=0; i<nr_carti; i++)
{ cout<<"tab["<<i<<"]=";
cin>>tab[i];
}
}
void biblioteca::afisare()
{
cout<<endl;
for(int i=0; i<nr_carti; i++)
cout<<"tab["<<i<<"]="<<tab[i]<<endl;
}
*/
/*carte::carte(char *n,char *t,char *e,int a,int s)
{
strcpy(autor,n);
strcpy(titlu,t);
strcpy(editura,e);
an=a;
stare=s;
}*/
carte::carte()
{
strcpy(autor,"fara");
strcpy(titlu,"fara");
strcpy(editura,"fara");
an=0;
stare=OUT;
}
void carte::arata()
{
cout<<titlu<<" de "<<autor<<" de la editura "<<editura;
cout<<" este ";
if(stare==IN)
cout<<"aici.\n";
else
cout<<"data.\n";
}
void main()
{
int n,i,n_stare,n_an;
carte *bib=new carte[n];
char n_autor[40],n_titlu[40],n_editura[30],x,y,z,e;
cout<<"1.Pentru introducere de date apasati i\n";
cout<<"2.Pentru afisarea listei apasati a\n";
cout<<"3.Pentru cautare dupa autor apasat c \n";
cout<<"4.Pentru cautare dupa titlu apasati t\n";
cout<<"5.Pentru cautare dupa an apasati n\n";
cout<<"6.Pentru afisare apasati orice tasta\n";
cin>>e;
switch( e )
{
case 'i':
{
cout<<"Nr. de carti:"; cin>>n;
for(i=1;i<n;i++)
{
cout<<"\nAutor:"; cin>>n_autor;
bib[i].ia_autor(n_autor);
cout<<"\nTitlu:"; cin>>n_titlu;
bib[i].ia_titlu(n_titlu);
cout<<"\nEditor:"; cin>>n_editura;
bib[i].ia_editura(n_editura);
cout<<"\nAn aparitie:"; cin>>n_an;
bib[i].ia_an(n_an);
cout<<"\nStare(IN/OUT):"; cin>>n_stare;
bib[i].ia_stare(n_stare);
}
}
case 'a':
{
//afisarea listei
for(i=1;i<n;i++)
{
bib[i].arata();
}
}
case 'c':
{
//cautare dupa autor
cout<<"Introduceti numele autorului:"<<endl; cin>>x;
for(i=1;i<n;i++)
{
if(strcmp(bib[i].da_autor(),x)==0)
bib[i].arata();
}
}
case 't':
{
//cautare dupa titlu
cout<<"Introduceti titlul:"<<endl; cin>>y;
for(i=1;i<n;i++)
{
if(strcmp(bib[i].da_titlu(),y)==0)
bib[i].arata();
}
}
case 'n':
{
//cautare dupa an
cout<<"Introduceti anul:"<<endl; cin>>z;
for(i=1;i<n;i++)
{
if(bib[i].da_an()==z)
bib[i].arata();
}
}
default :break;
}
delete []bib;
}
Astept indicatii
Merci in prealabil