Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define K 10
- #define ST 20
- struct student
- {
- int nr_legitymacji;
- struct student *nast;
- };
- typedef struct student STUDENT;
- typedef STUDENT *ADRESSTUDENT;
- struct zapisani
- {
- ADRESSTUDENT zapisany;
- struct zapisani *nast;
- };
- typedef struct zapisani ZAPISANI;
- typedef ZAPISANI *ADRESZAPISANI;
- typedef struct
- {
- char nazwa_kategorii[30];
- char nazwa_kursu[30];
- int liczba_godzin;
- ADRESZAPISANI first;
- }kursy;
- ADRESSTUDENT czytanie_indeksow(FILE *plik)
- { int indeks;
- ADRESSTUDENT pierwszy=NULL,ostatni=NULL;
- while(fscanf(plik,"%d",&indeks)!=0 && indeks!=0)
- {
- if(pierwszy==NULL)
- {
- pierwszy=(ADRESSTUDENT)malloc(sizeof(STUDENT));
- pierwszy->nr_legitymacji=indeks;
- ostatni=pierwszy;
- }
- else
- {
- ostatni->nast=(ADRESSTUDENT)malloc(sizeof(STUDENT));
- ostatni=ostatni->nast;
- ostatni->nr_legitymacji=indeks;
- ostatni->nast=NULL;
- }
- }
- return pierwszy;
- }
- void wypisanie_indeksow(ADRESSTUDENT pierwszy)
- {
- ADRESSTUDENT pom=pierwszy;
- while(pom)
- {
- printf("%d\n",pom->nr_legitymacji);
- pom=pom->nast;
- }
- }
- ADRESSTUDENT szukaj(ADRESSTUDENT pierwszy,int indeks)
- {
- ADRESSTUDENT pom = pierwszy;
- while(pom->nr_legitymacji!=indeks)
- {
- pom=pom->nast;
- }
- return pom;
- }
- void wczytywanie_kurs(ADRESSTUDENT pierwszy, kursy tab[],FILE *plik)
- {
- int indeks;
- int i=0;
- while(!feof(plik))
- {
- fscanf(plik,"%s",tab[i].nazwa_kategorii);
- fscanf(plik,"%s",tab[i].nazwa_kursu);
- fscanf(plik,"%d",&tab[i].liczba_godzin);
- ADRESZAPISANI ostatni=NULL;
- tab[i].first=NULL;
- while(fscanf(plik,"%d",&indeks)!=0 && indeks!=0)
- {
- ADRESSTUDENT pom=pierwszy;
- if(tab[i].first==NULL)
- {
- tab[i].first=(ADRESZAPISANI)malloc(sizeof(ZAPISANI));
- tab[i].first->zapisany=szukaj(pierwszy,indeks);
- tab[i].first->nast=NULL;
- ostatni=tab[i].first;
- }
- else
- {
- ostatni->nast=(ADRESZAPISANI)malloc(sizeof(ZAPISANI));
- ostatni=ostatni->nast;
- ostatni->zapisany=szukaj(pierwszy,indeks);
- ostatni->nast=NULL;
- }
- }
- i++;
- }
- }
- void wypisywanie_kurs(kursy tab[])
- {
- int i;
- ADRESZAPISANI pom;
- for(i=0;i<20;i++)
- {
- printf("%s\n",tab[i].nazwa_kategorii);
- printf("%s\n",tab[i].nazwa_kursu);
- printf("%d\n",tab[i].liczba_godzin);
- pom=tab[i].first;
- while(pom!=NULL)
- {
- printf("%d\n",pom->zapisany->nr_legitymacji);
- pom=pom->nast;
- }
- }
- }
- void a(kursy tab [], ADRESSTUDENT pierwszy)
- {
- ADRESSTUDENT temp = pierwszy;
- ADRESZAPISANI pom=NULL;
- FILE *plik=fopen("a.txt","wt");
- int i;
- while(temp)
- {
- fprintf(plik,"%d\n",temp->nr_legitymacji);
- for(i=0;i<20;i++)
- {
- pom=tab[i].first;
- while(pom)
- {
- if(pom->zapisany==temp)
- {
- fprintf(plik,"%s\n",tab[i].nazwa_kursu);
- break;
- }
- pom=pom->nast;
- }
- }
- temp=temp->nast;
- }
- fclose(plik);
- }
- void b(kursy tab[])
- {
- FILE *plik = fopen("b.txt","wt");
- int i;
- ADRESZAPISANI temp;
- for(i=0;i<20;i++)
- {
- fprintf(plik,"%s\n",tab[i].nazwa_kursu);
- temp = tab[i].first;
- while(temp)
- {
- fprintf(plik,"%d\n",temp->zapisany->nr_legitymacji);
- temp=temp->nast;
- }
- }
- fclose(plik);
- }
- void c(kursy tab[])
- {
- FILE *plik=fopen("c.txt","wt");
- ADRESZAPISANI pom=NULL;
- float srednia=0;
- int ile_studentow=0, ile_godzin=0,ile_studentow_kurs=0;
- int i;
- for(i=0;i<20;i++)
- {
- pom=tab[i].first;
- ile_studentow_kurs=0;
- while(pom)
- {
- ile_studentow++;
- ile_studentow_kurs++;
- pom=pom->nast;
- }
- ile_godzin += ile_studentow_kurs*tab[i].liczba_godzin;
- }
- srednia =(float)ile_godzin/ile_studentow;
- fprintf(plik,"%f\n",srednia);
- fclose(plik);
- }
- void d(kursy tab[])
- {
- FILE *plik = fopen("d.txt","wt");
- int max=0, ile=0,i;
- ADRESZAPISANI pom=NULL;
- for(i=0;i<20;i++)
- {
- pom=tab[i].first;
- ile=0;
- while(pom)
- {
- ile++;
- pom=pom->nast;
- }
- if(ile>max)
- {
- max=ile;
- }
- }
- for(i=0;i<20;i++)
- {
- pom=tab[i].first;
- ile=0;
- while(pom)
- {
- ile++;
- pom=pom->nast;
- }
- if(ile==max)
- {
- fprintf(plik,"%s\n",tab[i].nazwa_kursu);
- }
- }
- fclose(plik);
- }
- void e(kursy tab[], ADRESSTUDENT pierwszy)
- {
- FILE *plik = fopen("e.txt","wt");
- ADRESSTUDENT temp = pierwszy;
- ADRESZAPISANI pom = NULL;
- int i=0,ile=0,max=0,j;
- while(temp)
- {
- ile++;
- temp=temp->nast;
- }
- int tablica[ile][2];
- temp = pierwszy;
- while(temp)
- {
- tablica[i][0]=temp->nr_legitymacji;
- i++;
- temp=temp->nast;
- }
- for(i=0;i<20;i++)
- {
- pom=tab[i].first;
- while(pom)
- {
- for(j=0;j<ile;j++)
- {
- if(pom->zapisany->nr_legitymacji==tablica[i][0])
- {
- tablica[i++][1];
- break;
- }
- }
- pom=pom->nast;
- }
- }
- for(i=0;i<ile;i++)
- {
- if(tablica[i][1]>max)
- {
- max=tablica[i][1];
- }
- }
- for(i=0;i<ile;i++)
- {
- if(tablica[i][1]==max)
- {
- fprintf(plik,"%d\n",tablica[i][0]);
- }
- }
- fclose(plik);
- }
- void f(kursy tab[])
- {
- FILE *plik = fopen("f.txt","wt");
- int i, max=0,ile=0,j=0;
- ADRESZAPISANI pom;
- char kategorie [10][30];
- int liczba[10];
- strcpy(kategorie[0],tab[0].nazwa_kategorii);
- for(i=1;i<20;i++)
- {
- if(strcmp(kategorie[j],tab[i].nazwa_kategorii)!=0)
- {
- strcpy(kategorie[j+1],tab[i].nazwa_kategorii);
- j++;
- }
- }
- for(i=0;i<20;i++)
- {
- ile=0;
- pom=tab[i].first;
- while(pom)
- {
- ile++;
- pom=pom->nast;
- }
- for(j=0;strcmp(kategorie[j],tab[i].nazwa_kategorii);j++)
- {
- }
- liczba[j]+=ile;
- }
- for (i=0;i<10;i++)
- {
- if(liczba[i]>max)
- {
- max=liczba[i];
- }
- }
- for(i=0;i<10;i++)
- {
- if(liczba[i]==max)
- {
- fprintf(plik,"%s\n",kategorie[i]);
- }
- }
- fclose(plik);
- }
- void g (kursy tab[],ADRESSTUDENT pierwszy)
- {
- FILE *plik =fopen("g.txt","wt");
- int i;
- char usuwanie[30];
- printf("Kursy:\n");
- for(i=0;i<20;i++)
- printf("%s\n",tab[i].nazwa_kursu);
- printf("Co chcesz usunac\n");
- ADRESZAPISANI temp;
- ADRESSTUDENT pom=pierwszy;
- scanf("%s",usuwanie);
- for(i=0;i<strlen(usuwanie);i++)
- {
- if(isupper(usuwanie[i]))usuwanie[i]=tolower(usuwanie[i]);
- }
- for(i=0;i<20;i++)
- { if(strcmp(tab[i].nazwa_kursu,usuwanie)==0)
- {strcpy(tab[i].nazwa_kategorii," ");
- strcpy(tab[i].nazwa_kursu," ");
- tab[i].liczba_godzin=0;
- while(tab[i].first)
- {
- temp=tab[i].first;
- tab[i].first = tab[i].first->nast;
- free(temp);
- }}}
- if(i==19)
- {
- printf("Blad");return 0;}
- while(pom)
- {
- fprintf(plik,"%d\n",pom->nr_legitymacji);
- pom=pom->nast;
- }
- fprintf(plik,"%d\n",0);
- for(i=0;i<20;i++)
- {
- if(tab[i].first!=NULL)
- {
- fprintf(plik,"%s\n%s\n%d\n",tab[i].nazwa_kategorii,tab[i].nazwa_kursu,tab[i].liczba_godzin);
- temp=tab[i].first;
- while(temp)
- {
- fprintf(plik,"%d\n",temp->zapisany->nr_legitymacji);
- temp=temp->nast;
- }
- fprintf(plik,"%d\n",0);
- }
- }
- fclose(plik);
- }
- int main()
- {
- FILE *plik=fopen("studenci.txt","rt");
- if(plik==NULL)
- {
- printf("Bład");
- return 0 ;
- }
- kursy tab[ST];
- ADRESSTUDENT pierwszy=czytanie_indeksow(plik);
- wczytywanie_kurs(pierwszy,tab,plik);
- printf("--------------------MENU---------------------\n");
- printf("a)Kursy studentow, na ktore sie zapisali\n");
- printf("b)Studenci, ktorzy zapisali sie na kursy\n");
- printf("c)Srednia liczba godzin spedzonych na kursach przez stastycznego studenta\n");
- printf("d)Kurs, na ktory zapisalo sie najwiecej studentow \n");
- printf("e)Student, ktory zapisal sie na najwiecej kursow\n");
- printf("f)Kategoria, ktora najczesciej wybierali studenci\n");
- printf("g)Usuwanie wszystkich informacji o podanym kursie\n");
- printf("h)Wykonanie wszystkich zadan\n");
- char x;
- printf("Wybierz zadanie: \n");
- scanf("%c",&x);
- if(isupper(x)) x=tolower(x);
- fflush(stdin);
- switch(x)
- {
- case 'a':a(tab,pierwszy);
- break;
- case 'b':b(tab);
- break;
- case 'c': c(tab);
- break;
- case 'd':d(tab);
- break;
- case 'e': e(tab,pierwszy);
- break;
- case 'f':f(tab);
- break;
- case 'g':g(tab,pierwszy);
- break;
- case 'h':
- {
- a(tab,pierwszy);
- b(tab);
- c(tab);
- d(tab);
- e(tab,pierwszy);
- f(tab);
- g(tab,pierwszy);
- break;
- }
- default: printf("Nie ma takiej opcji");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement