Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include<windows.h>
- #include<time.h>
- #include<conio.h>
- struct autor // struktura autora
- {
- char nazwisko[20];
- char imie[20];
- };
- struct data // struktura wszystkich informacji w ksiazce
- {
- char tytul[20];
- struct autor autor1; // autorzy zawieraja sie w strukturze ksiazki
- struct autor autor2;
- int ilosc_stron;
- char pozyczona_komu[30];
- char pozyczona_kiedy[11];
- };
- struct ksiazki //struktura ksiazek
- {
- struct data info;
- struct ksiazki*nast; //nastepny element
- };
- struct ksiazki*pocz=NULL;//pierwszy element
- struct ksiazki*kon=NULL;//ostatni element
- void import() //import z pliku
- {
- int i;
- char pwej[50]; // jezeli chcesz podawac wlasna nazwe pliku do wczytania to usun ="lista.txt"; i 2 linie nizej odkomentuj scanf
- printf("Podaj nazwe pliku: ");
- scanf("%s",&pwej); //jezeli chcesz podawac wlasna nazwe to tu odkomentuj
- FILE*plikwej=fopen(pwej,"r");
- if(plikwej==NULL)printf("Plik jest pusty\n");
- else
- {
- pocz=NULL;//importowanie listy od nowa
- while(!feof(plikwej)) // eof
- {
- struct ksiazki*nowy=malloc(sizeof(struct ksiazki)); // stworzenie nowego elementu NOWY i alokacja pamieci
- fscanf(plikwej,"%s",nowy->info.tytul);
- fscanf(plikwej,"%s",nowy->info.autor1.nazwisko);
- fscanf(plikwej,"%s",nowy->info.autor1.imie);
- fscanf(plikwej,"%s",nowy->info.autor2.nazwisko);
- fscanf(plikwej,"%s",nowy->info.autor2.imie);
- fscanf(plikwej,"%d",&nowy->info.ilosc_stron);
- fscanf(plikwej,"%s",nowy->info.pozyczona_komu);
- fscanf(plikwej,"%s",&nowy->info.pozyczona_kiedy); //pobranie wszystkich wartosci z pliku i wrzucenie ich do nowego elementu, do struktury data o nazwie INFO
- nowy->nast=NULL; // utworzenie ostatniego elementu NULL
- if(pocz==NULL)pocz=nowy; // wstawienie elementu do listy na pierwszym miejscu
- else
- {
- struct ksiazki*pom=pocz;//pomocniczy element = poczatkowy, zeby jechac po liscie od poczatku
- while(pom->nast!=NULL) //szukanie ostatniego miejsca w liscie
- {
- pom=pom->nast;
- }
- pom->nast=nowy; // wstawienie za ostatni element
- kon=pom->nast;
- }
- }
- printf("Udalo sie wczytac z pliku\n");
- }
- fclose(plikwej);
- }
- void export()//export do pliku
- {
- int i;
- char pwy[50]="export.txt";//tak samo jak z importem, mozesz podac wlasny plik usuwajac ="export.txt"; i odkomentowac 2 linie nizej
- printf("Podaj nazwe pliku: ");
- //scanf("%s",&pwy);
- FILE*plikwy=fopen(pwy,"w");
- if(pocz==NULL)printf("Brak elementow na liscie!\n");
- else
- {
- struct ksiazki*pom=pocz;
- while(pom!=NULL)
- {
- fprintf(plikwy,"%s ", pom->info.tytul); //wypisanie do pliku poszczegolnych wartosci z INFO
- fprintf(plikwy,"%s ", pom->info.autor1.nazwisko);
- fprintf(plikwy,"%s ", pom->info.autor1.imie);
- fprintf(plikwy,"%s ", pom->info.autor2.nazwisko);
- fprintf(plikwy,"%s ", pom->info.autor2.imie);
- fprintf(plikwy,"%d ", pom->info.ilosc_stron);
- fprintf(plikwy,"%s ", pom->info.pozyczona_komu);
- fprintf(plikwy,"%s ", pom->info.pozyczona_kiedy);
- if(pom->nast!=NULL)fprintf(plikwy,"\n");
- pom=pom->nast;
- }
- printf("Udalo sie zapisac do pliku\n");
- }
- fclose(plikwy);
- }
- int compare(const char *napis1,const char *napis2) // funkcja do porownywania 2 wyrazow, uzywana podczas funkcji sort()
- {
- int i;
- int length;
- if(strlen(napis1)>strlen(napis2))length=strlen(napis2);//ten if wybiera dlugosc krotszego wyrazu, zeby porownywac tylko tyle znakow ile ma krotszy
- else length=strlen(napis1);
- for(i = 0; i < length; i++)//tu jedziemy po kazdym znaku
- {
- if(napis1[i] > napis2[i])//jezeli litera w pierwszym wyrazie jest 'wieksza' od litery w drugim wyrazie, to return 0, else return 1 // dalsza czesc w funkcji sort()
- return 0;
- else if(napis1[i]<napis2[i])return 1;
- }
- return 1;
- }
- int equalStrings(const char *napis1,const char *napis2) // sprawdza czy wyrazy sa takie same
- {
- int i;
- int length;
- if(strlen(napis1)>strlen(napis2))length=strlen(napis2);
- else length=strlen(napis1);
- for(i = 0; i < length; i++)
- {
- if(napis1[i] != napis2[i]) // jesli nie takie same znaki, konczy i return 0
- {
- return 0;
- }
- }
- return 1;
- }
- int findStrings(const char *napis1,const char *napis2) // sprawdza czy wyrazy sa takie same
- {
- int i;
- int length;
- length=strlen(napis1);
- for(i = 0; i < length; i++)
- {
- if(napis1[i] != napis2[i]) // jesli nie takie same znaki, konczy i 0
- {
- return 0;
- }
- }
- return 1;
- }
- void sort()//sortuje nasza liste wzgledem autora i nastepnie po tytule
- {
- int swapped=1; // =1 aby pierwszy raz wejsc do while
- while(swapped==1) //while do przesortowania po autorze
- {
- struct ksiazki*pom=pocz;
- swapped=0;//zmienna do sprawdzenia czy powtarzac zamienianie, =0 zeby nie wchodzilo do while jezeli nie zmieni sie na 1
- while(pom->nast!=NULL){
- if(compare(pom->info.autor1.nazwisko,pom->nast->info.autor1.nazwisko)==0)
- {
- swapped=1;//jezeli sie swapuje to zmienia swapped=1 i powtarza petle while
- struct data temp=pom->info;
- pom->info=pom->nast->info;
- pom->nast->info=temp;
- }
- pom=pom->nast;
- }
- }
- //najpierw sortuje liste po autorach, a nastepnie drugim whilem sortuje po tytule, ale sprawdzajac czy sortuje dla tego samego autora, if(equalStrings ...) w tym miejscu
- swapped=1;
- while(swapped==1) //while do przesortowania po tytule dla tych samych autorow
- {
- struct ksiazki*pom=pocz;
- swapped=0;
- while(pom->nast!=NULL)//
- {
- if(equalStrings(pom->info.autor1.nazwisko,pom->nast->info.autor1.nazwisko)==1)//sprawdza czy ten sam autor, aby sortowac tylko po tytule ale w obrebie tego samego autora
- {
- if(compare(pom->info.tytul,pom->nast->info.tytul)==0)//jesli tak to swap
- {
- swapped=1;
- struct data temp=pom->info;
- pom->info=pom->nast->info;
- pom->nast->info=temp;
- }
- }
- pom=pom->nast;
- }
- }
- }
- void wypisz()//wypisywanie, przechodzenie po wszystkich elementach
- {
- sort();//uzycie funkcji sort() do posortowania elementow w liscie po autorze i tytule, opisana powyzej
- system("@cls||clear");//to sluzy do wyczyszczenia konsoli, powtarzane wielokrotnie podczas dzialania programu
- int i;
- if(pocz==NULL)printf("Brak elementow na liscie!\n");
- else
- {
- printf("Tytul | Autor1 | Autor2 | Strony | Wypozyczona | Kiedy\n\n");
- struct ksiazki*pom=pocz;
- while(pom!=NULL)
- {
- printf("%s", pom->info.tytul);
- if(strlen(pom->info.tytul)<8)printf("%c ",9);
- else printf(" ");
- printf("%s ", pom->info.autor1.nazwisko);
- printf("%s ", pom->info.autor1.imie);
- if(strlen(pom->info.autor1.nazwisko)+strlen(pom->info.autor1.imie)<9)printf("%c%c ",9);
- else printf(" "); // wyrownanie wyswietlania
- printf("%s ", pom->info.autor2.nazwisko);
- printf("%s ", pom->info.autor2.imie);
- if(strlen(pom->info.autor2.nazwisko)+strlen(pom->info.autor2.imie)<13)printf("%c ",9);
- else printf(" ");
- printf("%d\n", pom->info.ilosc_stron);
- printf("Wypozyczona: ");
- if(pom->info.pozyczona_komu[0]=='x')printf(" ");
- else printf("%s",pom->info.pozyczona_komu);
- if(strlen(pom->info.pozyczona_komu)<8)printf("%c%c ",9,9);
- else printf("%c",9);
- printf("%s", pom->info.pozyczona_kiedy);
- printf("\n================================================================================\n");
- printf("\n");
- pom=pom->nast;
- }
- printf("\n");
- }
- }
- void dodaj()//dodawanie elementu
- {
- system("@cls||clear");
- int i;
- struct ksiazki *nowy=malloc(sizeof(struct ksiazki));
- char *name=malloc(sizeof(char)+256);
- if (name == NULL) {
- printf("No memory\n");
- }
- char *name2=malloc(sizeof(char)+256);
- if (name2 == NULL) {
- printf("No memory\n");
- }
- //podanie wartosci
- printf("Podaj tytul: ");
- scanf("%s", nowy->info.tytul);
- printf("Podaj nazwisko1: ");
- scanf("%s", nowy->info.autor1.nazwisko);
- printf("Podaj imie1: ");
- scanf("%s", nowy->info.autor1.imie);
- printf("Podaj nazwisko2: ");
- fgets(name, 256, stdin);
- scanf("%c",nowy->info.autor2.nazwisko);
- printf("Podaj imie2: ");
- fgets(name2, 256, stdin);
- scanf("%c", nowy->info.autor2.imie);
- printf("Podaj ilosc stron: ");
- //scanf("%d",&nowy->info.ilosc_stron);
- strcpy(nowy->info.autor2.nazwisko,"");
- strcpy(nowy->info.autor2.imie, "" );
- free(name);
- free(name2);
- char s[20];//ilosc stron poczatkowo pobieramy jako string w celu sprawdzenia poprawnosci czy podane znaki sa tylko cyframi
- scanf("%s",s);
- boolean valid = TRUE;//ustawiona poczatkowa wartosc na TRUE
- for (i = 0; i < strlen(s); ++i)
- {
- if (!isdigit(s[i]))//sprawdzanie poszczegolnych znakow czy sa cyframi, jesli nie, ustawiamy valid na FALSE
- {
- valid = FALSE;
- break;
- }
- }
- if(valid==FALSE)//jezeli wystapily nie-cyfry, to uwalniamy nowy
- {
- printf("\nBledne podane wartosci\n");
- free(nowy);
- return;
- }
- else
- {
- i = atoi (s);//parsujemy string na int funkcja atoi
- nowy->info.ilosc_stron=i;//podstawienie wartosci
- }
- //tworzenie
- strcpy(nowy->info.pozyczona_komu,"x");//domyslnie ustawianie wartosci komu na x // przy wyswietlanie jest jezeli komu=='x' to wypisuje spacje ' '
- strcpy(nowy->info.pozyczona_kiedy,"0000-00-00");//tak samo tlyko ze na 0000-00-00
- nowy->nast=NULL;//ustawienie next ostatniego elemenut na NULL
- if(pocz==NULL)
- {
- pocz=nowy;//jesli lista pusta
- kon=nowy;//poczatkowy i koncowy to jeden element
- }
- else
- {
- struct ksiazki*pom=pocz;
- while(pom->nast!=NULL)//szukanie ostatniego elementu gdzie ma wstawic nowy
- {
- pom=pom->nast;
- }
- pom->nast=nowy;
- kon=pom->nast;
- }
- }
- void usun()//usuwanie na podstawie indexu
- {
- system("@cls||clear");
- int i=1,nr;
- struct ksiazki*pom=pocz;
- printf("Tytul | Autor");
- printf("\n=================\n");
- while(pom!=NULL)//petla do wypisania wszystkich ksizek z inexem 'i'
- {
- printf("%d. ",i);
- printf("%s | %s%s\n",pom->info.tytul,pom->info.autor1.nazwisko,pom->info.autor1.imie);
- pom=pom->nast;
- i++;
- }
- printf("Podaj numer do usuniecia: ");
- scanf("%d",&nr);
- pom=pocz;
- for(i=1;i<nr;i++){//sprawdzanie czy numer jest dobry
- pom=pom->nast;
- if(pom==NULL){printf("Zly numer");return;}
- }
- if(pom->nast==NULL)//jezeli wybrany element jest ostatni
- {
- pom=pocz;
- for(i=1;i<nr-1;i++)pom=pom->nast;//przechodzi do elementu 'nr'
- pom->nast=NULL;//ustawia na przedostanim, wartosc nastepnego na NULL
- }
- else//jezeli nie ostatni
- {
- struct ksiazki *tmp=pom->nast;//tutaj odbywa sie usuwanie, najpierw wstawiam do zmiennej TMP nastepnika usuwanego elementu
- pom->info=tmp->info;//nastepnie pobieram info do 'pom' z 'tmp'
- pom->nast=tmp->nast;//ustawiam 'tmp' jako nastepnik 'pom'
- }
- }
- void zwrot()//zwracanie ksiazki, ustawia date na 0000-00-00 i pozyczona_komu na 'x'
- {
- system("@cls||clear");
- int i=1,nr,max;
- struct ksiazki*pom=pocz;
- printf("Tytul | Komu wypozyczona | Kiedy wypozyczona");
- printf("\n=================\n");
- while(pom!=NULL)//wypisuje liste
- {
- printf("%d. ",i);
- printf("%s | %s\n",pom->info.tytul,pom->info.pozyczona_komu);
- i++;
- pom=pom->nast;
- }
- printf("Podaj numer do zwrotu: ");
- scanf("%d",&nr);
- pom=pocz;
- for(i=1;i<nr;i++)//sprawdzanie czy dobry numer
- {
- pom=pom->nast;
- if(pom==NULL){printf("Zly numer");return;}
- }
- if(pom->info.pozyczona_komu[0]=='x')printf("Ksiazka nie jest wypozyczona");//jezeli dany element nie jest wypozyczony, czyli ma pozyczona_komu=='x', to wyswietla error i konczy funkcje
- else//jezeli ksiazka jest wypozyczona, to ustawia kiedy i komu na wartosci zerowe jak ponizej
- {
- strcpy(pom->info.pozyczona_kiedy,"0000-00-00");
- strcpy(pom->info.pozyczona_komu,"x");
- }
- }
- void edytuj()
- {
- system("@cls||clear");
- int i=1,nr;
- struct ksiazki*pom=pocz;
- while(pom!=NULL)//wyswietlanie listy
- {
- printf("%d. ",i);
- printf("%s | %s\n",pom->info.tytul,pom->info.pozyczona_komu);
- i++;
- pom=pom->nast;
- }
- printf("Podaj numer do edycji: ");//wybranie elementu po indexie do edycji
- scanf("%d",&nr);
- pom=pocz;
- for(i=1;i<nr;i++)//sprawdzenie czy dobry numer
- {
- pom=pom->nast;
- if(pom==NULL){printf("Zly numer");return;}
- }
- printf("1.Tytul | 2.Autor1 | 3.Autor2 | 4.Strony | 5.Wypozyczona | 6.Kiedy\n");
- printf("%s | %s %s | %s %s | %d | %s | %s",pom->info.tytul,pom->info.autor1.nazwisko,pom->info.autor1.imie,pom->info.autor2.nazwisko,pom->info.autor2.imie,pom->info.ilosc_stron,pom->info.pozyczona_komu,pom->info.pozyczona_kiedy);
- printf("\nWybierz numer kolumny do edycji: ");
- scanf("%d",&nr);//tutaj wybieramy jaka wartosc chce edytowac na podstawie nr kolumny, uzyty switch case
- switch(nr)
- {
- case 1:
- printf("Podaj nowy tytul: ");
- scanf("%s",pom->info.tytul);
- break;
- case 2:
- printf("Podaj nazwisko autora1: ");
- scanf("%s",pom->info.autor1.nazwisko);
- printf("Podaj imie autora1: ");
- scanf("%s",pom->info.autor1.imie);
- break;
- case 3:
- printf("Podaj nazwisko autora2: ");
- scanf("%s",pom->info.autor2.nazwisko);
- printf("Podaj imie autora2: ");
- scanf("%s",pom->info.autor2.imie);
- break;
- case 4:
- printf("Podaj liczbe stron: ");
- scanf("%d",&pom->info.ilosc_stron);
- break;
- case 5:
- printf("Podaj komu wypozyczona: ");
- scanf("%s",pom->info.pozyczona_komu);
- break;
- case 6:
- printf("Podaj kiedy wypozyczona: ");
- scanf("%s",pom->info.pozyczona_kiedy);
- break;
- default:
- printf("Zla kolumna");
- break;
- }
- }
- void wyszukaj()
- {
- system("@cls||clear");
- printf("Wyszukaj\n");
- printf("1. Tytul, Autor1, Autor2, Ilosc stron\n");
- printf("2. Wypozyczone ksiazki\n");
- printf("3. Wypozyczone ksiazki dla danej osoby\n");
- int nr,nr2;
- struct ksiazki*pom=pocz;
- scanf("%d",&nr);
- switch(nr)
- {
- case 1://wyszukiwanie po wybranym z 4 parametrow do wyboru
- system("@cls||clear");
- printf("1.Tytul, 2.Autor1, 3.Autor2, 4.Ilosc stron\n");
- scanf("%d",&nr2);
- int i=1;
- int zm2;
- char zm[50];
- switch(nr2)
- {
- case 1://po tytule, uzyta funkcja findStrings
- system("@cls||clear");
- printf("Podaj Tytul: ");
- scanf("%s",zm);
- while(pom!=NULL)
- {
- if(findStrings(zm,pom->info.tytul)==1){// do findStrings podajemy parametry dwóch porównywanych elementów, porownujemy podana zmienna i tytul elementu jadac po calej liscie
- printf("%d. ",i);
- printf("%s | %s\n",pom->info.tytul,pom->info.autor1.nazwisko);
- i++;
- }
- pom=pom->nast;
- }
- break;
- case 2:
- system("@cls||clear");
- printf("Podaj nazwisko autor1: ");
- scanf("%s",zm);
- while(pom!=NULL)
- {
- if(findStrings(zm,pom->info.autor1.nazwisko)==1){//tutaj tak samo jak powyzszy przyklad, tylko ze porownujemy z nazwisko
- printf("%d. ",i);
- printf("%s | %s\n",pom->info.tytul,pom->info.autor1.nazwisko);
- i++;
- }
- pom=pom->nast;
- }
- break;
- case 3:
- system("@cls||clear");
- printf("Podaj nazwisko autor2: ");
- scanf("%s",zm);
- while(pom!=NULL)
- {
- if(findStrings(zm,pom->info.autor2.nazwisko)==1){
- printf("%d. ",i);
- printf("%s | %s\n",pom->info.tytul,pom->info.autor1.nazwisko);
- i++;
- }
- pom=pom->nast;
- }
- break;
- case 4:
- system("@cls||clear");
- printf("Podaj ilosc stron: ");
- scanf("%d",&zm2);
- while(pom!=NULL)
- {
- if(zm2==pom->info.ilosc_stron){//uzyta inna zmienna, poniewaz zm jest stringiem, a zm2 jest intem
- printf("%d. ",i);
- printf("%s | %s | %d\n",pom->info.tytul,pom->info.autor1.nazwisko,pom->info.ilosc_stron);
- i++;
- }
- pom=pom->nast;
- }
- break;
- default:
- break;
- }
- break;
- case 2:
- system("@cls||clear");
- printf("Ksiazki ktore zostaly pozyczone\n");
- i=1;
- while(pom!=NULL)//wypisanie wszystkich wypozyczonych ksiazek
- {
- //printf("komu %s\n",pom->info.pozyczona_komu);
- if(pom->info.pozyczona_komu[0]!='x'){//jezeli ksiazka jest wypozyczona, to pole pozyczona_komu jest uzupelnione inna wartoscia niz 'x'
- printf("%d. ",i);
- printf("%s | %s\n",pom->info.tytul,pom->info.autor1.nazwisko);
- i++;
- }
- pom=pom->nast;
- }
- break;
- case 3:
- system("@cls||clear");
- printf("Ksiazki ktore zostaly pozyczone konkretnej osobie\n");
- printf("Podaj nazwisko komu pozyczona: ");
- scanf("%s",zm);
- i=1;
- while(pom!=NULL)//wypisanie ksiazek pozyczonych dla konkretnej osoby
- {
- if(findStrings(zm,pom->info.pozyczona_komu)==1){//funkcja findStrings porownuje 2 wyrazy, jezeli sa takie same zwraca 1, jezeli inne zwraca 0
- printf("%d. ",i);
- printf("%s | %s | %s\n",pom->info.tytul,pom->info.autor1.nazwisko,pom->info.pozyczona_komu);//jezeli findStrings==1 to znaczy ze wypozyczona_komu == to co podalismy
- i++;
- }
- pom=pom->nast;
- }
- break;
- case 4:
- // wyszukiwanie po dacie
- system("@cls||clear");
- printf("Ksiazki nieoddane w terminie\n");
- printf("Podaj okres wypozyczenia: ");
- scanf("%d",&zm2);//podajemy jaki jest okres wypozyczenia, jezeli ktos sie spoznil z oddaniem o 'zm2' dni, to zostanie wyswietlone na liscie
- i=1;
- //tutaj uzyte nowe structury, time_t
- int day,month,year;
- time_t nowTime = time(0);//te 4 linie wykorzystane do stworzenia structury tm, posiadajacy dzisiejsza date, tzn. rok miesiac dzien godzina minuta sekunda, nizej wytlumaczone
- struct tm timeNowStruct;
- timeNowStruct = *localtime(&nowTime);
- time_t x = mktime(&timeNowStruct);// tutaj tworzymy Daty ktora potrzebna jest do funkcji difftime(), nizej wytlumaczone
- printf("==========================================\n");
- printf("Tytul | Kto wypozyczyl | Data wypozyczenia\n");
- printf("==========================================\n");
- while(pom!=NULL)
- {
- if(pom->info.pozyczona_komu[0]!='x'){
- if(sscanf(pom->info.pozyczona_kiedy, "%d-%d-%d", &year, &month, &day) != EOF)//pobieranie pozyczona_kiedy do zmiennych year,month,day
- {
- struct tm currentDate = {0,0,0,day,month-1,year-1900};//currentDate jest w formacie sekundy:minuty:godziny:dzien:mieisac:rok
- //od miesiaca odejmujemy 1 i od roku 1900, poniewaz sa jakos dziwnie przeliczane wartosci w structurze tm na Date
- time_t y = mktime(¤tDate);//stworzenie Daty funkcja mktime()
- int difference = difftime(x, y) / (60 * 60 * 24);//funkcja difftime() potrzebuje jako parametry dwie zmienne w formacie Date, ktora stworzylismy za pomoca mktime(),
- //difftime(x,y) podaje ilosc sekund pomiedzy dwoma datami, dzielimy j¹ przez (60*60*24), zeby wyszlo nam ile dni jest roznicy od daty dzisiejszej
- if(difference>zm2)//jezeli wynik z difftime() jest wiekszy od zmiennej podanje na poczatku, to znaczy ze ktos nie oddal ksiazki w terminie
- {
- printf("%d. ",i);//taka ksiazka zostanie wypisana na liscie
- i++;
- printf("%s | %s | %s | ",pom->info.tytul,pom->info.pozyczona_komu,pom->info.pozyczona_kiedy);
- printf("Po terminie: %d dni\n", difference);//wypisuje takze ile dni jest wypozyczona,
- //tutaj wkradl sie blad, ten printf wyswietla ile dni ksiazka jest pozyczona, wiec albo zmien tekst na "Ksiazka wypozyczona przez : %d dni\n" , albo
- //zeby wyswietlic ile dni ksiazka jest po terminie po prostu w printf jako %d podaj zamiast difference, difference-zm2
- }
- }
- }
- pom=pom->nast;
- }
- break;
- default:// jezeli poda zly numer, to wyswietli blad i nic nie zrobi
- printf("Zla kolumna");
- break;
- }
- }
- sortWedlug(int x)// funkcja wykorzystana do sortowania wzgledem jakiejs wartosci: tytul, nazwisko autora lub ilosc stron, ify napisane zeby nie tworzyc 3 oddzielnych funkcji
- {
- //jej parametrem jest numer kolumny, ktory podajemy, wykorzystujac funkcjonalnosc z menu numer (7)Wypisz Liste Wedlug
- //funkcja ta wykorzystuje ta same liste ktora wyswietlana jest na poczatku programu, wiec na koniec musimy uzyc funkcji sort() do posortowania spowrotem do stanu pierwotnego
- int swapped=1;
- while(swapped==1) //while do przesortowania po autorze
- {
- struct ksiazki*pom=pocz;
- swapped=0;//zmienna do sprawdzenia czy powtarzac zamienianie
- while(pom->nast!=NULL){
- if(x==1)
- {
- if(compare(pom->info.tytul,pom->nast->info.tytul)==0)
- {
- swapped=1;//jezeli sie swapuje to zmienia swapped=1 i powtarza petle while
- struct data temp=pom->info;
- pom->info=pom->nast->info;
- pom->nast->info=temp;
- }
- }
- else if(x==2)
- {
- if(compare(pom->info.autor1.nazwisko,pom->nast->info.autor1.nazwisko)==0)
- {
- swapped=1;//jezeli sie swapuje to zmienia swapped=1 i powtarza petle while
- struct data temp=pom->info;
- pom->info=pom->nast->info;
- pom->nast->info=temp;
- }
- }
- else if(x==3)
- {
- if(pom->info.ilosc_stron>pom->nast->info.ilosc_stron)
- {
- swapped=1;//jezeli sie swapuje to zmienia swapped=1 i powtarza petle while
- struct data temp=pom->info;
- pom->info=pom->nast->info;
- pom->nast->info=temp;
- }
- }
- pom=pom->nast;
- }
- }
- }
- wypiszWedlug()
- {
- system("@cls||clear");
- printf("Wedlug czego chcesz posortowac: 1.Tytul 2.Nazwisko autora 3.Ilosc stron:\n");
- int i=1, x;
- scanf("%d",&x);
- sortWedlug(x);//tutaj wykorzystana funkcja sortWedlug opisana powyzej
- system("@cls||clear");
- if(x==1)printf("\nSortowanie wedlug tytulu");
- else if(x==2)printf("\nSortowanie wedlug nazwiska autora");
- else if(x==3)printf("\nSortowanie wedlug ilosci stron");
- if(pocz==NULL)printf("Brak elementow na liscie!\n");
- else
- {
- printf("\nTytul | Autor1 | Autor2 | Strony | Wypozyczona | Kiedy\n\n");
- struct ksiazki*pom=pocz;
- while(pom!=NULL)//tutaj tylko wypisanie posortowanej listy
- {
- printf("%d. ",i);
- printf("%s | %s | %s | %d\n",pom->info.tytul,pom->info.autor1.nazwisko,pom->info.pozyczona_komu,pom->info.ilosc_stron);
- i++;
- pom=pom->nast;
- }
- printf("\n");
- }
- sort();//wracamy posortowanie do stanu poczatkowego, czyli tak jak w poleceniu, posortowane po autorze i tytule
- }
- int main()
- {
- import();
- wypisz();
- int z;
- do//petla do wyswietlania menu
- {
- printf("\n------------------------------\n");
- printf("(1) - import z pliku\n");
- printf("(2) - export do pliku\n");
- printf("(3) - dodaj ksiazke\n");
- printf("(4) - usun ksiazke\n");
- printf("(5) - wyszukaj\n");
- printf("(6) - wypisz liste wzgledem tytulow + autorow\n");
- printf("(7) - wypisz liste wedlug:\n");
- printf("(8) - zwrot ksiazki\n");
- printf("(9) - edytuj\n");
- printf("(0) - wyjscie\n");
- printf("------------------------------\n");
- scanf("%d",&z);
- printf("\n");
- if(z==1)import();
- if(z==2)export();
- if(z==3)dodaj();
- if(z==4){usun();system("@cls||clear");wypisz();}//usuwamy element,czyscimy ekran, a nastepnie znowu wypisujemy liste
- if(z==5)wyszukaj();
- if(z==6)wypisz();
- if(z==7)wypiszWedlug();
- if(z==8)zwrot();
- if(z==9)edytuj();
- }while(z!=0);
- export();
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement