Advertisement
Guest User

Untitled

a guest
Dec 17th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.14 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<locale.h>
  4. #include<string.h>
  5. #include<conio.h>
  6. typedef struct
  7. {
  8.     char imie[30];
  9.     char nazwisko[30];
  10.     char numer[10];
  11.     char grupa[30];
  12. }kontakt_dane;
  13. struct element
  14. {
  15.     struct element* poprzedni;
  16.     kontakt_dane kontakt;
  17.     struct element* nastepny;
  18. };
  19. typedef struct element element;
  20. void wyczyscbufor()
  21. {
  22.     int c;
  23.     while (((c = getc(stdin)) != '\n') && (c != EOF));
  24. }
  25. void wczytywanie_z_pliku(element** poczatek, element** gora)
  26. {
  27.     FILE* plik;
  28.     char* nazwa_pliku;
  29.     element* osoba;
  30.     element* poprzedni;
  31.     poprzedni = calloc(1, sizeof(element));
  32.     nazwa_pliku = calloc(20, sizeof(char));
  33.     while (1)
  34.     {
  35.         printf("Podaj nazwe pliku\n");
  36.         scanf("%s", nazwa_pliku);
  37.         plik = fopen(nazwa_pliku, "r");
  38.         if (plik == NULL)
  39.         {
  40.             printf("Podano zla nazwe pliku,sprobuj ponownie\n");
  41.             wyczyscbufor();
  42.         }
  43.         else
  44.         {
  45.             break;
  46.         }
  47.     }
  48.     while (feof(plik) == 0)
  49.     {
  50.         osoba = calloc(1, sizeof(element));
  51.         fscanf(plik, "%[^;] ; %[^;] ; %[^;] ; %s\n", osoba->kontakt.imie, osoba->kontakt.nazwisko, osoba->kontakt.numer, osoba->kontakt.grupa);
  52.         if (*poczatek != NULL)
  53.         {
  54.             osoba->poprzedni = poprzedni;
  55.             osoba->poprzedni->nastepny = osoba;
  56.             osoba->nastepny = NULL;
  57.             poprzedni = osoba;
  58.             *gora = osoba;
  59.         }
  60.         if (*poczatek == NULL)
  61.         {
  62.             osoba->poprzedni = NULL;
  63.             osoba->nastepny = NULL;
  64.             poprzedni = osoba;
  65.             *poczatek = osoba;
  66.         }
  67.     }
  68.     fclose(plik);
  69. }
  70. void wyswietlanie_kontatkow(element* poczatek)
  71. {
  72.     element* aktualny;
  73.     int i = 1;
  74.     aktualny = calloc(1, sizeof(aktualny));
  75.     aktualny = poczatek;
  76.     printf("Ksiazka telefoniczna:\n");
  77.     while (aktualny != NULL)
  78.     {
  79.         printf("%d)%s %s %s %s\n", i, aktualny->kontakt.imie, aktualny->kontakt.nazwisko, aktualny->kontakt.numer, aktualny->kontakt.grupa);
  80.         aktualny = aktualny->nastepny;
  81.         i++;
  82.     }
  83.     free(aktualny);
  84. }
  85. void sortowanie(element** poczatek,int sort)
  86. {
  87.     element* aktualny;
  88.     int zmiana = 1;
  89.     aktualny = calloc(1, sizeof(element));
  90.     aktualny = *poczatek;
  91.     if(sort==1)
  92.     {
  93.         while (zmiana != 0)
  94.         {
  95.             zmiana = 0;
  96.             while ((*aktualny).nastepny != NULL)
  97.             {
  98.                 if (strcoll((*aktualny).kontakt.imie, (*aktualny).nastepny->kontakt.imie) == 1)
  99.                 {
  100.                     zmiana += 1;
  101.                     if ((*aktualny).poprzedni != NULL && (*aktualny).nastepny != NULL)
  102.                     {
  103.                         (*aktualny).poprzedni->nastepny = (*aktualny).nastepny;
  104.                         (*aktualny).nastepny->poprzedni = (*aktualny).poprzedni;
  105.                         (*aktualny).poprzedni = (*aktualny).nastepny;
  106.                         (*aktualny).nastepny = (*aktualny).poprzedni->nastepny;
  107.                         (*aktualny).poprzedni->nastepny = aktualny;
  108.                         if ((*aktualny).nastepny != NULL)
  109.                         {
  110.                             (*aktualny).nastepny->poprzedni = aktualny;
  111.                         }
  112.                         else
  113.                         {
  114.                             (*aktualny).nastepny = NULL;
  115.                         }
  116.                     }
  117.                     if ((*aktualny).poprzedni == NULL)
  118.                     {
  119.                         (*aktualny).nastepny->poprzedni = (*aktualny).poprzedni;
  120.                         (*aktualny).poprzedni = (*aktualny).nastepny;
  121.                         if ((*aktualny).nastepny->nastepny != NULL)
  122.                         {
  123.                             (*aktualny).nastepny = (*aktualny).nastepny->nastepny;
  124.                             (*aktualny).nastepny->poprzedni = aktualny;
  125.                         }
  126.                         else
  127.                         {
  128.                             (*aktualny).nastepny = NULL;
  129.                         }
  130.                         (*aktualny).poprzedni->nastepny = aktualny;
  131.                         *poczatek = aktualny->poprzedni;
  132.                     }
  133.                 }
  134.                 else
  135.                 {
  136.                     aktualny = aktualny->nastepny;
  137.                 }
  138.             }
  139.             aktualny = *poczatek;
  140.         }
  141.     }
  142.     if(sort == 2)
  143.     {
  144.         while (zmiana != 0)
  145.         {
  146.             zmiana = 0;
  147.             while ((*aktualny).nastepny != NULL)
  148.             {
  149.                 if (strcoll((*aktualny).kontakt.nazwisko, (*aktualny).nastepny->kontakt.nazwisko) == 1)
  150.                 {
  151.                     zmiana += 1;
  152.                     if ((*aktualny).poprzedni != NULL && (*aktualny).nastepny != NULL)
  153.                     {
  154.                         (*aktualny).poprzedni->nastepny = (*aktualny).nastepny;
  155.                         (*aktualny).nastepny->poprzedni = (*aktualny).poprzedni;
  156.                         (*aktualny).poprzedni = (*aktualny).nastepny;
  157.                         (*aktualny).nastepny = (*aktualny).poprzedni->nastepny;
  158.                         (*aktualny).poprzedni->nastepny = aktualny;
  159.                         if ((*aktualny).nastepny != NULL)
  160.                         {
  161.                             (*aktualny).nastepny->poprzedni = aktualny;
  162.                         }
  163.                         else
  164.                         {
  165.                             (*aktualny).nastepny = NULL;
  166.                         }
  167.                     }
  168.                     if ((*aktualny).poprzedni == NULL)
  169.                     {
  170.                         (*aktualny).nastepny->poprzedni = (*aktualny).poprzedni;
  171.                         (*aktualny).poprzedni = (*aktualny).nastepny;
  172.                         if ((*aktualny).nastepny->nastepny != NULL)
  173.                         {
  174.                             (*aktualny).nastepny = (*aktualny).nastepny->nastepny;
  175.                             (*aktualny).nastepny->poprzedni = aktualny;
  176.                         }
  177.                         else
  178.                         {
  179.                             (*aktualny).nastepny = NULL;
  180.                         }
  181.                         (*aktualny).poprzedni->nastepny = aktualny;
  182.                         *poczatek = aktualny->poprzedni;
  183.                     }
  184.                 }
  185.                 else
  186.                 {
  187.                     aktualny = aktualny->nastepny;
  188.                 }
  189.             }
  190.             aktualny = *poczatek;
  191.         }
  192.     }
  193.     if(sort == 3)
  194.     {
  195.         while (zmiana != 0)
  196.         {
  197.             zmiana = 0;
  198.             while ((*aktualny).nastepny != NULL)
  199.             {
  200.                 if (strcoll((*aktualny).kontakt.grupa, (*aktualny).nastepny->kontakt.grupa) == 1)
  201.                 {
  202.                     zmiana += 1;
  203.                     if ((*aktualny).poprzedni != NULL && (*aktualny).nastepny != NULL)
  204.                     {
  205.                         (*aktualny).poprzedni->nastepny = (*aktualny).nastepny;
  206.                         (*aktualny).nastepny->poprzedni = (*aktualny).poprzedni;
  207.                         (*aktualny).poprzedni = (*aktualny).nastepny;
  208.                         (*aktualny).nastepny = (*aktualny).poprzedni->nastepny;
  209.                         (*aktualny).poprzedni->nastepny = aktualny;
  210.                         if ((*aktualny).nastepny != NULL)
  211.                         {
  212.                             (*aktualny).nastepny->poprzedni = aktualny;
  213.                         }
  214.                         else
  215.                         {
  216.                             (*aktualny).nastepny = NULL;
  217.                         }
  218.                     }
  219.                     if ((*aktualny).poprzedni == NULL)
  220.                     {
  221.                         (*aktualny).nastepny->poprzedni = (*aktualny).poprzedni;
  222.                         (*aktualny).poprzedni = (*aktualny).nastepny;
  223.                         if ((*aktualny).nastepny->nastepny != NULL)
  224.                         {
  225.                             (*aktualny).nastepny = (*aktualny).nastepny->nastepny;
  226.                             (*aktualny).nastepny->poprzedni = aktualny;
  227.                         }
  228.                         else
  229.                         {
  230.                             (*aktualny).nastepny = NULL;
  231.                         }
  232.                         (*aktualny).poprzedni->nastepny = aktualny;
  233.                         *poczatek = aktualny->poprzedni;
  234.                     }
  235.                 }
  236.                 else
  237.                 {
  238.                     aktualny = aktualny->nastepny;
  239.                 }
  240.             }
  241.             aktualny = *poczatek;
  242.         }
  243.     }
  244. }
  245. void dodawanie_kontaktu(element** gora)
  246. {
  247.     element* nowy;
  248.     nowy = calloc(1, sizeof(element));
  249.     printf("Podaj imie nazwisko numer_telefonu i grupe oddzielona spacjami\n");
  250.     scanf("%s %s %s %s", nowy->kontakt.imie, nowy->kontakt.nazwisko, nowy->kontakt.numer, nowy->kontakt.grupa);
  251.     (*gora)->nastepny = nowy;
  252.     nowy->poprzedni = (*gora);
  253.     nowy->nastepny = NULL;
  254. }
  255. void wyszukiwanie_kontaktu(element* poczatek)   // cos nie gra
  256. {
  257.     char* tab;
  258.     char* wyraz;
  259.     int i = 0;
  260.     int numer = 1;
  261.     element* aktualny;
  262.     aktualny = calloc(1, sizeof(element));
  263.     tab = calloc(29, sizeof(char));
  264.     wyraz = calloc(30, sizeof(char));
  265.     *wyraz = _getch();
  266.     while (*(wyraz + i) != 32)
  267.     {
  268.         printf("Aby zakonczyn wyszukiwanie kliknij spacje\n");
  269.         aktualny = poczatek;
  270.         while (aktualny->nastepny != NULL)
  271.         {
  272.             tab = strstr(aktualny->kontakt.imie, wyraz);
  273.             if (tab != NULL)
  274.             {
  275.                 printf("%d)%s %s %s %s\n", numer,aktualny->kontakt.imie,aktualny->kontakt.nazwisko,aktualny->kontakt.numer,aktualny->kontakt.grupa);
  276.                 numer += 1;
  277.             }
  278.             aktualny = aktualny->nastepny;
  279.         }
  280.         numer = 1;
  281.         i += 1;
  282.         *(wyraz + i) = _getch();
  283.         system("cls");
  284.     }
  285. }
  286. void usuwanie_kontaktu(element** poczatek)
  287. {
  288.  
  289. }
  290. int main()
  291. {
  292.     element* poczatek = NULL;
  293.     element* gora = NULL;
  294.     int x = 0;
  295.     int sort = 0;
  296.     setlocale(LC_ALL, "polish_poland");
  297.     printf("Witaj w programie ksiazki telefonicznej\n");
  298.     while (x != 7)
  299.     {
  300.         printf("Menu:\n");
  301.         printf("1)Wczytywanie ksiazki\n");
  302.         printf("2)Wyswietlanie ksiazki\n");
  303.         printf("3)Sortowanie kontaktow\n");
  304.         printf("4)Dodawanie kontaktow\n");
  305.         printf("5)Wyszukiwanie kontatkow\n");
  306.         printf("6)Usuwanie kontaktow\n");
  307.         printf("7)Zakonczenie programu\n");
  308.         if ((scanf("%d", &x) == 1) && x > 0 && x < 8)
  309.         {
  310.             switch (x)
  311.             {
  312.             case 1:
  313.                 wyczyscbufor();
  314.                 system("cls");
  315.                 wczytywanie_z_pliku(&poczatek,&gora);
  316.                 printf("\nPomyslnie wczytano ksiazke\n\n");
  317.                 break;
  318.             case 2:
  319.                 wyczyscbufor();
  320.                 system("cls");
  321.                 if (poczatek == NULL)
  322.                 {
  323.                     printf("Nie ma wczytanej zadnej ksiazki\n\n");
  324.                                
  325.                 }
  326.                 else
  327.                 {
  328.                     wyswietlanie_kontatkow(poczatek);
  329.                     printf("\n");
  330.                 }
  331.                 break;
  332.             case 3:
  333.                 wyczyscbufor();
  334.                 while (1)
  335.                 {
  336.                     system("cls");
  337.                     if (poczatek == NULL)
  338.                     {
  339.                         printf("Nie ma wczytanej zadnej ksiazki\n\n");
  340.                         break;
  341.  
  342.                     }
  343.                     else
  344.                     {
  345.                         printf("Podaj ktore opcje sortowania chcesz wykoanc\n");
  346.                         printf("1)Sortowanie alfabtetyczne imion\n");
  347.                         printf("2)Sortowanie alfabetyczne nazwisk\n");
  348.                         printf("3)Sortowanie alfabetyczne grup\n");
  349.                         if (scanf("%d", &sort) == 1 && sort > 0 && sort < 4)
  350.                         {
  351.                             wyczyscbufor();
  352.                             if (sort == 1)
  353.                             {
  354.                                 sortowanie(&poczatek, sort);
  355.                                 system("cls");
  356.                                 printf("Posortowano wedlug imion\n\n");
  357.                                 break;
  358.                             }
  359.                             if (sort == 2)
  360.                             {
  361.                                 sortowanie(&poczatek, sort);
  362.                                 system("cls");
  363.                                 printf("Posortowano wedlug nazwisk\n\n");
  364.                                 break;
  365.                             }
  366.                             if (sort == 3)
  367.                             {
  368.                                 sortowanie(&poczatek, sort);
  369.                                 system("cls");
  370.                                 printf("Posortowano wedlug grup\n\n");
  371.                                 break;
  372.                             }
  373.                         }
  374.                         else
  375.                         {
  376.                             printf("Podano zla opcje, sprobuj ponownie\n");
  377.                         }
  378.                     }
  379.                 }
  380.                 break;
  381.             case 4:
  382.                 wyczyscbufor();
  383.                 system("cls");
  384.                 if (poczatek == NULL)
  385.                 {
  386.                     printf("Nie ma wczytanej zadnej ksiazki\n\n");
  387.  
  388.                 }
  389.                 else
  390.                 {
  391.                     dodawanie_kontaktu(&gora);
  392.                     sortowanie(&poczatek, sort);
  393.                     printf("\n");
  394.                     printf("Dodano pomyslnie kontakt\n\n");
  395.                 }
  396.                 break;
  397.             case 5:
  398.                 wyczyscbufor();
  399.                 system("cls");
  400.                 if (poczatek == NULL)
  401.                 {
  402.                     printf("Nie ma wczytanej zadnej ksiazki\n\n");
  403.  
  404.                 }
  405.                 else
  406.                 {
  407.                     wyszukiwanie_kontaktu(poczatek);
  408.                 }
  409.                 break;
  410.             case 6:
  411.                 break;
  412.             case 7:
  413.                 break;
  414.             }
  415.         }
  416.         else
  417.         {
  418.             wyczyscbufor();
  419.             system("cls");
  420.             printf("Podano zla opcje, sprobuj jeszcze raz\n");
  421.         }
  422.     }
  423.     printf("Koniec programu\n");
  424. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement