Struktury i obsługa plików- ANSI C

0

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);
}
 
0

Kody lepiej załączaj do postów, łatwiej się czyta, ktoś może mieć niechęć do ściągania twoich kodów.
Pierwsze kilka rozdziałów z dowolnego kursu i będziesz umiał to zrobić.
Jak czegoś nie będziesz rozumieć to wal jak w dym pytaniami.

0

Ok :) będę pamiętał na przyszłość :)

Dobrze, to np. funkcja maksimum. Jak zrobić, żeby odczytać z tego pliku średnią każdej z osób ? To mi chyba sprawia największy problem :/

0
dub.raf napisał(a):

Jak zrobić, żeby odczytać z tego pliku średnią każdej z osób ? To mi chyba sprawia największy problem :/

A jak ty napisałeś drukuj_p skoro odczyt średniej sprawia ci największy problem?

Problem w tym że nie rozumiesz ani wiersza w tym kodzie.
Więc może zacznij od jakiegoś kursu, aby to zmienić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1