Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <windows.h>
- #include <conio.h>
- using namespace std;
- struct osoba {
- int id;
- string imie;
- string nazwisko;
- int wiek;
- osoba *nastepna; // wskaźnik na następny element
- osoba(); // konstruktor
- };
- osoba::osoba() {
- nastepna = 0; // konstruktor
- }
- struct lista {
- osoba *pierwsza; // wskaźnik na początek listy
- void dodaj_osobe ( string imie, string nazwisko, int wiek);
- void usun_osobe (int nr);
- void wyswietl_liste ();
- lista();
- };
- lista::lista() {
- pierwsza = 0; // konstruktor
- }
- void lista::dodaj_osobe(string imie, string nazwisko, int wiek)
- {
- osoba *nowa = new osoba; // tworzy nowy element listy
- // wypełniamy naszymi danymi
- nowa->imie = imie;
- nowa->nazwisko = nazwisko;
- nowa->wiek = wiek;
- if (pierwsza==0) // sprawdzamy czy to pierwszy element listy
- {
- // jeżeli tak to nowy element jest teraz początkiem listy
- pierwsza = nowa;
- }
- else
- {
- // w przeciwnym wypadku wędrujemy na koniec listy
- osoba *temp = pierwsza;
- while (temp->nastepna)
- {
- // znajdujemy wskaźnik na ostatni element
- temp = temp->nastepna;
- }
- temp->nastepna = nowa; // ostatni element wskazuje na nasz nowy
- nowa->nastepna = 0; // ostatni nie wskazuje na nic
- }
- }
- void lista::wyswietl_liste()
- {
- // wskaznik na pierszy element listy
- osoba *temp = pierwsza;
- int a;
- a=1;
- // przewijamy wskazniki na nastepne elementy
- while (temp)
- {
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
- cout <<"id: ";
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
- cout<< a;
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
- cout<< " imie: ";
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
- cout<< temp->imie;
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
- cout<< " nazwisko: ";
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
- cout<< temp->nazwisko;
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
- cout<<" wiek: ";
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
- cout<< temp->wiek<< endl;
- temp=temp->nastepna;
- a++;
- }
- }
- void lista::usun_osobe (int nr)
- {
- // jezeli to pierwszy element listy
- if (nr==1)
- {
- osoba *temp = pierwsza;
- pierwsza = temp->nastepna; //poczatek listy, 1 el. wskazuje na 2 el. itd..
- }
- // jeżeli nie jest to pierwszy element
- if (nr>=2)
- {
- int j = 1;
- // do usuniecia srodkowego elemetnu potrzebujemy wskaznika na osobe n-1
- // wskaznik *temp bedzie wskaznikiem na osobe poprzedzajaca osobe usuwana
- osoba *temp = pierwsza;
- while (temp)
- {
- // sprawdzamy czy wskaznik jest na osobie n-1 niz usuwana
- if ((j+1)==nr) break;
- // jezeli nie to przewijamy petle do przodu
- temp = temp->nastepna;
- j++;
- }
- // wskaznik *temp wskazuje teraz na osobe n-1
- // nadpisujemy wkaznik osoby n na osobe n+1
- // bezpowrotnie tracimy osobe n-ta
- // dodatkowo sprawdzamy czy aby nie jest to ostatni element
- // wtedy nalezy wyzerowac ostatni wskaznik
- if (temp->nastepna->nastepna==0)
- temp->nastepna = 0;
- // jezeli nie byl to ostatni element
- else
- temp->nastepna = temp->nastepna->nastepna;
- }
- }
- int main()
- {
- lista *baza = new lista; //tworzymy liste
- int wybor=-4;
- int id,wiek;
- string imie, nazwisko;
- while (true)
- {
- system("cls");
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
- cout<<"================================="<<endl<<"Osoby w liscie"<<endl<<endl;
- baza->wyswietl_liste();
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
- cout<<"================================="<<endl;
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
- cout<<"Menu"<<endl;
- cout<<"1 - dodaj osobe"<<endl;
- cout<<"2 - pokaz wybrana osobe"<<endl;
- cout<<"3 - pokaz 2wybrana osobe"<<endl;
- cout<<"4 - usun wybrana osobe"<<endl;
- cout<<"9 - exit"<<endl;
- cin>>wybor;
- switch(wybor)
- {
- case 1:
- cout<<"Podaj imie: ";
- cin>>imie;
- cout<<"Podaj nazwisko: ";
- cin>>nazwisko;
- cout<<"Podaj wiek: ";
- cin>>wiek;
- baza->dodaj_osobe(imie,nazwisko,wiek);
- break;
- case 2:
- cout<<"Podaj id osoby: ";
- cin>>id;
- cout << baza->pierwsza->imie << endl;
- cout << baza->pierwsza->nazwisko << endl;
- cout << baza->pierwsza->id << endl;
- cout << baza->pierwsza->wiek << endl;
- getch();getch();
- break;
- case 3:
- cout<<"Podaj id osoby: ";
- cin>>id;
- cout << baza->pierwsza->nastepna->imie << endl;
- cout << baza->pierwsza->nastepna->nazwisko << endl;
- cout << baza->pierwsza->nastepna->id << endl;
- cout << baza->pierwsza->nastepna->wiek << endl;
- getch();getch();
- break;
- case 4:
- cout<<"Podaj id osoby do usuniecia: ";
- cin>>id;
- baza->usun_osobe(id);
- break;
- case 9:
- delete (baza);
- exit(0);
- break;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement