Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include <vector>
- #include <string>
- #include <fstream>
- using namespace std;
- int id = 1;
- struct student
- {
- int const id;
- string nazwisko;
- string specjalnosc;
- float srednia;
- };
- void dodaj(vector<student*> &baza, int id, string nazwisko, string specjalnosc, float srednia)
- {
- student* a = new student{ id };
- a->nazwisko = nazwisko;
- a->specjalnosc = specjalnosc;
- a->srednia = srednia;
- baza.push_back(a);
- }
- void z_pliku(vector<student*> &baza)
- {
- ifstream plik{ "dane.txt", ios::in };
- if (!plik)
- {
- string a = "\nBrak pliku z danymi do wczytania.";
- throw a;
- }
- else
- {
- int id;
- string nazwisko, specjalnosc;
- float srednia;
- bool przerwano = false;
- plik.exceptions(ifstream::failbit | ifstream::badbit);
- while (!plik.eof())
- {
- try
- {
- plik >> id;
- if (id > ::id)
- ::id = id;
- plik >> nazwisko;
- plik >> specjalnosc;
- plik >> srednia;
- }
- catch(ifstream::failure e)
- {
- przerwano = true;
- break;
- }
- dodaj(baza, id, nazwisko, specjalnosc, srednia);
- }
- ::id++;
- if (przerwano)
- cout << "\nBlad wczytywania plikow z 'dane.txt'.";
- else
- cout << "\nWczytano dane z pliku 'dane.txt'.";
- }
- plik.close();
- }
- void dodaj_recznie(vector<student*> &baza)
- {
- string nazwisko, specjalnosc;
- float srednia;
- cout << "\nPodaj nazwisko nowego studenta: ";
- cin >> nazwisko;
- cout << "\nPodaj specjalnosc nowego studenta: ";
- cin >> specjalnosc;
- cout << "\nPodaj srednia nowego studenta: ";
- cin >> srednia;
- dodaj(baza, ::id, nazwisko, specjalnosc, srednia);
- cout << "\nDodano nowego studenta.";
- ::id++;
- return;
- }
- void wyswietl_wszystko(vector<student*> baza)
- {
- cout << endl;
- for (auto e : baza)
- cout << e->id << " " << e->nazwisko << " " << e->specjalnosc << " " << e->srednia << endl;
- }
- void wyswietl_id(vector<student*> baza, int id_szukane)
- {
- if (baza.size() == 0)
- {
- string blad = "\nBrak danych w bazie!";
- throw blad;
- }
- int a = 0;
- auto it = baza.begin();
- while (a < baza.size())
- {
- if ((*(it + a))->id == id_szukane) {
- cout << (*(it + a))->id << " " << (*(it + a))->nazwisko << " " << (*(it + a))->specjalnosc << " " << (*(it + a))->srednia << endl;
- break;
- }
- a++;
- }
- if (a >= baza.size()) cout << "Nieznaleziono takiego studenta.\n";
- }
- void wyswietl_nazwisko(vector<student*> baza)
- {
- if (baza.size() == 0)
- {
- string blad = "\nBrak danych w bazie!";
- throw blad;
- }
- string nazwisko_szukane;
- cout << "\nPodaj nazwisko studenta, ktorego chcesz wyswietlic: ";
- cin >> nazwisko_szukane;
- int a = 0;
- auto it = baza.begin();
- while (a < baza.size())
- {
- if ((*(it + a))->nazwisko == nazwisko_szukane){
- cout << (*(it + a))->id << " " << (*(it + a))->nazwisko << " " << (*(it + a))->specjalnosc << " " << (*(it + a))->srednia << endl;
- break;
- }
- a++;
- }
- if (a >= baza.size()) cout << "Nieznaleziono takiego studenta.\n";
- }
- void wyswietl_specjalnosc(vector<student*> baza)
- {
- if (baza.size() == 0)
- {
- string blad = "\nBrak danych w bazie!";
- throw blad;
- }
- string specjalnosc_szukana;
- cout << "\nPodaj specjalnosc studenta, ktorego chcesz wyswietlic: ";
- cin >> specjalnosc_szukana;
- int a = 0;
- auto it = baza.begin();
- while (a < baza.size())
- {
- if ((*(it + a))->specjalnosc == specjalnosc_szukana) {
- cout << (*(it + a))->id << " " << (*(it + a))->nazwisko << " " << (*(it + a))->specjalnosc << " " << (*(it + a))->srednia << endl;
- break;
- }
- a++;
- }
- if (a >= baza.size()) cout << "Nieznaleziono takiego studenta.\n";
- }
- void wyswietl_srednia(vector<student*> baza)
- {
- if (baza.size() == 0)
- {
- string blad = "\nBrak danych w bazie!";
- throw blad;
- }
- float srednia_szukana;
- cout << "\nPodaj specjalnosc studenta, ktorego chcesz wyswietlic: ";
- cin >> srednia_szukana;
- int a = 0;
- auto it2 = baza.begin();
- while (a < baza.size())
- {
- if ((*(it2 + a))->srednia == srednia_szukana) {
- cout << (*(it2 + a))->id << " " << (*(it2 + a))->nazwisko << " " << (*(it2 + a))->specjalnosc << " " << (*(it2 + a))->srednia << endl;
- break;
- }
- a++;
- }
- if (a >= baza.size()) cout << "Nieznaleziono takiego studenta.\n";
- }
- void usun(vector<student*> &baza)
- {
- if (baza.size() == 0)
- {
- string blad = "\nBrak danych w bazie!";
- throw blad;
- }
- auto it = baza.begin();
- bool znaleziono = false;
- int id, a=0;
- cout << "\nPodaj id studenta do usuniecia: ";
- cin >> id;
- while (a < baza.size() )
- {
- if ((*(it + a))->id == id)
- {
- znaleziono = true;
- break;
- }
- a++;
- }
- if (!znaleziono)
- {
- string blad = "\nBrak takiego studenta!";
- throw blad;
- }
- cout << "\nStudent: ";
- wyswietl_id(baza, id);
- cout << "zostal usuniety.";
- baza.erase(it + a);
- return;
- }
- void edytuj(vector<student*> &baza)
- {
- if (baza.size() == 0)
- {
- string blad = "\nBrak danych w bazie!";
- throw blad;
- }
- auto it = baza.begin();
- bool znaleziono = false;
- int id, a = 0;
- cout << "\nPodaj id studenta do edycji: ";
- cin >> id;
- while (a < baza.size())
- {
- if ((*(it + a))->id == id)
- {
- znaleziono = true;
- break;
- }
- a++;
- }
- if (!znaleziono)
- {
- string blad = "\nBrak takiego studenta!";
- throw blad;
- }
- cout << "\nObecne dane studenta: ";
- wyswietl_id(baza, id);
- string nazwisko, specjalnosc;
- float srednia;
- cout << "\nPodaj nazwisko nowego studenta: ";
- cin >> nazwisko;
- (*(it + a))->nazwisko = nazwisko;
- cout << "\nPodaj specjalnosc nowego studenta: ";
- cin >> specjalnosc;
- (*(it + a))->specjalnosc = specjalnosc;
- cout << "\nPodaj srednia nowego studenta: ";
- cin >> srednia;
- (*(it + a))->srednia = srednia;
- cout << "\nDane studenta po zmianach: ";
- wyswietl_id(baza, id);
- return;
- }
- void zapisz(vector<student*> baza)
- {
- if (baza.size() == 0)
- {
- string blad = "\nBrak danych w bazie!";
- throw blad;
- }
- bool pierwszy = true;
- ofstream plik{ "dane.txt", ios::out };
- for (auto e : baza)
- {
- if(!pierwszy)
- plik << endl;
- plik << e->id << " " << e->nazwisko << " " << e->specjalnosc << " " << e->srednia;
- pierwszy = false;
- }
- plik.close();
- cout << "\nDane zapisano w pliku 'dane.txt'.";
- }
- void dopisz(vector<student*> baza)
- {
- if (baza.size() == 0)
- {
- string blad = "\nBrak danych w bazie!";
- throw blad;
- }
- fstream plik{ "dane.txt", ios::app };
- for (auto e : baza)
- plik << endl << e->id << " " << e->nazwisko << " " << e->specjalnosc << " " << e->srednia;
- plik.close();
- cout << "\nDane dopisano do pliku 'dane.txt'.";
- }
- void menu()
- {
- cout << "\n\n 1. Wczytaj dane z pliku";
- cout << "\n 2. Dodaj studenta";
- cout << "\n 3. Usun studenta";
- cout << "\n 4. Edytuj studenta";
- cout << "\n 5. Wyswietl wszytkich studentow";
- cout << "\n 6. Wyswietl studentow o konkretnym id";
- cout << "\n 7. Wyswietl studentow o konkretnym nazwisku";
- cout << "\n 8. Wyswietl studentow o konkretnej specjalnosci";
- cout << "\n 9. Wyswietl studentow o konkretnej sredniej";
- cout << "\n 10. Zapisz baze danych w pliku";
- cout << "\n 11. Dopisz baze danych do pliku";
- cout << "\n 12. Wyjscie";
- cout << "\n\nPodaj ktora opcje wybierasz: ";
- }
- int main()
- {
- vector<student*> baza{};
- int wybor = 0;
- while (wybor != 12)
- {
- int id = 0;
- menu();
- cin >> wybor;
- switch (wybor)
- {
- case (1):
- try
- {
- z_pliku(baza);
- }
- catch (string a)
- {
- cout << a;
- };
- break;
- case (2):
- dodaj_recznie(baza);
- break;
- case (3):
- try
- {
- usun(baza);
- }
- catch (string a)
- {
- cout << a;
- };
- break;
- case (4):
- try
- {
- edytuj(baza);
- }
- catch (string a)
- {
- cout << a;
- };
- break;
- case (5):
- wyswietl_wszystko(baza);
- break;
- case (6):
- cout << "\nPodaj id studenta, ktorego chcesz wyswietlic: ";
- cin >> id;
- try
- {
- wyswietl_id(baza, id);
- }
- catch (string a)
- {
- cout << a;
- };
- break;
- case (7):
- try
- {
- wyswietl_nazwisko(baza);
- }
- catch (string a)
- {
- cout << a;
- };
- break;
- case (8):
- try
- {
- wyswietl_specjalnosc(baza);
- }
- catch (string a)
- {
- cout << a;
- };
- break;
- case (9):
- try
- {
- wyswietl_srednia(baza);
- }
- catch (string a)
- {
- cout << a;
- };
- break;
- case (10):
- try
- {
- zapisz(baza);
- }
- catch (string a)
- {
- cout << a;
- };
- break;
- case (11):
- try
- {
- dopisz(baza);
- }
- catch (string a)
- {
- cout << a;
- };
- break;
- }
- cout << endl;
- system("PAUSE");
- system("cls");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement