Advertisement
Mikeellee

gola lista

Dec 11th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <conio.h>
  4.  
  5. using namespace std;
  6.  
  7.  
  8.  
  9. struct osoba {
  10.     int id;
  11.     string imie;
  12.     string nazwisko;
  13.     int wiek;
  14.     osoba *nastepna;    // wskaźnik na następny element
  15.     osoba();            // konstruktor
  16. };
  17.  
  18. osoba::osoba() {
  19.     nastepna = 0;       // konstruktor
  20. }
  21.  
  22. struct lista {
  23.     osoba *pierwsza;  // wskaźnik na początek listy
  24.     void dodaj_osobe ( string imie, string nazwisko, int wiek);
  25.     void usun_osobe (int nr);
  26.     void wyswietl_liste ();
  27.     lista();
  28. };
  29.  
  30. lista::lista() {
  31.     pierwsza = 0;       // konstruktor
  32. }
  33. void lista::dodaj_osobe(string imie, string nazwisko, int wiek)
  34. {
  35.     osoba *nowa = new osoba;    // tworzy nowy element listy
  36.  
  37.     // wypełniamy naszymi danymi
  38.     nowa->imie = imie;
  39.     nowa->nazwisko = nazwisko;
  40.     nowa->wiek = wiek;
  41.  
  42.     if (pierwsza==0) // sprawdzamy czy to pierwszy element listy
  43.     {
  44.         // jeżeli tak to nowy element jest teraz początkiem listy
  45.         pierwsza = nowa;
  46.     }
  47.  
  48.     else
  49.     {
  50.         // w przeciwnym wypadku wędrujemy na koniec listy
  51.         osoba *temp = pierwsza;
  52.  
  53.         while (temp->nastepna)
  54.         {
  55.             // znajdujemy wskaźnik na ostatni element
  56.             temp = temp->nastepna;
  57.         }
  58.  
  59.         temp->nastepna = nowa;  // ostatni element wskazuje na nasz nowy
  60.         nowa->nastepna = 0;     // ostatni nie wskazuje na nic
  61.     }
  62. }
  63.  
  64. void lista::wyswietl_liste()
  65. {
  66.     // wskaznik na pierszy element listy
  67.     osoba *temp = pierwsza;
  68.     int a;
  69.     a=1;
  70.     // przewijamy wskazniki na nastepne elementy
  71.     while (temp)
  72.     {
  73.  
  74.  
  75.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
  76.             cout <<"id: ";
  77.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
  78.             cout<< a;
  79.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
  80.             cout<< " imie: ";
  81.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
  82.             cout<< temp->imie;
  83.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
  84.             cout<< " nazwisko: ";
  85.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
  86.             cout<< temp->nazwisko;
  87.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
  88.             cout<<" wiek: ";
  89.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
  90.             cout<< temp->wiek<< endl;
  91.         temp=temp->nastepna;
  92.         a++;
  93.     }
  94. }
  95.  
  96. void lista::usun_osobe (int nr)
  97. {
  98.     // jezeli to pierwszy element listy
  99.     if (nr==1)
  100.     {
  101.         osoba *temp = pierwsza;
  102.         pierwsza = temp->nastepna; //poczatek listy, 1 el. wskazuje na 2 el. itd..
  103.     }
  104.  
  105.     // jeżeli nie jest to pierwszy element
  106.     if (nr>=2)
  107.     {
  108.         int j = 1;
  109.  
  110.         // do usuniecia srodkowego elemetnu potrzebujemy wskaznika na osobe n-1
  111.         // wskaznik *temp bedzie wskaznikiem na osobe poprzedzajaca osobe usuwana
  112.         osoba *temp = pierwsza;
  113.  
  114.         while (temp)
  115.         {
  116.             // sprawdzamy czy wskaznik jest na osobie n-1 niz usuwana
  117.             if ((j+1)==nr) break;
  118.  
  119.             // jezeli nie to przewijamy petle do przodu
  120.             temp = temp->nastepna;
  121.             j++;
  122.         }
  123.  
  124.         // wskaznik *temp wskazuje teraz na osobe n-1
  125.         // nadpisujemy wkaznik osoby n na osobe n+1
  126.         // bezpowrotnie tracimy osobe n-ta
  127.  
  128.         // dodatkowo sprawdzamy czy aby nie jest to ostatni element
  129.         // wtedy nalezy wyzerowac ostatni wskaznik
  130.         if (temp->nastepna->nastepna==0)
  131.             temp->nastepna = 0;
  132.  
  133.         // jezeli nie byl to ostatni element
  134.         else
  135.             temp->nastepna = temp->nastepna->nastepna;
  136.     }
  137. }
  138. int main()
  139. {
  140.     lista *baza = new lista;    //tworzymy liste
  141.     int wybor=-4;
  142.     int id,wiek;
  143.     string imie, nazwisko;
  144.  
  145.     while (true)
  146.     {
  147.         system("cls");
  148.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
  149.         cout<<"================================="<<endl<<"Osoby w liscie"<<endl<<endl;
  150.         baza->wyswietl_liste();
  151.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
  152.         cout<<"================================="<<endl;
  153.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
  154.  
  155.         cout<<"Menu"<<endl;
  156.         cout<<"1 - dodaj osobe"<<endl;
  157.         cout<<"2 - pokaz wybrana osobe"<<endl;
  158.         cout<<"3 - pokaz 2wybrana osobe"<<endl;
  159.         cout<<"4 - usun wybrana osobe"<<endl;
  160.  
  161.  
  162.         cout<<"9 - exit"<<endl;
  163.  
  164.         cin>>wybor;
  165.         switch(wybor)
  166.         {
  167.             case 1:
  168.  
  169.                 cout<<"Podaj imie: ";
  170.                 cin>>imie;
  171.                 cout<<"Podaj nazwisko: ";
  172.                 cin>>nazwisko;
  173.                 cout<<"Podaj wiek: ";
  174.                 cin>>wiek;
  175.                 baza->dodaj_osobe(imie,nazwisko,wiek);
  176.                 break;
  177.             case 2:
  178.                 cout<<"Podaj id osoby: ";
  179.                 cin>>id;
  180.                 cout << baza->pierwsza->imie << endl;
  181.                 cout << baza->pierwsza->nazwisko << endl;
  182.                 cout << baza->pierwsza->id << endl;
  183.                 cout << baza->pierwsza->wiek << endl;
  184.                 getch();getch();
  185.                 break;
  186.             case 3:
  187.                 cout<<"Podaj id osoby: ";
  188.                 cin>>id;
  189.                 cout << baza->pierwsza->nastepna->imie << endl;
  190.                 cout << baza->pierwsza->nastepna->nazwisko << endl;
  191.                 cout << baza->pierwsza->nastepna->id << endl;
  192.                 cout << baza->pierwsza->nastepna->wiek << endl;
  193.                 getch();getch();
  194.                 break;
  195.             case 4:
  196.                 cout<<"Podaj id osoby do usuniecia: ";
  197.                 cin>>id;
  198.                 baza->usun_osobe(id);
  199.                 break;
  200.  
  201.  
  202.  
  203.             case 9:
  204.  
  205.                 delete (baza);
  206.                 exit(0);
  207.                 break;
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.         }
  215.     }
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.     return 0;
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement