Witam,
ostatnio na "Programowaniu w C" Pani kazała zrobić program oparty na strukturach i obsłudze pliku binarnego. Prototypy funkcji zostały określone z góry. Z jej pomocą udało mi się już napisać kilka funkcji, ale dalej nie mogę ruszyć :/ Po prostu nie wiem jak to napisać, aby było dobrze, mam napisane polecenia do obsługi plików w zeszycie, ale nie mogę tego wszystkiego ze sobą sklecić :/
Oto co jeszcze muszę zrobić:
W funkcji "maksimum" trzeba wybrać osobę o najwyższej średniej(czyli daną średnią ocen dla każdej osoby "wyciąć" z pliku i sprawdzić, która jest najwyższa), a następnie za pomocą funkcji najlepsi wypisać dane tej osoby, która ma najwyższą średnią.
W funkcji minimum wybrać osobę o najniższej średniej, a następnie za pomocą funkcji najgorsi usunąć ich.
Funkcja poprawianie, ma umożliwić korektę ocen.
Ciężko mi się odnaleźć w tym wszystkim, dlatego prosiłbym o pomoc w rozwiązaniu tego zadania. Najlepszy byłby dla mnie gotowiec, bo bym sobie zobaczył co i jak się powinno robić, bo coś podobnego czeka mnie na kartkówce :D
Z góry dziękuję !
#include <stdio.h>
#include <stdlib.h>
struct student {
char imie[20];
char nazwisko[30];
int numer;
double oceny[5];
double srednia;
};
void nowy(void);
void srednia(struct student *wsk);
void dodaj(void);
void drukuj(struct student s);
void drukuj_p(void);
double maksimum(void);
double minimum(void);
void najlepsi(void);
int najgorsi(void);
void popraw(void);
main() {
char c;
while (1) {
printf(
"\nMenu programu: \nn- nowy plik\nd- dodaj\nw- wydruk calego pliku "
"\nm- wybor najlepszych \nu- usuniecie najslabszych \np- poprawienie "
"\nq-wyjscie \n\nWybor operacji: ");
fflush(stdin);
scanf("%c", &c);
switch (c) {
case 'n':
nowy();
break;
case 'd':
dodaj();
break;
case 'w':
drukuj_p();
break;
/*case 'm': najlepsi(); break;
case 'u': najg=najgorsi(); break;
case 'p': popraw(); break;*/
case 'q':
return 0;
default:
printf("\nBledny klawisz\n");
}
}
}
void srednia(struct student *wsk) {
int i;
double suma = 0;
for (i = 0; i < 5; i++) {
suma += *(wsk->oceny + i);
}
wsk->srednia = suma / 5;
}
void dodaj(void) {
struct student osoba;
int i = 0;
FILE *plik;
plik = fopen("dane2.txt", "ab");
printf("Podaj Imie: ");
fflush(stdin);
scanf("%19[^\n]s", osoba.imie);
fflush(stdin);
printf("Podaj nazwisko: ");
scanf("%29[^\n]s", osoba.nazwisko);
fflush(stdin);
printf("Podaj numer studenta: ");
scanf("%d", &osoba.numer);
printf("Podaj oceny\n");
while (i < 5) {
printf("[%d]=", i);
scanf("%lf", osoba.oceny + i);
i++;
}
srednia(&osoba);
fwrite(&osoba, sizeof(struct student), 1, plik);
fclose(plik);
}
void drukuj(struct student s) {
int i = 0;
printf("Imie:%s\n", s.imie);
printf("Nazwisko:%s\n", s.nazwisko);
printf("Numer:%d\n", s.numer);
printf("Oceny:\n");
while (i < 5) {
printf("[%d]= %g \n", i, *(s.oceny + i));
i++;
}
printf("Srednia= %g\n", s.srednia);
}
void drukuj_p(void) {
struct student osoba;
FILE *plik;
plik = fopen("dane2.txt", "rb");
printf("Dane z bazy:\n");
while (fread(&osoba, sizeof(struct student), 1, plik) == 1) {
drukuj(osoba);
}
fclose(plik);
}
void nowy(void) {
FILE *plik = fopen("dane2.txt", "wb");
fclose(plik);
}