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.


Log in to reply