Noizz00

Untitled

Jun 17th, 2022 (edited)
27
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstdlib>
  4. #include <conio.h>
  5. #include <cstring>
  6.  
  7. using namespace std;
  8.  
  9. int ile, *nr_tel;         // 'ile' przechowuje ilosc zestawow danych w pliku (patrz case '4', odczyt danych), *nr_tel przechowuje tablice zawierajaca numery telefonu
  10. char wybor;               // 'wybor' przechowuje znak wyboru (dostepne '1', '2', '3', '4' i '5')
  11. fstream plik;             // Deklaracja zmiennej do operacji na pliku tekstowym
  12. string *imie, *nazwisko;  // Deklaracja wskaznikow przechowujacych imiona i nazwiska
  13.  
  14. void zapis(fstream p, string *im, string *na, int *nt) // Procedura przeprowadzajaca zapis do pliku tekstowego (p --> plik, *im --> imie, *na --> nazwisko, *nt --> nr_tel, dostęp przez referencje)
  15. {
  16.     int ile_v;                                        // 'ile_v' przechowuje ilosc zestawow danych, ktore chcemy wprowadzic
  17.     system("cls");
  18.     cout << "Ile zestawow danych zawierajacych: ";    // Wyswietlenie informacji o strukturze zestawow danych, prosba o wprowadzenie ich ilosci
  19.     cout << endl << "imie osoby,";                    // --||--
  20.     cout << endl << "nazwisko osoby,";                // --||--
  21.     cout << endl << "numer telefonu osoby,";          // --||--
  22.     cout << endl << "chcesz podac?";                  // --||--
  23.     cin >> ile_v;                                     // Zapisanie do zmiennej 'ile_v' ilosci zestawow danych
  24.     system("cls");                                    // Wyczyszczenie zawartosci ekranu
  25.     im = new string [ile_v];                          // Utworzenie tablicy do imion
  26.     na = new string [ile_v];                          // Utworzenie tablicy do nazwisk
  27.     nt = new int [ile_v];                             // Utworzenie tablicy do numerow telefonow
  28.     for(int i=0; i<ile_v; i++)                        // Podanie danych w petli for
  29.     {
  30.         cout << "Podaj "<<i+1<<". imie: ";            
  31.         cin >> *im;
  32.         cout << "Podaj "<<i+1<<". nazwisko: ";        
  33.         cin >> *na;
  34.         cout << "Podaj "<<i+1<<". numer telefonu: ";  
  35.         cin >> *nt;
  36.         im++; na++; nt++;
  37.         system("cls");                               // Wyczyszczenie ekranu po podaniu danych dla jednego zestawu
  38.     }
  39.     im -= ile_v;                                     // Przywrocenie oryginalnej pozycji wskaznikom
  40.     na -= ile_v;                                     // --||--
  41.     nt -= ile_v;                                     // --||--
  42.     for(int i=0; i<ile_v; i++)                       // Przekazanie danych z tablic do pliku w petli for
  43.     {
  44.         p<<*im<<endl;
  45.         p<<*na<<endl;
  46.         p<<*nt<<endl;
  47.         im++; na++; nt++;
  48.     }
  49.     p.close();                                       // Zamkniecie pliku
  50.     im -= ile_v;                                     // Przywrocenie oryginalnej pozycji wskaznikom
  51.     na -= ile_v;                                     // --||--
  52.     nt -= ile_v;                                     // --||--
  53.     delete [] im; delete [] na; delete [] nt;        // Zwolnienie pamieci
  54. }
  55.  
  56. void wyjscie(fstream p)   // Procedura przeprowadzajaca wyjscie z programu w przypadku braku pliku tekstowego w folderze projektu
  57. {
  58.     cout << "Nie znaleziono istniejacego pliku. Byc moze jeszcze go nie stworzyles, badz usunales go z folderu.";
  59.     p.close();
  60. }
  61.  
  62. int main()
  63. {
  64.     for(;;) // Wyswietlanie w nieskonczonej petli (dopoki uzytkownik nie wybierze opcji '5', wyjscie z programu)
  65.     {
  66.         cout << "Witaj!" << endl;                                        // Menu glowne
  67.         cout << "1. Utworzenie nowego pliku." << endl;
  68.         cout << "2. Zastapienie danych istniejacego pliku." << endl;
  69.         cout << "3. Nadpisanie danych istniejacego pliku." << endl;
  70.         cout << "4. Wyswietlenie danych istniejacego pliku." << endl;
  71.         cout << "5. Wyjscie z programu."<<endl;
  72.         cout << "Co chcesz zrobic? Wybierz wlasciwy numer: ";
  73.         wybor=getch();                                                  // Pobranie znaku z klawiatury
  74.         switch(wybor)
  75.         {
  76.             case '1': // Wykonaj, jezeli uzytkownik chce utworzyc nowy plik
  77.             {
  78.                 plik.open("zestawy_danych.txt", ios::out);
  79.                 zapis(plik, imie, nazwisko, nr_tel);
  80.                 break; // Przerwanie case'a '1'
  81.             }
  82.             case '2': // Wykonaj, jesli uzytkownik chce zastapic dane istniejacego pliku
  83.             {
  84.                 plik.open("zestawy_danych.txt", ios::out);
  85.                 if(plik.good()==false)
  86.                 {
  87.                     wyjscie(plik);
  88.                     break;
  89.                 }
  90.                 zapis(plik, imie, nazwisko, nr_tel);
  91.                 break;
  92.             }
  93.             case '3':  // Wykonaj, jesli uzytkownik chce nadpisac dane
  94.             {
  95.                 plik.open("zestawy_danych.txt", ios::out | ios::app);
  96.                 if(plik.good()==false)
  97.                 {
  98.                     wyjscie(plik);
  99.                     break;
  100.                 }
  101.                 zapis(plik, imie, nazwisko, nr_tel);
  102.                 break;
  103.             }
  104.             case '4':  // Wykonaj, jesli uzytkownik chce odczytac dane z pliku
  105.             {
  106.                 plik.open("zestawy_danych.txt", ios::in); // Otwarcie pliku w trybie odczytu
  107.                 if(plik.good()==false) // Sprawdz, czy plik istnieje
  108.                 {
  109.                     wyjscie(plik);
  110.                     break;
  111.                 }
  112.                 int ilosc_linii; // Zmienna przechowujaca ilosc linii w pliku tekstowym
  113.                 string linia; // Zmienna przechowująca zawartość linii
  114.                 while(getline(plik, linia)) // Dokonaj inkrementacji zmiennej ilosc_linii, dopoki w pliku są linie
  115.                 {
  116.                     ilosc_linii++;
  117.                 }
  118.                 if(ilosc_linii%3!=0)
  119.                 {
  120.                     cout << "Blad odczytu zestawow danych. Najprawdopodobniej wprowadzono recznie niepelne zestawy danych.";
  121.                     plik.close();
  122.                     break;
  123.                 }
  124.                 ile=ilosc_linii/3;            // Zmienna okreslajaca wielkosc tablicy, czyli ilosc zestawow (jeden zestaw to trzy linie, zatem dzielimy ilosc linii przez 3)
  125.                 imie = new string [ile];      // Utworzenie tablicy do imion
  126.                 nazwisko = new string [ile];  // Utworzenie tablicy do nazwisk
  127.                 nr_tel = new int [ile];       // Utworzenie tablicy do numerow telefonow
  128.                 int nr_linii=1;               // Zmienna przechowujaca numer linii
  129.                 plik.close();                 // Zamkniecie pliku
  130.                 plik.open("zestawy_danych.txt", ios::in);
  131.                 while(getline(plik, linia))
  132.                 {
  133.                     switch(nr_linii)
  134.                     {
  135.                         case 1: *imie=linia; break;
  136.                         case 2: *nazwisko=linia; break;
  137.                         case 3: *nr_tel=atoi(linia.c_str()); break;
  138.                     }
  139.                     if(nr_linii==3) {nr_linii=0; imie++; nazwisko++; nr_tel++;} // Jesli odczytano linie trzecia, przyjmij numer kolejnej linii za 1
  140.                     nr_linii++;                                                 // i przestaw wskazniki o jedna 'szufladke' do przodu
  141.                 }
  142.                 imie-=ile;      //
  143.                 nazwisko-=ile;  //   Przestaw wskazniki do ich oryginalnej pozycji
  144.                 nr_tel-=ile;    //
  145.                 for(int i=0; i<ile; i++) // Wyswietl kolejno imie, nazwisko i numer telefonu i przestaw wskazniki do przodu
  146.                 {
  147.                     cout << endl << *imie;
  148.                     cout << endl << *nazwisko;
  149.                     cout << endl << *nr_tel;
  150.                     imie++; nazwisko++; nr_tel++;
  151.                 }
  152.                 plik.close();  // Zamknij plik
  153.                 imie-=ile;      //
  154.                 nazwisko-=ile;  //   Przestaw wskazniki do ich oryginalnej pozycji
  155.                 nr_tel-=ile;    //
  156.                 delete [] imie; delete [] nazwisko; delete [] nr_tel;   // Zwolnij pamiec
  157.             break;
  158.             }
  159.             case '5': exit(0); break;
  160.             default: cout <<endl<< "Nie ma takiej opcji w menu."; break;
  161.         }
  162.         if((wybor=='1')||(wybor=='2')||(wybor=='3')) cin.ignore();
  163.         cout << "Kliknij ENTER, aby przejsc dalej.";
  164.         getchar();
  165.         system("cls");
  166.     }
  167.     return 0;
  168. }
RAW Paste Data Copied