Advertisement
Guest User

Untitled

a guest
Feb 1st, 2015
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.55 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <strings.h>
  4. #include <string.h>
  5.  
  6. #define MAX1 30
  7. #define MAX2 20
  8.  
  9. // STRUKTURA Z INFORMACJAMI O BAZIE NOCLEGOWEJ
  10. typedef struct {
  11. char Miasto[MAX1];
  12. char Lokum[MAX2];
  13. float KwotaNoc;
  14. int MinNoc;
  15. char Piesek[4];
  16. }BazaNoclegowa;
  17.  
  18. //STRUKTURA Z LISTA DO BAZY NOCLEGOWEJ
  19. struct Lista
  20. {
  21. BazaNoclegowa dane;
  22. struct Lista *nast;
  23. };
  24.  
  25. typedef struct Lista LISTA;
  26. typedef LISTA *ADRES;
  27.  
  28. //STRUKTURA Z INFORMACJAMI O MIJESCACH DO ODWIEDZENIA
  29. typedef struct{
  30. char MiastaPlaner[MAX1];
  31. int CzasPobytu;
  32. }DoOdwiedzenia;
  33.  
  34. //STURKTURA Z LISTA DO DO ODWIEDZENIA
  35. struct Lista2
  36. {
  37. DoOdwiedzenia dane;
  38. struct Lista2 *nast;
  39. };
  40.  
  41. typedef struct Lista2 LISTA2;
  42. typedef LISTA2 *ADRES2;
  43.  
  44. typedef struct
  45. {
  46. char Miasto[MAX1];
  47. char Lokum[MAX2];
  48. float KwotaNoc;
  49. int MinNoc;
  50. char Piesek[4];
  51. }NowaBaza;
  52.  
  53. struct Lista3
  54. {
  55. NowaBaza dane;
  56. struct Lista3 *nast;
  57. };
  58.  
  59. typedef struct Lista3 LISTA3;
  60. typedef LISTA3 *ADRES3;
  61.  
  62. ADRES dodaj_element_baza(ADRES pierwszy)
  63. {
  64. ADRES pom, pol;
  65. pom = pierwszy;
  66. pom=(ADRES)malloc(sizeof(LISTA));
  67.  
  68. printf("Podaj dane.\n");
  69. printf("Miasto:\n");
  70. scanf("%s", pom->dane.Miasto);
  71. fflush(stdin);
  72. printf("Lokum:\n");
  73. gets(pom->dane.Lokum);
  74. fflush(stdin);
  75. printf("Kwota za noc:\n");
  76. scanf("%f", &pom->dane.KwotaNoc);
  77. printf("Minimalna ilosc nocy: \n");
  78. scanf("%d", &pom->dane.MinNoc);
  79. printf("Czy jest mozliwe posiadanie psa: \n");
  80. scanf("%s", pom->dane.Piesek);
  81. fflush(stdin);
  82.  
  83. if(pierwszy== NULL)
  84. {
  85. pierwszy = pom;
  86. }
  87. else
  88. {
  89. pol=pierwszy;
  90. while(pol->nast != NULL)
  91. pol=pol->nast;
  92. pol->nast = pom;
  93. }
  94. pom->nast = NULL;
  95.  
  96. return pierwszy;
  97. }
  98. ADRES2 dodaj_element_baza2(ADRES2 pierwszy2)
  99. {
  100. ADRES2 mop, pol;
  101. mop = pierwszy2;
  102. mop=(ADRES2)malloc(sizeof(LISTA2));
  103.  
  104. printf("Podaj dane.\n");
  105. printf("Miasto, ktore chcesz odwiedzic:\n");
  106. fflush(stdin);
  107. scanf("%s", mop->dane.MiastaPlaner);
  108. fflush(stdin);
  109. printf("Ile dni chcesz spedzic w tym miescie: \n");
  110. scanf("%d", &mop->dane.CzasPobytu);
  111.  
  112. if(pierwszy2 == NULL)
  113. {
  114. pierwszy2 = mop;
  115. }
  116. else
  117. {
  118. pol=pierwszy2;
  119. while(pol->nast != NULL)
  120. pol = pol->nast;
  121. pol->nast = mop;
  122. }
  123. mop->nast = NULL;
  124.  
  125. return pierwszy2;
  126. }
  127.  
  128. void wyswietl_liste(ADRES pierwszy)
  129. {
  130. ADRES pom;
  131. pom = pierwszy;
  132. int k = 1;
  133. if(pom== 0)
  134. {
  135. printf("Na liscie nie ma zadnych ofert\n");
  136. return;
  137. }
  138. printf("Oto oferty, ktore znajduja sie na liscie: ");
  139. while( pom!= NULL)
  140. {
  141. printf("\n\nOferta nr %d\n", k);
  142. 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);
  143. pom = pom->nast;
  144. k++;
  145. }
  146. }
  147. void wyswietl_liste2(ADRES2 pierwszy2)
  148. {
  149. ADRES2 mop;
  150. mop = pierwszy2;
  151. int k = 1;
  152. if(mop == 0)
  153. {
  154. printf("Na liscie nie ma zadnych ofert\n");
  155. return;
  156. }
  157. printf("Oto oferty, ktore znajduja sie na liscie: ");
  158. while( mop!= NULL)
  159. {
  160. printf("\n\nOferta nr %d\n", k);
  161. printf("\nMiasto: %s\n\nIlosc nocy: %d\n\n", mop->dane.MiastaPlaner, mop->dane.CzasPobytu);
  162. mop = mop->nast;
  163. k++;
  164. }
  165. }
  166.  
  167.  
  168. ADRES odczytaj_plik(ADRES pierwszy)
  169. {
  170. BazaNoclegowa pot;
  171. ADRES pom, pomidor;
  172. int tworzenie;
  173. char plik[MAX1];
  174. fflush(stdin);
  175. printf("Podaj nazwe pliku do wczytania: ");
  176. scanf("%s", &plik);
  177. FILE *kaczka = fopen(plik,"rb");
  178. while(kaczka == NULL)
  179. {
  180. fclose(kaczka);
  181. printf("Nie ma takiego pliku.\n 1.Stworz nowy plik \n 2.Zamknij program\n");
  182. scanf("%d", &tworzenie);
  183. switch (tworzenie)
  184. {
  185. case 1:
  186. printf("Podaj nazwe pliku do stworzenia: \n");
  187. fflush(stdin);
  188. scanf("%s", &plik);
  189. kaczka = fopen(plik,"wb");
  190. break;
  191. case 2:
  192. printf("Dziekuje ze skorzystanie z programu.Do zobaczenia!\n");
  193. return 0;
  194. }
  195. }
  196. while(fread(&pot , sizeof(BazaNoclegowa) , 1 , kaczka)!= 0)
  197. {
  198. pom = (ADRES)malloc(sizeof(LISTA));
  199. strcpy(pom->dane.Miasto, pot.Miasto);
  200. strcpy(pom->dane.Lokum, pot.Lokum);
  201. pom->dane.KwotaNoc = pot.KwotaNoc;
  202. pom->dane.MinNoc = pot.MinNoc;
  203. strcpy(pom -> dane.Piesek, pot.Piesek);
  204. pom->nast = NULL;
  205.  
  206. if (pierwszy == NULL)
  207. {
  208. pierwszy = pom;
  209. }
  210. else
  211. {
  212. pomidor = pierwszy;
  213. while(pomidor->nast != NULL)
  214. {
  215. pomidor = pomidor->nast;
  216. }
  217. pomidor->nast = pom;
  218. }
  219. printf("Udalo sie otworzyc plik."); //exit(0);
  220. }
  221. fclose(kaczka);
  222. system("cls");
  223. return pierwszy;
  224. }
  225. void zapisz(ADRES pierwszy)
  226. {
  227. BazaNoclegowa pot;
  228. ADRES pom;
  229. char plik[MAX1];
  230. printf("Podaj nazwe pliku: \n");//wpisywac z .dat, .bin
  231. fflush(stdin);
  232. scanf("%s", plik);
  233. fflush(stdin);
  234. FILE *kaczka = fopen(plik, "wb");
  235. pom = pierwszy;
  236.  
  237. if( pom == NULL)
  238. {
  239. printf("Nie ma elementow do zapisania");
  240. return;
  241. }
  242. /* if( kaczka == NULL)
  243. {
  244. printf("Blad otwarcia pliku.");
  245. return;
  246. }*/
  247.  
  248. while(pom != 0)
  249. {
  250. strcpy(pot.Miasto,pom->dane.Miasto);
  251. strcpy(pot.Lokum, pom->dane.Lokum);
  252. pot.KwotaNoc = pom->dane.KwotaNoc;
  253. pot.MinNoc = pom->dane.MinNoc;
  254. strcpy(pot.Piesek, pom -> dane.Piesek);
  255.  
  256. fwrite(&pot, sizeof(BazaNoclegowa), 1, kaczka);
  257. pom=pom->nast;
  258.  
  259. }
  260. printf("Udalo sie zapisac\n");
  261. fclose(kaczka);
  262. return;
  263. }
  264. ADRES szukaj_ofert(ADRES pierwszy)
  265. {
  266. ADRES pom;
  267. pom = pierwszy;
  268. int licznik;
  269. int wybor, spr;
  270. char slowo[MAX1], slowopom[MAX1];
  271. if(pom == NULL)
  272. {
  273. printf("Nie mozna wyszukac oferty, gdyz lista baz jest pusta");
  274. return;
  275. }
  276. printf("Podaj w jakim miescie chcesz szukac ofert: ");
  277. fflush(stdin);
  278. scanf("%s", slowo);
  279. while(pom != NULL)
  280. {
  281. strcpy(slowopom, (pom->dane.Miasto));
  282. if(strstr(slowopom,slowo)>0)
  283. {
  284. 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);
  285. spr++;
  286. licznik++;
  287. }
  288. pom = pom->nast;
  289. }
  290. if(spr == 0)
  291. {
  292. printf("Brak podanego miasta w liscie ofert.");
  293. }
  294. pom = pierwszy;
  295. return pierwszy;
  296. }
  297. void szukaj_najtansza(ADRES pierwszy)
  298. {
  299. ADRES pom;
  300. pom = pierwszy;
  301. char Miasto[MAX1];
  302. float puf;
  303. printf("W miescie: ");
  304. fflush(stdin);
  305. gets(Miasto);
  306. system("cls");
  307. puf = pom->dane.KwotaNoc;
  308. while(pom->nast!=NULL)
  309. {
  310. if(stricmp(Miasto,pom->dane.Miasto)==0)
  311. {
  312. if((pom->dane.KwotaNoc<puf))
  313. {
  314. puf = pom->dane.KwotaNoc; //Szukamy po prostu najnizszej ceny za pierwszym podejsciem
  315. }
  316. }
  317. pom = pom -> nast;
  318. }
  319.  
  320. pom = pierwszy; //resetujemy
  321. printf("Najtansza/e oferta/y:\n\n");
  322.  
  323. 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);
  324. while(pom!=NULL)
  325. {
  326. if(stricmp(Miasto,pom->dane.Miasto)==0)
  327. {
  328. if((pom->nast->dane.KwotaNoc<=puf)) //Tym razem po prostu sprawdzamy czy to minimalna cena
  329. {
  330. 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);
  331. }
  332. }
  333. pom = pom -> nast;
  334. }
  335. }
  336. void szukaj_zakres(ADRES pierwszy)
  337. {
  338. char Miasto[MAX1];
  339. ADRES pom;
  340. pom = pierwszy;
  341. int numer=1,spr=0;
  342. int start, koniec;
  343.  
  344. printf("Podaj zakres cenowy\nOd: ");
  345. scanf("%d", &start);
  346. printf("Do: ");
  347. scanf("%d", &koniec);
  348. printf("W miescie: ");
  349. fflush(stdin);
  350. gets(Miasto);
  351. system("cls");
  352. printf("Znalezione oferty, z lat '%d - %d' to:\n\n", start,koniec);
  353. while(pom!=NULL)
  354. {
  355. if((pom->dane.KwotaNoc>=start) && (pom->dane.KwotaNoc<=koniec))
  356. {
  357. if(stricmp(Miasto,pom->dane.Miasto)==0)
  358. {
  359. 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);
  360. printf("\n********************************\n\n");
  361. spr++;
  362. numer++;
  363. }
  364. }
  365. pom=pom->nast;
  366. }
  367. if(spr==0)
  368. printf("Nie znaleziono takich ofert");
  369. pom=pierwszy;
  370. }
  371. void sprawdzanie(ADRES pierwszy, ADRES2 pierwszy2)
  372. {
  373. /* if(pierwszy == 0)
  374. return druga;
  375.  
  376. ADRES Buf = pierwszy;
  377. while(Buf->nast != 0)
  378. Buf = Buf->nast;
  379. Buf->nast = druga;
  380.  
  381. return pierwsza;*/
  382. }
  383.  
  384. ADRES sortowanie(ADRES pierwszy)
  385. {
  386. ADRES nowy = 0;
  387. ADRES pom, nim;
  388. float min;
  389.  
  390. pom = pierwszy;
  391. min = pom->dane.KwotaNoc; //Minimum to pierwszy element
  392. nim = pom;
  393.  
  394. while(pom->nast) //Dla każdego elementu
  395. {
  396. if(pom->nast->dane.KwotaNoc < min) //Sprawdzamy czy nastepny nie jest mniejszy niz minimum
  397. {
  398. nim = pom; //Jezeli tak to jest naszym nowym "przed minimum"
  399. min = pom->nast->dane.KwotaNoc;
  400. }
  401. pom = pom->nast;
  402. }
  403. pom = nim->nast; //zapamietujemy minimum
  404. nim->nast = pom->nast; //I usuwamy je z oryginalu
  405.  
  406. nim->nast = nowy;
  407. nowy = nim; //Te dwie linijki wrzucaja go na poczatek "nowy"
  408.  
  409. return pierwszy;
  410. }
  411. int main()
  412. {
  413. ADRES pierwszy;
  414. pierwszy = NULL;
  415. char slowo[MAX1];
  416. int liczba, i;
  417. ADRES pierwszy_baza;
  418. pierwszy_baza = NULL;
  419. ADRES2 pierwszy_do;
  420. pierwszy_do = NULL;
  421.  
  422.  
  423. int wybor;
  424. do
  425. {
  426. 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.");
  427. do
  428. {
  429. scanf("%d", &wybor);
  430. if(wybor<1 || wybor>13)
  431. {
  432. printf("Zle dane. Wybierz prawidlowe polecenie\n");
  433. }
  434. }while(wybor<1 || wybor>13);
  435.  
  436. system("cls");
  437.  
  438.  
  439. switch(wybor)
  440. {
  441. case 1:
  442. pierwszy_baza = odczytaj_plik(pierwszy_baza);
  443. printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
  444. getch();
  445. system("cls");
  446. break;
  447.  
  448. case 2: //LISTA BAZ
  449. wyswietl_liste(pierwszy_baza);
  450. printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
  451. getch();
  452. system("cls");
  453. break;
  454. case 3:
  455. wyswietl_liste2(pierwszy_do);
  456. printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
  457. getch();
  458. system("cls");
  459. break;
  460.  
  461. case 4: //WYSZUKIWANIE BAZ
  462. pierwszy_baza = szukaj_ofert(pierwszy_baza);
  463. printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
  464. getch();
  465. system("cls");
  466. break;
  467.  
  468. case 5: //SZUKANIE NAJTANSZYCH
  469. szukaj_najtansza(pierwszy_baza);
  470. printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
  471. getch();
  472. system("cls");
  473. break;
  474.  
  475. case 6: //SZUKANIE W PRZEDZIALE
  476. szukaj_zakres(pierwszy_baza);
  477. printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
  478. getch();
  479. system("cls");
  480. break;
  481.  
  482. case 7: //SPRAWDZANIE CZY PASUJE DO PLANOW
  483. sprawdzanie(pierwszy_baza,pierwszy_do);
  484. printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
  485. getch();
  486. system("cls");
  487. break;
  488.  
  489. case 8://DODAWANIE NOWEGO ELEMENTU DO LISTY BAZANOCLEGOWA
  490. printf("Podaj ile ofert chcesz dodac: ");
  491. scanf("%d", &liczba);
  492. for(i=0;i<liczba;i++)
  493. {
  494. pierwszy_baza = dodaj_element_baza(pierwszy_baza);
  495. }
  496. printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
  497. getch();
  498. system("cls");
  499. break;
  500.  
  501. case 9://DODAWANIE NOWEGO ELEMENTU DO LISTY DOODWIEDZENIA
  502. printf("Podaj ile ofert chcesz dodac: ");
  503. scanf("%d", &liczba);
  504. for(i=0;i<liczba;i++)
  505. {
  506. pierwszy_do = dodaj_element_baza2(pierwszy_do);
  507. }
  508. printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
  509. getch();
  510. system("cls");
  511. break;
  512.  
  513. case 10://ZAPISZ OFERTE
  514. zapisz(pierwszy_baza);
  515. printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
  516. getch();
  517. system("cls");
  518. break;
  519.  
  520. case 11://ZAPISZ MINIMALNA
  521. zapisz(pierwszy_baza);
  522. printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
  523. getch();
  524. system("cls");
  525. break;
  526.  
  527. case 12:
  528. pierwszy_baza = sortowanie(pierwszy_baza);
  529. printf("\nWcisnij dowolny klawisz aby wrocic do menu.\n");
  530. getch();
  531. system("cls");
  532. break;
  533.  
  534. case 13: //ZAKONCZ
  535. printf("Koniec programu, do zobaczenia\n");
  536. return 0;
  537. }
  538. }while(wybor<10 && wybor>0);
  539. return 0;
  540. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement