Advertisement
Guest User

Untitled

a guest
Jan 27th, 2020
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.10 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct Osoba
  6. {
  7. char imie[100];
  8. char nazwisko[100];
  9. int wiek;
  10. char plec[11];
  11. char imieop[100];
  12. char nazwiskoop[100];
  13. int numertelefonu;
  14. int idkategorii;
  15. int wynik;
  16. struct Osoba* next;
  17. }Osoba ;
  18. Osoba* stworzListeOsobPlik()
  19. {
  20. Osoba* head = NULL;
  21. Osoba* temp = NULL;
  22. temp = (Osoba*)malloc(sizeof(Osoba));
  23. temp->next = NULL;
  24. head = temp;
  25. return head;
  26. }
  27. Osoba* dodajOsobePlik(Osoba* pierwszy)
  28. {
  29. Osoba* p = pierwszy;
  30. Osoba* temp = NULL;
  31. temp = (Osoba*)malloc(sizeof(Osoba));
  32. temp->next = NULL;
  33. while(p->next!=NULL){
  34. p = p->next;
  35. }
  36. p->next = temp;
  37. return temp;
  38. }
  39. int dodajPlik(char *plik,Osoba* pierwszy)
  40. {
  41. FILE *p = fopen(plik,"rt");
  42. Osoba* temp = NULL;
  43. int licznik=0,i=0;
  44. char buf[100],imie[100],nazwisko[100],plec[11],imieop[100],nazwiskop[100];
  45. int wiek,numertelefonu,idkategorii,wynik;
  46. fscanf(p,"%*[^\n]",buf);
  47. while(1){
  48. if(fscanf(p,"%s",imie)==EOF)
  49. break;
  50. fscanf(p,"%s",nazwisko);
  51. fscanf(p,"%d",&wiek);
  52. fscanf(p,"%s",plec);
  53. fscanf(p,"%s",imieop);
  54. fscanf(p,"%s",nazwiskop);
  55. fscanf(p,"%d",&numertelefonu);
  56. fscanf(p,"%d",&idkategorii);
  57. fscanf(p,"%d",&wynik);
  58. if(licznik==0){
  59. strcpy(pierwszy->imie,imie);
  60. strcpy(pierwszy->nazwisko,nazwisko);
  61. pierwszy->wiek = wiek;
  62. strcpy(pierwszy->plec,plec);
  63. strcpy(pierwszy->imieop,imieop);
  64. strcpy(pierwszy->nazwiskoop,nazwiskop);
  65. pierwszy->numertelefonu = numertelefonu;
  66. pierwszy->idkategorii = idkategorii;
  67. pierwszy->wynik = wynik;
  68. licznik++;
  69. }
  70. else{
  71. temp = dodajOsobePlik(pierwszy);
  72. strcpy(temp->imie,imie);
  73. strcpy(temp->nazwisko,nazwisko);
  74. temp->wiek = wiek;
  75. strcpy(temp->plec,plec);
  76. strcpy(temp->imieop,imieop);
  77. strcpy(temp->nazwiskoop,nazwiskop);
  78. temp->numertelefonu = numertelefonu;
  79. temp->idkategorii = idkategorii;
  80. temp->wynik = wynik;
  81. }
  82. i++;
  83. }
  84. fclose(p);
  85. return i;
  86. }
  87. typedef struct kategoria
  88. {
  89. int id;
  90. char nazwa[100];
  91. char opis[100];
  92. int min;
  93. int max;
  94. int ile;
  95. char stan[10];
  96. struct kategoria *next;
  97. }kategoria;
  98. void dodajkategorie(kategoria** lista) {
  99. char line[500];
  100. kategoria *nowa = (kategoria *) malloc(sizeof(kategoria));
  101. printf("Podaj nazwa:");
  102. scanf("%s", nowa->nazwa);
  103. printf("Podaj krotki opis kategorii:");
  104. scanf("%s", nowa->opis);
  105. printf("Podaj minimalna ilosc uczestnikow:");
  106. scanf("%d", &nowa->min);
  107. printf("Podaj maksymalna ilosc uczestnikow");
  108. scanf("%d", &nowa->max);
  109. nowa->ile=0;
  110. char stan[] = "OTWARTA";
  111. dodajk(lista,nowa);
  112. printf("DODALEM");
  113.  
  114.  
  115.  
  116. }
  117.  
  118.  
  119. // zlicza dlugosc listy
  120. int dlugosc_listy(Osoba* lista)
  121. {
  122. int d = 0;
  123. Osoba* wsk = lista;
  124. while(wsk != NULL)
  125. {
  126. d++;
  127. wsk = wsk->next;
  128. }
  129. return d;
  130. }
  131. int dlugosc_listyk(kategoria* listak)
  132. {
  133. int d = 0;
  134. kategoria* wsk = listak;
  135. while(wsk != NULL)
  136. {
  137. d++;
  138. wsk = wsk->next;
  139. }
  140. return d;
  141. }
  142. // dodaje nowy wezel do listy
  143. void dodaj(Osoba** lista, Osoba* nowa)
  144. {
  145. nowa->next=NULL;
  146.  
  147. if((*lista)==NULL)
  148. {
  149. *lista = nowa;
  150. }
  151. else
  152. {
  153. Osoba* wsk = *lista;
  154. while(wsk->next != NULL)
  155. {
  156. wsk = wsk->next;
  157.  
  158. }
  159. wsk->next = nowa;
  160.  
  161. }
  162. }
  163. void dodajk(kategoria** listak, kategoria* nowa)
  164. {
  165. nowa->next=NULL;
  166.  
  167. if((*listak)==NULL)
  168. {
  169. *listak = nowa;
  170.  
  171. }
  172. else
  173. {
  174. kategoria* wsk = *listak;
  175. while(wsk->next != NULL)
  176. {
  177. wsk = wsk->next;
  178. }
  179. wsk->next = nowa;
  180. }
  181. }
  182.  
  183. // dodaje osobe do listy
  184. void dodajOsobe(Osoba** lista,kategoria** listak){
  185. kategoria*wsk1=*listak;
  186. char s2[] = "OTWARTA";
  187. if (strcmp(s1, s2)
  188. while((strcmp(wsk1->stan,s2)==0)){
  189. char line[500];
  190. //kategoria* sprawdz= (kategoria *) listak;
  191. Osoba* nowa = (Osoba*)malloc(sizeof(Osoba));
  192. printf("Podaj imie:");
  193. scanf("%s", nowa->imie);
  194. printf("Podaj nazwisko:");
  195. scanf("%s", nowa->nazwisko);
  196. printf("Podaj plec:" );
  197. scanf("%s", nowa->plec);
  198. printf("Ktora kategorie wybierasz:" );
  199. scanf("%d",&nowa->idkategorii);
  200. while(wsk!=NULL&&wsk->id==nowa->idkategorii){
  201. wsk=wsk->next;
  202. }
  203. wsk->ile++;
  204. // while(sprawdz!=NULL||( ( strcmp(sprawdz->stan,"OTWARTA")!=0))){
  205. // sprawdz=sprawdz->next;
  206. // }
  207.  
  208. printf("Podaj wiek:");
  209. do {
  210. scanf("%d", &(nowa->wiek));
  211. if(nowa->wiek<18){
  212. char s1[] = "";
  213. printf("Czy posiada zgode opiekuna?");
  214. scanf("%s",s1);
  215. char s2[] = "TAK";
  216. if (strcmp(s1, s2) == 0) {
  217. printf("Podaj imie opiekuna:");
  218. scanf("%s", nowa->imieop);
  219. printf("Podaj nazwisko opiekuna:");
  220. scanf("%s", nowa->nazwiskoop);
  221. printf("Podaj numer telefonu opiekuna:");
  222. scanf("%d", &nowa->numertelefonu);
  223. printf("\nPodaj wynik podany przez sedziego:" );
  224. scanf("%d", &nowa->wynik);
  225. dodaj(lista,nowa);
  226. printf("\tDODANO UZYTKOWNIKA");
  227. break;
  228. }
  229. else {
  230. printf("\nNie ma zgody opiekuna\n");
  231. break;
  232. }
  233. }
  234. }
  235. while(nowa->wiek<18);
  236. if(nowa->wiek>=18) {
  237. printf("\nPodaj numer telefonu:" );
  238. scanf("%d", &nowa->numertelefonu);
  239. printf("\nPodaj wynik podany przez sedziego:" );
  240. scanf("%d", &nowa->wynik);
  241. dodaj(lista, nowa);
  242. printf("\tDODANO UZYTKOWNIKA");
  243. }
  244.  
  245.  
  246. }
  247. }
  248. //Wypisuje cala liste
  249. void wypisz_liste(Osoba* lista)
  250. {
  251.  
  252. Osoba* wsk = lista;
  253.  
  254. if(lista == NULL)
  255. printf("\nBaza uzytkownikow jest pusta\n");
  256. else
  257. printf("\nBaza uzytkownikow zawiera %d elementow: \n", dlugosc_listy(lista) );
  258. int i = 1;
  259. while( wsk != NULL)
  260. {
  261. if(wsk->wiek<=18) {
  262. printf("\n%d %s %s %d %s %s %s %d %d %d \n", i, wsk->imie, wsk->nazwisko, wsk->wiek, wsk->plec,wsk->imieop,wsk->nazwiskoop, wsk->numertelefonu,wsk->idkategorii, wsk->wynik);
  263. }
  264. else
  265. printf("\n%d %s %s %d %s %d %d %d \n", i, wsk->imie, wsk->nazwisko, wsk->wiek, wsk->plec, wsk->numertelefonu,wsk->idkategorii, wsk->wynik);
  266. wsk=wsk->next;
  267. i++;
  268. }
  269. }
  270. void wypisz_listek(kategoria* listak)
  271. {
  272.  
  273. kategoria* wsk = listak;
  274.  
  275. if(listak == NULL)
  276. printf("\nBaza kategorii jest pusta\n");
  277. else
  278. printf("\nBaza kategorii zawiera %d elementow: \n", dlugosc_listyk(listak) );
  279. int i = 1;
  280. while( wsk != NULL)
  281. {
  282. // printf("\n%d %s %s %d %d %s\n", i, wsk->nazwa, wsk->opis, wsk->min, wsk->max,&wsk->stan);
  283. printf("\n%s\n",&wsk->stan);
  284. wsk=wsk->next;
  285. i++;
  286. }
  287. }
  288.  
  289. void wypisz_kategorie_lista(kategoria** listak, int ID)
  290. {
  291. int i;
  292. kategoria* wsk = *listak;
  293. for(i = 1; i < ID; i++){
  294. wsk=wsk->next;
  295. }
  296. printf("\n%d %s %s %d %d %s\n", i, wsk->nazwa, wsk->opis, wsk->min, wsk->max,wsk->stan);
  297. }
  298. //
  299. void wypisz_kategorie(kategoria* listak)
  300. {
  301.  
  302. int ID;
  303.  
  304. printf("\nPodaj numer kategorii: \n" );
  305. scanf("%d", &ID);
  306.  
  307. if((ID > dlugosc_listyk(listak)) || (ID < 1))
  308. {
  309. printf("\nNie ma takiego indeksu\n");
  310.  
  311. }
  312. else
  313. wypisz_kategorie_lista(&listak, ID);
  314.  
  315. }
  316. //Usuwa element z listy
  317. void usun(Osoba** lista, int ID)
  318. {
  319. Osoba* poprzedni = NULL;
  320. Osoba* wsk = *lista;
  321. int i;
  322. for(i = 1; i < ID; i++)
  323. {
  324. poprzedni=wsk;
  325. wsk=wsk->next;
  326.  
  327. }
  328. if(poprzedni==NULL)
  329. {
  330. (*lista)=(*lista)->next;
  331. free(wsk);
  332. }
  333. else
  334. {
  335. poprzedni->next=wsk->next;
  336. free(wsk);
  337. }
  338. }
  339. // Usuwa osobe po indexie
  340. void usun_osobe(Osoba** lista)
  341. {
  342. int ID;
  343. printf("\nPodaj indeks osoby:\n " );
  344. scanf("%d", &ID);
  345.  
  346. if((ID > dlugosc_listy(*lista)) || (ID < 1))
  347. {
  348. printf("\nNie ma takiego indeksu\n");
  349.  
  350. }
  351. else
  352. {
  353. usun(lista,ID);
  354. }
  355. }
  356. int usun_imnaz_lista(char* im, char* naz, Osoba** lista)
  357. {
  358. Osoba* poprzedni=NULL;
  359. Osoba* wsk= *lista;
  360.  
  361. while((wsk != NULL) && ( ( strcmp(wsk->imie, im)!=0) || (strcmp(wsk->nazwisko, naz )!=0) ))
  362. {
  363. poprzedni=wsk;
  364. wsk=wsk->next;
  365. }
  366. if(wsk == NULL )
  367. {
  368. return 0;
  369. }
  370. else
  371. {
  372. if(poprzedni==NULL)
  373. {
  374. (*lista)=(*lista)->next;
  375. free(wsk);
  376. }
  377. else
  378. {
  379. poprzedni->next=wsk->next;
  380. free(wsk);
  381. }
  382. return 1;
  383. }
  384. }
  385.  
  386. //usuwa po imieniu i nazwisku
  387. void usun_imnaz(Osoba** lista)
  388. {
  389. char im[100];
  390. char naz[100];
  391.  
  392. printf("\nPodaj imie:\n ");
  393. scanf("%s", im);
  394.  
  395. printf("\nPodaj nazwisko: \n");
  396. scanf("%s", naz);
  397.  
  398. if(usun_imnaz_lista(im, naz, lista))
  399.  
  400. printf("\nOsoba zostala usunieta\n");
  401. else
  402. printf("\nOsoba nie zostala usunieta, nie ma takiej osoby\n");
  403.  
  404. }
  405. /////// WHILEM SZUKA OSOBY KTORA CHCEMY ZMODIFYKIOWAC I ZMIENIA JEJ IMIE CZY COKOLWIEK
  406. void modyfikuj_osobe(Osoba** lista)
  407. {
  408. char im[100];
  409. char naz[100];
  410. Osoba* wsk= *lista;
  411.  
  412. printf("\nPodaj imie:\n ");
  413. scanf("%s", im);
  414. printf("\nPodaj nazwisko:\n ");
  415. scanf("%s", naz);
  416.  
  417. while((wsk != NULL) && (( strcmp(wsk->imie, im)==0)||(strcmp(wsk->nazwisko, naz )==0))){
  418. printf("\nPodaj nowe imie:\n ");
  419. scanf("%s", &*wsk->imie);
  420. printf("\nPodaj nowe nazwisko: \n");
  421. scanf("%s", &*wsk->nazwisko);
  422. printf("\nPodaj nowa plec:\n ");
  423. scanf("%s", &*wsk->plec);
  424. printf("\nPodaj nowa kategorie:\n ");
  425. scanf("%d", &wsk->idkategorii);
  426. int wiek = 0;
  427. printf("\nPodaj nowy wiek:\n ");
  428. scanf("%d",&wiek);
  429. if(wiek>=18){
  430. printf("Podaj wynik uczestinka podany przez sedziego:");
  431. scanf("%d", &wsk->wynik);
  432. (wsk->wiek)= (int) wiek;
  433. break;
  434. }
  435.  
  436. else {
  437. char s1[] = "";
  438. printf("Czy posiada zgode opiekuna?");
  439. scanf("%s", s1);
  440. char s2[] = "TAK";
  441. if (strcmp(s1, s2) == 0) {
  442. printf("Podaj imie opiekuna:");
  443. scanf("%s", wsk->imieop);
  444. printf("Podaj nazwisko opiekuna:");
  445. scanf("%s", wsk->nazwiskoop);
  446. printf("Podaj numer telefonu opiekuna:");
  447. scanf("%d", &wsk->numertelefonu);
  448. printf("Podaj wynik uczestinka podany przez sedziego:");
  449. scanf("%d", &wsk->wynik);
  450. (wsk->wiek)= wiek;
  451.  
  452. break;
  453. }
  454. else {
  455. printf("\nNie ma zgody opiekuna\n");
  456. break;
  457. }
  458. }
  459. }
  460. }
  461.  
  462. void wypisz_osobe_lista(Osoba** lista, int ID)
  463. {
  464. int i;
  465. Osoba* wsk = *lista;
  466. for(i = 1; i < ID; i++){
  467. wsk=wsk->next;
  468.  
  469. }
  470. printf("ID:%d IMIE: %s NAZWISKO: %s PLEC: %s WIEK: %d ID KATEGORII: %d " , i,wsk->imie,wsk->nazwisko,wsk->plec,wsk->wiek,wsk->idkategorii);
  471. if(wsk->wiek>=18)
  472. printf("NUMER TELEFONU %d\n",wsk->numertelefonu);
  473. else
  474. printf("ID: %d IMIE OPIEKUNA: %s NAZWISKO OPIEKUNA: %s PLEC: %s WIEK: %d NUMER TELEFONU OPIEKUNA %d\n", i, wsk->imieop, wsk->nazwiskoop,wsk->plec , wsk->wiek,wsk->numertelefonu);
  475. }
  476.  
  477. //wypisz osobe o podanym indexie
  478. void wypisz_osobe(Osoba* lista)
  479. {
  480.  
  481. int ID;
  482.  
  483. printf("\nPodaj numer osoby: \n" );
  484. scanf("%d", &ID);
  485.  
  486. if((ID > dlugosc_listy(lista)) || (ID < 1))
  487. {
  488. printf("\nNie ma takiego indeksu\n");
  489.  
  490. }
  491. else
  492. wypisz_osobe_lista(&lista, ID);
  493.  
  494. }
  495. void sprawdzwynik(Osoba* lista,char *sciezka){
  496. Osoba* wsk=lista;
  497. int max=0;
  498. Osoba *wsk3;
  499. while(wsk != NULL){
  500. if(wsk->wynik > max){
  501. max = wsk->wynik;
  502. wsk3=wsk;
  503. }
  504. wsk = wsk->next;
  505. }
  506. printf("NAJLEPSZY WYNIK osiagnal Imie:%s Nazwisko:%s Plec:%s Wiek:%d\n Z WYNIKIEM:%d",wsk3->imie, wsk3->nazwisko,wsk3->plec , wsk3->wiek,wsk3->wynik);
  507. FILE* plik;
  508. plik = fopen(sciezka,"a+");
  509. if(plik == NULL){
  510. printf("\nERROR 404\nBlad pliku %s", sciezka);
  511. return NULL;
  512. }
  513.  
  514. fprintf(plik, "%s %s %d %s %d %d ", wsk3->imie,wsk3->nazwisko,wsk3->wiek,wsk3->plec,wsk3->numertelefonu,wsk3->wynik);
  515. fclose(plik);
  516. }
  517. int main()
  518. {
  519. Osoba* lista = NULL;
  520. kategoria* listak = NULL;
  521. int option=1;
  522. int licznik =0;
  523. while(option != 0)
  524. {
  525. printf("\n\n MENU");
  526. printf("\n\n 0 Wyjscie z programu");
  527. printf("\n 1 AKTUALIZUJ BAZE");
  528. printf("\n 2 Wpisz dane uczestnika do bazy");
  529. printf("\n 3 Usun uczestnika o podanym indeksie");
  530. printf("\n 4 Usun uczestnika o podanych imieniu i nazwisku");
  531. printf("\n 5 Wyswietl uczestnika o podanym indeksie");
  532. printf("\n 6 Wyswietl cala liste uczestnikow \n");
  533. printf(" 7 Modyfikuj uczestnika\n");
  534. printf(" 8 Sprawdz Zwyciezce\n");
  535. scanf("%d", &option);
  536.  
  537. switch(option)
  538. {
  539. case 0:
  540. return 0;
  541. case 1:
  542. lista = stworzListeOsobPlik(); // tworze glowe i dopiero potem przekazuje ja dalej
  543. licznik = dodajPlik("osoby.txt",lista);
  544. if(licznik==0){
  545. return 1;
  546. case 2:
  547. printf("DODAWANIE OSOBY\n");
  548. dodajOsobe(&lista,&listak);
  549. break;
  550. case 3:
  551. printf("USUWANIE OSOBY O PODANYM INDEKSIE\n");
  552. usun_osobe(&lista);
  553. break;
  554. case 4:
  555. printf("USUWANIE OSOBY NA BAZIE IMIENIA I NAZWISKA\n");
  556. usun_imnaz(&lista);
  557. break;
  558. case 5:
  559. printf("WYSWIETL OSOBE O PODANYM INDEKSIE\n");
  560. wypisz_osobe(lista);
  561. break;
  562. case 6:
  563. printf("WYSWIETL CALA BAZE\n");
  564. wypisz_liste(lista);
  565. break;
  566. case 7:
  567. modyfikuj_osobe(&lista);
  568. break;
  569. case 8:
  570. sprawdzwynik(lista,"wynik.txt");
  571. break;
  572. case 9:
  573. dodajkategorie(&listak);
  574. break;
  575. case 10:
  576. wypisz_listek(listak);
  577. break;
  578. case 11:
  579. wypisz_kategorie(listak);
  580. break;
  581. }
  582. }
  583. }
  584.  
  585. int key;
  586.  
  587. scanf("%d", &key);
  588. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement