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-hilfeAnsonsten,
void callcenter::dialog() { artzpraxis A; ....
sieht falsch aus. A wird nach Beendigung der Methode zerstört und alles was du darin speicherst ebenfalls.
-
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
- sowiePatient
-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.
-
-
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.
-
Was meinst du genau mit logik trennen?
-
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 beendeneingabe -> 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 eingetragenund 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..
-
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?
-
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