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
-
Hallo
schau dir mal diese Zeile von dir an
und ueberleg dir was diese Zeile machtstrcpy(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