C++ Adressbuch: Konstruktor < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt:
http://www.developerboard.de/viewtopic.php?t=280
Tach!
Ich muß ein Adressbuch inkl. Terminen in C++ erstellen.
Bisher ahbe ich Folgendes:
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
// Variablendeklaration
string nachn, vorn, str, hsnr, plz, ort, telnr, email;
string uName, uArt;
string gebDat, geschl, hobby;
string nameEntf;
string jn;
int n, i, eing;
/*
###############################################################
# Oberklasse Kontakt #
###############################################################
*/
class Kontakt{
public:
public:
Kontakt();
public:
void start();
};
// Default-Konstruktor der Klasse Kontakt
Kontakt::Kontakt() {
nachn="";
vorn="";
str="";
hsnr="";
plz="";
ort="";
telnr="";
email="";
}
/*
#################################################################
# Unterklasse KontaktDienst #
#################################################################
*/
class KontaktDienst:public Kontakt{
public:
KontaktDienst();
};
// Default-Konstruktor der Unterklasse KontaktDienst
KontaktDienst::KontaktDienst(){
uName = "";
uArt = "";
}
/*
##################################################################
# Unterklasse KontaktPrivat #
##################################################################
*/
class KontaktPrivat:public Kontakt{
public:
KontaktPrivat();
};
// Default-Konstruktor der Unterklasse KontaktPrivat
KontaktPrivat::KontaktPrivat(){
gebDat = "";
geschl = "";
hobby = "";
}
/*
##################################################################
# Methode 'kanlegen', die neue Kontakte anlegt #
##################################################################
*/
void kanlegen(){
cout << "Bitte Nachnamen eingeben: ";
cin >> nachn;
cout << "Bitte Vornamen eingeben: ";
cin >> vorn;
cout << "Bitte Strasse eingeben: ";
cin >> str;
cout << "Bitte Hausnummer eingeben: ";
cin >> hsnr;
cout << "Bitte Postleitzahl eingeben: ";
cin >> plz;
cout << "Bitte Wohnort eingeben: ";
cin >> ort;
cout << "Bitte Telefonnummer eingeben: ";
cin >> telnr;
cout << "Bitte eMail-Adresse eingeben: ";
cin >> email;
cout << "Kontakt namens '" << nachn << "' [mm] angelegt\n";
[/mm]
cout << "Wollen Sie weitere [mm] \x8Enderungen durchf\x81hren? [/mm] (j / [mm] n)\n\n";
[/mm]
cin >> jn;
//if (jn == "j") {Kontakt:start();}
//else cout << "Bis bald!";
system("PAUSE");
}
/*
###################################################################
# Methode 'tanlegen', die neue Termine anlegt #
###################################################################
*/
void tanlegen(){
cout << "Zu welchem Kontakt wollen Sie einen Termin anlegen? ";
cin >> n;
system("PAUSE");
}
/*
###################################################################
# Methode 'ausgeben', die alle Kontakte mit Terminen ausgibt #
###################################################################
*/
void ausgeben(){
//for(i=0; i<kon[].length; i++){
//cout << kon[i];
//}
}
void delkon(){
cout << "Geben Sie den Namen des Kontakts ein, den Sie entfernen [mm] wollen:\n\n";
[/mm]
cin >> nameEntf;
for (i=0; i<50; i++){
if (nameEntf == nachn.kon[i]){
nachn.kon[i] = NULL;
}
else cout << "Kontakt nicht vorhanden!";
}
}
/*
##################################################################
# Methode 'start', die das Menü darstellt #
##################################################################
*/
void start(){
cout << "Adressbuch & [mm] Terminverwaltung\n\n";
[/mm]
cout << "Neuen Kontakt anlegen : [mm] 1\n";
[/mm]
cout << "Termin zu Kontakt anlegen: [mm] 2\n";
[/mm]
cout << "Entfernen eines Kontakts / Termins: [mm] 3\n";
[/mm]
cout << "Suchen eines Kontakts / Termins: [mm] 4\n";
[/mm]
cout << "Auflistung aller Kontakte mit Terminen: [mm] 5\n\n";
[/mm]
}
int main()
{
Kontakt kon[50];
start();
cin >> eing;
switch(eing){
case 1:{
cout << "Neuen Kontakt [mm] anlegen:\n\n";
[/mm]
kanlegen();
break;
}
case 2:{
cout << "Neuen Termin [mm] anlegen:\\n";
[/mm]
//Kontakt:tanlegen();
break;
}
case 3:{
delkon();
break;
}
case 4:{
cout << "Sie wollen einen Kontakt / Termin [mm] suchen.\n";
[/mm]
//Kontakt:ktsuchen();
break;
}
case 5:{
cout << "Sie wollen alle Kontakte mit Terminen [mm] ausgeben.\n";
[/mm]
//Kontakt:ausgeben();
break;
}
default:{
cout << "Diese Funktion ist nicht [mm] verfuegbar.\n";
[/mm]
}
system("PAUSE");
return (0);
}
}
Mein Problem:
Ich kriegs nicht hin, wie man ein Objekt anlegt.
Es sollen max. 50 Objekte anzulegen sein.
Das Einlesen von Nachname usw. klappt ja, aber wie bekomme ich diese Daten in ein Objekt?
Stimmt außerdem die Syntax in der Methode delkon, in der versucht wird, den Nachnamen (und alle anderen Daten des Kontakts, ist nur noch nicht implementiert) auf NULL zu setzen)?
Danke im voraus!
|
|
|
|
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Hallo b.b.c.,
Wenn Du das nächste Mal hier etwas fragst, so wäre es nett, wenn Du nur die Teile des Codes hier reinstellen würdest, die für dein Problem relevant sind.
> void delkon(){
> cout << "Geben Sie den Namen des Kontakts ein, den
> Sie entfernen [mm]wollen:\n\n";[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
> cin >> nameEntf;
> for (i=0; i<50; i++){
for(int i = 0; i< 50; i++)
oder hattest Du i schon irgendwo deklariert?
> if (nameEntf == nachn.kon){
> nachn.kon = NULL;
Tut mir Leid, aber mit kon kann ich nicht so viel anfangen, ist das ein Standard-Attribut von 'string'?
> }
> else cout << "Kontakt nicht vorhanden!";
> }
> }
>
>
>
> /*
>
> [i][i][i]> Ich kriegs nicht hin, wie man ein Objekt anlegt.
> Es sollen max. 50 Objekte anzulegen sein.
> Das Einlesen von Nachname usw. klappt ja, aber wie bekomme
> ich diese Daten in ein Objekt?
Dein 50 Objekte könntest Du z.B. so erzeugen:
1: |
| 2: | Kontakt contacts[49];
|
Wobei dabei allerdings dein Default-Konstruktor (ohne Parameter) aufgerufen wird. Willst Du einen anderen Konstruktot benutzen, kommst Du um eine Schleifenkonstruktion wohl nicht umher:
1: |
| 2: | Kontakt* contacts[50]; // Array von Zeigern auf Objekte vom Typ Kontakt
| 3: | for(int k = 0; k < 50; k++)
| 4: | contacts[k] = new Kontakt(/*(*)*/); // (*): Hier stehen Argumente, die Du
| 5: | // nicht an den Default-Konstruktor übergeben kannst.
|
Und wenn Du z.B. auf ein Objekt zugreifen willst, geht das z.B. so
1: |
| 2: | contacts[34].irgendwas = "etwas";
|
Aber so wie Du das gemacht hast, hättest Du nach dem Erzeugen
50 Kontakt-Objekte, die alle auf die gleichen globalen Variablen zugreifen. Das heißt deine Methode delkon() kann gar nicht indivuell mit einem Objekt umgehen, weil es stattdessen auf global deklarierte Variablen zugreift. Und das willst Du doch bestimmt nicht. Du solltest dafür sorgen, daß jedes Objekt seine eigenen Attribute ("öffentlich/private/... Variablen") besitzt. Dazu verschiebst Du diese Variablendeklarationen:
> // Variablendeklaration
>
> string nachn, vorn, str, hsnr, plz, ort, telnr, email;
> string uName, uArt;
> string gebDat, geschl, hobby;
> string nameEntf;
> string jn;
> int n, i, eing;
>
in deine Klassendeklaration:
> class Kontakt{
> public:
> string nachn, vorn, str, hsnr, plz, ort, telnr, email;
> string uName, uArt;
> string gebDat, geschl, hobby;
> string nameEntf;
> string jn;
> int n, i, eing;
>
> Kontakt();
>
> public:
> void start();
>
> };
(Das ist die Idee; ob's auf Anhieb kompiliert ist eine andere Sache hab' schon einige Zeit nicht mehr programmiert... :( )
Viele Grüße
Karl
|
|
|
|