Advertisement
Guest User

KURWA DZIALA

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