Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include<fstream>
- #include<string.h>
- #include <string>
- #include<cctype>
- using namespace std;
- const int MAXZN = 20; //maksymalna liczba znakow dla lancuchow imie i nazwisko
- const int MAXN = 50; //maksymalna liczba osob w bazie
- struct osoba
- {
- char imie[MAXZN];
- char nazwisko[MAXZN];
- int wiek;
- int wzrost;
- };
- void drukuj_menu()
- {
- system("CLS");
- cout << "\n Co chcesz zrobic ? \n";
- cout << "1. Wczytaj baze osob\n";
- cout << "2. Wydrukuj wszystkie osoby\n";
- cout << "3. Dodaj nowa osobe\n";
- cout << "4. Usun osobe z bazy\n";
- cout << "5. Zapisz baze osob do pliku\n";
- cout << "6. Wydrukuj n-ta osobe \n";
- cout << "7. Wyszukaj osobe \n";
- cout << "8. Wyjdz z programu\n";
- cout << endl;
- }
- void usun_enter()
- {
- while (cin.get() != '\n')
- continue;
- }
- void funckja1(int ile, int ile_p, fstream &plik, osoba osoby[])
- {
- ile = 0;
- plik.seekg(0);
- while (plik.read((char*)&osoby[ile], sizeof(osoba)))
- ile++;
- ile_p = ile;
- if (plik.eof())
- plik.clear();
- }
- int main()
- {
- osoba osoby[MAXN]; //tablica osob
- int ile = 0; //ile aktualnie jest osob w bazie
- int ile_p = 0; //ile było osob początkowo
- string nazwa_pliku; //nazwa pliku z danymi o osobach
- cout << "Podaj nazwe bazy: ";
- cin >> nazwa_pliku;
- fstream plik(nazwa_pliku, ios_base::in | ios_base::app | ios_base::binary); //otwieramy plik w trybie odczytu (binarnie)
- string parametr; //Uzywane w funckji wyszukiwania (7)
- char character_digit = 'c'; //
- char wybor = '0';
- if (plik.is_open())
- {
- drukuj_menu();
- while (wybor != '8')
- {
- drukuj_menu();
- cin >> wybor;
- drukuj_menu();
- switch (wybor)
- {
- case '1':
- ile = 0; //czytamy po jednej osobie do tablicy struktur osoby[] pod indeks "ile"
- plik.seekg(0);
- while (plik.read((char*)&osoby[ile], sizeof(osoba)))
- ile++;
- ile_p = ile;
- if (plik.eof())
- plik.clear(); //skasuj znacznik konca pliku
- break;
- case '2':
- if (ile == 0)
- {
- cout << "W bazie nie ma zadnych osob. \n";
- cout << "Dodaj osoby do bazy. \n";
- cout << "Wcisnij enter aby kontynuowac.";
- usun_enter();
- while (cin.get() != '\n');
- }
- else
- {
- //drukujemy zawartość tablicy osoby[]
- for (int i = 0; i < ile; i++)
- {
- cout << osoby[i].imie << endl;
- cout << osoby[i].nazwisko << endl;
- cout << osoby[i].wiek << endl;
- cout << osoby[i].wzrost << endl << endl;
- }
- cout << "Wcisnij enter aby kontynuowac.";
- usun_enter();
- while (cin.get() != '\n');
- }
- break;
- case '3':
- usun_enter();
- //dodajemy osobe do tablicy osoby[]
- cout << "Podaj imie: ";
- cin.getline(osoby[ile].imie, MAXZN);
- cout << "Podaj nazwisko: ";
- cin.getline(osoby[ile].nazwisko, MAXZN);
- cout << "Podaj wiek: ";
- cin >> osoby[ile].wiek;
- cout << "Podaj wzrost: ";
- cin >> osoby[ile].wzrost;
- ile++;
- break;
- case '4':
- int d;
- cout << "Numer osoby do usuniecia w bazie: ";
- cin >> d;
- for (int i = d - 1; i < ile - 1; i++)
- {
- osoby[i] = osoby[i + 1];
- }
- osoby[ile - 1].wiek = NULL; ///"kasowanie" ostatniej osoby w tablicy struktur
- osoby[ile - 1].wzrost = NULL;
- for (int i = 0; i < MAXZN; i++)
- {
- osoby[ile - 1].imie[i] = NULL;
- osoby[ile - 1].nazwisko[i] = NULL;
- }
- ile--;
- plik.clear();
- break;
- case '6':
- int o;
- cout << "Podaj numer osoby: ";
- cin >> o;
- if (o > ile || o < 1)
- {
- cout << "Nie ma takiej osoby. ";
- cout << "Wcisnij enter aby kontynuowac.";
- usun_enter();
- while (cin.get() != '\n');
- break;
- }
- o += 1;
- cout << osoby[o].imie << endl;
- cout << osoby[o].nazwisko << endl;
- cout << osoby[o].wiek << endl;
- cout << osoby[o].wzrost << endl << endl;
- cout << "Wcisnij enter aby kontynuowac.";
- usun_enter();
- while (cin.get() != '\n');
- break;
- case '7':
- cout << "Podaj imie/nazwisko/wiek/wzrost"<<endl;
- cin >> parametr;
- for (int i = 0; i < parametr.size(); i++) //sprawdzamy czy podany parametr jest imieniem/nazwiskiem czy tez wiekiem/wzrostem
- {
- if (isdigit(parametr[i]))
- character_digit = 'd' ;
- }
- int found[MAXN]; //tablica znalezionych (wyszukanych) osob
- switch (character_digit)
- {
- case 'c':
- for (int i = 0, j = 0; i < ile; i++)
- {
- if (parametr == osoby[i].imie)
- {
- found[j] = i + 1;
- j++;
- }
- if (parametr == osoby[i].nazwisko)
- {
- found[j] = i + 1;
- j++;
- }
- }
- break;
- case 'd':
- for (int i = 0, j = 0; i < ile; i++)
- {
- if (osoby[i].wiek == stoi(parametr))
- {
- found[j] = i + 1;
- j++;
- }
- if (osoby[i].wzrost == stoi(parametr))
- {
- found[j] = i + 1;
- j++;
- }
- }
- break;
- }
- cout << "Znaleziono osoby o podanych numerach: "<<endl;
- for (int i = 0; found[i] != -858993460; i++)
- {
- cout << found[i]<<endl;
- }
- cout << "Wcisnij enter aby kontynuowac.";
- usun_enter();
- while (cin.get() != '\n');
- break;
- }
- if (wybor == '5') //funckje numer 5 musialem zrobic w if'ie z tego powodu, ze trzeba zadeklarowac fstream plik_out, a w case CHYBA jest to niemozliwe
- {
- if (fstream plik_out{ nazwa_pliku, ios_base::out })
- {
- if (plik_out.is_open())
- {
- if (ile < ile_p)
- {
- plik_out.write((char*)&osoby, sizeof(osoba)* (ile));
- }
- else
- {
- plik_out.write((char*)&osoby, sizeof(osoba)* (ile));
- }
- if (plik_out.fail())
- {
- cerr << "Blad zapisu do pliku " << endl;
- exit(EXIT_FAILURE);
- }
- plik_out.clear();
- plik.clear();
- ile_p = ile;
- }
- else
- {
- cerr << "Blad otwarcia pliku" << endl;
- }
- plik_out.close();
- }
- }
- if (wybor == '8')
- break;
- }
- }
- else
- {
- cerr << "Nie mozna otworzyc pliku" << endl;
- exit(EXIT_FAILURE);
- }
- cout << "\n KONIEC \n";
- plik.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement