Guest User

Untitled

a guest
Jan 4th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 13.29 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. typedef struct zadanie
  6. {
  7.  
  8.        char tresc_zadania[200];
  9.        int rok, miesiac, dzien, godzina, priorytet;
  10.        struct zadanie* next;
  11.               } zadanie ;
  12.  
  13. // zlicza dlugosc listy
  14. int dlugosc_listy(zadanie* lista)
  15. {
  16.     int d = 1;
  17.     zadanie* wsk = lista;
  18.     while(wsk->next!= NULL)
  19.     {
  20.               d++;
  21.               wsk = wsk->next;
  22.               }
  23.     return d;
  24.     }
  25.  
  26.  
  27. void dodaj(zadanie** lista, zadanie* nowe)
  28. {
  29.      nowe->next=NULL;
  30.  
  31.      if((*lista)==NULL)
  32.      {
  33.       *lista = nowe;
  34.                      }
  35.      else
  36.      {
  37.          zadanie* wsk = *lista;
  38.          while(wsk->next != NULL)
  39.          {
  40.               wsk = wsk->next;
  41.             }
  42.          
  43.          wsk->next = nowe;
  44.      }  
  45.  }        
  46.              
  47. void dodaj_zadanie(zadanie** lista)
  48. {  
  49.      zadanie* nowe = (zadanie*)malloc(sizeof(zadanie));
  50.      printf("Podaj tresc zadania: \n");
  51.      scanf(" ");
  52.      fgets(nowe->tresc_zadania,sizeof(nowe->tresc_zadania),stdin);
  53.      for(;;)
  54.      {
  55.          printf("Podaj rok: ");
  56.          scanf("%d", &(nowe->rok));
  57.          if((nowe->rok>=2017) && (nowe->rok)<=3000) break;
  58.          else printf("Wprowadz rok w zakresie od 2017 do 3000");
  59.      }       
  60.      for(;;)
  61.      {
  62.         printf("Podaj miesiac w zakresie od 1 do 12: ");
  63.         scanf("%d", &(nowe->miesiac));
  64.         if((nowe->miesiac)<=12 && (nowe->miesiac)>=1) break;
  65.         else printf("Blad, nie ma tylu miesiecy\n");
  66.      }
  67.      
  68.      for(;;)
  69.      {
  70.          printf("Podaj dzien, w ktorym ma odbyc sie zadanie: ");
  71.          if((nowe->miesiac)==1 || (nowe->miesiac)==3 || (nowe->miesiac)==5 || (nowe->miesiac)==7 || (nowe->miesiac)==8 || (nowe->miesiac)==10 || (nowe->miesiac)==12)
  72.          {
  73.              scanf("%d", &(nowe->dzien));
  74.              if((nowe->dzien)>=1 && (nowe->dzien)<=31) break;
  75.              else printf("Blad, ten miesiac nie ma tylu dni\n");
  76.          }
  77.          if((nowe->miesiac)==2)
  78.          {
  79.              scanf("%d", &(nowe->dzien));
  80.              if((nowe->dzien)>=1 && (nowe->dzien)<=29) break;
  81.              else printf("Blad, ten miesiac nie ma tylu dni\n");
  82.          }
  83.          if((nowe->miesiac)==4 || (nowe->miesiac)==6 || (nowe->miesiac)==9 || (nowe->miesiac)==11)
  84.          {
  85.              scanf("%d", &(nowe->dzien));
  86.              if((nowe->dzien)>=1 && (nowe->dzien)<=30) break;
  87.              else printf("Blad, ten miesiac nie ma tylu dni\n");
  88.          }
  89.      }
  90.  
  91.              
  92.      
  93.      for(;;)
  94.      {
  95.         printf("Podaj godzine(00-23): ");
  96.         scanf("%d", &(nowe->godzina));
  97.         if((nowe->godzina)>=0 && (nowe->godzina)<=23) break;
  98.         else printf("Blad, nie ma takiej godziny");
  99.      }
  100.      
  101.      for(;;)
  102.      {
  103.         printf("Podaj priorytet (od 1 do 5)");
  104.         scanf("%d", &(nowe->priorytet));
  105.         if((nowe->priorytet)>=1 && (nowe->priorytet)<=5) break;
  106.         else printf("Nie ma takiej wartosci priorytetu");
  107.      }
  108.      
  109.  
  110.      dodaj(lista, nowe);    
  111. }
  112.  
  113.  
  114.  
  115. //Wypisuje cala liste
  116. void wypisz_liste(zadanie* lista)
  117. {
  118.  
  119.      zadanie* wsk = lista;
  120.  
  121.      if(lista == NULL)
  122.      printf("LISTA JEST PUSTA");
  123.      else
  124.      printf("Lista zawiera %d elementow: \n", dlugosc_listy(lista) );
  125.      int i = 1;
  126.      while(wsk != NULL)
  127.      {
  128.             printf("%d. Treść zadania: \n %s \n data:(dzien-miesiac-rok) %d-%d-%d, godz: %d, Priorytet:%d\n", i, wsk->tresc_zadania, wsk->dzien, wsk->miesiac, wsk->rok,wsk->godzina, wsk->priorytet);
  129.             wsk=wsk->next;
  130.             i++;
  131.      }
  132. }
  133.  
  134. //Usuwa element z listy
  135. void usun(zadanie** lista, int ID)
  136. {
  137.              zadanie* poprzedni=NULL;
  138.              zadanie* wsk = *lista;
  139.              int i;
  140.                      
  141.                 for(i = 1; i < ID; i++)
  142.                 {
  143.                         poprzedni=wsk;
  144.                         wsk=wsk->next;
  145.      
  146.                          }
  147.                 if(poprzedni==NULL)
  148.                 {
  149.                     (*lista)=(*lista)->next;
  150.                 free(wsk);                              
  151.                 }
  152.                 else
  153.                 {
  154.                  poprzedni->next=wsk->next;
  155.                  free(wsk);
  156.                 }
  157.              
  158. }
  159.  
  160. // Usuwa zadanie po indeksie
  161. void usun_zadanie(zadanie** lista)
  162. {
  163.      
  164.      int ID;
  165.      printf("Podaj indeks zadania: " );
  166.      scanf("%d", &ID);
  167.  
  168.      if((ID > dlugosc_listy(*lista)) || (ID < 1))
  169.      {
  170.            printf("Nie ma takiego indeksu");
  171.  
  172.            }
  173.      else
  174.      {
  175.          usun(lista,ID);        
  176.          }
  177.  }
  178.  
  179.    
  180.    
  181. int usun_data_lista(int usun_rok, int usun_miesiac, int usun_dzien, zadanie** lista)
  182.      {
  183.           zadanie* poprzedni=NULL;
  184.           zadanie* wsk= *lista;
  185.  
  186.             while ((wsk != NULL) && ((usun_rok!=wsk->rok) || (usun_miesiac!=wsk->miesiac) || (usun_dzien!=wsk->dzien)))
  187.            {
  188.                      poprzedni=wsk;
  189.                      wsk=wsk->next;
  190.           }
  191.        
  192.           if(wsk == NULL)
  193.           {
  194.                  return 0;
  195.                  }
  196.           else
  197.           {
  198.                 if(poprzedni==NULL)
  199.              {
  200.              (*lista)=(*lista)->next;
  201.              free(wsk);                              
  202.              }
  203.              else
  204.              {
  205.                  poprzedni->next=wsk->next;
  206.                  free(wsk);
  207.                  }
  208.                return 1;
  209.                }
  210.      }
  211.  
  212.      
  213.  
  214. //usuwa po dacie
  215. void usun_data(zadanie** lista)
  216. {
  217.      int usun_rok, usun_miesiac, usun_dzien;
  218.  
  219.      printf("Podaj rok: ");
  220.      scanf("%d", &usun_rok);
  221.  
  222.      printf("Podaj miesiac: ");
  223.      scanf("%d", &usun_miesiac);
  224.            
  225.      printf("Podaj dzien: ");
  226.      scanf("%d", &usun_dzien);
  227.      
  228.  
  229.      if(usun_data_lista(usun_rok, usun_miesiac, usun_dzien, lista))
  230.      printf("Zadanie zostalo usuniete.");
  231.      else
  232.      printf("Zadanie nie zostalo usuniete, nie ma takiego zadania.");
  233. }
  234.  
  235. void wyszukaj_data_lista(zadanie* lista)
  236. {
  237.  
  238.          zadanie* wsk = lista;
  239.          int wyszukaj_rok, wyszukaj_miesiac, wyszukaj_dzien;
  240.          int i=1;
  241.          int wyszukaj_warunek=0;
  242.          if(lista == NULL)  printf("LISTA JEST PUSTA");
  243.          else
  244.          {
  245.          printf("Podaj rok: ");
  246.          scanf("%d", &(wyszukaj_rok));
  247.          
  248.          printf("Podaj miesiac: ");
  249.          scanf("%d", &(wyszukaj_miesiac));
  250.          
  251.          printf("Podaj dzien: ");
  252.          scanf("%d", &(wyszukaj_dzien));
  253.          
  254.          while (wsk!=NULL)       {
  255.              if((wyszukaj_rok==(wsk->rok)) && (wyszukaj_miesiac==(wsk->miesiac)) && (wyszukaj_dzien==(wsk->dzien)))
  256.              {
  257.                 printf("%d. Treść zadania: \n %s \n data:(dzien-miesiac-rok) %d-%d-%d, godz: %d, Priorytet:%d\n", i, wsk->tresc_zadania, wsk->dzien, wsk->miesiac, wsk->rok, wsk->godzina, wsk->priorytet);
  258.                 wyszukaj_warunek++;
  259.              }
  260.              
  261.              wsk=wsk->next;
  262.              i++;
  263.          }
  264.          if(wyszukaj_warunek==0) printf("Nie ma zadania w tym dniu");
  265.      }
  266.      
  267. }
  268. void wyszukaj_priorytet_lista(zadanie* lista)
  269. {
  270.     zadanie* wsk = lista;
  271.     int wyszukaj_priorytet;
  272.     int i=1;
  273.     int wyszukaj_warunek=0;
  274.     if(lista==NULL) printf("Terminarz nie ma zadan");
  275.     else
  276.     {
  277.         printf("Podaj priorytet, po jakim chcesz wyszukac zadanie: ");
  278.         scanf("%d", &(wyszukaj_priorytet));
  279.        
  280.         while (wsk!=NULL)
  281.         {
  282.             if((wyszukaj_priorytet)==(wsk->priorytet))
  283.             {
  284.                 printf("%d. Treść zadania: \n %s \n data:(dzien-miesiac-rok) %d-%d-%d, godz: %d, Priorytet:%d\n", i, wsk->tresc_zadania, wsk->dzien, wsk->miesiac, wsk->rok, wsk->godzina, wsk->priorytet);
  285.                 wyszukaj_warunek++;
  286.             }
  287.             wsk=wsk->next;
  288.             i++;
  289.         }
  290.         if(wyszukaj_warunek==0) printf("Nie ma zadania o takim priorytecie");
  291.     }
  292. }
  293. void edytowanie_lista(zadanie** lista, int ID)
  294. {
  295.     zadanie *poprzedni=NULL;
  296.     zadanie *wsk = *lista;
  297.     zadanie *nowe =(zadanie*)malloc(sizeof(zadanie));
  298.     int i=1;
  299.     for(i=1;i<ID;i++)
  300.     {
  301.         poprzedni=wsk;
  302.         wsk=wsk->next;
  303.     }
  304.     printf("Podaj tresc zadania: \n");
  305.      scanf(" ");
  306.      fgets(nowe->tresc_zadania,sizeof(nowe->tresc_zadania),stdin);
  307.      for(;;)
  308.      {
  309.          printf("Podaj rok: ");
  310.          scanf("%d", &(nowe->rok));
  311.          if((nowe->rok>=2017) && (nowe->rok)<=3000) break;
  312.          else printf("Wprowadz rok w zakresie od 2017 do 3000");
  313.      }       
  314.      for(;;)
  315.      {
  316.         printf("Podaj miesiac w zakresie od 1 do 12: ");
  317.         scanf("%d", &(nowe->miesiac));
  318.         if((nowe->miesiac)<=12 && (nowe->miesiac)>=1) break;
  319.         else printf("Blad, nie ma tylu miesiecy\n");
  320.      }
  321.      
  322.      for(;;)
  323.      {
  324.          printf("Podaj dzien, w ktorym ma odbyc sie zadanie: ");
  325.          if((nowe->miesiac)==1 || (nowe->miesiac)==3 || (nowe->miesiac)==5 || (nowe->miesiac)==7 || (nowe->miesiac)==8 || (nowe->miesiac)==10 || (nowe->miesiac)==12)
  326.          {
  327.              scanf("%d", &(nowe->dzien));
  328.              if((nowe->dzien)>=1 && (nowe->dzien)<=31) break;
  329.              else printf("Blad, ten miesiac nie ma tylu dni\n");
  330.          }
  331.          if((nowe->miesiac)==2)
  332.          {
  333.              scanf("%d", &(nowe->dzien));
  334.              if((nowe->dzien)>=1 && (nowe->dzien)<=29) break;
  335.              else printf("Blad, ten miesiac nie ma tylu dni\n");
  336.          }
  337.          if((nowe->miesiac)==4 || (nowe->miesiac)==6 || (nowe->miesiac)==9 || (nowe->miesiac)==11)
  338.          {
  339.              scanf("%d", &(nowe->dzien));
  340.              if((nowe->dzien)>=1 && (nowe->dzien)<=30) break;
  341.              else printf("Blad, ten miesiac nie ma tylu dni\n");
  342.          }
  343.      }
  344.  
  345.              
  346.      
  347.      for(;;)
  348.      {
  349.         printf("Podaj godzine(00-23): ");
  350.         scanf("%d", &(nowe->godzina));
  351.         if((nowe->godzina)>=0 && (nowe->godzina)<=23) break;
  352.         else printf("Blad, nie ma takiej godziny");
  353.      }
  354.      
  355.      for(;;)
  356.      {
  357.         printf("Podaj priorytet (od 1 do 5)");
  358.         scanf("%d", &(nowe->priorytet));
  359.         if((nowe->priorytet)>=1 && (nowe->priorytet)<=5) break;
  360.         else printf("Nie ma takiej wartosci priorytetu");
  361.      }
  362.      
  363.    
  364. }
  365. void edytowanie(zadanie **lista)
  366. {
  367.     int ID;
  368.     printf("Podaj indeks zadania ktory chcesz edytowac: ");
  369.     scanf("%d", &ID);
  370.     if(ID<1 || ID>dlugosc_listy(*lista)) printf("Nie ma takiego zadania");
  371.     else edytowanie_lista(lista, ID);
  372.    
  373. }
  374. void zapisywanie(zadanie* lista)
  375. {
  376.     char nazwa_pliku_zapisywanie[30];
  377.     zadanie* wsk = lista;
  378.     printf("Podaj nazwe pliku do zapisania(z rozszerzeniem .dat): ");
  379.     scanf("%s", nazwa_pliku_zapisywanie);
  380.     FILE *plik = fopen(nazwa_pliku_zapisywanie, "w+b");
  381.     if(plik==NULL)
  382.     {
  383.         printf("Nie udalo sie otworzyc pliku: %s \n", nazwa_pliku_zapisywanie);
  384.     }
  385.     else
  386.     {
  387.         while (wsk!=NULL)
  388.         {
  389.             fwrite(wsk->tresc_zadania, sizeof(wsk->tresc_zadania), 1, plik);
  390.             fwrite(&(wsk->rok), sizeof(wsk->rok), 1, plik);
  391.             fwrite(&(wsk->miesiac), sizeof(wsk->miesiac), 1, plik);
  392.             fwrite(&(wsk->dzien), sizeof(wsk->dzien), 1, plik);
  393.             fwrite(&(wsk->godzina), sizeof(wsk->godzina), 1, plik);
  394.             fwrite(&(wsk->priorytet), sizeof(wsk->priorytet), 1, plik);
  395.             wsk=wsk->next;
  396.         }
  397.     }
  398.     fclose(plik);
  399.     printf("Zapisywanie ukonczone pomyslnie! \n");
  400. }
  401. void wczytywanie(zadanie** lista)
  402. {
  403.     char nazwa_pliku_wczytywanie[30];
  404.     printf("Podaj nazwe pliku z ktorego chcesz wczytac dane (z rozszerzeniem dat) : ");
  405.     scanf("%s", nazwa_pliku_wczytywanie);
  406.    
  407.     FILE *plik = fopen(nazwa_pliku_wczytywanie, "r+b");
  408.     if (plik==NULL)
  409.     {
  410.         printf("Nie udalo sie otworzyc pliku: %s\n", nazwa_pliku_wczytywanie);
  411.     }
  412.     else
  413.     {
  414.         while(1)
  415.         {
  416.             zadanie *nowe=(zadanie*)malloc(sizeof(zadanie));
  417.             fread(nowe->tresc_zadania, sizeof(nowe->tresc_zadania),1,plik);
  418.             fread(&nowe->rok, sizeof(nowe->rok),1,plik);
  419.             fread(&nowe->miesiac, sizeof(nowe->miesiac),1,plik);
  420.             fread(&nowe->dzien, sizeof(nowe->dzien),1,plik);
  421.             fread(&nowe->godzina, sizeof(nowe->godzina),1,plik);
  422.             fread(&nowe->priorytet, sizeof(nowe->priorytet),1,plik);
  423.             if(feof(plik)) break;
  424.             dodaj(lista, nowe);
  425.         }
  426.         fclose(plik);
  427.         printf("Wczytywanie zakonczone pomyslnie");
  428.    
  429.         }
  430. }
  431.    
  432. int main()
  433. {
  434.     zadanie* lista = NULL;
  435.          
  436.  
  437.     int opcja=10;
  438.  
  439.     while(opcja != 0)
  440.            {
  441.                 printf("\n\n MENU");
  442.                 printf("\n\n\n 0 Wyjscie z programu");
  443.                 printf("\n 1 Wpisz dane zadania do bazy");
  444.                 printf("\n 2 Usun zadanie o podanym indeksie");
  445.                 printf("\n 3 Usun zadanie o podanej dacie");
  446.                 printf("\n 4 Wyszukaj zadanie o podanej dacie");
  447.                 printf("\n 5 Wyszukaj zadanie o podanym priorytecie");
  448.                 printf("\n 6 Wyswietl cala liste\n");
  449.                 printf("\n 7 Zapisz zadania do pliku \n");
  450.                 printf("\n 8 Wczytaj zadania z pliku \n");
  451.                 scanf("%d", &opcja);
  452.  
  453.                 switch(opcja)
  454.                 {            
  455.  
  456.                          case 1:
  457.                               printf("WPISYWANIE ZADANIA DO TERMINARZA \n");
  458.                               dodaj_zadanie(&lista);
  459.                               break;
  460.  
  461.                          case 2:
  462.                               printf("USUWANIE ZADANINA O PODANYM INDEKSIE\n");
  463.                               usun_zadanie(&lista);
  464.                               break;
  465.  
  466.                         case 3:
  467.                               printf("USUWANIE ZADANIA NA BAZIE DATY");
  468.                               usun_data(&lista);
  469.                               break;
  470.  
  471.                          case 4:
  472.                               printf("Wyszukaj zadanie o podanej dacie\n");
  473.                               wyszukaj_data_lista(lista);
  474.                               break;
  475.                              
  476.                          case 5:
  477.                               printf("Wyszukaj zadanie o podanym priorytecie\n");
  478.                               wyszukaj_priorytet_lista(lista);
  479.                               break;
  480.                              
  481.                          case 6:
  482.                               printf("WYSWIETL CALY TERMINARZ\n");
  483.                               wypisz_liste(lista);
  484.                               break;
  485.                              
  486.                          case 7:
  487.                               printf("Zapisz zadania do pliku \n");
  488.                               zapisywanie(lista);
  489.                               break;
  490.                              
  491.                          case 8:
  492.                               printf("Wczytaj zadania z pliku \n");
  493.                               wczytywanie(&lista);
  494.                               break;
  495.                          }
  496.           }
  497.  
  498.    
  499.    
  500.  
  501.     }
Advertisement
Add Comment
Please, Sign In to add comment