Advertisement
MeehoweCK

Untitled

May 30th, 2023
455
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.99 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <conio.h>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. const string nazwa_pliku = "baza.bin";
  9.  
  10. struct Osoba
  11. {
  12.     string nazwisko;
  13.     string imie;
  14.     float stan_konta;
  15.     void wyswietl()
  16.     {
  17.         cout << nazwisko << ", " << imie << ", stan konta: " << stan_konta << endl;
  18.     }
  19. };
  20.  
  21. ostream& operator<<(ostream& out, const Osoba& osoba)
  22. {
  23.     out << osoba.nazwisko << ' ' << osoba.imie << ' ' << osoba.stan_konta;
  24.     return out;
  25. }
  26.  
  27. istream& operator>>(istream& in, Osoba& osoba)
  28. {
  29.     in >> osoba.nazwisko >> osoba.imie >> osoba.stan_konta;
  30.     return in;
  31. }
  32.  
  33. bool wczytaj_baze(vector<Osoba>& baza)
  34. {
  35.     ifstream plik;
  36.     plik.open(nazwa_pliku);
  37.     if (plik.fail())
  38.         return 1;
  39.     Osoba temp;
  40.     while (plik >> temp)
  41.     {
  42.         baza.push_back(temp);
  43.     }
  44.     plik.close();
  45.  
  46.     cout << "Baza danych zostala poprawnie pobrana z pliku.\n";
  47.     cout << "Znajduje sie w niej " << baza.size() << " osob.\n";
  48.     return 0;
  49. }
  50.  
  51. void utworz_od_nowa(vector<Osoba>& baza)
  52. {
  53.     fstream plik;
  54.     plik.open(nazwa_pliku, ios::trunc);
  55.     plik.close();
  56.     cout << "Baza zostala wyzerowana. Wcisnij dowolny przycisk, aby kontynuowac...";
  57.     _getch();
  58.     baza.clear();
  59. }
  60.  
  61. void dopisanie_danych_klienta(vector<Osoba>& baza)
  62. {
  63.     fstream plik;
  64.     cout << "Podaj dane osoby (nazwisko, imie, stan konta): ";
  65.     Osoba temp;
  66.     cin >> temp;
  67.     plik.open(nazwa_pliku, ios::app);
  68.     plik << temp << endl;
  69.     plik.close();
  70.     cout << "Osoba poprawnie dodana do bazy. Wcisnij dowolny przycisk, aby kontynuowac...";
  71.     _getch();
  72.     baza.push_back(temp);
  73. }
  74.  
  75. void wyswietlenie_klientow()
  76. {
  77.     ifstream plik;
  78.  
  79.     cout << "Podaj numer osoby, od ktorej mam zaczac wyswietlanie: ";
  80.     int numer;
  81.     cin >> numer;
  82.  
  83.     cout << "Osoby z bazy od numeru " << numer << ":\n";
  84.  
  85.     plik.open(nazwa_pliku);
  86.  
  87.     int licznik = 0;        // ile osรณb wczytano z pliku
  88.     Osoba temp;
  89.     while (plik >> temp)
  90.     {
  91.         if (licznik >= numer)
  92.         {
  93.             cout << licznik << '\t';
  94.             temp.wyswietl();
  95.         }
  96.         ++licznik;
  97.     }
  98.     plik.close();
  99. }
  100.  
  101. Osoba najwyzsze_konto(const vector<Osoba>& baza)
  102. {
  103.     float stan_konta = baza[0].stan_konta;
  104.     unsigned size = baza.size(), numer = 0;
  105.  
  106.     for (unsigned i = 1; i < size; ++i)
  107.     {
  108.         if (baza[i].stan_konta > stan_konta)
  109.         {
  110.             numer = i;
  111.             stan_konta = baza[i].stan_konta;
  112.         }
  113.     }
  114.     return baza[numer];
  115. }
  116.  
  117. void zapisanie_wyszukanych(const vector<Osoba>& baza)
  118. {
  119.     cout << "Podaj prog, od ktorej mam zapisac osoby: ";
  120.     float prog;
  121.     cin >> prog;
  122.  
  123.     ofstream plik;
  124.     plik.open("wyszukani.txt");
  125.  
  126.     for (auto osoba : baza)
  127.     {
  128.         if (osoba.stan_konta >= prog)
  129.         {
  130.             plik << osoba << endl;
  131.             cout << osoba << endl;
  132.         }
  133.     }
  134.     plik.close();
  135.  
  136.     cout << "Osoby zapisane poprawnie. Wcisnij dowolny przycisk aby kontynuowac...";
  137.     _getch();
  138. }
  139.  
  140. void menu(vector<Osoba>& baza)
  141. {
  142.     cout << "Main menu:\n";
  143.     cout << "\t1 - utworzenie bazy od nowa\n";
  144.     cout << "\t2 - dopisanie danych klienta do bazy\n";
  145.     cout << "\t3 - wyswietlenie danych klientow z bazy od podanego numeru\n";
  146.     cout << "\t4 - wypisanie danych osoby, ktora ma najwiekszy stan konta\n";
  147.     cout << "\t5 - zapisanie danych osob o stanie konta wyzszym niz podany\n";
  148.     cout << "\t0 - wyjdz z programu\n";
  149.  
  150.     char komenda;
  151.     do
  152.     {
  153.         komenda = _getch();     // _getch() pobiera z klawiatury znak i zwraca go jako char
  154.     } while (komenda < '0' || komenda > '5');
  155.  
  156.     switch (komenda)
  157.     {
  158.     case '0':
  159.         cout << "Nastapi wyjscie z programu. Wcisnij dowolny przycisk...";
  160.         _getch();
  161.         return;
  162.     case '1':
  163.         utworz_od_nowa(baza);
  164.         menu(baza);
  165.         break;
  166.     case '2':
  167.         dopisanie_danych_klienta(baza);
  168.         menu(baza);
  169.         break;
  170.     case '3':
  171.         wyswietlenie_klientow();
  172.         menu(baza);
  173.         break;
  174.     case '4':
  175.         cout << "Osoba o najwyzszym stanie konta:\n";
  176.         najwyzsze_konto(baza).wyswietl();
  177.         cout << "Wcisnij dowolny przycisk, aby wrocic do menu...";
  178.         _getch();
  179.         menu(baza);
  180.         break;
  181.     case '5':
  182.         zapisanie_wyszukanych(baza);
  183.         menu(baza);
  184.     }
  185. }
  186.  
  187. int main()
  188. {
  189.     vector<Osoba> baza{};
  190.     if (wczytaj_baze(baza))
  191.     {
  192.         cout << "Blad odczytu.\n";
  193.         return 0;
  194.     }
  195.     menu(baza);
  196.     return 0;
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement