Advertisement
Guest User

Untitled

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