Konsolenprogramm Telefonbuch



  • Hallo,

    Ich wollte mal zur Übung ein Telefonbuch programmieren das bei der Laufzeit des Programms 100 Einträge speichern kann, Namen und Tel. Nr. einliest, einen Eintrag anzeigen und löschen kann. Die Aktionen sollten in Funktionen stattfinden, zusätzlich wollte ich eine Funktion die bei jedem Eintrag dem Namen einen leeren String zuweist. Bei dieser Funktion „Initalisierung“ bin ich mir nicht ganz sicher ob das so geht. Die Funktionen „eingabe“ und „anzeige“ funktionieren aber leider kann ich nur ein Wert speichern. Wo liegt da mein Fehler? Bei der Funktion „loeschen“ habe ich im Moment noch gar keinen Plan mit welchen Befehlen ich den Eintrag löschen kann. Könnt ihr mir bitte weiter helfen? Ich sitze jetzt schon eine ganze Zeit lang dran und mir gehen die Ideen aus. Ich bedanke mich jetzt schon mal.

    Hier könnt ihr mal meinen bisherigen Code sehen:

    #include <iostream.h>
    #include <string.h>
    
    //Struktur global vereinbart
    struct person{
            char vorname[80];
            char nachname[80];
            char telefonnummer[30];
    } telefonbuch[100];
    
    //Funktion für die Initialisierung
    person Initialisierung(char vorname[80], char nachname[80], char telefonnummer[30]){
            strcpy(telefonbuch[100].vorname, telefonbuch[100].vorname);
            strcpy(telefonbuch[100].nachname, telefonbuch[100].nachname);
            strcpy(telefonbuch[100].telefonnummer,telefonbuch[100].telefonnummer);
            return(telefonbuch[100]);
    }  
    
    //Funktion für die Eingabe
    void eingabe(){
            char a[80],b[80],c[30];
            cout<<"Geben Sie bitte ihren Vornamen ein."<<endl;
            cin.getline(a,80);
            cin.getline(a,80);   //um Leerzeichen einzulesen
            strcpy(telefonbuch[100].vorname, a);
            cout<<"Geben Sie bitte ihren Nachnamen ein."<<endl;
            cin.getline(b,80);
            strcpy(telefonbuch[100].nachname, b);
            cout<<"Geben Sie jetzt bitte ihre Telefonnummer ein."<<endl;
            cin.getline(c,80);
            strcpy(telefonbuch[100].telefonnummer, c);
    }
    
    //Funktion für die Anzeige
    void anzeige(){
            char d[80];
            cout<<"Gesuchter Nachname: ";
            cin.getline(d,80);
            cin.getline(d,80);
            if(!strcmp(telefonbuch[100].nachname,d))
               cout<<"Der Name ist enthalten"<<endl<<'\n';
            else
               cout<<"Der Name ist nicht enthalten"<<endl<<'\n';
    }
    
    //Funktion zum Löschen
    void loeschen(){
            char e[80];
            cout<<"Welchen Nachnamen moechten Sie loeschen?"<<endl;
            cin.getline(e,80);
            cin.getline(e,80);
            //jetzt weiss ich nicht mehr weiter
    }
    
    void main(){
            person telefonbuch[100];
            bool nochmal=true;
            while(nochmal){
            int was;
            cout<<"Waehlen Sie aus dem Menue aus."<<endl<<'\n';
            cout<<"Wollen sie (1) Einen Eintrag neu anlegen"<<endl;
            cout<<"           (2) Pruefen ob der Eintrag existiert"<<endl;
            cout<<"           (3) Einen Eintrag loeschen"<<endl;
            cout<<"           (0) Programm beenden (2 mal Enter druecken)"<<endl;
            cin>>was;
    
            switch(was){
            case 1:     {
                    eingabe();
                    break;
                        }
            case 2:     {
                    anzeige();
                    break;
                        }
            case 3:   {
                    loeschen();
            }       break;
            case 0:     {
                    nochmal=false;
                    break;
                        }
            // Fehlerabfang
            default:    {
                    cout<<"Ungueltiges Menue.\n\n";
                        }
            }
            }
            char p[50];
            cin.getline(p,50);
            cin.getline(p,50);
    }
    


  • Moinsen

    Ich habe mal ein Telefonbuch für Konsolen C unter Linux geschrieben. Das konnte im Prinzip genau das alles was du willst. Außer der Druckfunktion müsste das auch unter Windows laufen. Kann dir das gerne schicken wenn du willst.
    Bei deinem Problem kann ich dir leider nicht weiterhelfen. Hab mit Konsolen C schon lange nichts mehr gemacht und bin da ziemlich raus.
    Kämpfe zur Zeit extrem mit C++ 😃

    Grüße DerHelli


  • Mod

    Hallo

    schau dir mal diese Zeile von dir an
    und ueberleg dir was diese Zeile macht

    strcpy(telefonbuch[100].vorname, a);
    

    waere nicht eine Funktione besser, die selbst auswaehlt welchen Eintrag sie macht
    (das in [])

    MfG
    Klaus



  • Hallo Klaus

    eigentlich wollte ich ja mit der Zeile erreichen das er meine Einträge speichert, aber das macht er ja leider nur immer mit dem letzten Eintrag. Du hast da sicher Recht mit der Funktion. Kannst du mir ein wenig helfen wie das aussehen könnte?



  • Hi

    Ich würde an deiner Stelle das ganze mit Containern lösen. So hast du komfortable interfaces.

    #include<iostream>
    #include<string>
    #include<map>
    
    using namespace std;
    
    class Entry{
        private:
              string __name;
              string __vname;
              string __num;
        public:
              Entry(){}
              Entry(const string n,const string vn,const string t):
                    __name(n),__vname(vn),__num(t){}
              ~Entry(){}
              //standart operatoren folgen
              //.....
    };
    
    class TelBuch{
           private:
                  map<string,Entry> __book;
                  void Insert(const string n,const string vn,const string t){
                          __book[n]=Entry(n,vn,t);
                  }
           public:
                  TelBuch(){}
                  void Eingabe(void);
                  void Delete(const string n){ __book.erase(n); }
                  void Clear(){__book.clear();}
                  //was auch immer noch sein soll     
    };
    
    void TelBuch::Eingabe(void){
       string n,vn,t;
       cout<<"Vorname: ";
       cin>>vn;
       cout<<"Nachname: ";
       cin>>n;
       cout<<"Nummer: ";
       cin>>t;
       Insert(n,vn,t);
    }
    
    main(){
      TelBuch buch;
      char c;
      while(c!='q'){
           cout<<"Menu......"<<endl;
           cout<<"[e] Eingabe"<<endl;
           // usw
           cout<<"[q] Beenden"<<endl;
           cin>>c;
           switch(c){
               case 'e': buch.Eingabe();break;
               // usw .....
           }
    
      }
    }
    

    Das war jetz nen rudimentäre Program aber das Prinzip sollte klar sein.
    Die map nimmt dir die größte arbeit ab.



  • Und wo ist hier die Borland C++ Builder spezifische Problematik?
    "Ich benutze doch den BCB" ist keine zulässige Antwort!

    Siehe auch wmmf


Anmelden zum Antworten