Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
- struct student
- {
- char nazwisko[30];
- char imie[20];
- int numer;
- double oceny[5];
- double srednia;
- };
- void dopisz(char *nazwa);
- struct student srednia(struct student s);
- void drukuj(struct student s);
- void wydruk(char *nazwa);
- double minimium(char*nazwa);
- double maximum(char*nazwa);
- int usun(char*nazwa);
- struct student*najlepsi(char*nazwa);
- void popraw(char*nazwa);
- //int ilenajlepszych(char*nazwa);
- int main()
- {
- int i,ile;
- struct student *tab;
- char nazwa[20],co;
- printf("Podaj nazwe pliku: ");
- fflush(stdin);
- scanf("%s", nazwa);
- while(1)
- {
- printf("\n\nCo chcesz zrobic?\nd - dodaj studenta\nw - wypisz liste studentow\nu - usun studentow z podanym numerem\np - popraw dane studenta\nn - wypisz studentow z najlepsza srednia\nb - wypisz najlepsza srednia wsrod studentow\nm - wypisz najgorsza srednia wsrod studentow\nx - zakoncz dzialanie programu\n");
- fflush(stdin);
- co=getchar();
- system("cls");
- switch(co)
- {
- case 'd':
- dopisz(nazwa);
- break;
- case 'm':
- printf("\nNajgorsza srednia wsrod studentow: %lf",minimium(nazwa));
- break;
- case 'w':
- wydruk(nazwa);
- break;
- case 'p':
- popraw(nazwa);
- break;
- case 'n':
- tab=najlepsi(nazwa);
- //ile=ilenajlepszych(nazwa);
- break;
- case 'b':
- printf("\nNajlepsza srednia wsrod wszystkich studentow: %lf",maximum(nazwa));
- break;
- case 'u':
- printf("\nUsunieto %d studentow",usun(nazwa));
- break;
- }
- if (co=='x')
- break;
- }
- return 0;
- }
- void dopisz(char*nazwa)
- {
- FILE*plik = fopen("plik.txt", "a");
- int i = 0;
- struct student s;
- fflush(stdin);
- printf("Podaj nazwisko ");
- scanf("%s", s.nazwisko);
- fflush(stdin);
- printf("Podaj imie ");
- scanf("%s", s.imie);
- fflush(stdin);
- printf("Podaj numer ");
- scanf("%d", &s.numer);
- fflush(stdin);
- for (i = 0; i<5; i++)
- {
- printf("podaj %d ocene ", i);
- scanf("%lf", &s.oceny[i]);
- }
- s = srednia(s);
- fwrite(&s, sizeof(struct student), 1, plik);
- fclose(plik);
- }
- struct student srednia(struct student s)
- {
- int i = 0;
- double suma = 0;
- for (i = 0; i<5; i++)
- {
- suma += *(s.oceny + i);
- }
- s.srednia=suma/5;
- return s;
- };
- void drukuj(struct student s)
- {
- printf("\n\nNazwisko: %s", s.nazwisko);
- printf("\nImie: %s", s.imie);
- printf("\nNumer: %d", s.numer);
- printf("\nSrednia: %lf\n", s.srednia);
- }
- void wydruk(char *nazwa)
- {
- FILE*plik;
- struct student s;
- plik = fopen("plik.txt","r");
- printf("Lista");
- while (fread(&s, sizeof(struct student), 1, plik) == 1)
- {
- drukuj(s);
- }
- fclose(plik);
- }
- void wydruk2(char *nazwa)
- {
- FILE*plik;
- struct student s;
- plik = fopen("plik2.txt","r");
- while (fread(&s, sizeof(struct student), 1, plik) == 1)
- {
- drukuj(s);
- }
- fclose(plik);
- }
- double minimium(char*nazwa)
- {
- int i=0;
- double minsrednia;
- FILE*plik = fopen("plik.txt","r");
- struct student s;
- while (fread(&s, sizeof(struct student), 1, plik) == 1)
- {
- if(i==0)
- minsrednia=s.srednia;
- if(s.srednia<minsrednia)
- minsrednia=s.srednia;
- i++;
- }
- fclose(plik);
- return minsrednia;
- }
- int usun(char*nazwa)
- {
- int i=0,ile=0,numer;
- fflush(stdin);
- printf("Podaj numer studenta do usuniecia:\n");
- scanf("%d",&numer);
- FILE*plik = fopen("plik.txt","r");
- FILE*plik2 = fopen("plik2.txt", "a");
- struct student s;
- while (fread(&s, sizeof(struct student), 1, plik) == 1)
- {
- if(numer!=s.numer)
- fwrite(&s, sizeof(struct student), 1, plik2);
- else
- ile++;
- }
- fclose(plik2);
- fclose(plik);
- remove("plik.txt");
- if(rename("plik2.txt","plik.txt")==0)
- printf("ZMIENIONO NAZWE");
- else
- printf("\nNIE ZMIENIONO NAZWY, BLAD");
- return ile;
- }
- double maximum(char*nazwa)
- {
- int i=0;
- double maxsrednia;
- FILE*plik = fopen("plik.txt","r");
- struct student s;
- while (fread(&s, sizeof(struct student), 1, plik) == 1)
- {
- if(i==0)
- maxsrednia=s.srednia;
- if(s.srednia>maxsrednia)
- maxsrednia=s.srednia;
- i++;
- }
- fclose(plik);
- return maxsrednia;
- }
- void popraw(char*nazwa)
- {
- int i,ile=0;
- double minsrednia;
- FILE*plik = fopen("plik.txt","r");
- FILE*plik2 = fopen("plik2.txt", "a");
- struct student s;
- printf("Podaj numer studenta, ktorego dane chcesz zmienic\n");
- scanf("%d",&ile);
- fseek(plik,0,0);
- while (fread(&s, sizeof(struct student), 1, plik) == 1)
- {
- if(s.numer==ile)
- {
- fflush(stdin);
- printf("Podaj nazwisko ");
- scanf("%s", s.nazwisko);
- fflush(stdin);
- printf("Podaj imie ");
- scanf("%s", s.imie);
- fflush(stdin);
- printf("Podaj numer ");
- scanf("%d", &s.numer);
- fflush(stdin);
- for (i=0;i<5;i++)
- {
- printf("podaj %d ocene ", i);
- scanf("%lf", &s.oceny[i]);
- }
- s = srednia(s);
- fwrite(&s, sizeof(struct student), 1, plik2);
- }
- else
- fwrite(&s, sizeof(struct student), 1, plik2);
- }
- fclose(plik2);
- fclose(plik);
- remove("plik.txt");
- if(rename("plik2.txt","plik.txt")==0)
- printf("ZMIENIONO NAZWE");
- else
- printf("\nNIE ZMIENIONO NAZWY, BLAD");
- }
- struct student*najlepsi(char*nazwa)
- {
- int i=0,j=0,ile=0,czy=0;;
- double maxsrednia;
- struct student *t=NULL;
- FILE*plik = fopen("plik.txt","r");
- struct student s;
- while (fread(&s, sizeof(struct student), 1, plik) == 1)
- {
- if(i==0)
- {
- maxsrednia=s.srednia;
- ile++;
- i++;
- continue;
- }
- if(s.srednia==maxsrednia)
- ile++;
- if(s.srednia>maxsrednia)
- {
- maxsrednia=s.srednia;
- ile=1;
- }
- }
- t=malloc(sizeof(struct student)*ile);
- i=0;
- fseek(plik,0,0);
- while (fread(&s, sizeof(struct student), 1, plik) == 1)
- {
- if(!ile)
- break;
- if(s.srednia==maxsrednia)
- {
- strcpy(t[i].nazwisko,s.nazwisko);
- strcpy(t[i].imie,s.imie);
- t[i].numer=s.numer;
- for(;j<5;j++)
- t[i].oceny[j]=s.oceny[j];
- t[i].srednia=s.srednia;
- i++;
- }
- }
- fclose(plik);
- for(i=0;i<ile;i++)
- {
- printf("\n\nStudent %d nazwisko: %s",i+1, t[i].nazwisko);
- printf("\nStudent %d imie: %s",i+1, t[i].imie);
- printf("\nStudent %d numer: %d",i+1, t[i].numer);
- printf("\nStudent %d srednia: %lf\n",i+1, t[i].srednia);
- }
- return t;
- }
- /*
- int ilenajlepszych(char*nazwa)
- {
- int i=0,ile=0;
- double maxsrednia;
- struct student s;
- FILE*plik = fopen("plik.txt","r");
- while (fread(&s, sizeof(struct student), 1, plik) == 1)
- {
- if(i==0)
- {
- maxsrednia=s.srednia;
- ile++;
- i++;
- continue;
- }
- if(s.srednia==maxsrednia)
- ile++;
- if(s.srednia>maxsrednia)
- {
- maxsrednia=s.srednia;
- ile=1;
- }
- }
- fclose(plik);
- return ile;
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement