Advertisement
Guest User

Untitled

a guest
Jun 18th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.36 KB | None | 0 0
  1. #pragma warning(disable : 4996)  
  2. #include "stdafx.h"
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <stdio.h>
  6.  
  7.  
  8.  
  9. struct Osoba
  10. {
  11.     char imie[20];
  12.     char nazwisko[20];
  13.     int wiek;
  14.     char plec;
  15.     struct Osoba *next;
  16.     struct Osoba *prev;
  17. };
  18.  
  19. void dodajElementNaKoniec(Osoba *wsk)
  20. {
  21.     Osoba *nowyElement;
  22.     while (wsk->next != NULL)
  23.     {
  24.         wsk = wsk->next;
  25.     }
  26.  
  27.     nowyElement = (Osoba *)malloc(sizeof(Osoba));
  28.  
  29.     printf("Podaj imie dodanej osoby: ");
  30.     scanf("%s", &nowyElement->imie);
  31.     printf("Podaj nazwisko dodanej osoby: ");
  32.     scanf("%s", &nowyElement->nazwisko);
  33.     printf("Podaj wiek dodanej osoby: ");
  34.     scanf("%d", &nowyElement->wiek);
  35.     printf("Podaj plec dodanej osoby(M/K): ");
  36.     scanf("%s", &nowyElement->plec);
  37.     nowyElement->next = NULL;
  38.     nowyElement->prev = wsk;
  39.     wsk->next = nowyElement;
  40.  
  41.     printf("\nPomyslnie dodano nowa osobe na koniec listy");
  42.     getchar();
  43. }
  44.  
  45. void wypiszListe(Osoba *wsk)
  46. {
  47.     printf("TWOJA LISTA: \n");
  48.     wsk = wsk->next;
  49.     while (wsk->next != NULL)
  50.     {
  51.         printf("\n%s\n", wsk->imie);
  52.         printf("%s\n", wsk->nazwisko);
  53.         printf("%d\n", wsk->wiek);
  54.         printf("%c\n", wsk->plec);
  55.         wsk = wsk->next;
  56.     }
  57.  
  58.     printf("\n%s\n", wsk->imie);
  59.     printf("%s\n", wsk->nazwisko);
  60.     printf("%d\n", wsk->wiek);
  61.     printf("%c\n", wsk->plec);
  62.  
  63.     getchar();
  64. }
  65.  
  66. void wyczyscListe(struct Osoba *wsk) {
  67.     Osoba *nast = nullptr;
  68.  
  69.     wsk = wsk->next;
  70.     while (wsk->next != NULL)
  71.     {
  72.         nast = wsk->next;
  73.         free(wsk);
  74.         wsk = nast;
  75.     }
  76.     free(wsk);
  77.     free(nast);
  78.  
  79.     printf("Lista zostala wyczyszczona\n");
  80.  
  81.     getchar();
  82. }
  83.  
  84. void usunElementONazwisku(Osoba *wsk)
  85. {
  86.     char nazwisko_usuwane[30];
  87.     printf("Osoby o jakim nazwisku chcesz usunac? ");
  88.     scanf("%s", &nazwisko_usuwane);
  89.  
  90.     while (wsk->next != NULL)
  91.     {
  92.         if (strcmp(wsk->nazwisko, nazwisko_usuwane) == 0)
  93.         {
  94.             Osoba *usuwany_element = wsk->next;
  95.             wsk->next = usuwany_element->next;
  96.             free(usuwany_element);
  97.         }
  98.         else
  99.         {
  100.             wsk = wsk->next;
  101.         }
  102.     }
  103.     if (strcmp(wsk->nazwisko, nazwisko_usuwane) == 0)
  104.     {
  105.         Osoba *usuwany_element = wsk->next;
  106.         wsk->next = usuwany_element->next;
  107.         free(usuwany_element);
  108.     }
  109.  
  110.     printf("Osoby o nazwisku %s zostaly usuniete z listy", nazwisko_usuwane);
  111.     getchar();
  112. }
  113.  
  114. void usunElementONumerze(Osoba *wsk, int numer)
  115. {
  116.     for (int i = 1; i < numer; i++)
  117.     {
  118.         wsk = wsk->next;
  119.     }
  120.  
  121.     Osoba *usuwany_element = wsk->next;
  122.     wsk->next = usuwany_element->next;
  123.     free(usuwany_element);
  124.  
  125.     printf("Element o numerze %d zostal usuniety z listy.", numer);
  126.  
  127.     getchar();
  128. }
  129.  
  130. void wyswietlElementONumerze(Osoba *wsk, int numer)
  131. {
  132.     for (int i = 0; i < numer; i++)
  133.     {
  134.         wsk = wsk->next;
  135.     }
  136.  
  137.     printf("Element o numerze %d to: \n", numer);
  138.  
  139.     printf("\n%s\n", wsk->imie);
  140.     printf("%s\n", wsk->nazwisko);
  141.     printf("%d\n", wsk->wiek);
  142.     printf("%c\n", wsk->plec);
  143.  
  144.     getchar();
  145.     printf("\n1 - Wyswietlenie nastepnego elementu");
  146.     printf("\n2 - Wyswietlenie poprzedniego elementu");
  147.     printf("\n0 - Powrot do MENU GLOWNE");
  148.  
  149.     int wybor;
  150.     scanf("%d", &wybor);
  151.  
  152.     switch (wybor)
  153.     {
  154.     case 1:
  155.         if (wsk->next == NULL)
  156.         {
  157.             printf("Jestes na koncu listy");
  158.             getchar();
  159.         }
  160.         else
  161.         {
  162.             printf("Kolejny element to: \n");
  163.             wsk = wsk->next;
  164.             printf("\n%s\n", wsk->imie);
  165.             printf("%s\n", wsk->nazwisko);
  166.             printf("%d\n", wsk->wiek);
  167.             printf("%c\n", wsk->plec);
  168.             getchar();
  169.         }
  170.         break;
  171.     case 2:
  172.         if (numer == 1)
  173.         {
  174.             printf("Jestes na poczatku listy");
  175.             getchar();
  176.         }
  177.         else
  178.         {
  179.             printf("Poprzedni element to: \n");
  180.             wsk = wsk->prev;
  181.             printf("\n%s\n", wsk->imie);
  182.             printf("%s\n", wsk->nazwisko);
  183.             printf("%d\n", wsk->wiek);
  184.             printf("%c\n", wsk->plec);
  185.             getchar();
  186.         }
  187.         break;
  188.     default:
  189.         break;
  190.     }
  191. }
  192.  
  193. void zapiszListeDoPliku(Osoba *wsk)
  194. {
  195.     char nazwapliku[30];
  196.     printf("Do jakiego pliku zapisac liste? ");
  197.     scanf("%s", &nazwapliku);
  198.     FILE *plik;
  199.     plik = fopen(nazwapliku, "wt");
  200.  
  201.     wsk = wsk->next;
  202.  
  203.     while (wsk->next != NULL)
  204.     {
  205.         fprintf(plik, "\n%s\n", wsk->imie);
  206.         fprintf(plik, "%s\n", wsk->nazwisko);
  207.         fprintf(plik, "%d\n", wsk->wiek);
  208.         fprintf(plik, "%c\n", wsk->plec);
  209.         wsk = wsk->next;
  210.     }
  211.  
  212.     fprintf(plik, "\n%s\n", wsk->imie);
  213.     fprintf(plik, "%s\n", wsk->nazwisko);
  214.     fprintf(plik, "%d\n", wsk->wiek);
  215.     fprintf(plik, "%c\n", wsk->plec);
  216.  
  217.     printf("Lista zostala zapisana do pliku %s ", nazwapliku);
  218.     fclose(plik);
  219.     getchar();
  220. }
  221.  
  222. void wyszukajPoNazwisku(Osoba *wsk)
  223. {
  224.     char szukanenazwisko[30];
  225.     printf("Podaj nazwisko ktore chcesz odszukac: ");
  226.     scanf("%s", &szukanenazwisko);
  227.  
  228.     printf("\nZnalezione osoby:\n");
  229.     while (wsk->next != NULL)
  230.     {
  231.         if (strcmp(wsk->nazwisko, szukanenazwisko) == 0)
  232.         {
  233.             printf("\n%s\n", wsk->imie);
  234.             printf("%s\n", wsk->nazwisko);
  235.             printf("%d\n", wsk->wiek);
  236.             printf("%c\n", wsk->plec);
  237.         }
  238.         wsk = wsk->next;
  239.     }
  240.     if (strcmp(wsk->nazwisko, szukanenazwisko) == 0)
  241.     {
  242.         printf("\n%s\n", wsk->imie);
  243.         printf("%s\n", wsk->nazwisko);
  244.         printf("%d\n", wsk->wiek);
  245.         printf("%c\n", wsk->plec);
  246.     }
  247.  
  248.     getchar();
  249. }
  250.  
  251. void odczytListyZPliku(Osoba *wsk)
  252. {
  253.     char nazwapliku[30];
  254.     FILE *plik2;
  255.     Osoba *nowyElement;
  256.  
  257.  
  258.     printf("Z jakiego pliku wczytac liste? ");
  259.     scanf("%s", &nazwapliku);
  260.  
  261.     plik2 = fopen(nazwapliku, "r+");
  262.  
  263.     while (feof(plik2) == 0)
  264.     {
  265.         while (wsk->next != NULL)
  266.         {
  267.             wsk = wsk->next;
  268.         }
  269.         nowyElement = (Osoba *)malloc(sizeof(Osoba));
  270.  
  271.         nowyElement->next = NULL;
  272.         nowyElement->prev = wsk;
  273.  
  274.         fscanf(plik2, "%s %s %d %s", &nowyElement->imie, &nowyElement->nazwisko, &nowyElement->wiek, &nowyElement->plec);
  275.         wsk->next = nowyElement;
  276.     }
  277.     printf("Wczytano liste z pliku %s", nazwapliku);
  278.  
  279.     fclose(plik2);
  280.     getchar();
  281. }
  282.  
  283. void wyswietlLiczbeElementow(Osoba *wsk)
  284. {
  285.     int liczbaelementow = 0;
  286.     while (wsk->next != NULL)
  287.     {
  288.         wsk = wsk->next;
  289.         liczbaelementow++;
  290.     }
  291.     printf("Liczba elementow w liscie wynosi: %d", liczbaelementow);
  292. }
  293.  
  294. int main()
  295. {
  296.  
  297.     Osoba Zerowy;
  298.     Zerowy.next = NULL;
  299.     Zerowy.prev = NULL;
  300.  
  301.     int wybor;
  302.     do
  303.     {
  304.         system("cls");
  305.         printf("** MENU GLOWNE **\n");
  306.         printf("1 - Dodawanie nowego elementu\n");
  307.         printf("2 - Wyswietlenie listy\n");
  308.         printf("3 - Wyszukiwanie po nazwisku\n");
  309.         printf("4 - Usuwanie elementu o numerze\n");
  310.         printf("5 - Usuwanie po nazwisku\n");
  311.         printf("6 - Wyczyszczenie listy\n");
  312.         printf("7 - Zapisanie listy do pliku\n");
  313.         printf("8 - Wyswietlenie rozmiaru listy\n");
  314.         printf("9 - Wczytanie listy z pliku\n");
  315.         printf("10 -  Wyswietlenie elementu o numerze\n");
  316.  
  317.         printf("\n0 - Wyjscie z programu\n\n");
  318.  
  319.         scanf("%d", &wybor);
  320.  
  321.         switch (wybor)
  322.         {
  323.         case 1:
  324.             dodajElementNaKoniec(&Zerowy);
  325.             break;
  326.  
  327.         case 2:
  328.             wypiszListe(&Zerowy);
  329.             break;
  330.  
  331.         case 3:
  332.             wyszukajPoNazwisku(&Zerowy);
  333.             break;
  334.  
  335.         case 4:
  336.             int numernaliscie;
  337.             printf("Ktory z kolei element chcesz usunac? ");
  338.             scanf("%d", &numernaliscie);
  339.             usunElementONumerze(&Zerowy, numernaliscie);
  340.             break;
  341.  
  342.         case 5:
  343.             usunElementONazwisku(&Zerowy);
  344.             break;
  345.  
  346.         case 6:
  347.             wyczyscListe(&Zerowy);
  348.             break;
  349.  
  350.         case 7:
  351.             zapiszListeDoPliku(&Zerowy);
  352.             break;
  353.  
  354.         case 8:
  355.             wyswietlLiczbeElementow(&Zerowy);
  356.             getchar();
  357.             break;
  358.  
  359.         case 9:
  360.             odczytListyZPliku(&Zerowy);
  361.             break;
  362.  
  363.         case 10:
  364.             int numerlisty;
  365.             printf("Ktory z kolei element chcesz wyswietlic? ");
  366.             scanf("%d", &numerlisty);
  367.             wyswietlElementONumerze(&Zerowy, numerlisty);
  368.             break;
  369.         }
  370.         getchar();
  371.  
  372.  
  373.     } while (wybor != 0);
  374.  
  375.     wyczyscListe(&Zerowy);
  376.  
  377.     return 0;
  378. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement