Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- typedef struct zadanie
- {
- char tresc_zadania[200];
- int rok, miesiac, dzien, godzina, priorytet;
- struct zadanie* next;
- } zadanie ;
- // zlicza dlugosc listy
- int dlugosc_listy(zadanie* lista)
- {
- int d = 1;
- zadanie* wsk = lista;
- while(wsk->next!= NULL)
- {
- d++;
- wsk = wsk->next;
- }
- return d;
- }
- void dodaj(zadanie** lista, zadanie* nowe)
- {
- nowe->next=NULL;
- if((*lista)==NULL)
- {
- *lista = nowe;
- }
- else
- {
- zadanie* wsk = *lista;
- while(wsk->next != NULL)
- {
- wsk = wsk->next;
- }
- wsk->next = nowe;
- }
- }
- void dodaj_zadanie(zadanie** lista)
- {
- zadanie* nowe = (zadanie*)malloc(sizeof(zadanie));
- printf("Podaj tresc zadania: \n");
- scanf(" ");
- fgets(nowe->tresc_zadania,sizeof(nowe->tresc_zadania),stdin);
- for(;;)
- {
- printf("Podaj rok: ");
- scanf("%d", &(nowe->rok));
- if((nowe->rok>=2017) && (nowe->rok)<=3000) break;
- else printf("Wprowadz rok w zakresie od 2017 do 3000");
- }
- for(;;)
- {
- printf("Podaj miesiac w zakresie od 1 do 12: ");
- scanf("%d", &(nowe->miesiac));
- if((nowe->miesiac)<=12 && (nowe->miesiac)>=1) break;
- else printf("Blad, nie ma tylu miesiecy\n");
- }
- for(;;)
- {
- printf("Podaj dzien, w ktorym ma odbyc sie zadanie: ");
- if((nowe->miesiac)==1 || (nowe->miesiac)==3 || (nowe->miesiac)==5 || (nowe->miesiac)==7 || (nowe->miesiac)==8 || (nowe->miesiac)==10 || (nowe->miesiac)==12)
- {
- scanf("%d", &(nowe->dzien));
- if((nowe->dzien)>=1 && (nowe->dzien)<=31) break;
- else printf("Blad, ten miesiac nie ma tylu dni\n");
- }
- if((nowe->miesiac)==2)
- {
- scanf("%d", &(nowe->dzien));
- if((nowe->dzien)>=1 && (nowe->dzien)<=29) break;
- else printf("Blad, ten miesiac nie ma tylu dni\n");
- }
- if((nowe->miesiac)==4 || (nowe->miesiac)==6 || (nowe->miesiac)==9 || (nowe->miesiac)==11)
- {
- scanf("%d", &(nowe->dzien));
- if((nowe->dzien)>=1 && (nowe->dzien)<=30) break;
- else printf("Blad, ten miesiac nie ma tylu dni\n");
- }
- }
- for(;;)
- {
- printf("Podaj godzine(00-23): ");
- scanf("%d", &(nowe->godzina));
- if((nowe->godzina)>=0 && (nowe->godzina)<=23) break;
- else printf("Blad, nie ma takiej godziny");
- }
- for(;;)
- {
- printf("Podaj priorytet (od 1 do 5)");
- scanf("%d", &(nowe->priorytet));
- if((nowe->priorytet)>=1 && (nowe->priorytet)<=5) break;
- else printf("Nie ma takiej wartosci priorytetu");
- }
- dodaj(lista, nowe);
- }
- //Wypisuje cala liste
- void wypisz_liste(zadanie* lista)
- {
- zadanie* wsk = lista;
- if(lista == NULL)
- printf("LISTA JEST PUSTA");
- else
- printf("Lista zawiera %d elementow: \n", dlugosc_listy(lista) );
- int i = 1;
- while(wsk != NULL)
- {
- 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);
- wsk=wsk->next;
- i++;
- }
- }
- //Usuwa element z listy
- void usun(zadanie** lista, int ID)
- {
- zadanie* poprzedni=NULL;
- zadanie* wsk = *lista;
- int i;
- for(i = 1; i < ID; i++)
- {
- poprzedni=wsk;
- wsk=wsk->next;
- }
- if(poprzedni==NULL)
- {
- (*lista)=(*lista)->next;
- free(wsk);
- }
- else
- {
- poprzedni->next=wsk->next;
- free(wsk);
- }
- }
- // Usuwa zadanie po indeksie
- void usun_zadanie(zadanie** lista)
- {
- int ID;
- printf("Podaj indeks zadania: " );
- scanf("%d", &ID);
- if((ID > dlugosc_listy(*lista)) || (ID < 1))
- {
- printf("Nie ma takiego indeksu");
- }
- else
- {
- usun(lista,ID);
- }
- }
- int usun_data_lista(int usun_rok, int usun_miesiac, int usun_dzien, zadanie** lista)
- {
- zadanie* poprzedni=NULL;
- zadanie* wsk= *lista;
- while ((wsk != NULL) && ((usun_rok!=wsk->rok) || (usun_miesiac!=wsk->miesiac) || (usun_dzien!=wsk->dzien)))
- {
- poprzedni=wsk;
- wsk=wsk->next;
- }
- if(wsk == NULL)
- {
- return 0;
- }
- else
- {
- if(poprzedni==NULL)
- {
- (*lista)=(*lista)->next;
- free(wsk);
- }
- else
- {
- poprzedni->next=wsk->next;
- free(wsk);
- }
- return 1;
- }
- }
- //usuwa po dacie
- void usun_data(zadanie** lista)
- {
- int usun_rok, usun_miesiac, usun_dzien;
- printf("Podaj rok: ");
- scanf("%d", &usun_rok);
- printf("Podaj miesiac: ");
- scanf("%d", &usun_miesiac);
- printf("Podaj dzien: ");
- scanf("%d", &usun_dzien);
- if(usun_data_lista(usun_rok, usun_miesiac, usun_dzien, lista))
- printf("Zadanie zostalo usuniete.");
- else
- printf("Zadanie nie zostalo usuniete, nie ma takiego zadania.");
- }
- void wyszukaj_data_lista(zadanie* lista)
- {
- zadanie* wsk = lista;
- int wyszukaj_rok, wyszukaj_miesiac, wyszukaj_dzien;
- int i=1;
- int wyszukaj_warunek=0;
- if(lista == NULL) printf("LISTA JEST PUSTA");
- else
- {
- printf("Podaj rok: ");
- scanf("%d", &(wyszukaj_rok));
- printf("Podaj miesiac: ");
- scanf("%d", &(wyszukaj_miesiac));
- printf("Podaj dzien: ");
- scanf("%d", &(wyszukaj_dzien));
- while (wsk!=NULL) {
- if((wyszukaj_rok==(wsk->rok)) && (wyszukaj_miesiac==(wsk->miesiac)) && (wyszukaj_dzien==(wsk->dzien)))
- {
- 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);
- wyszukaj_warunek++;
- }
- wsk=wsk->next;
- i++;
- }
- if(wyszukaj_warunek==0) printf("Nie ma zadania w tym dniu");
- }
- }
- void wyszukaj_priorytet_lista(zadanie* lista)
- {
- zadanie* wsk = lista;
- int wyszukaj_priorytet;
- int i=1;
- int wyszukaj_warunek=0;
- if(lista==NULL) printf("Terminarz nie ma zadan");
- else
- {
- printf("Podaj priorytet, po jakim chcesz wyszukac zadanie: ");
- scanf("%d", &(wyszukaj_priorytet));
- while (wsk!=NULL)
- {
- if((wyszukaj_priorytet)==(wsk->priorytet))
- {
- 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);
- wyszukaj_warunek++;
- }
- wsk=wsk->next;
- i++;
- }
- if(wyszukaj_warunek==0) printf("Nie ma zadania o takim priorytecie");
- }
- }
- void edytowanie_lista(zadanie** lista, int ID)
- {
- zadanie *poprzedni=NULL;
- zadanie *wsk = *lista;
- zadanie *nowe =(zadanie*)malloc(sizeof(zadanie));
- int i=1;
- for(i=1;i<ID;i++)
- {
- poprzedni=wsk;
- wsk=wsk->next;
- }
- printf("Podaj tresc zadania: \n");
- scanf(" ");
- fgets(nowe->tresc_zadania,sizeof(nowe->tresc_zadania),stdin);
- for(;;)
- {
- printf("Podaj rok: ");
- scanf("%d", &(nowe->rok));
- if((nowe->rok>=2017) && (nowe->rok)<=3000) break;
- else printf("Wprowadz rok w zakresie od 2017 do 3000");
- }
- for(;;)
- {
- printf("Podaj miesiac w zakresie od 1 do 12: ");
- scanf("%d", &(nowe->miesiac));
- if((nowe->miesiac)<=12 && (nowe->miesiac)>=1) break;
- else printf("Blad, nie ma tylu miesiecy\n");
- }
- for(;;)
- {
- printf("Podaj dzien, w ktorym ma odbyc sie zadanie: ");
- if((nowe->miesiac)==1 || (nowe->miesiac)==3 || (nowe->miesiac)==5 || (nowe->miesiac)==7 || (nowe->miesiac)==8 || (nowe->miesiac)==10 || (nowe->miesiac)==12)
- {
- scanf("%d", &(nowe->dzien));
- if((nowe->dzien)>=1 && (nowe->dzien)<=31) break;
- else printf("Blad, ten miesiac nie ma tylu dni\n");
- }
- if((nowe->miesiac)==2)
- {
- scanf("%d", &(nowe->dzien));
- if((nowe->dzien)>=1 && (nowe->dzien)<=29) break;
- else printf("Blad, ten miesiac nie ma tylu dni\n");
- }
- if((nowe->miesiac)==4 || (nowe->miesiac)==6 || (nowe->miesiac)==9 || (nowe->miesiac)==11)
- {
- scanf("%d", &(nowe->dzien));
- if((nowe->dzien)>=1 && (nowe->dzien)<=30) break;
- else printf("Blad, ten miesiac nie ma tylu dni\n");
- }
- }
- for(;;)
- {
- printf("Podaj godzine(00-23): ");
- scanf("%d", &(nowe->godzina));
- if((nowe->godzina)>=0 && (nowe->godzina)<=23) break;
- else printf("Blad, nie ma takiej godziny");
- }
- for(;;)
- {
- printf("Podaj priorytet (od 1 do 5)");
- scanf("%d", &(nowe->priorytet));
- if((nowe->priorytet)>=1 && (nowe->priorytet)<=5) break;
- else printf("Nie ma takiej wartosci priorytetu");
- }
- }
- void edytowanie(zadanie **lista)
- {
- int ID;
- printf("Podaj indeks zadania ktory chcesz edytowac: ");
- scanf("%d", &ID);
- if(ID<1 || ID>dlugosc_listy(*lista)) printf("Nie ma takiego zadania");
- else edytowanie_lista(lista, ID);
- }
- void zapisywanie(zadanie* lista)
- {
- char nazwa_pliku_zapisywanie[30];
- zadanie* wsk = lista;
- printf("Podaj nazwe pliku do zapisania(z rozszerzeniem .dat): ");
- scanf("%s", nazwa_pliku_zapisywanie);
- FILE *plik = fopen(nazwa_pliku_zapisywanie, "w+b");
- if(plik==NULL)
- {
- printf("Nie udalo sie otworzyc pliku: %s \n", nazwa_pliku_zapisywanie);
- }
- else
- {
- while (wsk!=NULL)
- {
- fwrite(wsk->tresc_zadania, sizeof(wsk->tresc_zadania), 1, plik);
- fwrite(&(wsk->rok), sizeof(wsk->rok), 1, plik);
- fwrite(&(wsk->miesiac), sizeof(wsk->miesiac), 1, plik);
- fwrite(&(wsk->dzien), sizeof(wsk->dzien), 1, plik);
- fwrite(&(wsk->godzina), sizeof(wsk->godzina), 1, plik);
- fwrite(&(wsk->priorytet), sizeof(wsk->priorytet), 1, plik);
- wsk=wsk->next;
- }
- }
- fclose(plik);
- printf("Zapisywanie ukonczone pomyslnie! \n");
- }
- void wczytywanie(zadanie** lista)
- {
- char nazwa_pliku_wczytywanie[30];
- printf("Podaj nazwe pliku z ktorego chcesz wczytac dane (z rozszerzeniem dat) : ");
- scanf("%s", nazwa_pliku_wczytywanie);
- FILE *plik = fopen(nazwa_pliku_wczytywanie, "r+b");
- if (plik==NULL)
- {
- printf("Nie udalo sie otworzyc pliku: %s\n", nazwa_pliku_wczytywanie);
- }
- else
- {
- while(1)
- {
- zadanie *nowe=(zadanie*)malloc(sizeof(zadanie));
- fread(nowe->tresc_zadania, sizeof(nowe->tresc_zadania),1,plik);
- fread(&nowe->rok, sizeof(nowe->rok),1,plik);
- fread(&nowe->miesiac, sizeof(nowe->miesiac),1,plik);
- fread(&nowe->dzien, sizeof(nowe->dzien),1,plik);
- fread(&nowe->godzina, sizeof(nowe->godzina),1,plik);
- fread(&nowe->priorytet, sizeof(nowe->priorytet),1,plik);
- if(feof(plik)) break;
- dodaj(lista, nowe);
- }
- fclose(plik);
- printf("Wczytywanie zakonczone pomyslnie");
- }
- }
- int main()
- {
- zadanie* lista = NULL;
- int opcja=10;
- while(opcja != 0)
- {
- printf("\n\n MENU");
- printf("\n\n\n 0 Wyjscie z programu");
- printf("\n 1 Wpisz dane zadania do bazy");
- printf("\n 2 Usun zadanie o podanym indeksie");
- printf("\n 3 Usun zadanie o podanej dacie");
- printf("\n 4 Wyszukaj zadanie o podanej dacie");
- printf("\n 5 Wyszukaj zadanie o podanym priorytecie");
- printf("\n 6 Wyswietl cala liste\n");
- printf("\n 7 Zapisz zadania do pliku \n");
- printf("\n 8 Wczytaj zadania z pliku \n");
- scanf("%d", &opcja);
- switch(opcja)
- {
- case 1:
- printf("WPISYWANIE ZADANIA DO TERMINARZA \n");
- dodaj_zadanie(&lista);
- break;
- case 2:
- printf("USUWANIE ZADANINA O PODANYM INDEKSIE\n");
- usun_zadanie(&lista);
- break;
- case 3:
- printf("USUWANIE ZADANIA NA BAZIE DATY");
- usun_data(&lista);
- break;
- case 4:
- printf("Wyszukaj zadanie o podanej dacie\n");
- wyszukaj_data_lista(lista);
- break;
- case 5:
- printf("Wyszukaj zadanie o podanym priorytecie\n");
- wyszukaj_priorytet_lista(lista);
- break;
- case 6:
- printf("WYSWIETL CALY TERMINARZ\n");
- wypisz_liste(lista);
- break;
- case 7:
- printf("Zapisz zadania do pliku \n");
- zapisywanie(lista);
- break;
- case 8:
- printf("Wczytaj zadania z pliku \n");
- wczytywanie(&lista);
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment