Anzeige

VBA
Programmierer
gesucht?
 
Anzeige
VBA Programmierer gesucht?
 

Einfache C/C++ Beispiele für Einsteiger

Übungsprojekt: Eine kleine Kundendatenbank

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);
}



Autor: Marc Wershoven (2001)

Zum Seitenanfang