Witam, posiadam pewien problem z programem, prawdopodobnie zapisuje strukturę prawidłowo, lecz jest jakiś problem z odczytem.
/* Napisz program "Akademik". Program ma przechowywać informacje o studentach zameldowanych w poszczególnych pokojach trzyosobowych.
Na potrzeby testowania należy przyjąć, że akademik posiada cztery pokoje trzyosobowe.
Należy użyć struktury typu tablica czteroprocentowa tablic trójelementowych, o elementach typu struktura "Osoba"
o polach: imie, nazwisko, pesel,wydzial, czy_zalega.
Program ma za zadanie za pomocą menu pozwalać na wybranie jednej z operacji:
- wczytanie danych z klawiatury,
- wczytanie danych z pliku,
- wypisanie wszystkich danych, wg numerów pokoi,
- wypisać dane osób zalegających, z podaniem numerów pokoi
- wypisać dane osób z podanego wydziału
- wypisać dane osób o podanym imieniu,
- wypisać dane osoby w wieku poniżej 21 lat wykorzystać pesel
- po zakończeniu program ma za zadanie zapisać plik z danymi */
/* ----------------------------------------------------------------------- */
#include <conio.h>
#include <stdio.h>
/* ----------------------------------------------------------------------- */
#define N 1 /* Pokoje */
#define M 1 /* Osoby */
/* ----------------------------------------------------------------------- */
struct Osoba{
char imie[20], nazwisko[20],czy_zalega[4],wydzial[15], pesel[12];
};
/* ----------------------------------------------------------------------- */
void wczytaj_dane (struct Osoba [*][*]);
void dane_do_wyswietlenia();
void wyswietl_dane ();
void czy_zalega_nr();
void szukanie_wydzial();
void szukanie_imie();
void ponizej_21();
void menu();
void tabelka();
int zapisanie_pliku();
void lokalizacja_Pliku();
int wczytanie_z_pliku();
/* ------------------------------------------------------------------------ */
char sciezka[N],spr;
/* ------------------------------------------------------------------------ */
int main (void)
{ int *wybor;
struct Osoba tablica [N][M];
do{
system("cls");
menu();
printf("\nPodaj odpowiednia watosc ");
scanf("%d", wybor);
switch(*wybor)
{
case 1:
{
wyswietl_dane(tablica);
while(!kbhit());
continue;
}
case 2:
{
wczytaj_dane(tablica);
continue;
}
case 3:
{
lokalizacja_Pliku();
wczytanie_z_pliku(tablica);
while(!kbhit());
continue;
}
case 4:
{
czy_zalega_nr(tablica);
while(!kbhit());
continue;
}
case 5:
{
szukanie_imie(tablica);
while(!kbhit());
continue;
}
case 6:
{
szukanie_wydzial(tablica);
while(!kbhit());
continue;
}
case 7:
{
wyswietl_dane(tablica);
while(!kbhit());
continue;
}
case 8:
{
ponizej_21(tablica);
while(!kbhit());
continue;
}
};
} while(*wybor !=0);
lokalizacja_Pliku();
zapisanie_pliku();
return 0;
}
/* ---------------------------------------------------------------------- */
void tabelka()
{
}
void lokalizacja_Pliku()
{
printf("\nPodaj sciezke do pliku: np:(c://dane.txt) ");
scanf("%s", sciezka);
}
int zapisanie_pliku(struct Osoba tablica [N][M])
{ int i;
FILE *plik;
if ((plik = fopen(sciezka,"wb"))==NULL)
{
printf("Chcesz sprobowac jeszcze raz t/n:");
scanf ("%s", &spr);
if(spr=='t') {
main();
} else {
return 100;
}
}
for (i=0; i<N; i++)
fwrite(tablica,sizeof(int),sizeof(tablica),plik);
fclose(plik);
}
int wczytanie_z_pliku(struct Osoba tablica [N][M])
{ int i;
FILE *plik;
if ((plik = fopen(sciezka,"rb"))==NULL)
{
printf("Chcesz sprobowac jeszcze raz t/n:");
scanf ("%s", &spr);
if(spr=='t') {
main();
} else {
return 100;
}
}
for (i=0; i<N; i++)
fread(tablica,sizeof(int),sizeof(tablica),plik);
fclose(plik);
}
void menu()
{
printf("Program AKADEMIK - twoja baza 1.0 [BETA]");
printf("\n\n1 - wyswietlanie Danych");
printf("\n2 - wczytanie danych z Klaw.");
printf("\n3 - wczytanie danych z Pliku");
printf("\n4 - wyswietlenie Zalegajacych");
printf("\n5 - wyswietlenie wg Imienia ");
printf("\n6 - wyswietlenie wg Wydzialu");
printf("\n7 - wyswietlenie wg Nr.pok.");
printf("\n8 - wyswietlenie 21+");
printf("\n0 - Koniec pracy\n");
}
void wczytaj_dane (struct Osoba tablica[N][M])
{ int i,x,w=1,p=1;
printf("\n\nPodaj dane osob zamieszkujacych pokoje:");
for (i=0; i<N; i++,w++)
{
printf("\n\n\nPokoj nr %d\n\n",w);
for (x=0,p=1; x<M; x++,p++)
{
printf("\nPodaj dane pokoj [%d] osoba [%d] ", w,p);
printf("\n---------------------------------------------");
printf("\nimie:"); scanf("%s", &tablica[i][x].imie );
printf("czy_zalega:"); scanf("%s",&tablica[i][x].czy_zalega);
printf("wydzial:"); scanf("%s", &tablica[i][x].wydzial);
printf("pesel: "); scanf("%s", &tablica[i][x].pesel);
}
}
}
void dane_do_wyswietlenia(int i, int x,int w,int p, struct Osoba tablica[N][M])
{
printf("\nPodano dane pokoj [%d] osoba [%d] ", w,p);
printf("\n---------------------------------------------");
printf("\nimie: %s", tablica[i][x].imie );
printf("\nczy_zalega_nr: %s", tablica[i][x].czy_zalega);
printf("\nwydzial: %s", tablica[i][x].wydzial);
printf("\npesel: %s", tablica[i][x].pesel);
printf("\n");
}
void wyswietl_dane (struct Osoba tablica[N][M])
{ int i,x,w=1,p=1;
printf("\n\nPodano :");
for (i=0,w=1; i<N; i++,w++)
{
printf("\n\nPokoj nr %d\n",w);
for (x=0; x<M; x++,p++)
{
dane_do_wyswietlenia(i,x,w,p,tablica);
}
}
while(!kbhit());
}
void czy_zalega_nr(struct Osoba tablica [N][M])
{ int i,x,w=1,p=1;
for (i=0,w=1; i<N; i++,w++)
for (x=0; x<M; x++,p++)
if(strcmp(tablica[i][x].czy_zalega,"tak")==0)
{
dane_do_wyswietlenia(i,x,w,p,tablica);
} else {
printf("\nBrak osob zalegajacych");
}
}
void szukanie_wydzial(struct Osoba tablica [N] [M])
{ int i,x,w=1,p=1;
char wydzial[10];
printf("\nPodaj wydzial do wyszukania: "); scanf("%s", wydzial);
for (i=0,w=1; i<N; i++,w++)
for (x=0; x<M; x++,p++)
if( stricmp(wydzial,tablica[i][x].wydzial) == 0)
dane_do_wyswietlenia(i,x,w,p,tablica);
else {
printf("\nNie znaleziono osoby z tego wydzialu");
}
}
void szukanie_imie(struct Osoba tablica [N] [M])
{ int i,x,w=1,p=1;
char imie[15];
printf("\nPodaj imie do wyszukania: "); scanf("%s", imie);
for (i=0,w=1; i<N; i++,w++)
for (x=0; x<M; x++,p++)
if( stricmp(imie,tablica[i][x].imie) == 0)
dane_do_wyswietlenia(i,x,w,p,tablica);
else {
printf("\nNie znaleziono osoby o tym imieniu");
}
}
void ponizej_21(struct Osoba tablica [N] [M])
{ int i,x,w=1,p=1;
char data[6];
for (i=0,w=1; i<N; i++,w++)
for (x=0; x<M; x++,p++)
{
strncpy(data, &tablica[i][x].pesel, 6);
data[6] = '\0';
int pesel_liczba = atoi (data);
if(pesel_liczba > 930101)
dane_do_wyswietlenia(i,x,w,p,tablica);
else {
printf("\nNie znaleziono osoby o takim peselu");
}
}
}