Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <conio.h>
- #include <vector>
- using namespace std;
- const string nazwa_pliku = "baza.bin";
- struct Osoba
- {
- string nazwisko;
- string imie;
- float stan_konta;
- void wyswietl()
- {
- cout << nazwisko << ", " << imie << ", stan konta: " << stan_konta << endl;
- }
- };
- ostream& operator<<(ostream& out, const Osoba& osoba)
- {
- out << osoba.nazwisko << ' ' << osoba.imie << ' ' << osoba.stan_konta;
- return out;
- }
- istream& operator>>(istream& in, Osoba& osoba)
- {
- in >> osoba.nazwisko >> osoba.imie >> osoba.stan_konta;
- return in;
- }
- bool wczytaj_baze(vector<Osoba>& baza)
- {
- ifstream plik;
- plik.open(nazwa_pliku);
- if (plik.fail())
- return 1;
- Osoba temp;
- while (plik >> temp)
- {
- baza.push_back(temp);
- }
- plik.close();
- cout << "Baza danych zostala poprawnie pobrana z pliku.\n";
- cout << "Znajduje sie w niej " << baza.size() << " osob.\n";
- return 0;
- }
- void utworz_od_nowa(vector<Osoba>& baza)
- {
- fstream plik;
- plik.open(nazwa_pliku, ios::trunc);
- plik.close();
- cout << "Baza zostala wyzerowana. Wcisnij dowolny przycisk, aby kontynuowac...";
- _getch();
- baza.clear();
- }
- void dopisanie_danych_klienta(vector<Osoba>& baza)
- {
- fstream plik;
- cout << "Podaj dane osoby (nazwisko, imie, stan konta): ";
- Osoba temp;
- cin >> temp;
- plik.open(nazwa_pliku, ios::app);
- plik << temp << endl;
- plik.close();
- cout << "Osoba poprawnie dodana do bazy. Wcisnij dowolny przycisk, aby kontynuowac...";
- _getch();
- baza.push_back(temp);
- }
- void wyswietlenie_klientow()
- {
- ifstream plik;
- cout << "Podaj numer osoby, od ktorej mam zaczac wyswietlanie: ";
- int numer;
- cin >> numer;
- cout << "Osoby z bazy od numeru " << numer << ":\n";
- plik.open(nazwa_pliku);
- int licznik = 0; // ile osรณb wczytano z pliku
- Osoba temp;
- while (plik >> temp)
- {
- if (licznik >= numer)
- {
- cout << licznik << '\t';
- temp.wyswietl();
- }
- ++licznik;
- }
- plik.close();
- }
- Osoba najwyzsze_konto(const vector<Osoba>& baza)
- {
- float stan_konta = baza[0].stan_konta;
- unsigned size = baza.size(), numer = 0;
- for (unsigned i = 1; i < size; ++i)
- {
- if (baza[i].stan_konta > stan_konta)
- {
- numer = i;
- stan_konta = baza[i].stan_konta;
- }
- }
- return baza[numer];
- }
- void zapisanie_wyszukanych(const vector<Osoba>& baza)
- {
- cout << "Podaj prog, od ktorej mam zapisac osoby: ";
- float prog;
- cin >> prog;
- ofstream plik;
- plik.open("wyszukani.txt");
- for (auto osoba : baza)
- {
- if (osoba.stan_konta >= prog)
- {
- plik << osoba << endl;
- cout << osoba << endl;
- }
- }
- plik.close();
- cout << "Osoby zapisane poprawnie. Wcisnij dowolny przycisk aby kontynuowac...";
- _getch();
- }
- void menu(vector<Osoba>& baza)
- {
- cout << "Main menu:\n";
- cout << "\t1 - utworzenie bazy od nowa\n";
- cout << "\t2 - dopisanie danych klienta do bazy\n";
- cout << "\t3 - wyswietlenie danych klientow z bazy od podanego numeru\n";
- cout << "\t4 - wypisanie danych osoby, ktora ma najwiekszy stan konta\n";
- cout << "\t5 - zapisanie danych osob o stanie konta wyzszym niz podany\n";
- cout << "\t0 - wyjdz z programu\n";
- char komenda;
- do
- {
- komenda = _getch(); // _getch() pobiera z klawiatury znak i zwraca go jako char
- } while (komenda < '0' || komenda > '5');
- switch (komenda)
- {
- case '0':
- cout << "Nastapi wyjscie z programu. Wcisnij dowolny przycisk...";
- _getch();
- return;
- case '1':
- utworz_od_nowa(baza);
- menu(baza);
- break;
- case '2':
- dopisanie_danych_klienta(baza);
- menu(baza);
- break;
- case '3':
- wyswietlenie_klientow();
- menu(baza);
- break;
- case '4':
- cout << "Osoba o najwyzszym stanie konta:\n";
- najwyzsze_konto(baza).wyswietl();
- cout << "Wcisnij dowolny przycisk, aby wrocic do menu...";
- _getch();
- menu(baza);
- break;
- case '5':
- zapisanie_wyszukanych(baza);
- menu(baza);
- }
- }
- int main()
- {
- vector<Osoba> baza{};
- if (wczytaj_baze(baza))
- {
- cout << "Blad odczytu.\n";
- return 0;
- }
- menu(baza);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement