staniii1 Geschrieben 18. Dezember 2014 Geschrieben 18. Dezember 2014 Hallo zusammen, bearbeite gerade eine Aufgabe in der Berufsschule, Thema Aggregationsklassen. 3 Klassen Arztpraxis, Behandlung, Patient und eine Windows Forms Oberfläche. Der obere Teil funktioniert ich kann einen Patient erstellen und diesen auch als Auswahl zur Verfügung stellen. Problem: Nun soll ich jedem Patient beliebig viele Behandlungen zuordnen bzw. Hinzufügen können. Ich vermute man muss die Behandlungs Objekte in eine Collection speichern und diese der Patienten Collection zuordnen, aber ich hab keine Ahnung wie man das implementiert. Anbei häng ich mal den ganzen Programmcode an. namespace Arztpraxis { public partial class Form1 : Form { public Patient Patient; public Praxis Praxis = new Praxis(); public Behandlung Behandlung; public Form1() { InitializeComponent(); } private void button3_Click(object sender, EventArgs e) { Patient = new Patient(tbName.Text, tbVorname.Text, dtGeburtsdatum.Text, cbVersicherungsStatus.Text); Praxis.createAccount(this.Patient); string test = Praxis.patientenAnzeigen(); comboBox1.Items.Add(test); MessageBox.Show("Neuer Patient erfolgreich angelegt!\n" + Praxis.patientenAnzeigen()); } private void Form1_Load(object sender, EventArgs e) { } private void btnAnzeigen_Click(object sender, EventArgs e) { MessageBox.Show( Praxis.patientenAnzeigen()); } private void button2_Click(object sender, EventArgs e) { Behandlung = new Behandlung(tbKörperTemperatur.Text, tbBlutdruck.Text, tbSymptome.Text, dtBehandlungsDatum.Value); } private void button1_Click(object sender, EventArgs e) { string gefunden= Praxis.patientSuchen(dtGeburtsdatum.Text,tbName.Text); comboBox1.SelectedIndex = comboBox1.FindStringExact(gefunden); } private void button1_MouseCaptureChanged(object sender, EventArgs e) { } } } namespace Arztpraxis { public class Praxis { public List<Patient> diePatienten = new List<Patient>(); public List<Behandlung> behandlung = new List<Behandlung>(); public Praxis() { } public void createAccount(Patient derPatient) { diePatienten.Add(derPatient); } public string patientenAnzeigen() { string Patient = ""; foreach (var test in diePatienten) { Patient = test.Vorname + ", " + test.Name + ", " + test.Geburtsdatum; } return Patient; } public string patientSuchen(string Geburtstag, string Name) { foreach(var test in diePatienten) { if(test.Geburtsdatum == Geburtstag && test.Name == Name) { return test.Vorname + ", " + test.Name + ", " + test.Geburtsdatum; } } return ""; } public void patientBehandeln() { } } } namespace Arztpraxis { public class Patient { #region fields∝ private string name; public string Name { get { return name; } set { name = value; } } private string vorname; public string Vorname { get { return vorname; } set { vorname = value; } } private string geburtsdatum; public string Geburtsdatum { get { return geburtsdatum; } set { geburtsdatum = value; } } private string versicherungStatus; public string VersicherungStatus { get { return versicherungStatus; } set { versicherungStatus = value; } } #endregion #region constructor public Patient(string _name, string _vorname, string _geburtsdatum, string _versicherungsstatus) { Name = _name; Vorname = _vorname; Geburtsdatum = _geburtsdatum; VersicherungStatus = _versicherungsstatus; } } namespace Arztpraxis { public class Behandlung { #region fields∝ private string koerperTemperatur; public string KoerperTemperatur { get { return koerperTemperatur; } set { koerperTemperatur = value; } } private string blutdruck; public string Blutdruck { get { return blutdruck; } set { blutdruck = value; } } private string symptome; public string Symptome { get { return symptome; } set { symptome = value; } } private DateTime behandlungsDatum; public DateTime BehandlungsDatum { get { return behandlungsDatum; } set { behandlungsDatum = value; } } #endregion #region constructor public Behandlung(string _koerperTemperatur, string _blutdruck, string _symptome, DateTime _behandlungsDatum) { koerperTemperatur = _koerperTemperatur; blutdruck = _blutdruck; symptome = _symptome; behandlungsDatum = _behandlungsDatum; } #endregion } } Freue mich auf jedes konstruktive Feedback. Viele Grüße Zitieren
Mttkrb Geschrieben 18. Dezember 2014 Geschrieben 18. Dezember 2014 Hallo, im Prinzip muss die Collection der Bahndlungen aus der Klass Praxis in die Klasse Patient verschoben werden. Zitieren
staniii1 Geschrieben 18. Dezember 2014 Autor Geschrieben 18. Dezember 2014 Also das im Prinzip beim Anlegen eines Patient auch ein Behandlungs-Objekt instanziert wird und dieses in eine Behandlung-Collection gespeichert wird? Aber dann hab ich ja immernoch das Problem das ich nicht beliebig viele Behandlungen einem Patient zuordnen kann, oder? Zitieren
Mttkrb Geschrieben 18. Dezember 2014 Geschrieben 18. Dezember 2014 Hi, wenn du einen Patienten instanziiert hast, kannst du doch an die collection beliebig viele behandlungen anfügen. Im groben beispiel etwa so: public class Patient { public string Name {get; set;} public List<Behandlung> Behandlungen {get;set;} } public class Behandlung { public string Text {get;set;} } public class Test { public void DoIt() { var patient = new Patient(); var behandlung = new Behandlung() { Text = "Behandlung"}; patient.Behandlungen.Add(behandlung) for(int i=0;i<100;i++) { patient.Behandlungen.add(new Behandlung {Text = "Behandlung"+i}); } } } Der Liste können beliebig viele Objekte hinzugefügt werden. Alternativ wäre auch volgendes möglich: Hier hast du einzelne Collections für Patienten und für Behandlungen. Somit kannst du leicht alle behandlungen zu allen Patienten anzeigen, wenn du die Liste Behandlungen ausgibst. Filtern nach einzelnen patienten ist wie im Beispeil gezeigt auch möglich. public class Patient { public string Name {get; set;} } public class Behandlung { public Patient Patient {get;set;} public string Text {get;set;} } public class Test { public void DoIt() { var patient1 = new Patient {Name="Test1"}; var patient2 = new Patient {Name="Test2"}; var behandlungen = new List<Behandlung>(); var behandlung = new Behandlung(){Patient=patient1,Text="text zu patient1"}; behandlungen.add(behandlung); for(int i=0;i<100;i++) { behandlungen.add(new Behandlung(){Patient=patient2,Text="text"+i+" zu patient1"} } var behandlungenZuPatient1 = behandlungen.Where(w=>w.Patient==patient1); var behandlungenZuPatient2 = behandlungen.Where(w=>w.Patient==patient2); } } Gruß Jogibaer0411 Zitieren
staniii1 Geschrieben 18. Dezember 2014 Autor Geschrieben 18. Dezember 2014 Super, erstmal Vielen Dank für die umfassende Antwort Jogibaer0411 Das hat mich auch ein Stück weitergebracht, aber letztlich hänge ich immernoch an der Umsetzung mit Windows Forms. ich habe denke ich den Hinzufügen Button fast richtig implementiert, aber ich muss dem Hinzufügen Button ja irgendwie sagen welcher Patient in der combobox ausgewählt worden ist, das ich auch dem richtigen Patienten die richtige Behandlung zuordnen kann. Ich hoffe ich drück mich verständlich aus. a Zitieren
Mttkrb Geschrieben 18. Dezember 2014 Geschrieben 18. Dezember 2014 Der aktuelle Patient wird doch in einer Variable gespeichert. Damit weist du doch welcher Patient gerae ausgewählt ist. Zitieren
staniii1 Geschrieben 18. Dezember 2014 Autor Geschrieben 18. Dezember 2014 Ja der aktuelle schon, wenn ich jetzt aber 20 Patienten anlege und Patient #4 in der combobox auswähle und eine Behandlung hinzufüge, wird die Behandlung Patient 20# , also dem zuletz erstellten zugeordnet oder nicht? Zitieren
Mttkrb Geschrieben 18. Dezember 2014 Geschrieben 18. Dezember 2014 eigentlich sollte das nicht so sein. aber diene Methode PatientenAnzeigen() gibt eh immer nur einen string aus den letzten zurück. Das sollte so umgebaut werden, dass der ganze Patient zurückgegeben wird. Und dann natürlich auch nicht nur den letzten. :-) Deine Suche nach dem Patienten kannst du auch vereinfachen: gesuchterPatient= diePatienten.FirstOrDefault(f=>f.Vorname=="VORNAME"&&f.Name=="NAME"); Der Aufruf gibt dir entweder die erste übereinstimmung oder NULL zurück. du solltest die Felder dann erst aktualisieren wenn sich gesuchterPatient geändert hat Stichwort: OnPropertyChanged Zitieren
Mttkrb Geschrieben 22. Dezember 2014 Geschrieben 22. Dezember 2014 Hi, klappt es nun? Gruß Jogibaer0411 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.