Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct Osoba
- {
- char imie[100];
- char nazwisko[100];
- int wiek;
- char plec[11];
- char imieop[100];
- char nazwiskoop[100];
- int numertelefonu;
- int idkategorii;
- int wynik;
- struct Osoba* next;
- }Osoba ;
- Osoba* stworzListeOsobPlik()
- {
- Osoba* head = NULL;
- Osoba* temp = NULL;
- temp = (Osoba*)malloc(sizeof(Osoba));
- temp->next = NULL;
- head = temp;
- return head;
- }
- Osoba* dodajOsobePlik(Osoba* pierwszy)
- {
- Osoba* p = pierwszy;
- Osoba* temp = NULL;
- temp = (Osoba*)malloc(sizeof(Osoba));
- temp->next = NULL;
- while(p->next!=NULL){
- p = p->next;
- }
- p->next = temp;
- return temp;
- }
- int dodajPlik(char *plik,Osoba* pierwszy)
- {
- FILE *p = fopen(plik,"rt");
- Osoba* temp = NULL;
- int licznik=0,i=0;
- char buf[100],imie[100],nazwisko[100],plec[11],imieop[100],nazwiskop[100];
- int wiek,numertelefonu,idkategorii,wynik;
- fscanf(p,"%*[^\n]",buf);
- while(1){
- if(fscanf(p,"%s",imie)==EOF)
- break;
- fscanf(p,"%s",nazwisko);
- fscanf(p,"%d",&wiek);
- fscanf(p,"%s",plec);
- fscanf(p,"%s",imieop);
- fscanf(p,"%s",nazwiskop);
- fscanf(p,"%d",&numertelefonu);
- fscanf(p,"%d",&idkategorii);
- fscanf(p,"%d",&wynik);
- if(licznik==0){
- strcpy(pierwszy->imie,imie);
- strcpy(pierwszy->nazwisko,nazwisko);
- pierwszy->wiek = wiek;
- strcpy(pierwszy->plec,plec);
- strcpy(pierwszy->imieop,imieop);
- strcpy(pierwszy->nazwiskoop,nazwiskop);
- pierwszy->numertelefonu = numertelefonu;
- pierwszy->idkategorii = idkategorii;
- pierwszy->wynik = wynik;
- licznik++;
- }
- else{
- temp = dodajOsobePlik(pierwszy);
- strcpy(temp->imie,imie);
- strcpy(temp->nazwisko,nazwisko);
- temp->wiek = wiek;
- strcpy(temp->plec,plec);
- strcpy(temp->imieop,imieop);
- strcpy(temp->nazwiskoop,nazwiskop);
- temp->numertelefonu = numertelefonu;
- temp->idkategorii = idkategorii;
- temp->wynik = wynik;
- }
- i++;
- }
- fclose(p);
- return i;
- }
- typedef struct kategoria
- {
- int id;
- char nazwa[100];
- char opis[100];
- int min;
- int max;
- int ile;
- char stan[10];
- struct kategoria *next;
- }kategoria;
- void dodajkategorie(kategoria** lista) {
- char line[500];
- kategoria *nowa = (kategoria *) malloc(sizeof(kategoria));
- printf("Podaj nazwa:");
- scanf("%s", nowa->nazwa);
- printf("Podaj krotki opis kategorii:");
- scanf("%s", nowa->opis);
- printf("Podaj minimalna ilosc uczestnikow:");
- scanf("%d", &nowa->min);
- printf("Podaj maksymalna ilosc uczestnikow");
- scanf("%d", &nowa->max);
- nowa->ile=0;
- char stan[] = "OTWARTA";
- dodajk(lista,nowa);
- printf("DODALEM");
- }
- // zlicza dlugosc listy
- int dlugosc_listy(Osoba* lista)
- {
- int d = 0;
- Osoba* wsk = lista;
- while(wsk != NULL)
- {
- d++;
- wsk = wsk->next;
- }
- return d;
- }
- int dlugosc_listyk(kategoria* listak)
- {
- int d = 0;
- kategoria* wsk = listak;
- while(wsk != NULL)
- {
- d++;
- wsk = wsk->next;
- }
- return d;
- }
- // dodaje nowy wezel do listy
- void dodaj(Osoba** lista, Osoba* nowa)
- {
- nowa->next=NULL;
- if((*lista)==NULL)
- {
- *lista = nowa;
- }
- else
- {
- Osoba* wsk = *lista;
- while(wsk->next != NULL)
- {
- wsk = wsk->next;
- }
- wsk->next = nowa;
- }
- }
- void dodajk(kategoria** listak, kategoria* nowa)
- {
- nowa->next=NULL;
- if((*listak)==NULL)
- {
- *listak = nowa;
- }
- else
- {
- kategoria* wsk = *listak;
- while(wsk->next != NULL)
- {
- wsk = wsk->next;
- }
- wsk->next = nowa;
- }
- }
- // dodaje osobe do listy
- void dodajOsobe(Osoba** lista,kategoria** listak){
- kategoria*wsk1=*listak;
- char s2[] = "OTWARTA";
- if (strcmp(s1, s2)
- while((strcmp(wsk1->stan,s2)==0)){
- char line[500];
- //kategoria* sprawdz= (kategoria *) listak;
- Osoba* nowa = (Osoba*)malloc(sizeof(Osoba));
- printf("Podaj imie:");
- scanf("%s", nowa->imie);
- printf("Podaj nazwisko:");
- scanf("%s", nowa->nazwisko);
- printf("Podaj plec:" );
- scanf("%s", nowa->plec);
- printf("Ktora kategorie wybierasz:" );
- scanf("%d",&nowa->idkategorii);
- while(wsk!=NULL&&wsk->id==nowa->idkategorii){
- wsk=wsk->next;
- }
- wsk->ile++;
- // while(sprawdz!=NULL||( ( strcmp(sprawdz->stan,"OTWARTA")!=0))){
- // sprawdz=sprawdz->next;
- // }
- printf("Podaj wiek:");
- do {
- scanf("%d", &(nowa->wiek));
- if(nowa->wiek<18){
- char s1[] = "";
- printf("Czy posiada zgode opiekuna?");
- scanf("%s",s1);
- char s2[] = "TAK";
- if (strcmp(s1, s2) == 0) {
- printf("Podaj imie opiekuna:");
- scanf("%s", nowa->imieop);
- printf("Podaj nazwisko opiekuna:");
- scanf("%s", nowa->nazwiskoop);
- printf("Podaj numer telefonu opiekuna:");
- scanf("%d", &nowa->numertelefonu);
- printf("\nPodaj wynik podany przez sedziego:" );
- scanf("%d", &nowa->wynik);
- dodaj(lista,nowa);
- printf("\tDODANO UZYTKOWNIKA");
- break;
- }
- else {
- printf("\nNie ma zgody opiekuna\n");
- break;
- }
- }
- }
- while(nowa->wiek<18);
- if(nowa->wiek>=18) {
- printf("\nPodaj numer telefonu:" );
- scanf("%d", &nowa->numertelefonu);
- printf("\nPodaj wynik podany przez sedziego:" );
- scanf("%d", &nowa->wynik);
- dodaj(lista, nowa);
- printf("\tDODANO UZYTKOWNIKA");
- }
- }
- }
- //Wypisuje cala liste
- void wypisz_liste(Osoba* lista)
- {
- Osoba* wsk = lista;
- if(lista == NULL)
- printf("\nBaza uzytkownikow jest pusta\n");
- else
- printf("\nBaza uzytkownikow zawiera %d elementow: \n", dlugosc_listy(lista) );
- int i = 1;
- while( wsk != NULL)
- {
- if(wsk->wiek<=18) {
- 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);
- }
- else
- 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);
- wsk=wsk->next;
- i++;
- }
- }
- void wypisz_listek(kategoria* listak)
- {
- kategoria* wsk = listak;
- if(listak == NULL)
- printf("\nBaza kategorii jest pusta\n");
- else
- printf("\nBaza kategorii zawiera %d elementow: \n", dlugosc_listyk(listak) );
- int i = 1;
- while( wsk != NULL)
- {
- // printf("\n%d %s %s %d %d %s\n", i, wsk->nazwa, wsk->opis, wsk->min, wsk->max,&wsk->stan);
- printf("\n%s\n",&wsk->stan);
- wsk=wsk->next;
- i++;
- }
- }
- void wypisz_kategorie_lista(kategoria** listak, int ID)
- {
- int i;
- kategoria* wsk = *listak;
- for(i = 1; i < ID; i++){
- wsk=wsk->next;
- }
- printf("\n%d %s %s %d %d %s\n", i, wsk->nazwa, wsk->opis, wsk->min, wsk->max,wsk->stan);
- }
- //
- void wypisz_kategorie(kategoria* listak)
- {
- int ID;
- printf("\nPodaj numer kategorii: \n" );
- scanf("%d", &ID);
- if((ID > dlugosc_listyk(listak)) || (ID < 1))
- {
- printf("\nNie ma takiego indeksu\n");
- }
- else
- wypisz_kategorie_lista(&listak, ID);
- }
- //Usuwa element z listy
- void usun(Osoba** lista, int ID)
- {
- Osoba* poprzedni = NULL;
- Osoba* wsk = *lista;
- int i;
- for(i = 1; i < ID; i++)
- {
- poprzedni=wsk;
- wsk=wsk->next;
- }
- if(poprzedni==NULL)
- {
- (*lista)=(*lista)->next;
- free(wsk);
- }
- else
- {
- poprzedni->next=wsk->next;
- free(wsk);
- }
- }
- // Usuwa osobe po indexie
- void usun_osobe(Osoba** lista)
- {
- int ID;
- printf("\nPodaj indeks osoby:\n " );
- scanf("%d", &ID);
- if((ID > dlugosc_listy(*lista)) || (ID < 1))
- {
- printf("\nNie ma takiego indeksu\n");
- }
- else
- {
- usun(lista,ID);
- }
- }
- int usun_imnaz_lista(char* im, char* naz, Osoba** lista)
- {
- Osoba* poprzedni=NULL;
- Osoba* wsk= *lista;
- while((wsk != NULL) && ( ( strcmp(wsk->imie, im)!=0) || (strcmp(wsk->nazwisko, naz )!=0) ))
- {
- poprzedni=wsk;
- wsk=wsk->next;
- }
- if(wsk == NULL )
- {
- return 0;
- }
- else
- {
- if(poprzedni==NULL)
- {
- (*lista)=(*lista)->next;
- free(wsk);
- }
- else
- {
- poprzedni->next=wsk->next;
- free(wsk);
- }
- return 1;
- }
- }
- //usuwa po imieniu i nazwisku
- void usun_imnaz(Osoba** lista)
- {
- char im[100];
- char naz[100];
- printf("\nPodaj imie:\n ");
- scanf("%s", im);
- printf("\nPodaj nazwisko: \n");
- scanf("%s", naz);
- if(usun_imnaz_lista(im, naz, lista))
- printf("\nOsoba zostala usunieta\n");
- else
- printf("\nOsoba nie zostala usunieta, nie ma takiej osoby\n");
- }
- /////// WHILEM SZUKA OSOBY KTORA CHCEMY ZMODIFYKIOWAC I ZMIENIA JEJ IMIE CZY COKOLWIEK
- void modyfikuj_osobe(Osoba** lista)
- {
- char im[100];
- char naz[100];
- Osoba* wsk= *lista;
- printf("\nPodaj imie:\n ");
- scanf("%s", im);
- printf("\nPodaj nazwisko:\n ");
- scanf("%s", naz);
- while((wsk != NULL) && (( strcmp(wsk->imie, im)==0)||(strcmp(wsk->nazwisko, naz )==0))){
- printf("\nPodaj nowe imie:\n ");
- scanf("%s", &*wsk->imie);
- printf("\nPodaj nowe nazwisko: \n");
- scanf("%s", &*wsk->nazwisko);
- printf("\nPodaj nowa plec:\n ");
- scanf("%s", &*wsk->plec);
- printf("\nPodaj nowa kategorie:\n ");
- scanf("%d", &wsk->idkategorii);
- int wiek = 0;
- printf("\nPodaj nowy wiek:\n ");
- scanf("%d",&wiek);
- if(wiek>=18){
- printf("Podaj wynik uczestinka podany przez sedziego:");
- scanf("%d", &wsk->wynik);
- (wsk->wiek)= (int) wiek;
- break;
- }
- else {
- char s1[] = "";
- printf("Czy posiada zgode opiekuna?");
- scanf("%s", s1);
- char s2[] = "TAK";
- if (strcmp(s1, s2) == 0) {
- printf("Podaj imie opiekuna:");
- scanf("%s", wsk->imieop);
- printf("Podaj nazwisko opiekuna:");
- scanf("%s", wsk->nazwiskoop);
- printf("Podaj numer telefonu opiekuna:");
- scanf("%d", &wsk->numertelefonu);
- printf("Podaj wynik uczestinka podany przez sedziego:");
- scanf("%d", &wsk->wynik);
- (wsk->wiek)= wiek;
- break;
- }
- else {
- printf("\nNie ma zgody opiekuna\n");
- break;
- }
- }
- }
- }
- void wypisz_osobe_lista(Osoba** lista, int ID)
- {
- int i;
- Osoba* wsk = *lista;
- for(i = 1; i < ID; i++){
- wsk=wsk->next;
- }
- 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);
- if(wsk->wiek>=18)
- printf("NUMER TELEFONU %d\n",wsk->numertelefonu);
- else
- 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);
- }
- //wypisz osobe o podanym indexie
- void wypisz_osobe(Osoba* lista)
- {
- int ID;
- printf("\nPodaj numer osoby: \n" );
- scanf("%d", &ID);
- if((ID > dlugosc_listy(lista)) || (ID < 1))
- {
- printf("\nNie ma takiego indeksu\n");
- }
- else
- wypisz_osobe_lista(&lista, ID);
- }
- void sprawdzwynik(Osoba* lista,char *sciezka){
- Osoba* wsk=lista;
- int max=0;
- Osoba *wsk3;
- while(wsk != NULL){
- if(wsk->wynik > max){
- max = wsk->wynik;
- wsk3=wsk;
- }
- wsk = wsk->next;
- }
- 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);
- FILE* plik;
- plik = fopen(sciezka,"a+");
- if(plik == NULL){
- printf("\nERROR 404\nBlad pliku %s", sciezka);
- return NULL;
- }
- fprintf(plik, "%s %s %d %s %d %d ", wsk3->imie,wsk3->nazwisko,wsk3->wiek,wsk3->plec,wsk3->numertelefonu,wsk3->wynik);
- fclose(plik);
- }
- int main()
- {
- Osoba* lista = NULL;
- kategoria* listak = NULL;
- int option=1;
- int licznik =0;
- while(option != 0)
- {
- printf("\n\n MENU");
- printf("\n\n 0 Wyjscie z programu");
- printf("\n 1 AKTUALIZUJ BAZE");
- printf("\n 2 Wpisz dane uczestnika do bazy");
- printf("\n 3 Usun uczestnika o podanym indeksie");
- printf("\n 4 Usun uczestnika o podanych imieniu i nazwisku");
- printf("\n 5 Wyswietl uczestnika o podanym indeksie");
- printf("\n 6 Wyswietl cala liste uczestnikow \n");
- printf(" 7 Modyfikuj uczestnika\n");
- printf(" 8 Sprawdz Zwyciezce\n");
- scanf("%d", &option);
- switch(option)
- {
- case 0:
- return 0;
- case 1:
- lista = stworzListeOsobPlik(); // tworze glowe i dopiero potem przekazuje ja dalej
- licznik = dodajPlik("osoby.txt",lista);
- if(licznik==0){
- return 1;
- case 2:
- printf("DODAWANIE OSOBY\n");
- dodajOsobe(&lista,&listak);
- break;
- case 3:
- printf("USUWANIE OSOBY O PODANYM INDEKSIE\n");
- usun_osobe(&lista);
- break;
- case 4:
- printf("USUWANIE OSOBY NA BAZIE IMIENIA I NAZWISKA\n");
- usun_imnaz(&lista);
- break;
- case 5:
- printf("WYSWIETL OSOBE O PODANYM INDEKSIE\n");
- wypisz_osobe(lista);
- break;
- case 6:
- printf("WYSWIETL CALA BAZE\n");
- wypisz_liste(lista);
- break;
- case 7:
- modyfikuj_osobe(&lista);
- break;
- case 8:
- sprawdzwynik(lista,"wynik.txt");
- break;
- case 9:
- dodajkategorie(&listak);
- break;
- case 10:
- wypisz_listek(listak);
- break;
- case 11:
- wypisz_kategorie(listak);
- break;
- }
- }
- }
- int key;
- scanf("%d", &key);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement