Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- using namespace std;
- struct lista
- {
- string imie;
- string nazwisko;
- string PESEL;
- int wiek;
- };
- struct lista_osob
- {
- lista_osob* nast; // Wskaźnik na górny element listy (gdy elementu nie ma równe 0)
- lista s; // Dane studenta
- lista_osob* pop; // Wskaźnik na dolny element listy (gdy elementu nie ma równe 0)
- };
- void Ustaw(lista_osob& st) { // funkcja ustawiająca elementy listy
- cout << "=========================================================\n";
- cout << "Podaj nazwisko: ";
- cin >> st.s.nazwisko;
- cout << "Podaj imie: ";
- cin >> st.s.imie;
- cout << "Podaj pesel: ";
- cin >> st.s.PESEL;
- cout << "Podaj wiek: ";
- cin >> st.s.wiek;
- cout << "=========================================================\n";
- }
- void Dodaj(lista_osob** s /*pobiera wskaźnik do adresu pierwszego elementu listy dwukierunkowej*/) {
- lista_osob* t = *s; // tymczasowa zmienna pomocnicza, do której przypisany zostanie adres pierwszego elementu listy
- if (*s) { // jeżeli adres pierwszego elementu listy nie jest równy 0 to
- lista_osob* st = new lista_osob; // utwórz nowy element listy
- Ustaw(*st); // ustaw jego wartości
- while (t->pop) { // tutaj znajdowanie ostatniego elementu listy
- t = t->pop;
- }
- st->nast = t; // przypisanie polu s_up nowego elementu listy adresu ostatniego elementu listy
- st->pop = 0; // przypisanie polu s_down nowego elementu listy wartości zero (ponieważ stanie się on ostatnim elementem listy)
- t->pop = st; // przypisanie staremu ostatniemu elementowi listy adresu nowego ostatniego elementu listy
- }else { // w przeciwnym przypadku, gdy lista jest pusta to
- *s = new lista_osob; // utwórz nowy element listy
- Ustaw(**s); // ustaw go
- (*s)->nast = NULL; // wyzerowanie adresu wskaźnika s_up
- (*s)->pop = NULL; // wyzerowanie adresu wskaźnika s_down
- }
- }
- void Usun(lista_osob** s/*wskaźnik na adres pierwszego elementu listy*/, string szukane) {
- lista_osob* indx = *s; // tworzę kopię adresu wskazania na pierwszy element listy
- while (true) {
- if (indx->s.nazwisko == szukane) {
- break;
- }
- else {
- indx = indx->pop;
- }
- }
- if (!indx->nast && !indx->pop) { // jeżeli oba wskaźniki s_up i s_down są zerowe to
- delete indx; // usuwam index
- *s = 0; // przypisuję zerowy adres wskazania do listy (lista pusta)
- }
- else if (indx->pop) { // gdy index usuwanego elementu równy 0 to
- *s = (*s)->pop; // przypisanie adresu wskazania na element znajdujący się pod wskaźnikiem s_down
- delete indx; // zwolnienie pamięci
- indx = 0;
- }
- else if (indx->nast && indx->pop) { // gdy dany element listy ma nad i pod sobą elementy listy to
- indx->nast->pop = indx->pop; // przypisywanie adresu dla górnego elementu
- indx->nast->nast = indx->nast; // przypisywanie adresu dla dolnego elementu
- delete indx; // zwalnianie pamięci
- indx = 0;
- }
- else if (!indx->pop) { // gdy element listy nie ma pod sobą żadnego elementu listy to
- indx->nast->pop = 0; // element górny musi mieć przypisany adres zerowy
- delete indx; // zwalniam pamięć
- indx = 0;
- }
- }
- void UsunNazwiska(lista_osob** s/*wskaźnik do adresu pierwszego elementu listy*/, string szukane) {
- lista_osob* temp; // zmienna pomocnicza
- while (*s) { // dopóki s nie wskazuje na zerowy adres pamięci
- temp = (*s)->pop; // przepisywanie pamięci elementu o 1 pozycję niżej niż *s
- if (temp->s.nazwisko == szukane) {
- delete (*s); // zwalnianie pamięci
- *s = temp; // przypisywanie adresu poprzednio zapamiętanej
- }
- else {
- *s = temp; // przypisywanie adresu poprzednio zapamiętanej
- }
- }
- }
- void Wypisz(lista_osob* s) {
- if (s) {
- cout << "=========================================================\n";
- do {
- cout << "nazwisko: " << s->s.nazwisko << endl;
- cout << "imie: " << s->s.imie << endl;
- cout << "pesel: " << s->s.PESEL << endl;
- cout << "wiek: " << s->s.wiek << endl;
- cout << "=========================================================\n";
- s = s->pop;
- } while (s);
- }
- }
- void ZapiszDoPliku(lista_osob* s) {
- fstream plik;
- plik.open("Dane.txt", fstream::out);
- if (s) {
- plik << "=========================================================\n";
- do {
- plik << "nazwisko: " << s->s.nazwisko << endl;
- plik << "imie: " << s->s.imie << endl;
- plik << "pesel: " << s->s.PESEL << endl;
- plik << "wiek: " << s->s.wiek << endl;
- plik << "======================================================\n";
- s = s->pop;
- } while (s);
- }
- plik.close();
- }
- int main()
- {
- char decyzja;
- int wybor;
- lista_osob* s = 0;
- string nazwisko;
- do {
- cout << "Menu:" << endl;
- cout << "1: Dodaj element" << endl;
- cout << "2: Usun element o podanym nazwisku" << endl;
- cout << "3: Usun wszystkie elementy o podanym nazwisku" << endl;
- cout << "4: Wyswietl liste" << endl;
- cout << "5: Edytuj wybrany element" << endl;
- cout << "6: Zapisz elementy listy do pliku" << endl;
- cout << "7: Wyszukaj element listy" << endl;
- cout << "Wybierz: ";
- cin >> wybor;
- switch (wybor) {
- case 1:
- Dodaj(&s);
- break;
- case 2:
- cout << "Podaj nazwisko do usuniecia: ";
- cin >> nazwisko;
- Usun(&s, nazwisko);
- break;
- case 3:
- cout << "W trakcie budowy, zapraszamy później";
- /*
- cout << "Podaj nazwisko do usuniecia: ";
- cin >> nazwisko;
- UsunNazwiska(&s, nazwisko);
- */
- break;
- case 4:
- Wypisz(s);
- break;
- case 5:
- cout << "W trakcie budowy, zapraszamy później";
- break;
- case 6:
- ZapiszDoPliku(s);
- break;
- case 7:
- cout << "W trakcie budowy, zapraszamy później";
- break;
- default:
- break;
- }
- cout << "Czy wyswietlic menu jeszcze raz? (t/n): ";
- cin >> decyzja;
- } while (decyzja == 't');
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement