Probleme bei einer Reihe von Aufgaben
-
Habe folgende Aufgabe:
1. Eine Struktur entwerfen die Vorname, Nachname und die Telefonnummer
enthält.Das Telefonbuch soll max 100 Einträge haben und in einen Feld
gespeichert werden, das global definiert werden soll.
2. Eine Funktion "Initialisierung()", die bei jedem Eintrag dem Namen einen leeren
String zuweist.
3. Das Programm soll die Eingabe, Anzeige und das Löschen von Einträgen
ermöglichen. Diese Aktionen sollen in Funktionen gefasst werden. Bei der
Anzeige soll überprüft werden, ob der Eintrag existiert. Bei der Löschfunktion
reicht es den Namen zu löschen.
4. Eine Funktion "Nummereingabe(),schreiben, welche den Benutzer nach einer
Eintragnummer fragt. Als Rückgabewert sollte die Funktion die Eintragnummer
oder -1 zurückgeben, wenn die Eingabe außerhalb des Bereiches lag. Außerdem
soll vor jedem Zugriff geprüft werden, ob der Wert innerhalb der Feldgrenzen
liegt.
5. Zum Schluß eine main()-Funktion bei der am Anfang die Initialisierung
durchgeführt werden soll. Am liebsten wäre mir da eine switch-case-Konstruktion./* ###################################################### Einsendeaufgabe 4.1 aufgabe4_1.cpp ######################################################*/ #include<iostream.h> #include<string.h> //Globale Vereinbarung der Struktur struct person{ char vorname[80]; char nachname[80]; int telefonnummer; }; // Funktion Initialisierung person initiakisiere(char vorname[80], char nachname[80], int telefonnummer){ person telefonbuch[100]; for (int i=0; i<100 ; i++){ telefonbuch[i+1].vorname[i+1]=vorname[80]; telefonbuch[i+1].nachname[i+1]=nachname[80]; telefonbuch[i+1].telefonnummer=telefonnummer; return (telefonbuch[i+1]);} } // Funktion Eingabe von Daten void eingabe (){ person telefonbuch[100]; int flag=1; for (int i=0; i<100 && flag==1; i++){ cout <<"Zum Beenden der Eingabe von Eintraegen die 0 eingeben, um weitere Eintraege einzugeben eine Zahl groesser als 0 eingeben: "; int k=1; cin>>k; if (k==0) flag=0; else { cout <<i+1<<". Vornamen eingeben: "; cin >> telefonbuch[i].vorname; cout <<i+1<<". Nachnamen eingeben: "; cin >> telefonbuch[i].nachname; cout <<i+1<<". Telefonnummer eingeben: "; cin >> telefonbuch[i].telefonnummer; } } } // Funktion Anzeige von Daten void anzeige (){ person telefonbuch[100]; int k=1; do{ cout << "Falls die Anzeige beendet werden soll die 0 eingeben, um fortzufahen eine Zahl groesser 0 eingeben: "; cin >> k; }while (k==0); cout << "Bitte den Namen eingeben nach der Angezeigt werden soll: "; char eingabe[80]; cin.getline(eingabe,80); for (int i=0; i<100; i++){ char ausgabe[80]; while (i<100){ strcpy (telefonbuch[i].nachname, ausgabe); if ( !strcmp(ausgabe, eingabe)) cout << telefonbuch[i].vorname << telefonbuch[i].nachname << telefonbuch[i].telefonnummer; } if ( strcmp(ausgabe, eingabe)) cout << "Der gesuchte Eintrag ist nicht vorhanden."; } } // Funktion Löschen von Daten void loeschen (){ person telefonbuch[100]; int k=1; do{ cout << "Falls das Loeschen von Eintraegen beendet werden soll die 0 eingeben, um fortzufahen eine Zahl groesser 0 eingeben: "; cin >> k; }while (k==0); cout << "Bitte den Namen eingeben der geloescht werden soll: "; char eingabe[80]; cin.getline(eingabe,80); for (int i=0; i<100; i++){ char ausgabe[80]; while (i<100){ strcpy (telefonbuch[i].nachname, ausgabe); if ( !strcmp(ausgabe, eingabe)) telefonbuch[i].nachname; } if ( strcmp(ausgabe, eingabe)) cout << "Der loeschende Eintrag ist nicht vorhanden."; } } // Funktion zum erfragen der Eintragnummer int nummerneingabe(int x){ person telefonbuch[100]; cout << "Bitte Eintragnummer eingeben: "; int i=0; int eintrag; cin >>i; if (i>100) eintrag=-1; else { cout << telefonbuch[i].vorname; cout << telefonbuch[i].nachname; cout << telefonbuch[i].telefonnummer; i=eintrag; cout <<"Die Eintragsnummer war: "<<eintrag<<endl; } return eintrag; } // Main Funktion void main(){ initiakisiere; char auswahl; cout <<"Sie haben folgende Auswahlmoeglichkeiten:"<<endl; cout <<"a Eingabe von Eintraegen"<<endl; cout <<"b Anzeigen von Eintraegen"<<endl; cout <<"c Loeschen von Eintraegen"<<endl; cout <<"d Eintragsnummerneingabe"<<endl; cout <<"Treffen sie bitte ihre Auswahl:"<<endl; cin >> auswahl; switch(auswahl){ case 'a': cout <<"Sie haben Eingabe von Daten ausgewaehlt."<<endl; eingabe(); break; case 'b': cout <<"Sie haben Anzeigen von Eintraegen ausgewaehlt."<<endl; anzeige(); break; case 'c': cout <<"Sie haben das Loeschen von Eintraegen ausgewaehlt."<<endl; loeschen(); break; case 'd': cout <<"Sie haben das Anzeigen von Eintragsnummern ausgewählt."<<endl; nummerneingabe; break; default: cout <<"Diese Auswahlmoeglichkeit gibt es nicht, das Programm wird beendet"<<endl; } char p[50]; cin.getline(p,50); cin.getline(p,50); }
Das habe ich bisher. Irgendwie habe ich eine denkblockarde!
1. Ich bekomme einen erneuten Aufruf der Main Funktion hin.
2. Bei der Anzeige bekomme ich eine Endlosschleife die nur 0 ausgibt.
3. Beim Löschen weiss ich nicht nicht was mit -1 bewirkt werden soll und da ich die Main Funktion nicht wieder aufgerufen bekomme weis ich nicht ob das so Funktioniert.Über Hilfe würde ich mich riesig freuen.
Danke
//Edit: Codetags / Titel
-
Hm, wo soll man anfangen... Vllt erstmal ein paar generelle Hinweise:
1. void main() gibt es nicht, es heisst int main()
2. iostream.h gibt es nicht, sie heisst iostream
3. string.h gibt es nicht, sie heisst string (oder cstring, falls Du die "alte" string.h aus C meinst)
4. Benutze bitte Codetags [ cpp][ /cpp] (ohne die Leerstellen), damit man überhaupt was erkennt
5. initiakisiere; ruft nicht die Funktion auf, die drei Parameter erwartet. Genaugenommen macht die Zeile garnichts.
-
6. verwende vernünftige Threadtitel
7. du solltest das Telefonbuch global definieren, hast du nicht gemacht
8. deine bisher lokalen Telefonbücher haben miteinander nichts zu tun, das Telefonbuch in der einen Funktion ist also nicht das gleiche wie in der anderen Funktion
9. zudem behalten diese lokalen Telefonbücher zwischen den einzelnen Funktionsaufrufen nicht ihren Inhalt, da sie jedes mal neu erstellt werden
10. deshalb solltest du das Telefonbuch global definieren - hatte ich das schon erwähnt?
11. Array Indizes beginnen in C++ mit 0, "telefonbuch[i+1]" ist also unzulässig, wenn i == 99.
12. bis dorthin kommst du allerdings nicht mal, da in der Schleife [i=0..99] ein bedingungsloses return steht - der Sinn davon erschliesst sich mir leider nicht
13. was soll ein "while (i<100)" innerhalb einer Schleife, in der i sowieso nur von 0 bis 99 läuft?
14. es gibt sicherlich noch mehr solche zu überarbeitenden Stellen, diese zu beleuchten ist allerdings recht mühsam, daher
15. editiere deinen Beitrag und poste den Quellcode nochmals mit Codetags 4.