#include #include #include #include #include #include // Coduri returnate de program: // -0 - iesire normala // -1 - banca.dat nu poate fi gasit // -2 - inregistrarea nu poate fi gasita in fisier. // -3 - fatal error for file operations #define NMAX_CONT 100 // Numarul maxim admix de cifre pentru un cont #define NMAX_NUME_TITULAR 100 // Numarul maxim de caractere ce poate fi stocat in campul corespunzator // numelui titularului. Numarul maxim admis de caractere pentru numele // titularului contului respectiv. #define NMAX_VALUTE 2 // Numarul maxim admis de valute #define NMAX_PAROLA 100 // Numarul maxim admis de caractere pentru parola #define DOBANDA (14/100) typedef struct { char titular[NMAX_NUME_TITULAR], numar[NMAX_CONT]; unsigned valuta; } Inregistrare; template class ContBancar { private: Inregistrare Continut; void InitializareMemorieObiect(); void StergereMemorieObiect(); public: ContBancar(); T sold; ContBancar(const char *, const char *, const T, const unsigned); ContBancar(const int); ContBancar(const char *); ContBancar operator =(ContBancar); ContBancar operator +=(ContBancar); ContBancar operator +=(T); ContBancar operator -=(T); friend ostream &operator << (ostream &, ContBancar &); friend istream &operator >> (istream &stream, ContBancar &); void depun(T); void retrag(T); T spune_total(); ~ContBancar(); }; template void ContBancar::depun(T x) { sold+=x; } template void ContBancar::retrag(T x) { sold-=x; if (sold<0) sold=0; } template ContBancar::spune_total() { T total=0; ifstream banca("banca.dat", ios::binary | ios::in); while (!banca.eof()) { ContBancar tmp; banca.read((unsigned char *)&tmp, sizeof(Inregistrare)); total+=tmp.sold; } banca.close(); return total; } template ContBancar::ContBancar() { this->InitializareMemorieObiect(); } template ContBancar::ContBancar(const char *titular,const char *numar, T sold, unsigned valuta) { this->InitializareMemorieObiect(); ostrstream iesire_titular(Continut.titular, NMAX_NUME_TITULAR); ostrstream iesire_numar(Continut.numar, NMAX_CONT); sold=sold; Continut.valuta=valuta; iesire_titular< ContBancar::ContBancar(const int i) { this->InitializareMemorieObiect(); cout<<"Numele este: "; cin.get(Continut.titular, NMAX_NUME_TITULAR+1); cout<<"Numarul contului este: "; cin>>Continut.numar; cout<<"Soldul este: "; cin>>sold; cout<<"Valuta folosita (0-"<>Continut.valuta; } template ContBancar::ContBancar(const char *numar) { register int gasit=0; Inregistrare tmp; ifstream banca("banca.dat", ios::in | ios::binary); if (!banca) { cerr<<"Fisierul \"banca.dat\" nu exista... Voi parasi aplicatia acum..." < constructor"<InitializareMemorieObiect(); Continut.valuta=tmp.valuta; sold=tmp.sold; ostrstream iesire_titular(Continut.titular, NMAX_NUME_TITULAR); ostrstream iesire_numar(Continut.numar, NMAX_CONT); iesire_titular< void ContBancar::InitializareMemorieObiect() { ostrstream iesire_titular(Continut.titular, NMAX_NUME_TITULAR); ostrstream iesire_numar(Continut.numar, NMAX_CONT); iesire_titular< void ContBancar::StergereMemorieObiect() { register int i; for (i=0; isold) { cerr<<"Eroare in operatorul \"-=\""<> (istream &stream, ContBancar &cont) { cout<<"Numele este: "; stream.get(cont.Continut.titular, NMAX_NUME_TITULAR+1); cout<<"Numarul contului este: "; stream>>cont.Continut.numar; cout<<"Soldul este: "; stream>>cont.sold; cout<<"Valuta folosita (0-"<>cont.Continut.valuta; return stream; } ContBancar::~ContBancar() { register int gasit=0, count=0, stare_fisier=0; Inregistrare tmp; fstream banca("banca.dat", ios::binary | ios::in | ios::out); if (!banca) { cerr<<"Fisierul \"banca.dat\" nu exista si nu il pot genera... \ Voi parasi aplicatia acum..."< destructor"<StergereMemorieObiect(); cout<<"Destructorul a fost apelat."< *oInstanta1=new ContBancar(); // // Se foloseste un constructor simplu cu care vom produce o instanta cu // // ajutorul careia vom exemplifica utilizarea operatorilor "<<" si ">>". // cout<<"Obiectul *oInstanta1 -----> Introduceti datele: "<>*oInstanta1; // // Atentie: nu se foloseste pointer-ul, ci instanta spre care indica acesta // cout<<"Continutul obiectului *oInstanta1 este: "< *oInstanta=new ContBancar("Mircea Stancu", "4", 10, 0); cout<<*oInstanta< *oInstanta2=new ContBancar("4"); // S-a folosit constructorul care citeste din fisier. cout<<"La contul 4 avem: "<<*oInstanta2; cout<<"Acum veti modifica acest cont: "<>*oInstanta2; // cout<<"Contul modificat este: "<<*oInstanta2< *oInstanta3=new ContBancar(1); // Constructorul care citeste de la consola datele pentru obiect cout<<"Datele introduse sunt: "< *oInstantaX=new ContBancar("4"); cout<<"Totalul din \"banca.dat\" in lei: "<spune_total()<