Z
hi taugenichts
habe dein programm etwas überarbeitet und erweitert.
vielleicht hilft dir das ja weiter.
#include <stdio.h>
//#include <windows.h>
#define max 200
#define ADRESSEN "adressen.dta"
struct adressen
{
char name[21];
char forename[21];
char steet[21];
int number;
char city[21];
int postcode;
int phonenr;
};
int i, auswahl, miss;
FILE * f;
void anzeige (struct adressen *p_adi);
void eingeben (struct adressen *p_adi);
void loeschen (struct adressen *p_adi);
void suchen (struct adressen *p_adi);
int getindex() {
int i = -1;
int auswahl = -1;
printf("datensatz nummer ( -1 to cancel ) : ");
i = scanf("%d", &auswahl);
printf("\n");
if ( 1 == i )
return auswahl;
return -1;
}
void init_db() {
struct adressen a;
int i;
printf("initialisiere db\n");
loeschen(&a);
for ( i = 0; i < max; i++ ) {
speichern(&a, i);
}
printf("fertig\n\n");
}
int speichern( struct adressen *p_adi, int wo ){ // adresse an index wo speichern
int szwrite = 0;
if ( wo >= 0 ) {
fseek(f, wo * sizeof(struct adressen), SEEK_SET );
szwrite=fwrite(p_adi, sizeof(struct adressen), 1, f);
if ( szwrite == 1 )
printf("record %d written\n\n", wo);
}
return szwrite != 0;
}
int lesen( struct adressen *p_adi, int wo ){ // adresse an index wo lesen
int szread = 0;
if ( wo >= 0 ) {
fseek(f, wo * sizeof(struct adressen), SEEK_SET );
szread=fread(p_adi, sizeof(struct adressen), 1, f);
if ( szread == 1 )
printf("record %d read\n", wo);
if ( strstr( p_adi->name, "---" ) == p_adi->name )
printf("leerer datensatz\n\n");
}
return szread != 0;
}
/* +++ Main Programm +++ */
int main (void)
{
struct adressen adi;
struct adressen *p_adi = &adi;
int done = 0;
int fsize = 0;
f = fopen(ADRESSEN,"r+b");
fseek(f, 0, SEEK_END);
fsize = ftell(f) / sizeof(adi);
printf("platz für %d adressen in db\n", fsize );
do
{
auswahl = 0;
miss = 0;
printf("\nnamen anzeigen 1\n");
printf("namen eingeben 2\n");
printf("namen loeschen 3\n");
printf("namen suchen 4\n");
printf("namen speichern 5\n");
printf("namen lesen 6\n");
printf("db initialisieren 7\n");
printf("ende 0\n\n");
miss = scanf("%d", &auswahl);
fflush (stdin);
switch (auswahl)
{
case 0: done = 1;
break;
case 1: anzeige(p_adi);
break;
case 2: eingeben(p_adi);
break;
case 3: loeschen(p_adi); // not implemented
break;
case 4: suchen(p_adi); // not implemented
break;
case 5: printf("adresse speichern\n");
speichern(p_adi, getindex());
break;
case 6: printf("adresse lesen\n");
lesen(p_adi, getindex());
break;
case 7: init_db();
break;
default: printf("ungültige eingabe, 0-7");
break;
}
} while (done==0);
fclose(f);
return 0;
};
/* +++ Sub-Programm +++ */
/* + anzeigen der daten + */
void anzeige (struct adressen *p_adi)
{
printf("namen: %s\n", p_adi->name);
};
/* + eingeben der daten + */
void eingeben (struct adressen *p_adi)
{
printf("name eingeben: ");
scanf("%s", p_adi->name);
};
void loeschen (struct adressen *p_adi) {
// als ungültig markieren
strcpy(p_adi->name, "---");
}
void suchen (struct adressen *p_adi) {
}
Kurt