Witam, na forum sprowadza mnie chęć rozwiązania problemu z programem, nad którym aktualnie pracuje. Zadanie brzmiało:Wykorzystując struktury i dynamiczną alokację pamięci napisz program obsługujący prosta bazę danych- listę studentów,która składa się z pół 1mie,nazwisko,numer indesku, kierunek, srednia ocen. Program powinien umozliwić dodawanie nowych rekordów oraz wyświetlanie zapis i odczyt bazy danych. Przysiadłem i udało mi się stworzyć taki kod, prosiłbym o wytknięcie ewentualnych błędów i pomoc w doprowadzeniu programu do kompilacji.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char imie[30];
char nazwisko[50];
int index;
char kierunek[40];
float srednia;
}student;
FILE * plik = 0;
void wyswietlBaze(student * student) {
if(!plik)
return;
plik = fopen("baza_danych","rb");
fread(student,sizeof((*student)),1,plik);
fclose(plik);
if((*student).imie[0] != 0) {
puts("Imię studenta: ");
puts((*student).imie);
if((*student).nazwisko[0] != 0) {
puts("Nazwisko studenta: ");
puts((*student).nazwisko);
if((*student).index != 0) {
printf("Nr indeksu: %d\n", (*student).index);
}
if((*student).kierunek[0] != 0) {
puts("Nazwa kierunku: ");
puts((*student).kierunek);
}
if((*student).srednia != 0) {
printf("Średnia wynosi %f\n", (*student).srednia);
}
system("pause > null");
system("cls");
}
void modyfikujRekordy(Student * student) { //od tego miejsca zaczynają się sypać błędy w programie
int opcja;
int dane;
float freq;
plik = fopen("baza_danych", "wb");
puts("1 Dodaj rekord\n");
puts("2 Usun rekord\n");
scanf("%i", &opcja);
system("cls");
puts("1 Imię studenta \n");
puts("2 Nazwisko studenta\n");
puts("3 Nr indeksu \n");
puts("4 Nazwa kierunkuj \n");
puts("5 srednia \n");
if(opcja == 1) {
scanf("%i", &opcja);
system("cls");
switch(opcja) {
case 1:
fflush(stdin);
gets((*student).imie);
break;;
case 2:
fflush(stdin);
gets((*student).nazwisko);
break;
case 3:
fflush(stdin);
gets((*student).kierunek);
break;
case 4:
scanf("%f", &freq);
(*student).index = freq;
break;
case 5:
scanf("%f", &freqq);
(*komputer).srednia = freqq;
break;
}
else {
scanf("%d", &opcja);
system("cls");
switch(opcja) {
case 1:
memset((*student).imie,0,sizeof((*student).imie));
break;
case 2:
memset((*student).nazwisko,0,sizeof((*student).nazwisko));
break;
case 3:
memset((*student).kierunek,0,sizeof((*student).kierunek));
break;
case 4:
(*student).index = 0;
break;
case 5:
(*student).srednia = 0;
break;
}
}
fwrite(student, sizeof((*student), 1,plik);
fclose(plik);
system("cls");
};
int main() {
int wyjscie = 0;
int opcja;
Student student;
memset(&student,0,sizeof(student));
while(!wyjscie) {
puts("1 Modyfikuj rekordy\n");
puts("2 Wyswietl baze danych\n");
puts("3 Wyjscie\n");
scanf("%d", &opcja);
switch(opcja) {
case 1:
system("cls");
modyfikujRekordy(&studen);
break;
case 2:
system("cls");
wyswietlBaze(&student);
break;
case 3:
wyjscie = 1;
break;
}
}
}