Advertisement
AmarBiH

Untitled

Mar 24th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.64 KB | None | 0 0
  1. #include <iostream>
  2. #include<ctime>
  3. #include<stdlib.h>
  4. #include <unistd.h>
  5. #include<conio.h>
  6. #include <windows.h> // za cls funkciju
  7. #include <fstream> // za cuvanje podataka
  8.  
  9. using namespace std;
  10.  
  11. int n=1;
  12.  
  13.  
  14.  struct brr{
  15.     int broj_racuna;
  16.     double pare;    
  17. };
  18.  
  19. struct prijava{
  20.  
  21.     prijava **prijave;
  22.      
  23.     int d,m,g;
  24.     char ime[20];
  25.     char prezime[20];
  26.     char sifra[20];
  27.     brr racun;
  28.    
  29.     // Ukoliko se unese pogresan datum: 37:14:1500
  30.      bool provjera_datuma(){
  31.        
  32.         int dani[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
  33.         if(this->g % 4 == 0) dani[1]++;
  34.         if(this->d <= 0 || this->d >= dani[this->m-1]) return false;
  35.         if(this->m <= 0 || this->m >= 13) return false;
  36.         if(this->g <= 1900 || this->g >= 2100) return false;
  37.        
  38.         return true;
  39.     }      
  40.    
  41.     void sacuvaj_podatke(const char ime_datoteke[]){
  42.        
  43.         std::ofstream izlazni_tok(ime_datoteke, std::ios::binary);
  44.         izlazni_tok.write(reinterpret_cast<const char*>(this), sizeof *this);
  45.         for(int i(0); i<racun.broj_racuna; ++i){
  46.             izlazni_tok.write(reinterpret_cast<char*>(prijave[i]), sizeof(prijava));
  47.         }
  48.         //dodati zastitu
  49.     }
  50.    
  51.     void obnovi_podatke(const char ime_datoteke[]){
  52.        
  53.         std::ifstream ulazni_tok(ime_datoteke, std::ios::binary);
  54.         ulazni_tok.read(reinterpret_cast<char*>(this), sizeof *this);
  55.         prijave = new prijava*[100];
  56.         for(int i(0); i<racun.broj_racuna; ++i) prijave[i] = NULL;
  57.         for(int i(0); i<racun.broj_racuna; ++i) {
  58.             prijave[i] = new prijava;
  59.             ulazni_tok.read(reinterpret_cast<char*>(prijave[i]), sizeof(prijava));
  60.         }
  61.         //dodati zastitu
  62.     }  
  63. };
  64.  
  65. void potvrda_unesene_sifre(prijava A){
  66.     string pw ="";
  67.     char d;
  68.    
  69.    
  70.    /*
  71.     do{
  72.         pw=' ';
  73.         cout <<"Potvrdite password: ";
  74.         while ((d=_getch()) != 13){
  75.         pw.push_back(d);
  76.         putch('*');
  77.     }
  78. cout<<endl;
  79.         }while(A.sifra!=pw);*/
  80.        
  81.         int brojac = 0;
  82.         while(1){
  83.         system("cls");
  84.         cout<<"Potvrdite sifru: ";
  85.         for(int i(0); i<brojac; ++i) _putch('*');
  86.        
  87.         d = getch();
  88.         if(d == 13) break;
  89.            
  90.         if(brojac > 0 && d == 8){
  91.             pw = pw.substr(0, pw.size()-1);
  92.             --brojac;
  93.             continue;
  94.         }else{
  95.             if(brojac == 0 && d == 8) continue;
  96.             pw += d;
  97.             ++brojac;
  98.             continue;
  99.         }  
  100.    
  101.  }
  102.  
  103.         if(pw == A.sifra){
  104.             cout <<"\nUspjesno ste se registrovali ";
  105.             return;
  106.         }
  107.         else{
  108.             cout << "\nPogresno unesena lozinka, molimo vas pokusajte ponovo\n";
  109.             Sleep(3000);
  110.             potvrda_unesene_sifre(A);
  111.         }
  112.    
  113. }
  114.  
  115. prijava prijava_racuna(){
  116.     prijava rez;
  117.     prijava *kraj;
  118.    
  119.     while(1){
  120.     cout<<"Unesite dan rodenja: ";cin>>rez.d;
  121.     cout<<"Unesite mjesec rodenja: ";cin>>rez.m;
  122.     cout<<"Unesite godinu rodenja: ";cin>>rez.g;
  123.    
  124.     //Dodano, provjera datuma...
  125.     if(!rez.provjera_datuma()){
  126.         cout << "Pogresno unesen datum, molimo vas unesite ponovo!\n";
  127.     } else break;
  128.     }
  129.    
  130.     while(1){
  131.        
  132.     bool breakaj = false; //pomocna varijabla ukoliko je korisnik zadovoljan unosom imena da program ide na unos sifre
  133.    
  134.     cout<<"Unesite ime: ";cin>>rez.ime;
  135.     cout<<"Unesite prezime: ";cin>>rez.prezime;
  136.    
  137.     cout << "Kreirati racun na ime " << rez.ime << " " << rez.prezime << "? (D/N): ";
  138.     char dn;
  139.    
  140.     while(1){
  141.     cin >> dn;
  142.     if(dn == 'd' || dn == 'D') {
  143.         breakaj = true;
  144.         break;
  145.     }
  146.     else if(dn == 'n' || dn == 'N') break;
  147.     else cout << "Unesite \"D\" za DA ||| Unesite \"N\" za NE: ";
  148.     }
  149.     if(breakaj) break;
  150.     }
  151.    
  152.     char c;
  153.     int brojac = 0;
  154.     strcpy(rez.sifra, "");
  155.     string password;
  156.     while(1){
  157.        
  158.         system("cls");
  159.         cout << rez.ime << " " << rez.prezime;
  160.         cout<<"\nUnesite sifru: ";
  161.         for(int i(0); i<brojac; ++i) _putch('*');
  162.        
  163.         c = getch();
  164.         if(c == 13) break;
  165.            
  166.         if(brojac > 0 && c == 8){
  167.             --brojac;
  168.             password = password.substr(0, password.size()-1);
  169.             continue;
  170.         }else{
  171.             if(brojac == 0 && c == 8) continue;
  172.             password += c;
  173.             ++brojac;
  174.             continue;
  175.         }  
  176.     }
  177.     strcpy(rez.sifra, password.c_str());
  178.    
  179.     cout<<endl;
  180.     potvrda_unesene_sifre(rez);
  181.     cout<<endl;
  182.     cout<<"=======================================================\n";
  183.     cout<<"Za aktivaciju racuna unesite minimalno 5[KM]:   ";
  184.     cin>>rez.racun.pare;
  185.     cout<<"=======================================================\n";
  186.     kraj=&rez;
  187.     return *kraj;
  188. }
  189.  
  190. //template <class T>
  191. void dodijeli_broj_racuna(prijava *A, prijava racuni[], int vel){
  192.    
  193.         bool ima_isti = false;
  194.         int ID;
  195.         do{
  196.         ID = rand()%10000+999;
  197.         for(int i(0); i<vel; ++i){
  198.             if((racuni+i)->racun.broj_racuna == ID){ //Ukoliko ima neki drugi racun koji ima isti ID, dodaj novi ID
  199.                 ima_isti = true;
  200.                 break;
  201.             }
  202.         }
  203.     }while(ima_isti);
  204.     A->racun.broj_racuna=ID;
  205.     cout<<A->racun.broj_racuna;
  206. }
  207.    
  208. //template <class T>
  209. void potvrda(prijava *A, prijava prijave[],  int vel){
  210.    // sleep(3);
  211.     cout<<"==========================================================================\n";
  212.     cout<<"Uspjesno ste kreirali svoj korisnicki racun. Broj vaseg racuna je:  ";
  213.     dodijeli_broj_racuna(A, prijave, vel);
  214.     cout<<endl;
  215.     cout<<"==========================================================================\n";
  216. }
  217.  
  218. void ispis(prijava *A){
  219.     cout<<"=============================\n";
  220.     cout<<"Ime i prezime: "<<A->ime<<"  "<<A->prezime<<endl;
  221.     cout<<"Datum rodenja: "<<A->d<<"."<<A->m<<"."<<A->g<<endl;
  222.     cout<<"Novcano stanje: "<<A->racun.pare<<" [KM]"<<endl;
  223.     cout<<"=============================\n";
  224. }
  225.  
  226. void ispis_prijavljenih_korisnika(prijava A[],int a){
  227.     cout<<"=========================================\n";
  228.     for(int i=0;i<a;i++){
  229.         cout<<A[i].ime<<"  "<<A[i].prezime<<"  ==  Broj racuna["<<A[i].racun.broj_racuna<<"]"<<endl;
  230.     }
  231.     cout<<"=========================================\n";
  232. }
  233.  
  234. void stanje_racuna_uneseni_broj_racuna(prijava *A,int a,int y){
  235.     prijava *NOVI;
  236.     for(int i=0;i<a;i++){
  237.         if(y==(A+i)->racun.broj_racuna)
  238.         NOVI=(A+i);
  239.     }
  240.     ispis(NOVI);
  241. }
  242.  
  243. void uplata_novca_na_racun(prijava *A,int y,int n){
  244.    
  245.     double novac;
  246.     string sifra;
  247.     cout <<"Unesite  sifru: ";
  248.     char f;
  249.     sifra="";
  250.     while ((f=_getch()) != 13){
  251.         sifra.push_back(f);
  252.         putch('*');
  253.     }
  254.     cout<<"Provjera ..."<<endl;
  255.     //sleep(2);
  256.     for(int i=0;i<n;i++){
  257.         if(y==(A+i)->racun.broj_racuna){
  258.             if(sifra!=A[i].sifra){
  259.                 do{
  260.                     char c;
  261.                     sifra=' ';
  262.             //  sleep(2);
  263.                     cout <<"[GRESKA]Unesite ispravnu sifru : ";
  264.             //  sleep(2);
  265.                     while ((c=_getch()) != 13){
  266.                         sifra.push_back(c);
  267.                         putch('*');
  268.                     }
  269.                 }while(sifra!=A[i].sifra);
  270.             }
  271.         //  sleep(2);
  272.             cout<<"Provjera ... "<<endl;
  273.             cout<<"Uspjesan unos sifre. "<<endl;  
  274.             cout <<"Unesite koliko zelite novca da uplatite na racun: ";
  275.             cin>>novac;
  276.             (A+i)->racun.pare=(A+i)->racun.pare+novac;
  277.         //  sleep(2);
  278.             cout<<"===========================\n";
  279.             cout<<"Transakcija izvrsena."<<endl;
  280.             cout<<"Stanje racuna: "<<(A+i)->racun.pare<<" [KM]"<<endl;
  281.             cout<<"===========================\n";
  282.         }
  283.     }
  284. }
  285.  
  286. void uplata_novca_na_drugi_racun(prijava *A,int n){
  287.     double novac2;
  288.     string sifra2;
  289.     int z,k;
  290.     cout<<"Unesite broj svog racuna: ";
  291.     cin>>z;
  292.     cout <<"Unesite  sifru: ";
  293.     char l;
  294.     sifra2="";
  295.     while ((l=_getch()) != 13){
  296.         sifra2.push_back(l);
  297.         putch('*');
  298.     }
  299.     cout<<"Provjera ..."<<endl;
  300.     sleep(2);
  301.     prijava jedan;
  302.     prijava novi;
  303.     for(int i=0;i<n;i++){
  304.         if(z==(A+i)->racun.broj_racuna){
  305.             jedan=A[i];
  306.             do{
  307.                 sleep(2);
  308.                 cout <<"[GRESKA]Unesite ispravnu sifru : ";
  309.                 sleep(2);
  310.                 char t;
  311.                 sifra2="";
  312.                 while ((t=_getch()) != 13){
  313.                     sifra2.push_back(t);
  314.                     putch('*');
  315.                 }
  316.             }while(sifra2!=A[i].sifra);
  317.         }      
  318.     }
  319.     cout<<"Provjera ... "<<endl;
  320.     sleep(2);
  321.     cout<<"Uspjesan unos sifre. "<<endl;
  322.     cout <<"Unesite koliko zelite novca da uplatite na racun: ";
  323.     cin>>novac2;
  324.     cout<<"Unesite broj racuna na koji zelite uplatiti novac: ";
  325.     cin>>k;
  326.            
  327.     for(int i=0;i<n;i++){
  328.         if(k==(A+i)->racun.broj_racuna){
  329.             novi=A[i];
  330.         }
  331.     }
  332.     if(k==novi.racun.broj_racuna){  
  333.         if(jedan.racun.pare>novac2){
  334.             jedan.racun.pare=jedan.racun.pare-novac2;
  335.             novi.racun.pare+=novac2;
  336.             sleep(2);
  337.             cout<<"========================================\n";
  338.             cout<<"        Transakcija izvrsena."<<endl;
  339.             cout<<"Za stanje na racunu pritisnite opciju 2."<<endl;
  340.             cout<<"========================================\n";
  341.             for(int i=0;i<n;i++){
  342.                 if(k==(A+i)->racun.broj_racuna){
  343.                     A[i]=novi;;
  344.                 }
  345.             }
  346.             for(int i=0;i<n;i++){
  347.             if(z==(A+i)->racun.broj_racuna){
  348.             A[i]=jedan;
  349.            
  350.             }
  351.            
  352.             }
  353.            
  354.            
  355.         }else{
  356.             if(jedan.racun.pare<novac2)
  357.                 do{
  358.                     cout<<"Nemate dovoljno sredstava za ovu transakciju.Unesite manji iznos:";
  359.                     cin>>novac2;
  360.                 }while(jedan.racun.pare<novac2);
  361.                 else
  362.                 sleep(2);
  363.                 cout<<"========================================\n";
  364.                 cout<<"      Transakcija izvrsena."<<endl;
  365.                 cout<<"Za stanje na racunu pritisnite opciju 2."<<endl;
  366.                 for(int i=0;i<n;i++){
  367.                     if(k==(A+i)->racun.broj_racuna){
  368.                         A[i]=novi;
  369.                     }
  370.                 }
  371.                 cout<<"========================================\n";
  372.             for(int i=0;i<n;i++){
  373.                 if(z==(A+i)->racun.broj_racuna){
  374.                     A[i]=jedan;
  375.                 }      
  376.            
  377.             }
  378.                
  379.                                
  380.         }
  381.     }
  382.                
  383. }
  384.  
  385. void digni_pare_sa_racuna(prijava *A,int n){
  386.     double novac3;
  387.     string sifra4;
  388.     int o,p;
  389.     cout<<"Unesite broj svog racuna: ";
  390.     cin>>o;
  391.     cout <<"Unesite  sifru: ";
  392.     for(int i=0;i<n;i++){
  393.         if(o==(A+i)->racun.broj_racuna){
  394.             char l;
  395.             sifra4="";
  396.             while ((l=_getch()) != 13){
  397.                 sifra4.push_back(l);
  398.                 putch('*');
  399.             }
  400.             if(sifra4==A[i].sifra){
  401.                 cout<<"\nProvjera ... "<<endl;
  402.                 sleep(2);
  403.                 cout<<"Uspjesan unos sifre. "<<endl;
  404.                 cout <<"Unesite koliko zelite novca da dignete sa racuna: ";
  405.                 cin>>novac3;
  406.                 (A+i)->racun.pare=(A+i)->racun.pare-novac3;
  407.                 sleep(2);
  408.                 cout<<"==============================\n";
  409.                 cout<<"Uspjesno ste podigli novac."<<endl;
  410.                 cout<<"Stanje racuna: "<<(A+i)->racun.pare<<" [KM]"<<endl;
  411.                 cout<<"==============================\n";
  412.             }else{
  413.            
  414.                 do{
  415.                
  416.                     cout<<"\nProvjera ..."<<endl;
  417.                     Sleep(1000);
  418.                     cout <<"[GRESKA]Unesite ispravnu sifru : ";
  419.                     char g;
  420.                     sifra4=' ';
  421.                     while ((g=_getch()) != 13){
  422.                         sifra4.push_back(g);
  423.                         putch('*');
  424.                     }
  425.                     sleep(2);
  426.                     }while(sifra4!=A[i].sifra);
  427.                     cout<<"Uspjesan unos sifre. "<<endl;
  428.                     cout <<"Unesite koliko zelite novca da dignete sa racuna: ";
  429.                     cin>>novac3;
  430.                
  431.                    
  432.                     (A+i)->racun.pare=(A+i)->racun.pare-novac3;
  433.                     sleep(2);
  434.                     cout<<"==============================\n";
  435.                     cout<<"Uspjesno ste podigli novac."<<endl;
  436.                     cout<<"Stanje racuna: "<<(A+i)->racun.pare<<" [KM]"<<endl;
  437.                     cout<<"==============================\n";
  438.                
  439.                 }
  440.             }
  441.     }      
  442. }
  443.  
  444. //template <class T>
  445. int get_index_from_id(prijava korisnici[], int vel, int ID){
  446.    
  447.     for(int i(0); i<vel; ++i){
  448.        
  449.         if(korisnici[i].racun.broj_racuna == ID) return i;
  450.        
  451.     }
  452.    
  453.     return -1;
  454. }
  455.  
  456. //template <class T>
  457. void brisi_korisnika(prijava korisnici[], int &vel, int ID){
  458.    
  459.     int x = get_index_from_id(korisnici, vel, ID);
  460.    
  461.     for(int i(x); i<vel - 1; ++i){
  462.         korisnici[i] = korisnici[i + 1];
  463.     }
  464.    
  465.     strcpy(korisnici[vel-1].ime, "");
  466.     strcpy(korisnici[vel-1].prezime, "");
  467.     --vel;
  468.    
  469.    
  470. }
  471.  
  472. //template <class T>
  473. void sacuvaj_stanje(prijava p[], int n){
  474.    
  475.     std::ofstream _broj("broj_prijava.dat", std::ios::binary);
  476.     _broj.write(reinterpret_cast<char*>(&n), sizeof(int));
  477.     _broj.close();
  478.        
  479.        
  480.     std::ofstream pisanje("korisnici.dat", std::ios::binary);
  481.     for(int i(0); i<n; ++i){
  482.     pisanje.write(reinterpret_cast<char*>(&p[i]), sizeof(prijava));    
  483.     }
  484.     pisanje.close();
  485.    
  486. }
  487.  
  488. int main(){
  489.    
  490.     srand(time(0));
  491.     int izbor;
  492.     std::ifstream broj("broj_prijava.dat", std::ios::binary);
  493.     int n = 0;
  494.     if(!broj){
  495.         Sleep(1);
  496.     } else{
  497.         broj.read(reinterpret_cast<char*>(&n), sizeof(int));  
  498.         broj.close();
  499.     }
  500.    
  501.     //std::cout <<n<<" <- n\n"; //TEST BRISATI POSLIJE
  502.    
  503.     prijava p[100];
  504.     std::ifstream citanje("korisnici.dat", std::ios::binary);
  505.     for(int i(0); i<n; ++i){
  506.         citanje.read(reinterpret_cast<char*>(&p[i]), sizeof(prijava));  
  507.     }
  508.     citanje.close();
  509.    
  510.     do{
  511.     cout << "ID\tOPTION" << endl;
  512.     cout << "1)\tIspis prijavljenih korisnika" << endl << "2)\tInformacije o korisniku " << endl;
  513.     cout << "3)\tUplata novca na racun" <<endl << "4)\tUplata novca na drugi racun" <<endl;
  514.     cout << "5)\tDizanje novca sa racuna" <<endl << "6)\tIzradi novi racun" <<endl;
  515.     cout << "7)\tBrisanje akaunta korisnika\n"<<"8)\tSacuvaj i izadji" << endl;
  516.     cout << endl << "---Odaberite opciju: "; cin >> izbor;cout<<endl;
  517.    
  518.    
  519.    
  520.     if(izbor==1){  
  521.         ispis_prijavljenih_korisnika(p,n);
  522.         //cout << endl << endl << "---Odaberite opciju: "; cin >> izbor;
  523.     }
  524.     if(izbor==2){
  525.         int x;
  526.         ispis_prijavljenih_korisnika(p,n);
  527.         cout<<"Unesite broj racuna za ispis informacija: ";
  528.         cin>>x;
  529.         stanje_racuna_uneseni_broj_racuna(p,n,x);
  530.         sacuvaj_stanje(p, n);
  531.        // cout << endl << endl << "---Odaberite opciju: "; cin >> izbor;
  532.     }
  533.    if(izbor==3){
  534.         cout<<"===========================\n";
  535.         for(int i=0;i<n;i++){
  536.             cout<<(p+i)->ime<<" "<<(p+i)->prezime<<"   "<<"["<<(p+i)->racun.broj_racuna<<"]"<<endl;
  537.         }
  538.         cout<<"===========================\n";
  539.         int x;
  540.         cout<<endl;
  541.         cout<<"Unesite broj racuna: ";
  542.         cin>>x;
  543.         uplata_novca_na_racun(p,x,n);
  544.         sacuvaj_stanje(p, n);
  545.         //cout << endl << endl << "---Odaberite opciju: "; cin >> izbor;
  546.     }
  547.     if(izbor==4){
  548.         cout<<"===========================\n";
  549.         for(int i=0;i<n;i++){
  550.             cout<<(p+i)->ime<<" "<<(p+i)->prezime<<"   "<<"["<<(p+i)->racun.broj_racuna<<"]"<<endl;
  551.         }
  552.         cout<<"===========================\n";
  553.         uplata_novca_na_drugi_racun(p,n);
  554.         sacuvaj_stanje(p, n);
  555.         //cout << endl << endl << "---Odaberite opciju: "; cin >> izbor;
  556.     }
  557.     if(izbor==5){
  558.     cout<<"===========================\n";
  559.         for(int i=0;i<n;i++){
  560.             cout<<(p+i)->ime<<" "<<(p+i)->prezime<<"   "<<"["<<(p+i)->racun.broj_racuna<<"]"<<endl;
  561.         }
  562.     cout<<"===========================\n";
  563.     digni_pare_sa_racuna(p,n);
  564.     sacuvaj_stanje(p, n);
  565.     //cout << endl << endl << "---Odaberite opciju: "; cin >> izbor;
  566.     }
  567.     if(izbor==6){
  568.         p[n]=prijava_racuna();
  569.         potvrda(p+n, p, n);
  570.         ++n;
  571.         sacuvaj_stanje(p, n);
  572.         //cout << endl << endl << "---Odaberite opciju: "; cin >> izbor;    
  573.        
  574.     }
  575.     if(izbor == 7){
  576.        
  577.         system("cls");
  578.         ispis_prijavljenih_korisnika(p,n);
  579.         std::cout << "Unesite ID korisnika za brisanje. Ukolike ne zelite izbrisati korisnika unesite -1: ";
  580.         int ID;
  581.         std::cin >> ID;
  582.         brisi_korisnika(p,n, ID);
  583.        
  584.     }
  585.     }while(izbor!=8);
  586.    
  587.    sacuvaj_stanje(p, n);
  588.    /*std::ofstream _broj("broj_prijava.dat", std::ios::binary);
  589.         _broj.write(reinterpret_cast<char*>(&n), sizeof(int));
  590.         _broj.close();
  591.        
  592.        
  593.     std::ofstream pisanje("korisnici.dat", std::ios::binary);
  594.     for(int i(0); i<n; ++i){
  595.     pisanje.write(reinterpret_cast<char*>(&p[i]), sizeof(prijava));    
  596.     }
  597.     pisanje.close();*/ //ovo je sada u funkciji sacuvaj_stanje, testira se jos, ne brisi
  598.        
  599.     return 0;
  600. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement