#include typedef struct { int sleutel; int leeg; char naam[80]; } Persoon; void voegtoe(void) { FILE* fp; Persoon p; int gevonden = 0; fp = fopen("persoon.geg", "rb+"); if (fp == NULL) { char antw; do { printf("Kan persoon.geg niet vinden. Nieuw bestand openen? (J/N): "); fflush(stdin); } while (scanf("%c", &antw) != 1 || antw != 'J' && antw != 'j' && antw != 'N' && antw != 'n'); if (antw == 'J' || antw == 'j') { fp = fopen("persoon.geg", "wb+"); if (fp == NULL) { printf("Error: Kan persoon.geg niet aanmaken.\n"); } } } if (fp != NULL) { p.sleutel = -1; while (gevonden == 0 && fread(&p, sizeof p, 1, fp) == 1) { if (p.leeg == 1) { gevonden = 1; } } if (gevonden == 1) { fseek(fp, -1 * sizeof p, SEEK_CUR); } else { ++p.sleutel; } p.leeg = 0; do { printf("Geef naam voor persoon %d:\n", p.sleutel); fflush(stdin); } while (scanf("%79[ a-zA-Z]", p.naam) != 1); fwrite(&p, sizeof p, 1, fp); fclose(fp); } } void verwijder(void) { FILE* fp; fp = fopen("persoon.geg", "rb+"); if (fp == NULL) { printf("Error: de file persoon.geg kan niet geopend worden.\n"); } else { int sleutel; Persoon p; do { printf("Geef nummer: "); fflush(stdin); } while (scanf("%d", &sleutel) != 1); fseek(fp, sleutel * sizeof p, SEEK_SET); if (fread(&p, sizeof p, 1, fp) != 1) { printf("Error: de persoon kan niet gevonden worden.\n"); } else { if (p.leeg == 1) { printf("Error: de persoon kan niet gevonden worden.\n"); } else { p.leeg = 1; fseek(fp, -1 * sizeof p, SEEK_CUR); if (fwrite(&p, sizeof p, 1, fp) != 1) { printf("Error: de persoon kan niet verwijderd worden.\n"); } } } fclose(fp); } } void zoek(void) { FILE* fp; fp = fopen("persoon.geg", "rb"); if (fp == NULL) { printf("Error: de file persoon.geg kan niet geopend worden.\n"); } else { int sleutel; Persoon p; do { printf("Geef nummer: "); fflush(stdin); } while (scanf("%d", &sleutel) != 1); fseek(fp, sleutel * sizeof p, SEEK_SET); if (fread(&p, sizeof p, 1, fp) != 1) { printf("Error: de persoon kan niet gevonden worden.\n"); } else { if (p.leeg == 1) { printf("Error: de persoon kan niet gevonden worden.\n"); } else { printf("%6d %s\n", p.sleutel, p.naam); } } fclose(fp); } } void drukaf(void) { FILE* fp; fp = fopen("persoon.geg", "rb"); if (fp == NULL) { printf("Error: de file persoon.geg kan niet geopend worden.\n"); } else { Persoon p; while (fread(&p, sizeof p, 1, fp) == 1) { if (p.leeg == 0) { printf("%4d %s\n", p.sleutel, p.naam); } } fclose(fp); } } void main(void) { int antw; do { printf("0. Stoppen.\n" "1. Afdrukken.\n" "2. Toevoegen.\n" "3. Verwijderen.\n" "4. Zoek op nummer.\n" "\n" "Geef keuze: "); fflush(stdin); if (scanf("%d", &antw) != 1) { printf("Error: invoer is geen getal.\n"); } else { switch (antw) { case 0: break; case 1: drukaf(); break; case 2: voegtoe(); break; case 3: verwijder(); break; case 4: zoek(); break; default: printf("Error: verkeerde invoer.\n"); } } } while (antw != 0); }