Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <strings.h>
- #include <string.h>
- #define MAX1 30
- #define MAX2 20
- // STRUKTURA Z INFORMACJAMI O BAZIE NOCLEGOWEJ
- typedef struct {
- char Miasto[MAX1];
- char Lokum[MAX2];
- float KwotaNoc;
- int MinNoc;
- char Piesek[4];
- }BazaNoclegowa;
- //STRUKTURA Z LISTA DO BAZY NOCLEGOWEJ
- struct Lista
- {
- BazaNoclegowa dane;
- struct Lista *nast;
- };
- typedef struct Lista LISTA;
- typedef LISTA *ADRES;
- //STRUKTURA Z INFORMACJAMI O MIJESCACH DO ODWIEDZENIA
- typedef struct{
- char MiastaPlaner[MAX1];
- int CzasPobytu;
- }DoOdwiedzenia;
- //STURKTURA Z LISTA DO DO ODWIEDZENIA
- struct Lista2
- {
- DoOdwiedzenia dane;
- struct Lista2 *nast;
- };
- typedef struct Lista2 LISTA2;
- typedef LISTA2 *ADRES2;
- typedef struct
- {
- char Miasto[MAX1];
- char Lokum[MAX2];
- float KwotaNoc;
- int MinNoc;
- char Piesek[4];
- }NowaBaza;
- struct Lista3
- {
- NowaBaza dane;
- struct Lista3 *nast;
- };
- typedef struct Lista3 LISTA3;
- typedef LISTA3 *ADRES3;
- ADRES dodaj_element_baza(ADRES pierwszy)
- {
- ADRES pom, pol;
- pom = pierwszy;
- pom=(ADRES)malloc(sizeof(LISTA));
- printf("Podaj dane.\n");
- printf("Miasto:\n");
- scanf("%s", pom->dane.Miasto);
- fflush(stdin);
- printf("Lokum:\n");
- gets(pom->dane.Lokum);
- fflush(stdin);
- printf("Kwota za noc:\n");
- scanf("%f", &pom->dane.KwotaNoc);
- printf("Minimalna ilosc nocy: \n");
- scanf("%d", &pom->dane.MinNoc);
- printf("Czy jest mozliwe posiadanie psa: \n");
- scanf("%s", pom->dane.Piesek);
- fflush(stdin);
- if(pierwszy== NULL)
- {
- pierwszy = pom;
- }
- else
- {
- pol=pierwszy;
- while(pol->nast != NULL)
- pol=pol->nast;
- pol->nast = pom;
- }
- pom->nast = NULL;
- return pierwszy;
- }
- ADRES2 dodaj_element_baza2(ADRES2 pierwszy2)
- {
- ADRES2 mop, pol;
- mop = pierwszy2;
- mop=(ADRES2)malloc(sizeof(LISTA2));
- printf("Podaj dane.\n");
- printf("Miasto, ktore chcesz odwiedzic:\n");
- fflush(stdin);
- scanf("%s", mop->dane.MiastaPlaner);
- fflush(stdin);
- printf("Ile dni chcesz spedzic w tym miescie: \n");
- scanf("%d", &mop->dane.CzasPobytu);
- if(pierwszy2 == NULL)
- {
- pierwszy2 = mop;
- }
- else
- {
- pol=pierwszy2;
- while(pol->nast != NULL)
- pol = pol->nast;
- pol->nast = mop;
- }
- mop->nast = NULL;
- return pierwszy2;
- }
- void wyswietl_liste(ADRES pierwszy)
- {
- ADRES pom;
- pom = pierwszy;
- int k = 1;
- if(pom== 0)
- {
- printf("Na liscie nie ma zadnych ofert\n");
- return;
- }
- printf("Oto oferty, ktore znajduja sie na liscie: ");
- while( pom!= NULL)
- {
- printf("\n\nOferta nr %d\n", k);
- printf("\nMiasto: %s\n\nLokum: %s\n\nKwota za noc: %.2f\n\nMinimalna ilosc nocy: %d\n\nMozliwosc posiadania psa: %s\n", pom->dane.Miasto, pom->dane.Lokum, pom->dane.KwotaNoc, pom->dane.MinNoc, pom->dane.Piesek);
- pom = pom->nast;
- k++;
- }
- }
- void wyswietl_liste2(ADRES2 pierwszy2)
- {
- ADRES2 mop;
- mop = pierwszy2;
- int k = 1;
- if(mop == 0)
- {
- printf("Na liscie nie ma zadnych ofert\n");
- return;
- }
- printf("Oto oferty, ktore znajduja sie na liscie: ");
- while( mop!= NULL)
- {
- printf("\n\nOferta nr %d\n", k);
- printf("\nMiasto: %s\n\nIlosc nocy: %d\n\n", mop->dane.MiastaPlaner, mop->dane.CzasPobytu);
- mop = mop->nast;
- k++;
- }
- }
- ADRES odczytaj_plik(ADRES pierwszy)
- {
- BazaNoclegowa pot;
- ADRES pom, pomidor;
- int tworzenie;
- char plik[MAX1];
- fflush(stdin);
- printf("Podaj nazwe pliku do wczytania: ");
- scanf("%s", &plik);
- FILE *kaczka = fopen(plik,"rb");
- while(kaczka == NULL)
- {
- fclose(kaczka);
- printf("Nie ma takiego pliku.\n 1.Stworz nowy plik \n 2.Zamknij program\n");
- scanf("%d", &tworzenie);
- switch (tworzenie)
- {
- case 1:
- printf("Podaj nazwe pliku do stworzenia: \n");
- fflush(stdin);
- scanf("%s", &plik);
- kaczka = fopen(plik,"wb");
- break;
- case 2:
- printf("Dziekuje ze skorzystanie z programu.Do zobaczenia!\n");
- return 0;
- }
- }
- while(fread(&pot , sizeof(BazaNoclegowa) , 1 , kaczka)!= 0)
- {
- pom = (ADRES)malloc(sizeof(LISTA));
- strcpy(pom->dane.Miasto, pot.Miasto);
- strcpy(pom->dane.Lokum, pot.Lokum);
- pom->dane.KwotaNoc = pot.KwotaNoc;
- pom->dane.MinNoc = pot.MinNoc;
- strcpy(pom -> dane.Piesek, pot.Piesek);
- pom->nast = NULL;
- if (pierwszy == NULL)
- {
- pierwszy = pom;
- }
- else
- {
- pomidor = pierwszy;
- while(pomidor->nast != NULL)
- {
- pomidor = pomidor->nast;
- }
- pomidor->nast = pom;
- }
- printf("Udalo sie otworzyc plik."); //exit(0);
- }
- fclose(kaczka);
- system("cls");
- return pierwszy;
- }
- void zapisz(ADRES pierwszy)
- {
- BazaNoclegowa pot;
- ADRES pom;
- char plik[MAX1];
- printf("Podaj nazwe pliku: \n");//wpisywac z .dat, .bin
- fflush(stdin);
- scanf("%s", plik);
- fflush(stdin);
- FILE *kaczka = fopen(plik, "wb");
- pom = pierwszy;
- if( pom == NULL)
- {
- printf("Nie ma elementow do zapisania");
- return;
- }
- /* if( kaczka == NULL)
- {
- printf("Blad otwarcia pliku.");
- return;
- }*/
- while(pom != 0)
- {
- strcpy(pot.Miasto,pom->dane.Miasto);
- strcpy(pot.Lokum, pom->dane.Lokum);
- pot.KwotaNoc = pom->dane.KwotaNoc;
- pot.MinNoc = pom->dane.MinNoc;
- strcpy(pot.Piesek, pom -> dane.Piesek);
- fwrite(&pot, sizeof(BazaNoclegowa), 1, kaczka);
- pom=pom->nast;
- }
- printf("Udalo sie zapisac\n");
- fclose(kaczka);
- return;
- }
- ADRES szukaj_ofert(ADRES pierwszy)
- {
- ADRES pom;
- pom = pierwszy;
- int licznik;
- int wybor, spr;
- char slowo[MAX1], slowopom[MAX1];
- if(pom == NULL)
- {
- printf("Nie mozna wyszukac oferty, gdyz lista baz jest pusta");
- return;
- }
- printf("Podaj w jakim miescie chcesz szukac ofert: ");
- fflush(stdin);
- scanf("%s", slowo);
- while(pom != NULL)
- {
- strcpy(slowopom, (pom->dane.Miasto));
- if(strstr(slowopom,slowo)>0)
- {
- printf("\nLokum: %s\n\nKwota za noc: %.2f\n\nMinimalna ilosc nocy: %d\n\nMozliwosc posiadania psa: %s\n", pom->dane.Lokum, pom->dane.KwotaNoc, pom->dane.MinNoc, pom->dane.Piesek);
- spr++;
- licznik++;
- }
- pom = pom->nast;
- }
- if(spr == 0)
- {
- printf("Brak podanego miasta w liscie ofert.");
- }
- pom = pierwszy;
- return pierwszy;
- }
- void szukaj_najtansza(ADRES pierwszy)
- {
- ADRES pom;
- pom = pierwszy;
- char Miasto[MAX1];
- float puf;
- printf("W miescie: ");
- fflush(stdin);
- gets(Miasto);
- system("cls");
- puf = pom->dane.KwotaNoc;
- while(pom->nast!=NULL)
- {
- if(stricmp(Miasto,pom->dane.Miasto)==0)
- {
- if((pom->dane.KwotaNoc<puf))
- {
- puf = pom->dane.KwotaNoc; //Szukamy po prostu najnizszej ceny za pierwszym podejsciem
- }
- }
- pom = pom -> nast;
- }
- pom = pierwszy; //resetujemy
- printf("Najtansza/e oferta/y:\n\n");
- printf("- Kwota za noc: %.2f to\n \nLokum: %s\n\nMinimalna ilosc nocy: %d\n\nMozliwosc posiadania psa: %s\n", pom->dane.KwotaNoc,pom->dane.Lokum, pom->dane.MinNoc, pom->dane.Piesek);
- while(pom!=NULL)
- {
- if(stricmp(Miasto,pom->dane.Miasto)==0)
- {
- if((pom->nast->dane.KwotaNoc<=puf)) //Tym razem po prostu sprawdzamy czy to minimalna cena
- {
- printf("- Kwota za noc: %.2f to\n \nLokum: %s\n\nMinimalna ilosc nocy: %d\n\nMozliwosc posiadania psa: %s\n", pom->dane.KwotaNoc,pom->dane.Lokum, pom->dane.MinNoc, pom->dane.Piesek);
- }
- }
- pom = pom -> nast;
- }
- }
- void szukaj_zakres(ADRES pierwszy)
- {
- char Miasto[MAX1];
- ADRES pom;
- pom = pierwszy;
- int numer=1,spr=0;
- int start, koniec;
- printf("Podaj zakres cenowy\nOd: ");
- scanf("%d", &start);
- printf("Do: ");
- scanf("%d", &koniec);
- printf("W miescie: ");
- fflush(stdin);
- gets(Miasto);
- system("cls");
- printf("Znalezione oferty, z lat '%d - %d' to:\n\n", start,koniec);
- while(pom!=NULL)
- {
- if((pom->dane.KwotaNoc>=start) && (pom->dane.KwotaNoc<=koniec))
- {
- if(stricmp(Miasto,pom->dane.Miasto)==0)
- {
- printf("Oferta nr %d \nKwota za noc: %.2f \n \nLokum: %s\n\nMinimalna ilosc nocy: %d\n\nMozliwosc posiadania psa: %s\n", numer, pom->dane.KwotaNoc,pom->dane.Lokum, pom->dane.MinNoc, pom->dane.Piesek);
- printf("\n********************************\n\n");
- spr++;
- numer++;
- }
- }
- pom=pom->nast;
- }
- if(spr==0)
- printf("Nie znaleziono takich ofert");
- pom=pierwszy;
- }
- void sprawdzanie(ADRES pierwszy, ADRES2 pierwszy2)
- {
- /* if(pierwszy == 0)
- return druga;
- ADRES Buf = pierwszy;
- while(Buf->nast != 0)
- Buf = Buf->nast;
- Buf->nast = druga;
- return pierwsza;*/
- }
- ADRES sortowanie(ADRES pierwszy)
- {
- ADRES nowy = 0;
- ADRES pom, nim;
- float min;
- pom = pierwszy;
- min = pom->dane.KwotaNoc; //Minimum to pierwszy element
- nim = pom;
- while(pom->nast) //Dla każdego elementu
- {
- if(pom->nast->dane.KwotaNoc < min) //Sprawdzamy czy nastepny nie jest mniejszy niz minimum
- {
- nim = pom; //Jezeli tak to jest naszym nowym "przed minimum"
- min = pom->nast->dane.KwotaNoc;
- }
- pom = pom->nast;
- }
- pom = nim->nast; //zapamietujemy minimum
- nim->nast = pom->nast; //I usuwamy je z oryginalu
- nim->nast = nowy;
- nowy = nim; //Te dwie linijki wrzucaja go na poczatek "nowy"
- return pierwszy;
- }
- int main()
- {
- ADRES pierwszy;
- pierwszy = NULL;
- char slowo[MAX1];
- int liczba, i;
- ADRES pierwszy_baza;
- pierwszy_baza = NULL;
- ADRES2 pierwszy_do;
- pierwszy_do = NULL;
- int wybor;
- do
- {
- printf("MENU\n1. \tOdczytaj plik\n2. \tPokaz liste baz noclegowych\n3. \tPokaz liste propozycji wyjazdowych\n4. \tWyszukaj oferty noclegowe w danym miescie\n5. \tZnajdz najtansza oferte w danym miescie\n6. \tZnajdz oferte w cenie z podanego przedzialu\n7. \tSprawdz, czy oferta noclegowa pasuje do planow wyjazdowych \n8. \tDodaj oferte do listy BazaNoclegowa\n9. \tDodaj propozycje do listy DoOdwiedzenia\n10. \tZapisz oferte/y\n11.\tZapisz minimalna cene wyjazdu\n12.\tSortuj oferty\n13.\tZakoncz.");
- do
- {
- scanf("%d", &wybor);
- if(wybor<1 || wybor>13)
- {
- printf("Zle dane. Wybierz prawidlowe polecenie\n");
- }
- }while(wybor<1 || wybor>13);
- system("cls");
- switch(wybor)
- {
- case 1:
- pierwszy_baza = odczytaj_plik(pierwszy_baza);
- printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
- getch();
- system("cls");
- break;
- case 2: //LISTA BAZ
- wyswietl_liste(pierwszy_baza);
- printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
- getch();
- system("cls");
- break;
- case 3:
- wyswietl_liste2(pierwszy_do);
- printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
- getch();
- system("cls");
- break;
- case 4: //WYSZUKIWANIE BAZ
- pierwszy_baza = szukaj_ofert(pierwszy_baza);
- printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
- getch();
- system("cls");
- break;
- case 5: //SZUKANIE NAJTANSZYCH
- szukaj_najtansza(pierwszy_baza);
- printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
- getch();
- system("cls");
- break;
- case 6: //SZUKANIE W PRZEDZIALE
- szukaj_zakres(pierwszy_baza);
- printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
- getch();
- system("cls");
- break;
- case 7: //SPRAWDZANIE CZY PASUJE DO PLANOW
- sprawdzanie(pierwszy_baza,pierwszy_do);
- printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
- getch();
- system("cls");
- break;
- case 8://DODAWANIE NOWEGO ELEMENTU DO LISTY BAZANOCLEGOWA
- printf("Podaj ile ofert chcesz dodac: ");
- scanf("%d", &liczba);
- for(i=0;i<liczba;i++)
- {
- pierwszy_baza = dodaj_element_baza(pierwszy_baza);
- }
- printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
- getch();
- system("cls");
- break;
- case 9://DODAWANIE NOWEGO ELEMENTU DO LISTY DOODWIEDZENIA
- printf("Podaj ile ofert chcesz dodac: ");
- scanf("%d", &liczba);
- for(i=0;i<liczba;i++)
- {
- pierwszy_do = dodaj_element_baza2(pierwszy_do);
- }
- printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
- getch();
- system("cls");
- break;
- case 10://ZAPISZ OFERTE
- zapisz(pierwszy_baza);
- printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
- getch();
- system("cls");
- break;
- case 11://ZAPISZ MINIMALNA
- zapisz(pierwszy_baza);
- printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
- getch();
- system("cls");
- break;
- case 12:
- pierwszy_baza = sortowanie(pierwszy_baza);
- printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
- getch();
- system("cls");
- break;
- case 13: //ZAKONCZ
- printf("Koniec programu, do zobaczenia\n");
- return 0;
- }
- }while(wybor<10 && wybor>0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement