Zum Inhalt springen

Beziehung zwischen Collections herstellen


Empfohlene Beiträge

Geschrieben

Hallo zusammen,

bearbeite gerade eine Aufgabe in der Berufsschule, Thema Aggregationsklassen.

3 Klassen

Arztpraxis, Behandlung, Patient und eine Windows Forms Oberfläche.

post-95454-1443044990499_thumb.png

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

Geschrieben

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? :)

Geschrieben

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

Geschrieben

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.

post-95454-14430449905596_thumb.png

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.:D

a

Geschrieben

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?

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...