Advertisement
Guest User

Untitled

a guest
Apr 10th, 2020
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.20 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include<fstream>
  4. #include<string.h>
  5. #include <string>
  6. #include<cctype>
  7. using namespace std;
  8. const int MAXZN = 20;  //maksymalna liczba znakow dla lancuchow imie i nazwisko
  9. const int MAXN = 50;   //maksymalna liczba osob w bazie
  10.  
  11.  
  12. struct osoba
  13. {
  14.     char imie[MAXZN];
  15.     char nazwisko[MAXZN];
  16.     int wiek;
  17.     int wzrost;
  18. };
  19. void drukuj_menu()
  20. {
  21.     system("CLS");
  22.     cout << "\n Co chcesz zrobic ? \n";
  23.     cout << "1. Wczytaj baze osob\n";
  24.     cout << "2. Wydrukuj wszystkie osoby\n";
  25.     cout << "3. Dodaj nowa osobe\n";
  26.     cout << "4. Usun osobe z bazy\n";
  27.     cout << "5. Zapisz baze osob do pliku\n";
  28.     cout << "6. Wydrukuj n-ta osobe \n";
  29.     cout << "7. Wyszukaj osobe \n";
  30.     cout << "8. Wyjdz z programu\n";
  31.     cout << endl;
  32. }
  33. void usun_enter()
  34. {
  35.     while (cin.get() != '\n')
  36.         continue;
  37. }
  38. void funckja1(int ile, int ile_p, fstream &plik, osoba osoby[])
  39. {
  40.     ile = 0;
  41.     plik.seekg(0);
  42.     while (plik.read((char*)&osoby[ile], sizeof(osoba)))
  43.         ile++;
  44.     ile_p = ile;
  45.     if (plik.eof())
  46.         plik.clear();
  47. }
  48.  
  49.  
  50. int main()
  51. {
  52.     osoba osoby[MAXN];              //tablica osob
  53.     int ile = 0;                    //ile aktualnie jest osob w bazie
  54.     int ile_p = 0;                  //ile było osob początkowo
  55.     string nazwa_pliku;             //nazwa pliku z danymi o osobach
  56.     cout << "Podaj nazwe bazy: ";
  57.     cin >> nazwa_pliku;
  58.  
  59.     fstream plik(nazwa_pliku, ios_base::in | ios_base::app | ios_base::binary); //otwieramy plik w trybie odczytu (binarnie)
  60.    
  61.     string parametr;               //Uzywane w funckji wyszukiwania (7)
  62.     char character_digit = 'c';    //
  63.  
  64.     char wybor = '0';
  65.    
  66.     if (plik.is_open())
  67.     {
  68.         drukuj_menu();
  69.         while (wybor != '8')
  70.         {
  71.             drukuj_menu();
  72.             cin >> wybor;
  73.             drukuj_menu();
  74.             switch (wybor)
  75.             {
  76.             case '1':
  77.                 ile = 0; //czytamy po jednej osobie do tablicy struktur osoby[] pod indeks "ile"
  78.                 plik.seekg(0);
  79.                 while (plik.read((char*)&osoby[ile], sizeof(osoba)))
  80.                     ile++;
  81.                 ile_p = ile;
  82.                 if (plik.eof())
  83.                     plik.clear(); //skasuj znacznik konca pliku
  84.                 break;
  85.             case '2':
  86.                 if (ile == 0)
  87.                 {
  88.                     cout << "W bazie nie ma zadnych osob. \n";
  89.                     cout << "Dodaj osoby do bazy. \n";
  90.                     cout << "Wcisnij enter aby kontynuowac.";
  91.                     usun_enter();
  92.                     while (cin.get() != '\n');
  93.                 }
  94.                 else
  95.                 {
  96.                     //drukujemy zawartość tablicy osoby[]
  97.                     for (int i = 0; i < ile; i++)
  98.                     {
  99.                         cout << osoby[i].imie << endl;
  100.                         cout << osoby[i].nazwisko << endl;
  101.                         cout << osoby[i].wiek << endl;
  102.                         cout << osoby[i].wzrost << endl << endl;
  103.                     }
  104.                     cout << "Wcisnij enter aby kontynuowac.";
  105.                     usun_enter();
  106.                     while (cin.get() != '\n');
  107.                 }
  108.                 break;
  109.             case '3':
  110.                 usun_enter();
  111.                 //dodajemy osobe do tablicy osoby[]
  112.                 cout << "Podaj imie: ";
  113.                 cin.getline(osoby[ile].imie, MAXZN);
  114.                 cout << "Podaj nazwisko: ";
  115.                 cin.getline(osoby[ile].nazwisko, MAXZN);
  116.                 cout << "Podaj wiek: ";
  117.                 cin >> osoby[ile].wiek;
  118.                 cout << "Podaj wzrost: ";
  119.                 cin >> osoby[ile].wzrost;
  120.                 ile++;
  121.                 break;
  122.             case '4':
  123.                 int d;
  124.                 cout << "Numer osoby do usuniecia w bazie: ";
  125.                 cin >> d;
  126.                 for (int i = d - 1; i < ile - 1; i++)
  127.                 {
  128.                     osoby[i] = osoby[i + 1];
  129.                 }
  130.  
  131.                 osoby[ile - 1].wiek = NULL;                 ///"kasowanie" ostatniej osoby w tablicy struktur
  132.                 osoby[ile - 1].wzrost = NULL;
  133.                 for (int i = 0; i < MAXZN; i++)      
  134.                 {
  135.                     osoby[ile - 1].imie[i] = NULL;
  136.                     osoby[ile - 1].nazwisko[i] = NULL;
  137.                 }
  138.  
  139.                 ile--;
  140.                 plik.clear();
  141.                 break;
  142.             case '6':
  143.                 int o;
  144.                 cout << "Podaj numer osoby: ";
  145.                 cin >> o;
  146.                 if (o > ile || o < 1)
  147.                 {
  148.                     cout << "Nie ma takiej osoby. ";
  149.                     cout << "Wcisnij enter aby kontynuowac.";
  150.                     usun_enter();
  151.                     while (cin.get() != '\n');
  152.                     break;
  153.                 }
  154.                 o += 1;
  155.                 cout << osoby[o].imie << endl;
  156.                 cout << osoby[o].nazwisko << endl;
  157.                 cout << osoby[o].wiek << endl;
  158.                 cout << osoby[o].wzrost << endl << endl;
  159.  
  160.                 cout << "Wcisnij enter aby kontynuowac.";
  161.                 usun_enter();
  162.                 while (cin.get() != '\n');
  163.                 break;
  164.             case '7':
  165.                 cout << "Podaj imie/nazwisko/wiek/wzrost"<<endl;
  166.                 cin >> parametr;
  167.                 for (int i = 0; i < parametr.size(); i++) //sprawdzamy czy podany parametr jest imieniem/nazwiskiem czy tez wiekiem/wzrostem
  168.                 {
  169.                     if (isdigit(parametr[i]))
  170.                         character_digit = 'd' ;
  171.                 }
  172.                 int found[MAXN];  //tablica znalezionych (wyszukanych) osob
  173.                 switch (character_digit)
  174.                 {
  175.                 case 'c':
  176.                     for (int i = 0, j = 0; i < ile; i++)
  177.                     {
  178.                         if (parametr == osoby[i].imie)
  179.                         {
  180.                             found[j] = i + 1;
  181.                             j++;
  182.                         }
  183.                         if (parametr == osoby[i].nazwisko)
  184.                         {
  185.                             found[j] = i + 1;
  186.                             j++;
  187.                         }
  188.                     }
  189.                     break;
  190.                 case 'd':
  191.                     for (int i = 0, j = 0; i < ile; i++)
  192.                     {
  193.                         if (osoby[i].wiek == stoi(parametr))
  194.                         {
  195.                             found[j] = i + 1;
  196.                             j++;
  197.                         }
  198.                         if (osoby[i].wzrost == stoi(parametr))
  199.                         {
  200.                             found[j] = i + 1;
  201.                             j++;
  202.                         }
  203.                     }
  204.                     break;
  205.                 }
  206.  
  207.                 cout << "Znaleziono osoby o podanych numerach: "<<endl;
  208.                     for (int i = 0; found[i] != -858993460; i++)
  209.                     {
  210.                         cout << found[i]<<endl;
  211.                     }
  212.  
  213.                 cout << "Wcisnij enter aby kontynuowac.";
  214.                 usun_enter();
  215.                 while (cin.get() != '\n');
  216.                 break;
  217.             }
  218.             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
  219.             {
  220.                 if (fstream plik_out{ nazwa_pliku, ios_base::out })
  221.                 {
  222.                     if (plik_out.is_open())
  223.                     {
  224.                         if (ile < ile_p)
  225.                         {
  226.                             plik_out.write((char*)&osoby, sizeof(osoba)* (ile));
  227.                         }
  228.                         else
  229.                         {
  230.                             plik_out.write((char*)&osoby, sizeof(osoba)* (ile));
  231.                         }
  232.                         if (plik_out.fail())
  233.                         {
  234.                             cerr << "Blad zapisu do pliku " << endl;
  235.                             exit(EXIT_FAILURE);
  236.                         }
  237.                         plik_out.clear();
  238.                         plik.clear();
  239.                         ile_p = ile;
  240.                     }
  241.                     else
  242.                     {
  243.                         cerr << "Blad otwarcia pliku" << endl;
  244.                     }
  245.                     plik_out.close();
  246.                 }
  247.             }
  248.             if (wybor == '8')
  249.                 break;
  250.         }
  251.     }
  252.     else
  253.     {
  254.         cerr << "Nie mozna otworzyc pliku" << endl;
  255.         exit(EXIT_FAILURE);
  256.     }
  257.     cout << "\n KONIEC \n";
  258.     plik.close();
  259.     return 0;
  260.    
  261. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement