Eclipse Projektarbeit

J

Julia112

Gast
Hallo Community,

für ein Informatik Projekt bräuchte ich dringend Unterstützung.

Ich habe das Grundgerüst gerade so hinbekommen. Komme aber nicht mehr weiter. Wir sollten ein Programm schreiben für eine Arztpraxis. Dabei habe ich mich auf die wensentlichen Aufgaben beschränkt wie das anlegen eines Patienten, der Medikamenten etc.

Java:
//import java.util.*;
import java.io.*;
public class EingabenAbfangen 
	{
		BufferedReader br;
		public String getInput()
	{
		String back = null;
		try
		{
		  br = new BufferedReader
		  (new InputStreamReader(System.in));
		  back=br.readLine();
		}
		catch(IOException ioe)
		{
			System.err.println("Fehler beim Einlesen");
		}
		return back;
	}
}

Java:
//neue Klasse Patient
public class Patient
{
	//Variablen für die Eigenschaften definieren 
	private int    PatientNr = 0;
	private String Name="";
	private String Vorname="";
	private String Strasse="";
	private String Hausnummer="";
	private String PLZ="";
	private String Ort="";
	//private String Vnr="";
	
	public Patient()
	{}
	
	public Patient(int PatientNr,String Name,String Vorname,String Strasse,String Hausnummer, String PLZ, String Ort)
	{
		this.PatientNr = PatientNr;
		this.Name = Name;
		this.Vorname = Vorname;
		this.Strasse = Strasse;
		this.Hausnummer = Hausnummer;
		this.PLZ = PLZ;
		this.Ort = Ort;
		//this.Vnr = Vnr;
	}
	
	/*Funktionen/Methoden definieren um die Werte auszulesen
	//auf set-Methoden wird verzichtet da die Werte nur initial
	über den Knostruktor gefüllt werden
	*/
	
	public int getPatientNr()
	{
		return this.PatientNr;
	}
	public String getName()
	{
		return this.Name;
	}
	public String getVorname()
	{
		return this.Vorname;
	}
	public String getStrasse()
	{
		return this.Strasse;
	}
	public String getHausnummer()
	{
		return this.Hausnummer;
	}
	public String getPLZ()
	{
		return this.PLZ;
	}
	public String getOrt()
	{
		return this.Ort;
	}
	//public String getVnr()
	//{
		//return this.Vnr;
	//}		
	
	
	
	
	
	
	
	
}

Java:
public class Medizin
{
	//Variablen um die Eigenschaften eines Medizines abzubilden
	private int MedizinNr=0;
	private String Hersteller="";
	private String Name="";
	
	//Konstruktor um beim Erzeugen eines neuen Objektes 
	//vom Typ Medizin gleich die Eigenschaften mitzugeben
	public Medizin(int medizinnr, String hersteller, String name)
	{
		this.MedizinNr = medizinnr;
		this.Hersteller = hersteller;
		this.Name = name;
	}
	//Konstruktor um ein Objekt Medizin ohne √úbergabe der Eigenschaften 
	//zu erzeugen. Dann müssen die set-Methoden verwendet werden.
	public Medizin()
	{}
	
	
	public int getMedizinNr()
	{
		return this.MedizinNr;
	}
	public String getHersteller()
	{
		return this.Hersteller;
	}
	public String getName()
	{
		return this.Name;
	}
	
	public void setMedizinNr(int medizinnr)
	{
		this.MedizinNr = medizinnr;
	}
	public void setName(String name)
	{
		this.Name = name;
	}
	public void setHersteller(String hersteller)
	{
		this.Hersteller = hersteller;
	}
}

Java:
public class Medizinverschreib
{
	//Variablen und den Verschreibvorgang zu definieren
	private int VerschreibNr;
	private int PatientNr;
	private int MedizinNr;
	
	//leerer Konstruktor
	public Medizinverschreib()
	{}
	public Medizinverschreib(int VerschreibNr,int PatientNr, int MedizinNr)
	{
		this.VerschreibNr = VerschreibNr;
		this.PatientNr = PatientNr;
		this.MedizinNr  = MedizinNr;
	}
	
	public void setPatientNr(int PatientNr)
	{
		this.PatientNr = PatientNr;
	}
	public void setMedizinNr(int MedizinNr)
	{
		this.MedizinNr = MedizinNr;
	}
	public void setVerschreibNr(int VerschreibNr)
	{
		this.VerschreibNr = VerschreibNr;
	}
	
	public int getPatientNr()
	{
		return this.PatientNr;
	}
	public int getMedizinNr()
	{
		return this.MedizinNr;
	}
	public int getVerschreibNr()
	{
		return this.VerschreibNr;
	}
	
}

Java:
import java.util.*;
public class Menue
{
	//Klasse zum Abfangen der Eingaben instanziieren
	//um die Methode getInput() zu benutzen
	private EingabenAbfangen ea = new EingabenAbfangen();
	//Vektoren um Daten zu speichern
	private Vector<Patient> patienten = new Vector<Patient>();
	private Vector<Medizin>  medizine = new Vector<Medizin>();
	private Vector<Medizinverschreib> verschreibeneMedizine = new Vector<Medizinverschreib>(); 
	//Zählervariablen um automatisch Bücher, Patientn und
	//verliehene Bücher mit Nummern zu versehen
	private int PatientNr = 1000;
	private int MedizinNr  = 2000;
	private int VersMediZaehler = 3000;
	
	
	public Menue()
	{
		/*hier werden Methoden aufgerufen um vor dem Menustart
		  ein paar initiale Werte für Patientn, Bücher und
		  Verschreibvorg√§nge anzulegen
		*/
		initBeispielWertePatient();
		initBeispielWerteMedizine();
		initBeispielWerteVerschreib();
		//Endlosschleife fürs Menu
		while(true)
		{
			zeigeMenueAn();
		}
	}
	
	//Menu
	public void zeigeMenueAn()
	{
		System.out.println("1...Patient anlegen");
		System.out.println("2...Patient anzeigen");
		System.out.println("3...Medizin anlegen");
		System.out.println("4...Medizine anzeigen");
		System.out.println("5...Medizin an Patient verschreiben");
		System.out.println("6...Verschriebene Medizin zeigen");
		//System.out.println("7...Medizin zurückgeben");
		System.out.println("9...Exit");
		String eingabe = ea.getInput();
		
		if(eingabe.equals("1"))
		{
			legePatientAn();
		}
		else if(eingabe.equals("2"))
		{
			zeigePatientnAn();
		}
		else if(eingabe.equals("3"))
		{
			legeMedizinAn();
		}
		else if(eingabe.equals("4"))
		{
			zeigeMedizineAn();
		}
		else if(eingabe.equals("5"))
		{
			legeMedizinVerschreibAn();
		}
		else if(eingabe.equals("6"))
		{
			zeigeMedizinVerschreibAn();
		}
		else if(eingabe.equals("9"))
		{
			System.out.println("Ciao");
			System.exit(0);
		}
		else
		{
			System.out.println("Menüpunkt "+eingabe+" existiert nicht !!");
		}
	}
	
	public static void main(String args[])
	{
		new Menue();
	}
	
	//Methode um neue Patientn anzulegen, wird in Menu 1 aufgerufen
	public void legePatientAn()
	{
		//Alle einzelnen Informationen abfragen und in Variablen speichern
		//um diese Variablen dann an den Konstruktor von Patient zu übergeben
		System.out.println("Neuen Patientn anlegen....");
		System.out.print("Name eingeben: ");
		String name = ea.getInput();
		System.out.print("Vorname eingeben: ");
		String vorname = ea.getInput();
		System.out.print("Strasse eingeben: ");
		String strasse = ea.getInput();
		System.out.print("Hausnummer eingeben: ");
		String hausnummer = ea.getInput();
		System.out.print("PLZ eingeben: ");
		String plz = ea.getInput();
		System.out.print("Ort eingeben: ");
		String ort = ea.getInput();
		//Alle Variablen dem Konstruktor übergeben damit ein neuer Patient im
		//Objekt k angelegt werden kann
		Patient k = new Patient(++PatientNr,name,vorname,strasse,hausnummer,plz,ort);
		//hier das Objekt k in den Vector patienten stopfen
		patienten.addElement(k);
	}
	//  Methode um alle im Vektor vorhandenen 
	//  Patientn anzuzeigen für Menu 2
	public void zeigePatientnAn()
	{
		for(int i=1;i<=patienten.size();i++)
		{
			Patient dummy = (Patient)patienten.elementAt(i-1);
			System.out.println(dummy.getPatientNr()+"\t"+dummy.getName()+"\t"+
			dummy.getVorname()+"\t"+dummy.getStrasse()+"\t"+
			dummy.getHausnummer()+"\t"+dummy.getPLZ()+"\t"+dummy.getOrt());
		}
	}
	//Methode um ein paar Patientn in den Vektor von Anfang an reinzuschreiben
	public void initBeispielWertePatient()
	{
		Patient k = new Patient(++PatientNr,"Schneider","Simon","Chillerweg","1","12345","Chillhausen");
		patienten.addElement(k);
		k = new Patient(++PatientNr,"Hartmann","Shari","Chillerweg","2","12347","Chillhausen");
		patienten.addElement(k);
	}
	//Methode um neue Medizin4 anzulegen - Menu 3
	public void legeMedizinAn()
	{
		Medizin b = new Medizin();
		System.out.println("Neues Medizin anlegen....");
		b.setMedizinNr(++MedizinNr);
		System.out.print("Name eingeben: ");
		b.setName(ea.getInput());
		System.out.print("Autor eingeben: ");
		b.setHersteller(ea.getInput());		
		medizine.addElement(b);
	}
	//Methoden um die angelegten Medizin anzuzeigen - Menu 4
	public void zeigeMedizineAn()
	{
		for(int i=1;i<=medizine.size();i++)
		{
			Medizin dummy = (Medizin)medizine.elementAt(i-1);
			System.out.println(dummy.getMedizinNr()+"\t"+dummy.getName()+"\t"+
			dummy.getHersteller());
		}		
	}
	//Methode um initial ein paar Bücher anzulegen
	public void initBeispielWerteMedizine()
	{
		Medizin b = new Medizin(++MedizinNr,"Aliud Pharma GmbH","Nasenspray AL 0,1%");
		medizine.addElement(b);
		b = new Medizin(++MedizinNr,"InfectoPharm","Capval Tropfen 25 mg/g");
		medizine.addElement(b);
	}
	//Methode um Verschreibvorg√§nge anzulegen - Menu 5 
	public void legeMedizinVerschreibAn()
	{
		Medizinverschreib buchleihe = new Medizinverschreib();
		System.out.println("Neuen Verschreib anlegen");
		System.out.println("Vorhandene Patientn:");
		zeigePatientnAn();
		System.out.print("Bitte Patientnnummer eingeben: ");
		buchleihe.setPatientNr(Integer.parseInt(ea.getInput()));
		System.out.println("Vorhandene Medizin:");
		zeigeMedizineAn();
		System.out.print("Bitte MedizinNr eingeben: ");
		buchleihe.setMedizinNr(Integer.parseInt(ea.getInput()));
		buchleihe.setVerschreibNr(++VersMediZaehler);
		verschreibeneMedizine.addElement(buchleihe);
	}
	//Methode um alle verschriebenen Medizine und Patient
	//anzuzeigen - Menu 6
	public void zeigeMedizinVerschreibAn()
	{
		
		System.out.println("Verliehene Bücher: ");
		for(int i=1;i<=verschreibeneMedizine.size();i++)
		{
			Medizinverschreib bl = (Medizinverschreib)verschreibeneMedizine.elementAt(i-1);
			Patient k = findePatient(bl.getPatientNr());
			Medizin  b = findeMedizin(bl.getMedizinNr());
			//System.out.println(bl.getVerschreibNr()+"\t"+bl.getPatientNr()+"\t"+bl.getMedizinNr());
			System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
			System.out.println("laufende Nummer: "+bl.getVerschreibNr());
			System.out.print("Patient: "+k.getName()+", "+k.getVorname()+", ");
			System.out.print("wohnhaft in: "+k.getStrasse()+" "+k.getHausnummer()+", ");
			System.out.println(k.getPLZ()+" "+k.getOrt());
			System.out.println("Verschriebene Medizin: "+b.getName()+"\r\nvon: "+b.getHersteller());
			System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
		}
	}
	//ein paar Beispiele anlegen von Medizin die verschrieben sind
	public void initBeispielWerteVerschreib()
	{
		Medizinverschreib b;
		b = new Medizinverschreib(++VersMediZaehler,1001,2002);
		verschreibeneMedizine.addElement(b);
		b = new Medizinverschreib(++VersMediZaehler,1002,2001);
		verschreibeneMedizine.addElement(b);
	}
	//Hilfsmethode um anhand der Patientnnummer die restlichen
	//Infos des Patientn zu bekommen.
	//wird benötigt in der Methode zeigeMedizinVerschreibAn()
	public Patient findePatient(int PatientNr)
	{
		Patient k = new Patient();
		
		for(int i=1;i<=patienten.size();i++)
		{
			k = (Patient)patienten.elementAt(i-1);
			if(k.getPatientNr()==PatientNr)
			{
				break;
			}
			else
			{
				k = new Patient();
			}
		}
		return k;
	}
	//Hilfsmethode um anhand der MedizinNr die restlichen
	//Infos des Medizines zu bekommen.
	//wird benötigt in der Methode zeigeMedizinVerschreibAn()
	public Medizin findeMedizin(int MedizinNr)
	{
		Medizin b = new Medizin();
	
		for(int i=1;i<=medizine.size();i++)
		{
			b = (Medizin)medizine.elementAt(i-1);
			if(b.getMedizinNr()==MedizinNr)
			{
				break;
			}
			else
			{
				b = new Medizin();
			}
		}
		return b;
	}
}

Nun zu meiner eigenlichen Frage zur letzten Menüfunktion wie lässt sich die Funktion so umsetzten, dass man zuerst den Patienten auswählt und als nächstes dann die ihm verschriebene Medizin angezeigt bekommt.

Ist es auch möglich den Patienten um die Versicherungsnummer zu erweitern und dann mittels einer Suchfunktion diesen über die Versicherungsnummer aufzurufen.

Da ich leider so gut wie keinerlei Erfahrung mit Java habe, hoffe ich ihr könnt mir helfen.

Gruß Julia
 

M_Schaffrath

Aktives Mitglied
Hallo.

Als erstes möchte ich vorschlagen, dass du generell noch einmal über deinen Code schaust und die Einhaltung von Java-Konventionen (z.B. werden fangen Variablen üblicherweise mit einem Kleinbuchstaben an) und den Regeln der deutschen Sprache überprüfst. Das erleichtert gerade bei soviel Code das Lesen.

Auch finde ich die Datenhaltung mit dem Patienten, den Verschreibungen und den Medikamenten etwas datenbankmäßig angelegt. Wäre es nicht leichter, wenn die Patientenklasse direkt eine Liste von Medikamenten enthalten würde, die der Patient nimmt?

Zu deinem Problem: Du hast es ja schon geschafft, dass das Programm alle Datensätze anzeigt, indem du die ganze Liste durchläufst und die Daten ausgibst. Wenn du einen bestimmten Datensatz suchst, kannst du prinzipiell genauso vorgehen, gibst den Datensatz aber nur dann aus, wenn er deine Suchkriterien erfüllt hat, z.B.:
Code:
lies einen Namen ein;
durchlaufe die Patientenliste{
   wenn (eingelesener Name = Name des aktuellen Eintrags){
      gib die Daten des Eintrags aus;
   }
}
Dabei musst du natürlich vor allem darauf achten, dass der eingegebene Suchbegriff ganz exakt dem Eintrag im Datensatz entspricht.

Auf diese Art kannst du natürlich auch leicht eine Methode schreiben, die z.B. den Namen des Patienten als Parameter übergeben bekommt und seine Patientennummer zurückgibt. Dann kannst du auf dieselbe Art die Liste von Verschreibungen durchlaufen, bis du die Patientennummer gefunden hast und darüber das entsprechende Medikament ausgeben. So kommst du vom Namen des Patienten auf seine Medikamente.
 
J

Julia122

Gast
Vielen Dank für die Antwort.

Ich werde es versuchen in den nächsten Tagen umzusetzen, muss mich noch vorher in einigen Büchern schlau machen wie ich das genau umzusetzen habe. Da ich vorher dies noch nie gemacht habe :)

Gruß Julia
 
J

Julia122

Gast
Leider war ich immer noch nicht in der Lage das Problem in den Griff zu bekommen habe mir auch einige Bücher wie z.B das von Neuendorf durchgelesen.
Könnte mir vllt jemand berichten was mit der Sprache an sich nicht gut ist un wie ich den Aufbau mir erleichtern könnte.

Grüße Julia
 

M_Schaffrath

Aktives Mitglied
Naja, du könntest einfach die Medikamente als Liste (z.B. ArrayList oder HashMap) ablegen und jedem Patienten neben seinen Adressdaten etc. noch eine Liste mit Medikamenten geben, die er bekommt. Dann könntest du mit einem Aufruf in der Art von
Code:
patient.verschreibe(medikamente.get("Hustensaft"))
die Medizin zuordnen und mit
Code:
patient.getVerschreibungen()
wieder ausgeben, was ein Patient alles nimmt.

Oder macht es irgendwie Sinn, die Verschreibungen einzeln zu verwalten, weil die losgelöst vom Patienten existieren können?


Das mit der Sprache war vor allem auf die Lesbarkeit des Codes für Menschen gemünzt, Namen wie "verschreibNr" finde ich nicht gerade intuitiv zu verstehen und in den Kommentaren werden Zeichen nicht richtig dargestellt. Es wird wahrscheinlich kaum jemand deinen kompletten Code durcharbeiten, aber je einfacher und angenehmer sich Programmtext lesen lässt, desto eher wird jemand bereit sein, sich damit zu beschäftigen.
 

parabool

Bekanntes Mitglied
Könnte man so machen:

Hauptcontroller: Auswahl der Funktionen Patienten oder Medizinen
Patientencontroller: auflisten,anlegen, suchen von Patienten
Medizinencontroller: -//- von Medizinen

z.B Patientencontroller:
-Bei drücken der Taste 1 wird Patient angelegt, wenn fertig dann aktualisierte Liste anzeigen.

-Bei z.B Taste 2 gibt man die Zeilennummer des Patienten (durchnummeriert) in der Liste
ein dann Detailansicht des Patienten inklusive seiner Medizin.
-Taste 3 = Medizin dem P. hinzufügen usw.

In der Klasse Patient würde ich seine Medizinliste halten: List<Patient> medizinen
Die kannst du dann ganz einfach abrufen wenn ein Patient in der Detailansicht ausgewäht wurde:
Java:
for(Medizin medizin:patient.getMedizinen())
{
   System.out.println(medizin.getName());
}
 
Zuletzt bearbeitet:

Neue Themen


Oben