Advertisement
Noizz00

Untitled

Jun 17th, 2022
19
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;
  10. char wybor;
  11. fstream plik;
  12. string *imie, *nazwisko;
  13. int *nr_tel;
  14.  
  15. int main()
  16. {
  17.     for(;;)
  18.     {
  19.         // Wyswietlenie menu glownego
  20.         cout << "Witaj!" << endl;
  21.         cout << "1. Utworzenie nowego pliku." << endl;
  22.         cout << "2. Zastapienie danych istniejacego pliku." << endl;
  23.         cout << "3. Nadpisanie danych istniejacego pliku." << endl;
  24.         cout << "4. Wyswietlenie danych istniejacego pliku." << endl;
  25.         cout << "5. Wyjscie z programu."<<endl;
  26.         cout << "Co chcesz zrobic? Wybierz wlasciwy numer: ";
  27.         wybor=getch(); // Pobranie znaku z klawiatury
  28.         switch(wybor)
  29.         {
  30.             case '1': // Wykonaj, jezeli uzytkownik chce utworzyc nowy plik
  31.             {
  32.                 system("cls");
  33.                 cout << "Ile zestawow danych zawierajacych: ";
  34.                 cout << endl << "imie osoby,";
  35.                 cout << endl << "nazwisko osoby,";
  36.                 cout << endl << "numer telefonu osoby,";
  37.                 cout << endl << "chcesz podac?";
  38.                 cin >> ile; // Zapisanie do zmiennej 'ile' ilosci zestawow danych
  39.                 system("cls"); // Wyczyszczenie zawartosci ekranu
  40.                 imie = new string [ile]; // Utworzenie tablicy do imion
  41.                 nazwisko = new string [ile]; // Utworzenie tablicy do nazwisk
  42.                 nr_tel = new int [ile]; // Utworzenie tablicy do numerow telefonow
  43.                 for(int i=0; i<ile; i++) // Podanie danych
  44.                 {
  45.                     cout << "Podaj "<<i+1<<". imie: ";
  46.                     cin >> *imie;
  47.                     cout << "Podaj "<<i+1<<". nazwisko: ";
  48.                     cin >> *nazwisko;
  49.                     cout << "Podaj "<<i+1<<". numer telefonu: ";
  50.                     cin >> *nr_tel;
  51.                     imie++; nazwisko++; nr_tel++;
  52.                     system("cls"); // Wyczyszczenie ekranu po podaniu danych dla jednego zestawu
  53.                 }
  54.                 imie-=ile;
  55.                 nazwisko-=ile;
  56.                 nr_tel-=ile;
  57.                 plik.open("zestawy_danych.txt", ios::out); // Otworzenie pliku tekstowego
  58.                 for(int i=0; i<ile; i++) // Przekazanie danych z tablic do pliku
  59.                 {
  60.                     plik<<*imie<<endl;
  61.                     plik<<*nazwisko<<endl;
  62.                     plik<<*nr_tel<<endl;
  63.                     imie++; nazwisko++; nr_tel++;
  64.                 }
  65.                 plik.close(); // Zamkniecie pliku
  66.                 delete [] imie; delete [] nazwisko; delete [] nr_tel; // Zwolnienie pamieci
  67.                 break; // Przerwanie case'a '1'
  68.             }
  69.             case '2': // Wykonaj, jesli uzytkownik chce zastapic dane istniejacego pliku
  70.             {
  71.                 plik.open("zestawy_danych.txt", ios::out);
  72.                 if(plik.good()==false)
  73.                 {
  74.                     cout << "Nie znaleziono istniejacego pliku. Byc moze jeszcze go nie stworzyles, badz usunales go z folderu.";
  75.                     plik.close();
  76.                     cout <<endl<<"Wcisnij ENTER, aby zakonczyc program.";
  77.                     cin.ignore();
  78.                     getchar();
  79.                     exit(0);
  80.                 }
  81.                 else
  82.                 {
  83.                     system("cls");
  84.                     cout << "Ile zestawow danych zawierajacych: ";
  85.                     cout << endl << "imie osoby,";
  86.                     cout << endl << "nazwisko osoby,";
  87.                     cout << endl << "numer telefonu osoby,";
  88.                     cout << endl << "chcesz podac?";
  89.                     cin >> ile; // Zapisanie do zmiennej 'ile' ilosci zestawow danych
  90.                     system("cls"); // Wyczyszczenie zawartosci ekranu
  91.                     imie = new string [ile]; // Utworzenie tablicy do imion
  92.                     nazwisko = new string [ile]; // Utworzenie tablicy do nazwisk
  93.                     nr_tel = new int [ile]; // Utworzenie tablicy do numerow telefonow
  94.                     for(int i=0; i<ile; i++) // Podanie danych
  95.                     {
  96.                         cout << "Podaj "<<i+1<<". imie: ";
  97.                         cin >> *imie;
  98.                         cout << "Podaj "<<i+1<<". nazwisko: ";
  99.                         cin >> *nazwisko;
  100.                         cout << "Podaj "<<i+1<<". numer telefonu: ";
  101.                         cin >> *nr_tel;
  102.                         imie++; nazwisko++; nr_tel++;
  103.                         system("cls"); // Wyczyszczenie ekranu po podaniu danych dla jednego zestawu
  104.                     }
  105.                     imie-=ile;
  106.                     nazwisko-=ile;
  107.                     nr_tel-=ile;
  108.                     for(int i=0; i<ile; i++) // Przekazanie danych z tablic do pliku
  109.                     {
  110.                         plik<<endl<<*imie<<endl;
  111.                         plik<<*nazwisko<<endl;
  112.                         plik<<*nr_tel<<endl;
  113.                         imie++; nazwisko++; nr_tel++;
  114.                     }
  115.                     plik.close(); // Zamkniecie pliku
  116.                     delete [] imie; delete [] nazwisko; delete [] nr_tel; // Zwolnienie pamieci
  117.                 }
  118.                 break;
  119.             }
  120.             case '3':  // Wykonaj, jesli uzytkownik chce nadpisac dane
  121.             {
  122.                 plik.open("zestawy_danych.txt", ios::out | ios::app);
  123.                 if(plik.good()==false)
  124.                 {
  125.                     cout << "Nie znaleziono istniejacego pliku. Byc moze jeszcze go nie stworzyles, badz usunales go z folderu.";
  126.                     plik.close();
  127.                     cout <<endl<<"Wcisnij ENTER, aby zakonczyc program.";
  128.                     cin.ignore();
  129.                     getchar();
  130.                     exit(0);
  131.                 }
  132.                 else
  133.                 {
  134.                     system("cls");
  135.                     cout << "Ile zestawow danych zawierajacych: ";
  136.                     cout << endl << "imie osoby,";
  137.                     cout << endl << "nazwisko osoby,";
  138.                     cout << endl << "numer telefonu osoby,";
  139.                     cout << endl << "chcesz dodac do istniejacego pliku?";
  140.                     cin >> ile; // Zapisanie do zmiennej 'ile' ilosci zestawow danych
  141.                     system("cls"); // Wyczyszczenie zawartosci ekranu
  142.                     imie = new string [ile]; // Utworzenie tablicy do imion
  143.                     nazwisko = new string [ile]; // Utworzenie tablicy do nazwisk
  144.                     nr_tel = new int [ile]; // Utworzenie tablicy do numerow telefonow
  145.                     for(int i=0; i<ile; i++) // Podanie danych
  146.                     {
  147.                         cout << "Podaj "<<i+1<<". imie: ";
  148.                         cin >> *imie;
  149.                         cout << "Podaj "<<i+1<<". nazwisko: ";
  150.                         cin >> *nazwisko;
  151.                         cout << "Podaj "<<i+1<<". numer telefonu: ";
  152.                         cin >> *nr_tel;
  153.                         imie++; nazwisko++; nr_tel++;
  154.                         system("cls"); // Wyczyszczenie ekranu po podaniu danych dla jednego zestawu
  155.                     }
  156.                     imie-=ile;
  157.                     nazwisko-=ile;
  158.                     nr_tel-=ile;
  159.                     for(int i=0; i<ile; i++) // Przekazanie danych z tablic do pliku
  160.                     {
  161.                         plik<<*imie<<endl;
  162.                         plik<<*nazwisko<<endl;
  163.                         plik<<*nr_tel<<endl;
  164.                         imie++; nazwisko++; nr_tel++;
  165.                     }
  166.                     plik.close(); // Zamkniecie pliku
  167.                     delete [] imie; delete [] nazwisko; delete [] nr_tel; // Zwolnienie pamieci
  168.                 }
  169.                 break;
  170.             }
  171.             case '4':  // Wykonaj, jesli uzytkownik chce odczytac dane z pliku
  172.             {
  173.                 plik.open("zestawy_danych.txt", ios::in); // Otwarcie pliku w trybie odczytu
  174.                 if(plik.good()==false) // Sprawdz, czy plik istnieje
  175.                 {
  176.                     cout << "Nie znaleziono istniejacego pliku. Byc moze jeszcze go nie stworzyles, badz usunales go z folderu.";
  177.                     plik.close();
  178.                     cout <<endl<<"Wcisnij ENTER, aby zakonczyc program.";
  179.                     cin.ignore();
  180.                     getchar();
  181.                     exit(0);  // Wyjdz z programu
  182.                 }
  183.                 else  // Wykonaj, jesli plik istnieje
  184.                 {
  185.                     int ilosc_linii; // Zmienna przechowujaca ilosc linii w pliku tekstowym
  186.                     string linia; // Zmienna przechowująca zawartość linii
  187.                     while(getline(plik, linia)) // Dokonaj inkrementacji zmiennej ilosc_linii, dopoki w pliku są linie
  188.                     {
  189.                         ilosc_linii++;
  190.                     }
  191.                     ile=ilosc_linii/3;  // Zmienna okreslajaca wielkosc tablicy, czyli ilosc zestawow (jeden zestaw to trzy linie, zatem dzielimy ilosc linii przez 3)
  192.                     imie = new string [ile]; // Utworzenie tablicy do imion
  193.                     nazwisko = new string [ile]; // Utworzenie tablicy do nazwisk
  194.                     nr_tel = new int [ile]; // Utworzenie tablicy do numerow telefonow
  195.                     int nr_linii=1; // Zmienna przechowujaca numer linii
  196.                     plik.close();
  197.                     plik.open("zestawy_danych.txt", ios::in);
  198.                     while(getline(plik, linia))
  199.                     {
  200.                         switch(nr_linii)
  201.                         {
  202.                             case 1: *imie=linia; break;
  203.                             case 2: *nazwisko=linia; break;
  204.                             case 3: *nr_tel=atoi(linia.c_str()); break;
  205.                         }
  206.                         if(nr_linii==3) {nr_linii=0; imie++; nazwisko++; nr_tel++;} // Jesli odczytano linie trzecia, przyjmij numer kolejnej linii za 1
  207.                         nr_linii++;                                                 // i przestaw wskazniki o jedna 'szufladke' do przodu
  208.                     }
  209.                     imie-=ile;      //
  210.                     nazwisko-=ile;  //   Przestaw wskazniki do ich oryginalnej pozycji
  211.                     nr_tel-=ile;    //
  212.                     for(int i=0; i<ile; i++) // Wyswietl kolejno imie, nazwisko i numer telefonu i przestaw wskazniki do przodu
  213.                     {
  214.                         cout << endl << *imie;
  215.                         cout << endl << *nazwisko;
  216.                         cout << endl << *nr_tel;
  217.                         imie++; nazwisko++; nr_tel++;
  218.                     }
  219.                     plik.close();  // Zamknij plik
  220.                     delete [] imie; delete [] nazwisko; delete [] nr_tel;   // Zwolnij pamiec
  221.                 }
  222.                 break;
  223.             }
  224.             case '5': exit(0); break;
  225.             default: cout <<endl<< "Nie ma takiej opcji w menu."; break;
  226.         }
  227.         cin.ignore();
  228.         cout << "Kliknij ENTER, aby przejsc dalej.";
  229.         getchar();
  230.         system("cls");
  231.     }
  232.     return 0;
  233. }
Advertisement
RAW Paste Data Copied
Advertisement