Guest User

Untitled

a guest
May 25th, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.65 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<string.h>
  4. #include<ctype.h>
  5.  
  6.  
  7. struct rekord
  8. {
  9. int id;
  10. char imie[16];
  11. char nazwisko[32];
  12. char numer[10];
  13. char wiek[3];
  14. char miejscowosc[32];
  15. char dostawca[16];
  16. struct rekord *next;
  17. };
  18.  
  19. char dostawcy[4][17];
  20. struct rekord *poczatek = NULL; //wskaznik na poczatek listy
  21. //DEKLARACJE FUNKCJI
  22.  
  23. void wypisz_dostawcow();
  24. struct rekord *szukaj_id(int id);
  25. void wyswietl();
  26. int dodaj_rekord();
  27. void usun_wszystko();
  28. int usun_rekord();
  29. int edycja_rekordu();
  30. int zapisz();
  31. void wypisz_rekord(struct rekord *rekord);
  32. int koniec();
  33. int wczytaj();
  34. void dostaw();
  35. void usun_dost(int ktory);
  36. void edycja_dost(int ktory);
  37. void wyswietl_dost();
  38. void dodaj_list(struct rekord *rekord);
  39.  
  40. int edycja_z_usuwaniem()
  41. {
  42. struct rekord *rekord;
  43. char name[16], surname[32], number[10], age[3], city[32];
  44. int ids, dost, i=0;
  45. printf("Podaj id rekordu ktory chcesz edytowac: \n");
  46. scanf("%d", &ids);
  47. while(getchar()!='\n');
  48. rekord = szukaj_id(ids);
  49. if(rekord == NULL)
  50. puts("Nie ma takiego rekordu");
  51. printf("Podaj imie: \n");
  52. scanf("%s", name); //sprawdz co to znaczy
  53. while(getchar()!='\n');
  54. //zabawa z wielkosciami liter
  55. if( name[i] >= 'a' && name[i] <= 'z') name[i]=toupper(name[i]); //jak pierwsza litera mala to robimy wielka
  56. for(i=1; i < strlen(name); i++)
  57. {
  58. if ( name[i] < 'a' || name[i] > 'z')
  59. {
  60. printf("Blednie wpisane dane. \n");
  61. return 1;
  62. }
  63. }
  64. // NAZWISKO
  65.  
  66. i=0;
  67. printf("Podaj nazwisko: \n");
  68. scanf("%s", surname); //sprawdz co to znaczy
  69. while(getchar()!='\n');
  70. if (surname[i] >= 'a' && surname[i] <= 'z') surname[i]=toupper(surname[i]); //jak pierwsza litera mala to robimy wielka
  71. /*if (surname[i] < 'A' || surname[i] > 'Z')
  72. {
  73. printf("Blednie wpisane dane. 1\n");
  74. return 1;
  75. }*/
  76. for(i=1; i < strlen(surname); i++)
  77. {
  78. if ( surname[i] < 'a' || surname[i] > 'z')
  79. {
  80. printf("Blednie wpisane dane. 2\n");
  81. return 1;
  82. }
  83. }
  84.  
  85. i=0;
  86. printf("Podaj numer: \n");
  87. scanf("%s", number); //sprawdz co to znaczy
  88. while(getchar()!='\n');
  89. while (i<strlen(number))
  90. {
  91. if ( number[i] < '0' || number[i] > '9') //w ASCII oczywiscie
  92. {
  93. printf("Blednie wpisane dane. \n");
  94. return 1;
  95. }
  96. i++;
  97. }
  98.  
  99. i=0;
  100. printf("Podaj wiek: \n");
  101. scanf("%s", age); //sprawdz co to znaczy
  102. while(getchar()!='\n');
  103. while (i<strlen(age))
  104. {
  105. if ( age[i] < '0' || age[i] > '9') //w ASCII oczywiscie
  106. {
  107. printf("Blednie wpisane dane. \n");
  108. return 1;
  109. }
  110. i++;
  111. }
  112.  
  113. i=0;
  114. printf("Podaj miejscowosc: \n");
  115. scanf("%s", city); //sprawdz co to znaczy
  116. while(getchar()!='\n');
  117. //zabawa z wielkosciami liter
  118. if (city[i] >= 'a' && city[i] <= 'z') city[i]=city[i]-32; //jak pierwsza litera mala to robimy wielka
  119. for (i=1; i < strlen(city); i++)
  120. {
  121. if ( city[i] < 'a' || city[i] > 'z')
  122. {
  123. printf("Blednie wpisane dane. \n");
  124. return 1;
  125. }
  126. }
  127. printf("Podaj numer dostawcy:\n");
  128. wyswietl_dost();
  129. while(scanf("%d", &dost) != 1 || (dost>4 || dost<1))
  130. {
  131. printf("Niepoprwany wybor, jeszcze raz.\n");
  132. }
  133. while (getchar()!='\n');
  134.  
  135. strncpy(rekord->imie, name, 16);
  136. strncpy(rekord->nazwisko, surname, 32);
  137. strncpy(rekord->numer, number, 10);
  138. strncpy(rekord->wiek, age, 3);
  139. strncpy(rekord->miejscowosc, city, 32);
  140. strcpy(rekord->dostawca, dostawcy[dost]);
  141.  
  142. return 0;
  143. }
  144.  
  145.  
  146. int dodaj_rekord()
  147. {
  148. char name[16];
  149. char surname[32];
  150. char number[10];
  151. char age[3];
  152. char city[32];
  153. int id, dost;
  154. int i=0;
  155.  
  156. printf("Podaj numer identyfikacyjny rekordu: \n");
  157. printf("Podaj ID: ");
  158. scanf("%d", &id);
  159. if (getchar()!='\n')
  160. {
  161. while(getchar()!='\n');
  162. return 1;
  163. }
  164. if ( id<0 || id>99999 ) return 1;
  165. if ( szukaj_id(id)!=NULL){printf("Blad jest takei id"); return 2; }//powtarzanie ID
  166.  
  167.  
  168. printf("Podaj imie: \n");
  169. scanf("%s", name); //sprawdz co to znaczy
  170. while(getchar()!='\n');
  171. //zabawa z wielkosciami liter
  172. if( name[i] >= 'a' && name[i] <= 'z') name[i]=toupper(name[i]); //jak pierwsza litera mala to robimy wielka
  173. for(i=1; i < strlen(name); i++)
  174. {
  175. if ( name[i] < 'a' || name[i] > 'z')
  176. {
  177. printf("Blednie wpisane dane. \n");
  178. return 1;
  179. }
  180. }
  181. // NAZWISKO
  182.  
  183. i=0;
  184. printf("Podaj nazwisko: \n");
  185. scanf("%s", surname); //sprawdz co to znaczy
  186. while(getchar()!='\n');
  187. if (surname[i] >= 'a' && surname[i] <= 'z') surname[i]=toupper(surname[i]); //jak pierwsza litera mala to robimy wielka
  188. /*if (surname[i] < 'A' || surname[i] > 'Z')
  189. {
  190. printf("Blednie wpisane dane. 1\n");
  191. return 1;
  192. }*/
  193. for(i=1; i < strlen(surname); i++)
  194. {
  195. if ( surname[i] < 'a' || surname[i] > 'z')
  196. {
  197. printf("Blednie wpisane dane. 2\n");
  198. return 1;
  199. }
  200. }
  201.  
  202. i=0;
  203. printf("Podaj numer: \n");
  204. scanf("%s", number); //sprawdz co to znaczy
  205. while(getchar()!='\n');
  206. while (i<strlen(number))
  207. {
  208. if ( number[i] < '0' || number[i] > '9') //w ASCII oczywiscie
  209. {
  210. printf("Blednie wpisane dane. \n");
  211. return 1;
  212. }
  213. i++;
  214. }
  215.  
  216. i=0;
  217. printf("Podaj wiek: \n");
  218. scanf("%s", age); //sprawdz co to znaczy
  219. while(getchar()!='\n');
  220. while (i<strlen(age))
  221. {
  222. if ( age[i] < '0' || age[i] > '9') //w ASCII oczywiscie
  223. {
  224. printf("Blednie wpisane dane. \n");
  225. return 1;
  226. }
  227. i++;
  228. }
  229.  
  230. i=0;
  231. printf("Podaj miejscowosc: \n");
  232. scanf("%s", city); //sprawdz co to znaczy
  233. while(getchar()!='\n');
  234. //zabawa z wielkosciami liter
  235. if (city[i] >= 'a' && city[i] <= 'z') city[i]=city[i]-32; //jak pierwsza litera mala to robimy wielka
  236. for (i=1; i < strlen(city); i++)
  237. {
  238. if ( city[i] < 'a' || city[i] > 'z')
  239. {
  240. printf("Blednie wpisane dane. \n");
  241. return 1;
  242. }
  243. }
  244.  
  245. printf("Podaj numer dostawcy:\n");
  246. wyswietl_dost();
  247. while(scanf("%d", &dost) != 1 || (dost>4 || dost<1))
  248. {
  249. printf("Niepoprwany wybor, jeszcze raz.\n");
  250. }
  251. while (getchar()!='\n');
  252.  
  253.  
  254. //przydzielanie pamieci, dodawanie rekordu i danych do niego
  255. struct rekord *nowy_rekord;
  256. nowy_rekord = (struct rekord *)malloc(sizeof(struct rekord));
  257. strncpy(nowy_rekord->imie, name, 16);
  258. strncpy(nowy_rekord->nazwisko, surname, 32);
  259. strncpy(nowy_rekord->numer, number, 10);
  260. strncpy(nowy_rekord->wiek, age, 3);
  261. strncpy(nowy_rekord->miejscowosc, city, 32);
  262. nowy_rekord->id = id;
  263. strcpy(nowy_rekord->dostawca, dostawcy[dost-1]);
  264. nowy_rekord->next=NULL;
  265. //dolaczanie do listy
  266.  
  267. struct rekord *current, *prev;
  268. current = poczatek;
  269. if (current == NULL)
  270. {
  271. poczatek = nowy_rekord;
  272. return 0;
  273. }
  274. while(current != NULL)
  275. {
  276. prev = current;
  277. current = current->next;
  278. }
  279. prev->next = nowy_rekord;
  280. return 0;
  281. }
  282. struct rekord *szukaj_id(int ident)
  283. {
  284. //szukanie rekordu po ID
  285. struct rekord *current;
  286. current = poczatek;
  287. while ( current != NULL)
  288. {
  289. if( current->id == ident) return current;
  290. current = current->next;
  291. }
  292. return NULL; //jak nie znaleziono
  293. }
  294.  
  295. void usun_wszystko()
  296. {
  297. //funkcja usuwajaca wszystkie rekordy
  298. struct rekord *current, *tymczasowy;
  299. current = poczatek;
  300. while (current != NULL)
  301. {
  302. tymczasowy = current->next;
  303. free(current);
  304. current = tymczasowy;
  305. }
  306. poczatek = NULL;
  307. }
  308.  
  309. int usun_rekord() //usuwa tylko po ID, ewentualnie sprawdzic czy musi po kazdym polu
  310. {
  311. struct rekord *current, *tmp, *tmp1;
  312. int id;
  313. printf("Wpisz numer id jakiego chcesz usunac");
  314. scanf("%d", &id);
  315. while(getchar() != '\n');
  316. current = szukaj_id(id);
  317. tmp = NULL;
  318. tmp1 = poczatek;
  319. if(poczatek->next == NULL) //lista pusta
  320. {
  321. free(current);
  322. poczatek=NULL;
  323. }
  324. else if (current == poczatek)
  325. {
  326. poczatek = current->next;
  327. free(current);
  328. return 0;
  329. }
  330. else if (current == NULL)
  331. {
  332. printf("BLad");
  333. return 2;
  334. }
  335. else
  336. {
  337. while(1)
  338. {
  339. if(tmp1 == current)
  340. {
  341. tmp->next = tmp1->next;
  342. free(tmp1);
  343. return 0;
  344. }
  345. tmp = tmp1;
  346. tmp1 = tmp->next;
  347. }
  348. }
  349. return 0;
  350. }
  351.  
  352. void wypisz_rekord(struct rekord *rekord)
  353. {
  354. if (rekord == NULL) printf("\n***NULL");
  355. else printf("\n %s %s | %d | %s | %s | %s | %s", rekord->nazwisko, rekord->imie, rekord->id, rekord->wiek, rekord->numer, rekord->miejscowosc, rekord->dostawca);
  356. }
  357.  
  358. int main()
  359. {
  360. strcpy(dostawcy[0], "Idea");
  361. strcpy(dostawcy[1], "Era");
  362. strcpy(dostawcy[2], "Play");
  363. strcpy(dostawcy[3], "Plus");
  364. strcpy(dostawcy[4], "Tmobile");
  365. puts("**********************");
  366. puts(" SPIS TELEFONOW ");
  367. puts(" TOMASZ CHRZANOWSKI ");
  368. puts("**********************");
  369. char menu;
  370.  
  371. while(1)
  372. {
  373. puts("\nMENU");
  374. puts("1 Dodaj rekord");
  375. puts("2 Zmien dane");
  376. puts("3 Usun rekord");
  377. puts("4 Wyswietl rekordy");
  378. puts("5 Usun wszystko");
  379. puts("6 Edytuj dostawcow");
  380. puts("s Zapisz");
  381. puts("o Wczytaj");
  382. puts("q Zakoncz");
  383. scanf("%c", &menu);
  384. if(getchar() == '\n') switch ((int)menu)
  385. {
  386. case '1':
  387. dodaj_rekord();
  388. break;
  389.  
  390. case '2':
  391. edycja_z_usuwaniem();
  392. break;
  393.  
  394. case '3':
  395. usun_rekord();
  396. break;
  397.  
  398. case '4':
  399. wyswietl();
  400. break;
  401.  
  402. case '5':
  403. usun_wszystko();
  404. break;
  405.  
  406. case '6':
  407. dostaw();
  408. break;
  409.  
  410. case 's':
  411. zapisz();
  412. break;
  413.  
  414. case 'o':
  415. wczytaj();
  416. break;
  417.  
  418. case 'q':
  419. if(koniec()) return 0;
  420. break;
  421.  
  422. }
  423. }
  424. return 0;
  425. }
  426.  
  427. int koniec()
  428. {
  429. char tn;
  430. puts("Czy na pewno chcesz zakonczyc program?");
  431. tn = getchar();
  432. if (tn == 't' || tn == 'T') return 1;
  433. if ( tn != '\n') while ( getchar() != '\n');
  434. return 0;
  435. }
  436.  
  437. void wyswietl()
  438. {
  439. if( poczatek == NULL)
  440. {
  441. printf("Baza jest pusta!\n");
  442. return;
  443. }
  444. struct rekord *current;
  445. current = poczatek;
  446. printf("\n ______________________________________________");
  447. printf("\n| Nazwisko i imie . ID . Wiek . Nr Telefonu . Miejscowosc . Dostawca|");
  448. while(current != NULL)
  449. {
  450. printf("\n %-9s %-12s | %03d | %-4s | %-10s | %-10s | %-10s", current->nazwisko, current->imie, current->id, current->wiek, current->numer, current->miejscowosc, current->dostawca);
  451. current = current->next;
  452. }
  453. printf("\n ______________________________________________");
  454. }
  455.  
  456. int zapisz()
  457. {
  458. if(poczatek == NULL) {printf("Nie udalo sie odczytac"); return 1; } //nie ma co zapisywac, wychodzimy wypisujemy blad
  459. char nazwa[16];
  460. FILE *plik;
  461. struct rekord *current;
  462. printf("Podaj nazwe pliku \n");
  463. scanf("%15s", nazwa);
  464. while(getchar() != '\n');
  465. plik = fopen(nazwa, "w");
  466. int i=0;
  467. for( i=0; i<5; i++)
  468. {
  469. fprintf(plik, "%s\n", dostawcy[i]);
  470. }
  471. current = poczatek;
  472. while(current != NULL)
  473. {
  474. fprintf(plik, "%d\n%s\n%s\n%s\n%s\n%s\n%s\n", current->id, current->imie, current->nazwisko, current->wiek, current->numer, current->miejscowosc, current->dostawca);
  475. current = current->next;
  476. }
  477. fclose(plik);
  478. return 0;
  479.  
  480. }
  481.  
  482. int wczytaj()
  483. {
  484. FILE *plik;
  485. struct rekord *record;
  486. char nazwa[16];
  487. //int i=0, liczba=0;
  488. printf("Podaj nazwe pliku do odczytania: \n");
  489. scanf("%15s", nazwa);
  490. while(getchar() != '\n');
  491. plik = fopen(nazwa, "r");
  492. if (plik == NULL)
  493. {
  494. printf("Nie udalo sie odczytac pliku \n");
  495. return 7;
  496. }
  497.  
  498. int id;
  499. char imie[16], nazwisko[32], numer[10], wiek[3], miejscowosc[32], dostawca[17];
  500.  
  501. fscanf(plik, "%s", dostawcy[0]);
  502. fscanf(plik, "%s", dostawcy[1]);
  503. fscanf(plik, "%s", dostawcy[2]);
  504. fscanf(plik, "%s", dostawcy[3]);
  505. fscanf(plik, "%s", dostawcy[4]);
  506. while(!feof(plik))
  507. {
  508. fscanf(plik, "%d", &id);
  509.  
  510. fscanf(plik, "%s", imie);
  511.  
  512. fscanf(plik, "%s", nazwisko);
  513.  
  514. fscanf(plik, "%s", wiek);
  515.  
  516. fscanf(plik, "%s", numer);
  517.  
  518. fscanf(plik, "%s", miejscowosc);
  519.  
  520. fscanf(plik, "%s", dostawca);
  521.  
  522. record = (struct rekord *)malloc(sizeof(struct rekord));
  523. record->id = id;
  524. strcpy(record->imie, imie);
  525. strcpy(record->nazwisko, nazwisko);
  526. strcpy(record->wiek, wiek);
  527. strcpy(record->numer, numer);
  528. strcpy(record->miejscowosc, miejscowosc);
  529. strcpy(record->dostawca, dostawca);
  530. record->next = NULL;
  531. dodaj_list(record);
  532. }
  533. fclose(plik);
  534. return 0;
  535. }
  536. void dodaj_list(struct rekord *rekord)
  537. {
  538. struct rekord *current, *prev;
  539. current = poczatek;
  540. if (current == NULL)
  541. {
  542. poczatek = rekord;
  543. return;
  544. }
  545. while(current != NULL)
  546. {
  547. prev = current;
  548. current = current->next;
  549. }
  550. prev->next=rekord;
  551. return;
  552. }
  553. void wyswietl_dost()
  554. {
  555. int i;
  556. for(i=0; i<5; i++)
  557. {
  558. if(dostawcy[i]!=0)
  559. printf("%s\n", dostawcy[i]);
  560. }
  561. }
  562. int licz_dost()
  563. {
  564. int licznik=0, i=0;
  565. for(i=0; i<5; i++)
  566. {
  567. if(dostawcy[i] != 0) licznik++;
  568. }
  569. return licznik;
  570. }
  571. void usun_dost(int ktory)
  572. {
  573. strcpy(dostawcy[ktory], "0");
  574. }
  575. void edycja_dost(int ktory)
  576. {
  577. char nowy[17];
  578. printf("Wpisz nazwe nowego dostawcy");
  579. scanf("%s", nowy);
  580. while (getchar()!='\n');
  581. strcpy(dostawcy[ktory-1], nowy);
  582. }
  583.  
  584. void dostaw()
  585. {
  586. int wybor;
  587. puts("1 Wyswietlanie dostawcow");
  588. puts("2 Edycja/dodawanie dostawcy");
  589. puts("3 Usuwanie dostawcy");
  590.  
  591. while(scanf("%d", &wybor) != 1 && (wybor>4 || wybor<1))
  592. {
  593. printf("Niepoprwany wybor, jeszcze raz.\n");
  594. }
  595. while (getchar()!='\n');
  596. switch(wybor)
  597. {
  598. case 1:
  599. {
  600. wyswietl_dost();
  601. break;
  602. }
  603. case 2:
  604. {
  605. int ktory;
  606. printf("Ktorego dostawce chcesz edytowac?\n");
  607. scanf("%d", &ktory);
  608. while (getchar()!='\n');
  609. edycja_dost(ktory);
  610. break;
  611. }
  612. case 3:
  613. {
  614. int ktor;
  615. printf("Ktorego dostawce chcesz usunac? \n");
  616. scanf("%d", &ktor);
  617. while (getchar()!='\n');
  618. usun_dost(ktor);
  619. break;
  620. }
  621. }
  622.  
  623. }
Add Comment
Please, Sign In to add comment