Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cstdlib>
- #include <conio.h>
- #include <cstring>
- using namespace std;
- int ile, *nr_tel; // 'ile' przechowuje ilosc zestawow danych w pliku (patrz case '4', odczyt danych), *nr_tel przechowuje tablice zawierajaca numery telefonu
- char wybor; // 'wybor' przechowuje znak wyboru (dostepne '1', '2', '3', '4' i '5')
- fstream plik; // Deklaracja zmiennej do operacji na pliku tekstowym
- string *imie, *nazwisko; // Deklaracja wskaznikow przechowujacych imiona i nazwiska
- 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)
- {
- int ile_v; // 'ile_v' przechowuje ilosc zestawow danych, ktore chcemy wprowadzic
- system("cls");
- cout << "Ile zestawow danych zawierajacych: "; // Wyswietlenie informacji o strukturze zestawow danych, prosba o wprowadzenie ich ilosci
- cout << endl << "imie osoby,"; // --||--
- cout << endl << "nazwisko osoby,"; // --||--
- cout << endl << "numer telefonu osoby,"; // --||--
- cout << endl << "chcesz podac?"; // --||--
- cin >> ile_v; // Zapisanie do zmiennej 'ile_v' ilosci zestawow danych
- system("cls"); // Wyczyszczenie zawartosci ekranu
- im = new string [ile_v]; // Utworzenie tablicy do imion
- na = new string [ile_v]; // Utworzenie tablicy do nazwisk
- nt = new int [ile_v]; // Utworzenie tablicy do numerow telefonow
- for(int i=0; i<ile_v; i++) // Podanie danych w petli for
- {
- cout << "Podaj "<<i+1<<". imie: ";
- cin >> *im;
- cout << "Podaj "<<i+1<<". nazwisko: ";
- cin >> *na;
- cout << "Podaj "<<i+1<<". numer telefonu: ";
- cin >> *nt;
- im++; na++; nt++;
- system("cls"); // Wyczyszczenie ekranu po podaniu danych dla jednego zestawu
- }
- im -= ile_v; // Przywrocenie oryginalnej pozycji wskaznikom
- na -= ile_v; // --||--
- nt -= ile_v; // --||--
- for(int i=0; i<ile_v; i++) // Przekazanie danych z tablic do pliku w petli for
- {
- p<<*im<<endl;
- p<<*na<<endl;
- p<<*nt<<endl;
- im++; na++; nt++;
- }
- p.close(); // Zamkniecie pliku
- im -= ile_v; // Przywrocenie oryginalnej pozycji wskaznikom
- na -= ile_v; // --||--
- nt -= ile_v; // --||--
- delete [] im; delete [] na; delete [] nt; // Zwolnienie pamieci
- }
- void wyjscie(fstream p) // Procedura przeprowadzajaca wyjscie z programu w przypadku braku pliku tekstowego w folderze projektu
- {
- cout << "Nie znaleziono istniejacego pliku. Byc moze jeszcze go nie stworzyles, badz usunales go z folderu.";
- p.close();
- }
- int main()
- {
- for(;;) // Wyswietlanie w nieskonczonej petli (dopoki uzytkownik nie wybierze opcji '5', wyjscie z programu)
- {
- cout << "Witaj!" << endl; // Menu glowne
- cout << "1. Utworzenie nowego pliku." << endl;
- cout << "2. Zastapienie danych istniejacego pliku." << endl;
- cout << "3. Nadpisanie danych istniejacego pliku." << endl;
- cout << "4. Wyswietlenie danych istniejacego pliku." << endl;
- cout << "5. Wyjscie z programu."<<endl;
- cout << "Co chcesz zrobic? Wybierz wlasciwy numer: ";
- wybor=getch(); // Pobranie znaku z klawiatury
- switch(wybor)
- {
- case '1': // Wykonaj, jezeli uzytkownik chce utworzyc nowy plik
- {
- plik.open("zestawy_danych.txt", ios::out);
- zapis(plik, imie, nazwisko, nr_tel);
- break; // Przerwanie case'a '1'
- }
- case '2': // Wykonaj, jesli uzytkownik chce zastapic dane istniejacego pliku
- {
- plik.open("zestawy_danych.txt", ios::out);
- if(plik.good()==false)
- {
- wyjscie(plik);
- break;
- }
- zapis(plik, imie, nazwisko, nr_tel);
- break;
- }
- case '3': // Wykonaj, jesli uzytkownik chce nadpisac dane
- {
- plik.open("zestawy_danych.txt", ios::out | ios::app);
- if(plik.good()==false)
- {
- wyjscie(plik);
- break;
- }
- zapis(plik, imie, nazwisko, nr_tel);
- break;
- }
- case '4': // Wykonaj, jesli uzytkownik chce odczytac dane z pliku
- {
- plik.open("zestawy_danych.txt", ios::in); // Otwarcie pliku w trybie odczytu
- if(plik.good()==false) // Sprawdz, czy plik istnieje
- {
- wyjscie(plik);
- break;
- }
- int ilosc_linii; // Zmienna przechowujaca ilosc linii w pliku tekstowym
- string linia; // Zmienna przechowująca zawartość linii
- while(getline(plik, linia)) // Dokonaj inkrementacji zmiennej ilosc_linii, dopoki w pliku są linie
- {
- ilosc_linii++;
- }
- if(ilosc_linii%3!=0)
- {
- cout << "Blad odczytu zestawow danych. Najprawdopodobniej wprowadzono recznie niepelne zestawy danych.";
- plik.close();
- break;
- }
- ile=ilosc_linii/3; // Zmienna okreslajaca wielkosc tablicy, czyli ilosc zestawow (jeden zestaw to trzy linie, zatem dzielimy ilosc linii przez 3)
- imie = new string [ile]; // Utworzenie tablicy do imion
- nazwisko = new string [ile]; // Utworzenie tablicy do nazwisk
- nr_tel = new int [ile]; // Utworzenie tablicy do numerow telefonow
- int nr_linii=1; // Zmienna przechowujaca numer linii
- plik.close(); // Zamkniecie pliku
- plik.open("zestawy_danych.txt", ios::in);
- while(getline(plik, linia))
- {
- switch(nr_linii)
- {
- case 1: *imie=linia; break;
- case 2: *nazwisko=linia; break;
- case 3: *nr_tel=atoi(linia.c_str()); break;
- }
- if(nr_linii==3) {nr_linii=0; imie++; nazwisko++; nr_tel++;} // Jesli odczytano linie trzecia, przyjmij numer kolejnej linii za 1
- nr_linii++; // i przestaw wskazniki o jedna 'szufladke' do przodu
- }
- imie-=ile; //
- nazwisko-=ile; // Przestaw wskazniki do ich oryginalnej pozycji
- nr_tel-=ile; //
- for(int i=0; i<ile; i++) // Wyswietl kolejno imie, nazwisko i numer telefonu i przestaw wskazniki do przodu
- {
- cout << endl << *imie;
- cout << endl << *nazwisko;
- cout << endl << *nr_tel;
- imie++; nazwisko++; nr_tel++;
- }
- plik.close(); // Zamknij plik
- imie-=ile; //
- nazwisko-=ile; // Przestaw wskazniki do ich oryginalnej pozycji
- nr_tel-=ile; //
- delete [] imie; delete [] nazwisko; delete [] nr_tel; // Zwolnij pamiec
- break;
- }
- case '5': exit(0); break;
- default: cout <<endl<< "Nie ma takiej opcji w menu."; break;
- }
- if((wybor=='1')||(wybor=='2')||(wybor=='3')) cin.ignore();
- cout << "Kliknij ENTER, aby przejsc dalej.";
- getchar();
- system("cls");
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment