Brauche Hilfe



  • *****Gude ich muss ein Programm programmieren, die Aufgabenstellung lautet:
    Bauen schrittweise ein Programm, mit dem ein Callcenter Reservierungen für Corona-Impfungen in Arztpraxen anlegt und verwaltet.
    Ich nehme erst den Namen und den Termin ein ohne die Impfung abzufragen und danach frage ich wieder nach den Namen und Termin und nach der Impfung. Deswegen habe ich zwei Konstruktoren erstellt, einmal Termin(string Datum_Uhrzeit, string Patient); und einmal Termin(string Datum_Uhrzeit_2, string patient_2, impfstoff I);
    der Impfstoff ist mein enum.

    Bei mir ist das Problem, das bei der Termin anlegen Methode, gibt es, keine Fehlermeldung das der Termin an dem Tag und Uhrzeit jemand anderer schon gebucht hat und es nicht möglich ist zu buchen (zeile 238) und bei der Termin löschen Methode, wenn ich einen Termin löschen möchte, muss ich den Namen des Patienten ein und das funktioniert auch nicht das programm sagt, dass er den Namen nicht gefunden hat liegt (Zeile 268)...
    ich schicke euch meinen Code 🙂*****

    main cpp👇 
    
    #include <iostream>
    #include "callcenter.h"
    using namespace std;
    int main() {
    
        callcenter c;
        c.dialog();
        return 0;
    }
     
    termin header:👇 
    
    #ifndef INC_2020_2021_KLAUSUR_TERMIN_H
    #define INC_2020_2021_KLAUSUR_TERMIN_H
    #include <string>
    using namespace std;
    
    
    //Aufgabe 2)
    //enum impfstoff von 1 bis 3
    enum  impfstoff {Biontech = 1, Moderna, AstraZeneca};
    
    class Termin {
    private:
        string datumUhrzeit;
        string partient;
        bool geloescht = false;
    
    
        impfstoff impfung;
        string partient_2;
        string datumUhrzeit_2;
    
    
    public:
    
        //Konstruktor ohne Impfung
        Termin(string Datum_Uhrzeit, string Patient);
    
        //Konstruktor mit Impfung
        Termin(string Datum_Uhrzeit_2, string patient_2, impfstoff I);
    
    
        //Methoden für den ersten Konstruktor
        void set_datumUhrzeit(string d_U);
        string get_datumUhrzeit();
    
        void set_patient(string P);
        string get_patient();
    
        void set_geloscht(bool g);
        bool get_geloescht();
    
        //Methoden für den zweiten Konstruktor
        void set_impfstoff(impfstoff i);
        impfstoff get_impfstoff();
    
        void set_datumUhrzeit_2(string d_U2);
        string get_datumDatum_2();
    
        void set_partient_2(string P2);
        string get_partient_2();
    };
    #endif //INC_2020_2021_KLAUSUR_TERMIN_H
     
    Termin cpp:👇 
    
    #include "Termin.h"
    #include <iostream>
    using namespace std;
    //inzialiserungsliste für den ersten Konstruktoren ohne impfung
    Termin::Termin(string Datum_Uhrzeit, string Patient):
            datumUhrzeit(Datum_Uhrzeit), partient(Patient){};
    
    //Inizialiserung für den zweiten Konstruktoren mit Impfung
    Termin::Termin(string Datum_Uhrzeit_2, string patient_2, impfstoff I):
    partient_2(patient_2), datumUhrzeit_2(Datum_Uhrzeit_2), impfung(I){};
    
    
    
    void Termin::set_impfstoff(impfstoff i) {
    
        impfung = i;
    }
    
    impfstoff Termin::get_impfstoff() {
    
        return  impfung;
    }
    
    
    void Termin ::set_datumUhrzeit(string d_U) {
    
        datumUhrzeit = d_U;
    }
    string Termin::get_datumUhrzeit() {
    
        return  datumUhrzeit;
    }
    
    
    void Termin::set_patient(string P) {
    
        partient = P;
    }
    string Termin::get_patient() {
    
        return partient;
    }
    
    
    void Termin ::set_geloscht(bool g) {
    
        geloescht = g;
    }
    bool Termin::get_geloescht() {
    
        return geloescht;
    }
    
    
    //Methoden für den zweiten Konstruktor
    void Termin::set_datumUhrzeit_2(string d_U2) {
    
        datumUhrzeit_2 = d_U2;
    }
    string Termin::get_datumDatum_2() {
    
        return datumUhrzeit_2;
    }
    
    void Termin::set_partient_2(string P2) {
    
        partient_2 = P2;
    }
    string Termin::get_partient_2() {
    
        return partient_2;
    }
     
    artztpraxis header:👇 
    
    #ifndef INC_2020_2021_KLAUSUR_ARTZPRAXIS_H
    #define INC_2020_2021_KLAUSUR_ARTZPRAXIS_H
    #include <iostream>
    #include <string>
    #include <vector>
    #include "termin.h"
    
    using namespace std;
    
    class artzpraxis {
    
    private:
    
        const string name = "Dr.Koch";
        vector<Termin>terminliste;
        int input_impfstoff;
    
    public:
    
    
        void terminAnlegen(string patient, string datumUhrzeit, string partient_2, string datumUhrzeit_2, impfstoff impfung);
        void terminLoeschen(string patient);
    };
    #endif //INC_2020_2021_KLAUSUR_ARTZPRAXIS_H
     
    artzpraxis cpp teil 1:👇
    
    #include "artzpraxis.h"
    #include "Termin.h"
    #include <vector>
    #include <iostream>
    using namespace std;
    
    
    //Probleme
    //1) es gibt keine fehlermeldung das der termin an dem tag jemand anderer schon gebucht hat
    //2) der erste konstruktor zeigt in dem objekt die immpfung Moderna  obwohl das nicht in den konstruktor speichern werden soll..
    
    
    void artzpraxis::terminAnlegen(string patient, string datumUhrzeit, string partient_2, string datumUhrzeit_2, impfstoff impfung) {
    
        cout << "Termin 1" << endl;
        cout << "Name?";
        cin >> patient;
    
        cout << "Termin?";
        cin >> datumUhrzeit;
    
        // 1 Objekt  Termin erstellt
        Termin T1(datumUhrzeit,patient);
        //Termin 2
        cout << "Termin 2" << endl;
        cout << "Name?";
        cin >> partient_2;
    
        cout << "Termin?";
        cin >> datumUhrzeit_2;
    
        //Impfstoff
        cout << "Immpfstoff (1: Biontech, 2: Moderna, 3: Astra Zeneca" << endl;
        cin >> input_impfstoff;
    
        //Auswahl treffen welchen Immstoff er haben will
        switch (input_impfstoff) {
    
            case 1:{
    
                impfung = Biontech;
            }break;
    
            case 2:{
    
                impfung = Moderna;
            }break;
    
            case 3:{
    
                impfung = AstraZeneca;
            }break;
        }
    
        // 2 Objekt  Termin erstellt mit imfpung
        Termin T2(datumUhrzeit_2, partient_2, impfung);
     
    artztpraxis cpp teil 2   👇
    
    //vector komplett durchgehen
        for (int i = 0; i < terminliste.size(); i++) {
    
    
            //prüfen ob der Termin schon ausgegucht ist
            //wenn der vector terminliste leer ist
            //vergleicht das gespeicherte datumuhrzeit mit eingegebene datumUhrzeit
            if (terminliste[i].get_datumUhrzeit() == datumUhrzeit && terminliste[i].get_datumDatum_2() == datumUhrzeit_2) {
    
                //Termin Ausgabe
                cout << datumUhrzeit << " " << patient << " ist schon vergeben." << "Bitte neuen Termin eingeben: "<< endl;
                cout << datumUhrzeit_2 << " " << partient_2 << " ist schon vergeben." << "Bitte neuen Termin eingeben: "<< endl;
                return;
            }
    
        }
    
            //fügt den  ersten Termin in dem Vector hinzu
            terminliste.push_back(T1); //ohne impfung
            cout << "Termin wurde eingetragen" << endl;
    
            terminliste.push_back(T2);
            cout << "Termin 2 wurde eingetragen" << endl;
        }
    
    
    
    //Termin löschen
        void artzpraxis::terminLoeschen(string patient) {
    
            cout << "Name?" << endl;
            cin >> patient;
    
            //Nach den partient suchen
            for (int i = 0; i < terminliste.size(); i++) {
    
                //Wenn der partient gefunden wurde
                if (terminliste[i].get_patient() == patient && terminliste[i].get_partient_2() == patient){
    
                    //Die person wird aus dem Vector entfernt und das boolische Attribut wird auf true gesetzt
                    terminliste[i].set_geloscht(true);
                    cout << "beide Termin wurden geloescht" << endl;
                    return;
                }
            }
    
            //wenn nicht gefunden wurde
            cout << "Kein Termin zu diesem Namen gefunden" << endl;
    }
    ` 
    callcenter header:👇
    
    #ifndef INC_2020_2021_KLAUSUR_CALLCENTER_H
    #define INC_2020_2021_KLAUSUR_CALLCENTER_H
    #include <iostream>
    #include "artzpraxis.h"
    using namespace std;
    class callcenter {
    
    private:
        artzpraxis Artzpraxis;
    
    public:
        callcenter();
        void dialog();
    };
    #endif //INC_2020_2021_KLAUSUR_CALLCENTER_H
    ` 
    callcenter cpp:👇
    
    #include "callcenter.h"
    #include "Termin.h"
    #include "artzpraxis.h"
    
    callcenter::callcenter() {
    
    }
    void callcenter::dialog() {
        artzpraxis A;
    
        int input;
        string datumUhrzeit;
        string patient;
        string patient_2;
        string datumUhrzeit_2;
        impfstoff i;
    
    
        do {
            cout << "1: Termin anlegen" << endl;
            cout << "2: Termin loeschen" << endl;
            cout << "0 Programm beenden" << endl;
            cin >> input;
    
        switch (input) {
    
            case 1: {
    
                A.terminAnlegen(patient, datumUhrzeit,patient_2, datumUhrzeit_2, i);
    
            }break;
    
            case 2:{
    
                A.terminLoeschen(patient);
    
            }break;
    
            case 0:{
                break;
                }
    
                default:{
    
                    cout << "Sie haben eine Falsche Eingabe getippt bitte versuchen es "
                            "erneut!" << endl;
                }
        }
    }while(input != 0);
    
    }
    


  • Bitte poste keine riesen Programmtexte. 350 Zeilen sind eindeutig zu viel.
    Reduziere deinen Code auf ein Minimalbeispiel.
    Orientiere dich daran:
    https://www.c-plusplus.net/forum/topic/200753/bitte-lesen-du-brauchst-hilfe

    Ansonsten,

    void callcenter::dialog() {
       artzpraxis A;
    ....
    

    sieht falsch aus. A wird nach Beendigung der Methode zerstört und alles was du darin speicherst ebenfalls.


  • Mod

    So etwas hier ist auch Unsinn:

    void artzpraxis::terminAnlegen(string patient, string datumUhrzeit, string partient_2, string datumUhrzeit_2, impfstoff impfung) {
    
        cout << "Termin 1" << endl;
        cout << "Name?";
        cin >> patient;
    

    Du musst sauber trennen, welche Variable wo und warum ihre Gültigkeit hat. Ebenso, welche Funktion welche Aufgabe hat (und in dieser Aufgabenbeschreibung sollte nie das Wort 'und' vorkommen!). Derzeit ist da großes Chaos und irgendwo in dem Chaos wird die Ursache liegen, aber anstatt da den Spaghettis zu folgen, sollte lieber gründlich aufgeräumt werden. Dann lösen sich die Probleme wahrscheinlich von ganz alleine.

    Falls du nicht direkt verstehst, wieso ich obigen Code als Unsinn bezeichnet habe, musst du noch einmal die Grundlagen zu Funktionen und Variablen nachholen.



  • @SeppJ okay verstehe danke dir ich schaue mal, wenn nicht weiter komme, melde ich mich wieder ich hab das alles so sortiert wie es in meiner Aufgabenstellung stand deswegen ist mein code so codiert



  • Warum hat ein Termin 2 Datum_Uhrzeit- sowie Patient-Member?

    Und du solltest generell zwischen UI und Logik trennen (z.B. sollte die Arztpraxis-Klasse nur eine reine Datenverwaltungsklasse sein und keine Ein-/Ausgabe enthalten).

    Und ganz wichtig: Niemals using namespace std; in einem Header!!!

    Du solltest auch die Schreibfehler bei partient, artzpraxis Artzpraxis, "artzpraxis.cpp/h"... korrigieren, bevor du es abgibst.



  • @Th69

    1. Naja weil beim Termin 2 auch die selben Daten abgefragt werden wie beim Termin 1also den Patient , Datum , Uhrzeit nur das bei Termin 2 noch der Impfstoff mit abgefragt wird deswegen musste ich auch für die beide zwei Konstruktoren erstellen.

    2. Was meinst du genau mit logik trennen?

    3. wird das namespace von main in allen header dateien übertragen oder muss ich da vor ein std:: machen?

    Hoffe das alles verständnisvoll war 😅



  • Also nochmal das erste Problem ist das ich keine Fehlermeldung bekomme das der Termin an dem Tag/Uhrzeit schon gebucht ist
    So sieht meine Konsole Ausgabe und Konsole Eingabe aus:

    Konsolenausgabe:
    1: Termin anlegen
    2: Termin loeschen
    0: Programm beenden

    eingabe -> 1

    Konsolenausgabe:
    Termin 1:
    Name? eingabe -> tim
    Termin? eingabe -> 14.08.2022,1430 <-(14:30 Uhr)
    Termin2:
    Name? eingabe -> ben
    Termin? eingabe -> 14.08.2022,1430 <-(14:30 Uhr)
    Impfstoff (1: Biontech, 2: Moderna, 3:Astra Zeneca)
    eingabe -> 1 (Biontech)

    Konsoleausagbe:
    Termin wurde eingetragen
    Termin 2 wurde eingetragen

    und genau das sollte nicht passieren er sollte eine Fehlermeldung zeigen das der Termin schon vergeben ist aber das macht er nicht ...

    Code:

    void artzpraxis::terminAnlegen(string patient, string datumUhrzeit, string partient_2, string datumUhrzeit_2, impfstoff impfung) {
    
        cout << "Termin 1" << endl;
        cout << "Name?";
        cin >> patient;
    
        cout << "Termin?";
        cin >> datumUhrzeit;
    
        // 1 Objekt  Termin erstellt
        Termin T1(datumUhrzeit,patient);
        //Termin 2
        cout << "Termin 2" << endl;
        cout << "Name?";
        cin >> partient_2;
    
        cout << "Termin?";
        cin >> datumUhrzeit_2;
    
        //Impfstoff
        cout << "Immpfstoff (1: Biontech, 2: Moderna, 3: Astra Zeneca" << endl;
        cin >> input_impfstoff;
    
        //Auswahl treffen welchen Immstoff er haben will
        switch (input_impfstoff) {
    
            case 1:{
    
                impfung = Biontech;
            }break;
    
            case 2:{
    
                impfung = Moderna;
            }break;
    
            case 3:{
    
                impfung = AstraZeneca;
            }break;
        }
    
        // 2 Objekt  Termin erstellt mit imfpung
        Termin T2(datumUhrzeit_2, partient_2, impfung);
    
        //vector komplett durchgehen
        for (int i = 0; i < terminliste.size(); i++) {
    
    
            //prüfen ob der Termin schon ausgegucht ist
            //wenn der vector terminliste leer ist
            //vergleicht das gespeicherte datumuhrzeit mit eingegebene datumUhrzeit
            if (terminliste[i].get_datumUhrzeit() == datumUhrzeit && terminliste[i].get_datumDatum_2() == datumUhrzeit_2) {
    
                //Termin Ausgabe
                cout << datumUhrzeit << " " << patient << " ist schon vergeben." << "Bitte neuen Termin eingeben: "<< endl;
                cout << datumUhrzeit_2 << " " << partient_2 << " ist schon vergeben." << "Bitte neuen Termin eingeben: "<< endl;
                return;
            }
    
        }
    
            //fügt den  ersten Termin in dem Vector hinzu
            terminliste.push_back(T1); //ohne impfung
            cout << "Termin wurde eingetragen" << endl;
    
            terminliste.push_back(T2);
            cout << "Termin 2 wurde eingetragen" << endl;
        }
    

    Das zweite Problem schildere ich später sobald ich diesen Fehler behoben habe..


  • Mod

    Wie genau wird denn ein Termin erstellt in dem sowohl Uhrzeit 1 und 2 eingetragen sind? Erstellt dein Code nicht einfach fuer beide Uhrzeiten separate Termine? Und warum soll ein Termin zwei Uhrzeiten/Daten entsprechen?

    PS: Deinen neuen Thread mit dem gleichen Post habe ich mal geloescht. Warum einen zweiten erstellen, wenn Du das selbe Problem hier diskutierst?



  • @Columbo

    Naja hab ja zwei Konstruktoren einmal für den Termin wo der Patient und DatumUhrzeit gespeichert wird und einmal ein zweites Konstruktor wo die selbem Daten gespeichert werden aber hier wird die Impfung mit abgefragt

    ja er erstellt zwei separate Termine einmal mit ohne Impfung und einmal mit Impfung .

    weil ich ja prüfen möchte ob der daten identisch sind ...



  • Wenn du eine Hand-Klasse implementieren solltest, erstellst du dann auch 10 Finger als Member dieser Klasse, nur weil du zwei Hände (d.h. Hand-Objekte) erstellst?



  • @Th69 verstehe es
    haha


Anmelden zum Antworten