Es handelt sich um eine kleine Datenbanksimulation. Es können Kunden mit Name,
Vorname und Telefonnummer angelegt, gespeichert, geladen und angezeigt werden.
// ************************************************************************************************
// Autor/en: http://www.online-vba.de - Marc Wershoven
// Verwendung der Quelltexte auf eigene Gefahr!
// Es gelten die Nutzungsbedingungen von www.Online-VBA.de!
// Original-Quelltext: www.online-vba.de/cpp_kundendb.php
// ************************************************************************************************
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX 100
// * * * P R O TO T Y P E N * * *
void startmenue();
void kundeneumenue(struct vk ** p);
void startanzeige();
void gebeaus(struct vk * p);
void speicher(struct vk * p);
void laden(struct vk ** p);
void naechsteseite();
void killallpoints(struct vk ** p);
// * * * S T R U K T U R * * *
struct vk
{
char name[MAX];
char vorname[MAX];
char tel[MAX];
struct vk *nf; //Nachfolgeradresse verkettete Liste
};
// * * * G L O B A L V A R S * * *
int kundencount=0;
// * * * GLOBALES FELD KUNDE ANLEGEN * * *
struct vk *start=(struct vk *)malloc(sizeof(struct vk));
// * * * H A U P T P R O G R A M M * * *
void main()
{
//Menüauswahl
startanzeige();
startmenue();
//PROGRAMMENDE
}
// * * * F U N K T I O N E N * * *
void startmenue()
{
char eingabe;
while(1)
{
eingabe=getchar();
fflush(stdin);
switch(eingabe)
{
case '1':
kundeneumenue(&start);
break;
case '2':
gebeaus(start);
break;
case '3':
speicher(start);
break;
case '4':
laden(&start);
break;
case '9':
killallpoints(&start);
exit(EXIT_FAILURE);
break;
default:
break;
}
}
}
void startanzeige()
{
system("cls");
printf("--------------------------------------------------------------------------------");
printf("- ---<<< KUNDENDATENBANK V1.0 >>>--- -");
printf("--------------------------------------------------------------------------------");
printf("- -");
printf("- -");
printf("- 1> Kunden anlegen -");
printf("- 2> Kunden zeigen -");
printf("- 3> Speichern der Datenbank ('DB.DAT') -");
printf("- 4> Datenbank einladen -");
printf("- -");
printf("- -");
printf("- -");
printf("- 9> Programm beenden -");
printf("- -");
printf("- -");
printf("- -");
printf("- -");
printf("- -");
printf("- -");
printf("- -");
printf("--------------------------------------------------------------------------------");
printf("Ihre Eingabe: ");
}
void kundeneumenue(struct vk ** p)
{
char eingabe[MAX];
struct vk * kopie = *p; //Sicherung Startadresse 1.Element
*p =(struct vk *)malloc(sizeof(struct vk)); //Neues Element einfügen
system("cls");
printf("--------------------------------------------------------------------------------");
printf("- ---<<< KUNDENDATENBANK V1.0 >>>--- -");
printf("--------------------------------------------------------------------------------");
//NAME
printf("\nBitte Namen eingeben: ");
scanf("%s",&eingabe);
strcpy((*p)->name,eingabe); //Namenszuweisung
//VORNAME
printf("\nBitte Vorname eingeben: ");
scanf("%s",&eingabe);
strcpy((*p)->vorname,eingabe);
//TEL
printf("\nBitte Tel.Nr. eingeben: ");
scanf("%s",&eingabe);
strcpy((*p)->tel,eingabe);
//ZURüCK ZUM MENü
if(kundencount==0)
(*p)->nf=NULL; //Adresszuweisung bei ersten Kunden
else
(*p)->nf=kopie; //Adresszuweisung
kundencount++;
startanzeige();
}
void gebeaus(struct vk * p)
{
char buffer;
int counter=0;
if(kundencount==0)
{
system("cls");
printf("--------------------------------------------------------------------------------");
printf("- ---<<< KUNDENDATENBANK V1.0 >>>--- -");
printf("--------------------------------------------------------------------------------");
printf("- DIE DATENBANK BEINHALTET NOCH KEINEN KUNDEN .... -");
printf("--------------------------------------------------------------------------------");
}
else
{
system("cls");
printf("--------------------------------------------------------------------------------");
printf("- ---<<< KUNDENDATENBANK V1.0 >>>--- -");
printf("--------------------------------------------------------------------------------\n");
if(p==NULL)
printf("...\n");
else
{
while(p!=NULL)
{
printf(" %10s ,%10s, %10s",p->vorname, p->name, p->tel);
p=p->nf;
printf("\n"); //pro Kunde eine Zeile
counter++;
if(counter==10)
{
naechsteseite();
counter=0;
}
}
}
}
printf("\nENTER fuer weiter...");
scanf("%c",&buffer);
startanzeige();
}
void speicher(struct vk * p)
{
char buffer;
FILE* file;
if(kundencount==0)
{
system("cls");
printf("--------------------------------------------------------------------------------");
printf("- ---<<< KUNDENDATENBANK V1.0 >>>--- -");
printf("--------------------------------------------------------------------------------");
printf("- DIE DATENBANK BEINHALTET NOCH KEINEN KUNDEN .... -");
printf("--------------------------------------------------------------------------------");
}
else
{
system("cls");
printf("--------------------------------------------------------------------------------");
printf("- ---<<< KUNDENDATENBANK V1.0 >>>--- -");
printf("--------------------------------------------------------------------------------\n");
printf(" speicher...");
file = fopen("C:\\db.dat","wb");
if(file==NULL)
printf("\n FEHLER BEIM OEFFNEN DER DATEI...\n");
else
{
if(p==NULL)
printf("...gespeichert!!!\n");
else
{
while(p!=NULL)
{
fprintf(file,"%100s%100s%100s",p->vorname, p->name, p->tel);
p=p->nf;
printf(".");
}
printf("...gespeichert!!!\n");
}
fclose(file);
}
}
printf("\nENTER fuer weiter...");
scanf("%c",&buffer);
startanzeige();
}
void laden(struct vk ** p)
{
char n[MAX],v[MAX],t[MAX];
FILE* file;
char buffer;
int rc;
struct vk * kopie = *p; //Sicherung Startadresse 1.Element
system("cls");
printf("--------------------------------------------------------------------------------");
printf("- ---<<< KUNDENDATENBANK V1.0 >>>--- -");
printf("--------------------------------------------------------------------------------");
printf(" lade...");
file=fopen("c:\\db.dat","rb");
if(file==NULL)
printf("\n FEHLER BEIM OEFFNEN DER DATEI...\n");
else
{
rc=fscanf(file,"%100s%100s%100s",&v,&n,&t);
while(rc!=EOF) //bis Dateiende
{
kopie = *p; //Sicherung
*p =(struct vk *)malloc(sizeof(struct vk)); //Neues Element einfügen
strcpy((*p)->name,n);
strcpy((*p)->vorname,v);
strcpy((*p)->tel,t);
if(kundencount==0)
(*p)->nf=NULL; //Adresszuweisung bei ersten Kunden
else
(*p)->nf=kopie; //Adresszuweisung
kundencount++;
printf(".");
rc=fscanf(file,"%100s%100s%100s",&v,&n,&t);
}
printf("...fertig!!!\n");
}
printf("\nENTER fuer weiter...");
scanf("%c",&buffer);
startanzeige();
}
void naechsteseite()
{
char buffer;
printf("\nENTER fuer naechste Seite...");
scanf("%c",&buffer);
system("cls");
printf("--------------------------------------------------------------------------------");
printf("- ---<<< KUNDENDATENBANK V1.0 >>>--- -");
printf("--------------------------------------------------------------------------------\n");
}
void killallpoints(struct vk ** p)
{
int counter=1;
struct vk * kopie = *p;
if(kundencount==0)
counter=0;
else
{
while((*p)->nf!=NULL) //bis Listenende
{
kopie = *p; //Sicherung
counter++;
(*p)=(*p)->nf;
free(kopie);
}
free(*p);
}
printf("%i gelöschte Pointer bei Programmende...\n",counter);
}