Advertisement
Guest User

Untitled

a guest
Mar 30th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 17.79 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <errno.h>
  5. #define lenght_of_personal_data 15
  6.  
  7. struct klient
  8. {
  9.     unsigned int numer_karty;
  10.     char nazwisko[lenght_of_personal_data];
  11.     char imie[lenght_of_personal_data];
  12.     char telefon[10];
  13.     struct klient *nastepny;
  14. };
  15.  
  16. struct ksiazka
  17. {
  18.     unsigned int ID;
  19.     char tytul[50];
  20.     unsigned int rok;
  21.     char autor[2*lenght_of_personal_data+1];
  22.     char gatunek[15];
  23.     unsigned char liczba_egzemplarzy;
  24.     unsigned char liczba_wypozyczonych;
  25.     struct ksiazka *nastepny;
  26. };
  27.  
  28. struct wypozyczenie
  29. {
  30.     unsigned int numer_karty;
  31.     unsigned int ID_ksiazki;
  32.     unsigned char rok_od;
  33.     unsigned char miesiac_od;
  34.     unsigned char dzien_od;
  35.     unsigned char rok_do;
  36.     unsigned char miesiac_do;
  37.     unsigned char dzien_do;
  38.     struct wypozyczenie *nastepny;
  39. };
  40.  
  41. struct klient wczytaj_nowego_klienta()
  42. {
  43.     struct klient nowy;
  44.     puts("Wypełnij dane klienta: ");
  45.     printf("Numer: \t");
  46.     scanf("%u", &nowy.numer_karty);
  47.     printf("Imie:\t ");
  48.     scanf("%s", &nowy.imie);
  49.     printf("Nazwisko: \t");
  50.     scanf("%s", &nowy.nazwisko);
  51.     do{
  52.         printf("Telefon: ");
  53.         scanf("%s", &nowy.telefon);
  54.     }while(sprawdz_telefon(nowy.telefon)!=0);
  55.     return nowy;
  56. };
  57.  
  58.  
  59.  
  60. struct ksiazka wczytaj_nowa_ksiazke()
  61. {
  62.     struct ksiazka nowy;
  63.     puts("Wypełnij dane ksiazki: ");
  64.     printf("Identyfikator: \t");
  65.     scanf("%u", &nowy.ID);
  66.     while(getchar()!='\n');
  67.     printf("Tytul:\t ");
  68.     scanf("%[^\n]s", &nowy.tytul);
  69.     while(getchar()!='\n');
  70.     printf("Rok wydania: \t");
  71.     scanf("%u", &nowy.rok);
  72.     while(getchar()!='\n');
  73.     printf("Autor: ");
  74.     scanf("%[^\n]s", &nowy.autor);
  75.     while(getchar()!='\n');
  76.     printf("Gatunek: ");
  77.     scanf("%[^\n]s", &nowy.gatunek);
  78.     while(getchar()!='\n');
  79.     printf("Liczba egzemplarzy: ");
  80.     scanf("%u", &nowy.liczba_egzemplarzy);
  81.     while(getchar()!='\n');
  82.     printf("Liczba wypozyczonych: ");
  83.     scanf("%u", &nowy.liczba_wypozyczonych);
  84.     while(getchar()!='\n');
  85.     return nowy;
  86. };
  87.  
  88. struct klient *create_list_client()
  89. {
  90.     struct klient *first =(struct klient *)malloc(sizeof(struct klient));
  91.     if(first)
  92.     {
  93.         struct klient nowy;
  94.         nowy = wczytaj_nowego_klienta();
  95.         first->numer_karty = nowy.numer_karty;
  96.         strcpy(first->imie, nowy.imie);
  97.         strcpy(first->nazwisko, nowy.nazwisko);
  98.         strcpy(first->telefon, nowy.telefon);
  99.         first->nastepny = NULL;
  100.     }
  101.     return first;
  102. }
  103.  
  104. struct ksiazka *create_list_book()
  105. {
  106.     struct ksiazka *first =(struct ksiazka *)malloc(sizeof(struct ksiazka));
  107.     if(first)
  108.     {
  109.         struct ksiazka nowy;
  110.         nowy = wczytaj_nowa_ksiazke();
  111.         first->ID = nowy.ID;
  112.         strcpy(first->tytul, nowy.tytul);
  113.         first->rok = nowy.rok;
  114.         strcpy(first->autor, nowy.autor);
  115.         strcpy(first->gatunek, nowy.gatunek);
  116.         first->liczba_egzemplarzy = nowy.liczba_egzemplarzy;
  117.         first->liczba_wypozyczonych = nowy.liczba_wypozyczonych;
  118.         first->nastepny = NULL;
  119.     }
  120.     return first;
  121. }
  122.  
  123.  
  124.  
  125. struct klient *add_node_client(struct klient *list_pointer)
  126. {
  127.     struct klient *nowy_klient = (struct klient *)malloc(sizeof(struct klient));
  128.     if(list_pointer && nowy_klient) {
  129.         struct klient nowy;
  130.         nowy = wczytaj_nowego_klienta();
  131.         nowy_klient->numer_karty = nowy.numer_karty;
  132.         strcpy(nowy_klient->imie, nowy.imie);
  133.         strcpy(nowy_klient->nazwisko, nowy.nazwisko);
  134.         strcpy(nowy_klient->telefon, nowy.telefon);
  135.         nowy_klient->nastepny = list_pointer->nastepny;
  136.         list_pointer->nastepny = nowy_klient;
  137.     }
  138.         return list_pointer;
  139. }
  140.  
  141. struct ksiazka *add_node_book(struct ksiazka *list_pointer)
  142. {
  143.     struct ksiazka *nowa_ksiazka = (struct ksiazka *)malloc(sizeof(struct ksiazka));
  144.     if(list_pointer && nowa_ksiazka) {
  145.         struct ksiazka nowy;
  146.         nowy = wczytaj_nowa_ksiazke();
  147.         nowa_ksiazka->ID = nowy.ID;
  148.         nowa_ksiazka->ID = nowy.ID;
  149.         strcpy(nowa_ksiazka->tytul, nowy.tytul);
  150.         nowa_ksiazka->rok = nowy.rok;
  151.         strcpy(nowa_ksiazka->autor, nowy.autor);
  152.         strcpy(nowa_ksiazka->gatunek, nowy.gatunek);
  153.         nowa_ksiazka->liczba_egzemplarzy = nowy.liczba_egzemplarzy;
  154.         nowa_ksiazka->liczba_wypozyczonych = nowy.liczba_wypozyczonych;
  155.         nowa_ksiazka->nastepny = list_pointer->nastepny;
  156.         list_pointer->nastepny = nowa_ksiazka;
  157.     }
  158.         return list_pointer;
  159. }
  160.  
  161.  
  162. void wyswietlanie_klient(struct klient *a){
  163.     struct klient *tmp;
  164.  
  165.     tmp = a;
  166.     if (tmp == NULL)
  167.         printf("Brak elementow, wybierz z listy:\n");
  168.     else
  169.     {
  170.         while (tmp != NULL)
  171.         {
  172.             printf("ID: %u\nImie: %s\nNazwisko: %s \nTelefon: %s\n", tmp->numer_karty, tmp->imie, tmp->nazwisko, tmp->telefon);
  173.             printf("\n");
  174.             tmp = tmp->nastepny;
  175.         }
  176.     }
  177. }
  178. struct klient *find_previous_node(struct klient *list_pointer, int id)
  179. {
  180.     struct klient *previous = NULL;
  181.     while(list_pointer && list_pointer->numer_karty!=id) {
  182.     previous=list_pointer;
  183.     list_pointer=list_pointer->nastepny;
  184.     }
  185.     return previous;
  186. };
  187. struct klient *delete_at_front(struct klient *list_pointer)
  188. {
  189.     struct klient *next = list_pointer->nastepny;
  190.     free(list_pointer);
  191.     return next;
  192. };
  193. struct klient *delete_node(struct klient *list_pointer, int id)
  194.     {
  195.         if(list_pointer) {
  196.         if(list_pointer->numer_karty==id)
  197.         return delete_at_front(list_pointer);
  198.         else {
  199.         struct list_node *previous =
  200.         find_previous_node(list_pointer,id);
  201.         delete_middle_or_last_node(previous);
  202.     }
  203.     }
  204.     return list_pointer;
  205. };
  206.  
  207.  
  208.  
  209. void delete_middle_or_last_node(struct klient *previous)
  210. {
  211.     struct klient *node = previous->nastepny;
  212.     if(node) {
  213.     previous->nastepny = node->nastepny;
  214.     free(node);
  215.     }
  216. }
  217. //asdasdasd
  218. struct ksiazka *find_previous_node_ksiazka(struct ksiazka *list_pointer, int id)
  219. {
  220.     struct ksiazka *previous = NULL;
  221.     while(list_pointer && list_pointer->ID!=id) {
  222.     previous=list_pointer;
  223.     list_pointer=list_pointer->nastepny;
  224.     }
  225.     return previous;
  226. };
  227. struct ksiazka *delete_at_front_ksiazka(struct ksiazka *list_pointer)
  228. {
  229.     struct ksiazka *next = list_pointer->nastepny;
  230.     free(list_pointer);
  231.     return next;
  232. };
  233. struct ksiazka *delete_node_ksiazka(struct ksiazka *list_pointer, int id)
  234.     {
  235.         if(list_pointer) {
  236.         if(list_pointer->ID==id)
  237.         return delete_at_front_ksiazka(list_pointer);
  238.         else {
  239.         struct list_node *previous =
  240.         find_previous_node_ksiazka(list_pointer,id);
  241.         delete_middle_or_last_node_ksiazka(previous);
  242.     }
  243.     }
  244.     return list_pointer;
  245. };
  246.  
  247.  
  248.  
  249. void delete_middle_or_last_node_ksiazka(struct ksiazka *previous)
  250. {
  251.     struct ksiazka *node = previous->nastepny;
  252.     if(node) {
  253.     previous->nastepny = node->nastepny;
  254.     free(node);
  255.     }
  256. }
  257.  
  258.  
  259.  
  260.  
  261. void wyswietlanie_ksiazek(struct ksiazka *a){
  262.     struct ksiazka *tmp;
  263.  
  264.     tmp = a;
  265.     if (tmp == NULL)
  266.         printf("Brak elementow, wybierz z listy:\n");
  267.     else
  268.     {
  269.         while (tmp != NULL)
  270.         {
  271.             printf("ID: %u\nTytul: %s\nRok: %u\nAutor: %s\nGatunek: %s\nLiczba egzemplarzy: %u\nLiczba wypozyczonych: %u\n", tmp->ID, tmp->tytul, tmp->rok, tmp->autor, tmp->gatunek, tmp->liczba_egzemplarzy, tmp->liczba_wypozyczonych);
  272.             printf("\n");
  273.             tmp = tmp->nastepny;
  274.         }
  275.     }
  276. }
  277.  
  278. void modyfikuj_klienta(struct klient **a, unsigned int co, int id)
  279. {
  280.     struct klient *tmp = *a;
  281.     if(tmp==NULL){
  282.         puts("Brak elementów na liście nie masz co edytować!");
  283.     }else
  284.     {
  285.         while(tmp!=NULL)
  286.         {
  287.             if((tmp->numer_karty)==id){
  288.             break;
  289.  
  290.         }
  291.         tmp = tmp->nastepny;
  292.     }
  293.     char telefon[10];
  294.     switch(co)
  295.             {
  296.                 case 1: //imie
  297.                     puts("Podaj nowe imie: ");
  298.                     char imie[15];
  299.                     scanf("%s", imie);
  300.                     strcpy(tmp->imie, imie);
  301.                     break;
  302.                 case 2: //nazwisko
  303.                     puts("Podaj nowe nazwisko: ");
  304.                     char nazwisko[15];
  305.                     scanf("%s", nazwisko);
  306.                     strcpy(tmp->nazwisko, nazwisko);
  307.                     break;
  308.                 case 3: //telefon
  309.                     do{
  310.                         printf("Telefon: ");
  311.                         scanf("%s", &telefon);
  312.                     }while(sprawdz_telefon(telefon)!=0);
  313.                     strcpy(tmp->telefon, telefon);
  314.                     break;
  315.                 default:
  316.                     puts("Brak takiego pola!");
  317.                     break;
  318.  
  319.             }
  320.  
  321. }
  322. }
  323. void modyfikuj_ksiazke(struct ksiazka **a, unsigned int co, int id)
  324. {
  325.     struct ksiazka *tmp = *a;
  326.     if(tmp==NULL){
  327.         puts("Brak elementów na liście nie masz co edytować!");
  328.     }else
  329.     {
  330.         while(tmp!=NULL)
  331.         {
  332.             if((tmp->ID)==id){
  333.             break;
  334.  
  335.         }
  336.         tmp = tmp->nastepny;
  337.     }
  338.     char tytul[50];
  339.     unsigned int rok;
  340.     char autor[2*lenght_of_personal_data+1];
  341.     char gatunek[15];
  342.     unsigned char liczba_egzemplarzy;
  343.     unsigned char liczba_wypozyczonych;
  344.     switch(co)
  345.             {
  346.                 case 1: //imie
  347.                     puts("Podaj nowy tytul: ");
  348.                     while(getchar()!='\n');
  349.                     scanf("%[^\n]s", &tytul);
  350.                     strcpy(tmp->tytul, tytul);
  351.                     break;
  352.                 case 2: //nazwisko
  353.                     puts("Podaj rok: ");
  354.                     scanf("%u", &rok);
  355.                     tmp->rok = rok;
  356.                     break;
  357.                 case 3: //telefon
  358.                     puts("Podaj nowego autora: ");
  359.                     while(getchar()!='\n');
  360.                     scanf("%[^\n]s", &autor);
  361.                     strcpy(tmp->autor, autor);
  362.                     break;
  363.                 case 4:
  364.                     puts("Podaj gatunek: ");
  365.                     scanf("%s", &gatunek);
  366.                     strcpy(tmp->gatunek, gatunek);
  367.                     break;
  368.                 case 5:
  369.                     puts("Podaj nowa liczbe egzemplarzy: ");
  370.                     scanf("%u", &liczba_egzemplarzy);
  371.                     tmp->liczba_egzemplarzy = liczba_egzemplarzy;
  372.                     break;
  373.                 case 6:
  374.                     puts("Podaj ilosc wypozyczen: ");
  375.                     scanf("%u", &liczba_wypozyczonych);
  376.                     tmp->liczba_wypozyczonych = liczba_wypozyczonych;
  377.                     break;
  378.                 default:
  379.                     puts("Brak takiego pola!");
  380.                     break;
  381.  
  382.             }
  383.  
  384. }
  385. }
  386. int sprawdz_telefon(char telefon[])
  387. {
  388.     int i = 0;
  389.     for(i; i <9; i++)
  390.     {
  391.         if(telefon[i]>='0'&&telefon[i]<='9'){}
  392.         else return -1;
  393.     }
  394.     if(strlen(telefon)!=9) return -2;
  395.     else return 0;
  396. }
  397.  
  398.  
  399. int main()
  400. {
  401.     system("chcp 1250>null");
  402.     struct klient *a = NULL;
  403.     struct ksiazka *ksiazka = NULL;
  404.     unsigned int opcja = 0;
  405.     unsigned int co = 0;
  406.     printf("Witamy w projekcie Wypożyczalnia książek");
  407.     printf("Wybierz co chesz zrobić:\n");
  408.     puts("1. Dodawanie/usuwanie/edycja/wyswietlanie klientów");
  409.     puts("2. Dodawanie/usuwanie/edycja/wyswietlanie książek");
  410.     puts("3. Wypożyczenie/oddanie książki");
  411.     puts("4. Wyœwietlenie książek");
  412.     puts("5. Wyszukanie książek");
  413.     puts("6. Zapisanie/wczytanie danych o klientach, książkach i wypożyczeniach");
  414.     puts("0. Wyjście");
  415.     printf("Wybieram opcje nr. ");
  416.     while(scanf("%u", &opcja))
  417.     {
  418.         int id;
  419.         switch(opcja)
  420.         {
  421.             case 1:  //klienci
  422.                 printf("Co teraz chcesz zrobić: \n");
  423.                 system("cls");
  424.                 printf("1. Dodawanie\n2. Usuwanie\n3. Edytowanie\n4. Wyswietlanie\n0. Powrót\n");
  425.                 while(scanf("%u", &opcja)!=5){
  426.                 switch(opcja)
  427.                 {
  428.                     case 1:
  429.  
  430.                         if(a==NULL)
  431.                         {
  432.                             a= create_list_client();
  433.                         }
  434.                         else
  435.                         {
  436.                             a = add_node_client(a);
  437.                         }
  438.  
  439.                     printf("Co teraz chcesz zrobić: \n");
  440.                     system("cls");
  441.                     break;
  442.  
  443.                     case 2:
  444.                         wyswietlanie_klient(a);
  445.                         if(a==NULL){}
  446.                         else{
  447.                         puts("Podaj ID klienta którego chcesz usunąć: ");
  448.                         scanf("%d", &id);
  449.                         a = delete_node(a, id);
  450.                         }
  451.  
  452.                     break;
  453.  
  454.                     case 3:
  455.                         puts("Jakie pole chcesz edytować? ");
  456.                         puts("1. Imie");
  457.                         puts("2. Nazwisko");
  458.                         puts("3. Telefon");
  459.                         printf("Podaj opcje: ");
  460.                         scanf("%u", &co);
  461.                         system("cls");
  462.                         printf("Podaj ID klienta którego chcesz edytować: ");
  463.                         scanf("%d", &id);
  464.                         modyfikuj_klienta(&a, co, id);/*
  465.                         wyswietlanie_klient(a);
  466.                         if(a==NULL){}else{
  467.                         puts("Podaj ID klienta którego chcesz modyfikować: ");
  468.                         scanf("%u", &id);}*/
  469.  
  470.                     break;
  471.  
  472.                     case 4:
  473.                     wyswietlanie_klient(a);
  474.                     break;
  475.  
  476.                     case 0:
  477.                     break;
  478.  
  479.                     default:
  480.                         printf("Niepoprawna komenda");
  481.                     break;
  482.                 }
  483.                     printf("1. Dodawanie\n2. Usuwanie\n3. Edytowanie\n4. Wyswietlanie\n0. Powrót\n");
  484.                     if(opcja==0)
  485.                     break;
  486.                 }
  487.  
  488.  
  489.                 break;
  490.             case 2:  //ksiazki
  491.                 printf("Co teraz chcesz zrobić: \n");
  492.                 system("cls");
  493.                 printf("1. Dodawanie\n2. Usuwanie\n3. Edytowanie\n4. Wyswietlanie\n0. Powrót\n");
  494.                 while(scanf("%u", &opcja)!=5){
  495.                 switch(opcja)
  496.                 {
  497.                     case 1:
  498.  
  499.                         if(ksiazka==NULL)
  500.                         {
  501.                             ksiazka= create_list_book();
  502.                         }
  503.                         else
  504.                         {
  505.                             ksiazka = add_node_book(ksiazka);
  506.                         }
  507.                     printf("Co teraz chcesz zrobić: \n");
  508.                     system("cls");
  509.                     break;
  510.  
  511.                     case 2:
  512.                         wyswietlanie_ksiazek(ksiazka);
  513.                         puts("Podaj ID klienta którego chcesz usunąć: ");
  514.                         scanf("%d", &id);
  515.                         ksiazka = delete_node_ksiazka(ksiazka, id);
  516.                     break;
  517.  
  518.                     case 3:
  519.                         puts("Jakie pole chcesz edytować? ");
  520.                         puts("1. Tytul");
  521.                         puts("2. Rok");
  522.                         puts("3. Autor");
  523.                         puts("4. Gatunek");
  524.                         puts("5. Liczba egzemplarzy");
  525.                         puts("6. Liczba wypozyczen");
  526.                         printf("Podaj opcje: ");
  527.                         scanf("%u", &co);
  528.                         system("cls");
  529.                         printf("Podaj ID klienta którego chcesz edytować: ");
  530.                         scanf("%d", &id);
  531.                         modyfikuj_ksiazke(&ksiazka, co, id);
  532.                     break;
  533.  
  534.                     case 4:
  535.                     wyswietlanie_ksiazek(ksiazka);
  536.                     break;
  537.  
  538.                     case 0:
  539.                     break;
  540.  
  541.                     default:
  542.                         printf("Niepoprawna komenda");
  543.                     break;
  544.                 }
  545.                 printf("1. Dodawanie\n2. Usuwanie\n3. Edytowanie\n4. Wyswietlanie\n0. Powrót\n");
  546.                 if(opcja==0)
  547.                 break;
  548.                 }
  549.                 break;
  550.             case 3:
  551.  
  552.                 break;
  553.             case 4:
  554.  
  555.                 break;
  556.             case 5:
  557.  
  558.                 break;
  559.             case 6:
  560.  
  561.                 break;
  562.             case 0:
  563.                 return 0;
  564.                 break;
  565.             default:
  566.                 printf("Opcja o numerze %u nie istnieje!", opcja);
  567.                 break;
  568.         }
  569.         system("cls");
  570.         printf("Witamy w projekcie Wypożyczalnia książek");
  571.     printf("Wybierz co chesz zrobić:\n");
  572.     puts("1. Dodawanie/usuwanie/edycja/wyswietlanie klientów");
  573.     puts("2. Dodawanie/usuwanie/edycja/wyswietlanie książek");
  574.     puts("3. Wypo¿yczenie/oddanie książki");
  575.     puts("4. Wyœwietlenie książek");
  576.     puts("5. Wyszukanie książek");
  577.     puts("6. Zapisanie/wczytanie danych o klientach, książkach i wypożyczeniach");
  578.     puts("0. Wyjście");
  579.     printf("Wybieram opcje nr. ");
  580.     }
  581.     return 0;
  582. }
  583.  
  584.  
  585.  
  586. /*
  587. Wypo¿yczalnia ksi¹¿ek.
  588. Dodawanie/usuwanie/edycja klientów (numer karty, nazwisko, imiê, telefon).
  589. Dodawanie/usuwanie/edycja ksi¹¿ek (ID, tytu³, rok, autor, gatunek, liczba egzemplarzy, liczba wypo¿yczonych).
  590. Wypo¿yczanie/oddawanie ksi¹¿ek (kto wypo¿yczy³ (numer karty), któr¹ ksi¹¿kê (ID), kiedy, do kiedy).
  591. Wyœwietlanie ksi¹¿ek z mo¿liwoœci¹ sortowania rosn¹cego/malej¹cego po dowolnym polu.
  592. Wyszukiwanie ksi¹¿ek.
  593. Zapisywanie/wczytywanie danych o klientach, ksi¹¿kach i wypo¿yczeniach do/z plików.
  594. Wykorzystanie list.
  595. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement