Sie sind vermutlich noch nicht im Forum angemeldet - Klicken Sie hier um sich kostenlos anzumelden  
logo
Sie können sich hier anmelden
Dieses Thema hat 0 Antworten
und wurde 229 mal aufgerufen
 PRC
bichlerp Offline



Beiträge: 3

25.01.2005 17:44
RE: PRC -- 24.01.2005 Antworten

/* Beispiel 9.3 */
/* Schuelerkartei verwalten */

#include
#include
#include
#include

struct Datum
{ int tag;
char mon[4];
int jahr;
};

struct Schueler
{ int gueltig;
char name[41],adr[41];
Datum geburt;
};

enum Aktion {erstellen,erweitern};

void ausgabe(Schueler schuelerdaten);
void eingabe(Schueler *schuelerdaten);
void lesen(char dateiname[ ]);
void dateischreiben
(Aktion aktion,char dateiname[ ]);
void aendern(char dateiname[ ]);
void packen(char dateiname[ ]);

const int sl=sizeof(Schueler);
/* Satzlaenge */

void ausgabe(Schueler schuelerdaten)
{ if (!schuelerdaten.gueltig)
printf("GELOESCHT:\n");
printf("Name: %s\n",schuelerdaten.name);
printf("Adr: %s\n",schuelerdaten.adr);
printf("Geburtsdatum:\n");
printf(" TT: %d\n",
schuelerdaten.geburt.tag);
printf(" MMM: %s\n",
schuelerdaten.geburt.mon);
printf("JJJJ: %d\n",
schuelerdaten.geburt.jahr);
} /* ausgabe */

void eingabe(Schueler *schuelerdaten)
{ schuelerdaten->gueltig=1;
printf("Name: ");
scanf("%40s",schuelerdaten->name);
printf("Adr: ");
scanf("%40s",schuelerdaten->adr);
printf("Geburtsdatum\n");
printf(" TT:");
scanf("%2d",&(schuelerdaten->geburt.tag));
printf(" MMM:");
scanf("%3s",&(schuelerdaten->geburt.mon));
printf(" JJJJ:");
scanf
("%4d",&(schuelerdaten->geburt.jahr));
} /* eingabe */

void lesen(char dateiname[ ])
{ FILE *kartei;
Schueler schuelerdaten;
kartei=fopen(dateiname,"rb");
while (fread(&schuelerdaten,sl,1,kartei))
{ if (!schuelerdaten.gueltig) continue;
clrscr();
ausgabe(schuelerdaten);
gotoxy(1,12);
printf("Weiter mit irgendeiner Taste");
getch();
}
fclose(kartei);
} /* lesen */

void dateischreiben(Aktion aktion,char dateiname[ ])
{ FILE *kartei;
Schueler schuelerdaten;
char antwort;
if (aktion==erstellen)
kartei=fopen(dateiname,"wb");
else /* erweitern */
{ kartei=fopen(dateiname,"ab");
fseek(kartei,0L,2);
}

do
{ clrscr();
eingabe(&schuelerdaten);
fwrite(&schuelerdaten,sl,1,kartei);
printf("\nWeitere Eingaben (J/N)");
antwort=toupper(getche());
} while (antwort != 'N');
fclose(kartei);
} /* dateischreiben */

void aendern(char dateiname[ ])
{ int katnr;
FILE *kartei;
Schueler schuelerdaten;
char antwort;
clrscr();
printf("Katalognummer:");
scanf("%2d",&katnr);
printf("\n\n");

kartei=fopen(dateiname,"r+b");
fseek(kartei,(long)(katnr-1)*sl,0);
fread(&schuelerdaten,sl,1,kartei);
ausgabe(schuelerdaten);
printf("\n\n");

printf("Loeschen (J/N)");
antwort=toupper(getch());
printf("\n\n");
schuelerdaten.gueltig=antwort=='N';

if (schuelerdaten.gueltig)
eingabe(&schuelerdaten);
fseek(kartei,(long)(-sl),1);
fwrite(&schuelerdaten,sl,1,kartei);
fclose(kartei);
} /* aendern */

void packen(char dateiname[ ])
{ FILE *eing,*ausg;
Schueler schuelerdaten;
char temp[ ]="TEMP";
eing=fopen(dateiname,"rb");
ausg=fopen(temp,"wb");
while(fread(&schuelerdaten,sl,1,eing))
if (schuelerdaten.gueltig)
fwrite(&schuelerdaten,sl,1,ausg);
fclose(ausg);
fclose(eing);
unlink(dateiname);
rename(temp,dateiname);
} /* packen */

void main()
{ int antwort;
char dateiname[30];
strcpy(dateiname,"KARTEI");

do
{ clrscr();
gotoxy(1,5);
printf("Erstellen......\n");
printf("Erweitern......\n");
printf("Lesen..........\n");
printf("Aendern........\n");
printf("Packen.........

\n");
printf("Fertig.........\n\n\n");
printf("Auswahl........< >\n");
gotoxy(17,13);
antwort=toupper(getche());
printf("\n");

switch (antwort)
{ case 'E':
dateischreiben(erstellen,dateiname);
break;
case 'W':
dateischreiben(erweitern,dateiname);
break;
case 'L':
lesen(dateiname);
break;
case 'A':
aendern(dateiname);
break;
case 'P':
packen(dateiname);
break;
}
} while (antwort != 'F');
} /* b093 */


 Sprung  
Xobor Forum Software von Xobor | Forum, Fotos, Chat und mehr mit Xobor
Datenschutz