Java Folgende Aufgabe wie am lösen?

Xerxes18

Lieutenant
Registriert
Aug. 2008
Beiträge
700
Guten Tag,

ich habe folgende Aufgabe:

Ein Auto kann mehrere Benutzer haben und in einem Menü soll man die Benutzer den Autos zuordnen. Nachher soll man in einem anderen Menü durch selektieren der Autos sehen können, welche Benutzer dafür angemeldet sind.

Für die Autos habe ich eine Arraylist erstellt sowie für die Benutzer auch.

Ich hatte jetzt die Idee, in einem Menü mit zwei Tabellen die beiden Arraylist auszugeben. Aber da ist dan auch Schluss :D

Ich habe mir gedacht dass, wenn man dann auf einen Button klickt, dass dann eine neue Arraylist erstellt wird und die angeklickten Benutzer darin gespeichert werden. Diese werden dann in einer Anmeldeausgabe angezeigt.

Die Anmeldeausgabe besteht dabei auch aus zwei Tabellen, da hat man dann halt keine Buttons. Wenn man auf ein Auto in der ersten Tabelle klickt, werden in der unteren die angemeldeten Benutzer angezeigt.

Ist das so realisierbar oder gibt es eine einfachere Möglichkeit?
 
Um komplexe Beziehungen erkennbar zu visualisieren bieten sich eher grafische Mittel an als schlichte Tabellen.
Hast du dir mal prefuse angeschaut?
 
Ehhm ich glaube ich habe vergessen zu erwähnen, dass ich totaler Java Anfänger bin :)
 
Einfacher wid es wohl nicht gehen. Höchstens eleganter indem du mit Events arbeitest. Das ist dann allerdings (vllt) nur schöner, aber keinesfalls einfacher.

Edit: Da du aber Anfänger bist, ist das so schon ok
 
Du könntest eine Art "Akualisieren"-Button erstellen und dann zwei "Choice"-bereiche erstellen, der erste für die Autos, der sich durch "Akualisieren" wieder aktualisiert (geiler satz oder?).

Der zweite Choice-Bereich hat dann immer die Fahrer/Besitzer etc. der Autos drin, für das im ersten Bereich ausgewählte Auto.

Hoffe du kannst dir das vorstellen und weisst was ich meine, wie viele einzelne Auswahlmögl. du in den einzelen Bereichen hast kannst du ja durch z.b. ganz simpel machen indem du mit einer schleife und ner if-Abfrage darin, abfragst in welchem eintrag der arraylist-en etwas steht
 
Für eine Auto die Klasse "Car" erstellen, für einen Benutzer die Klasse "User"
1.) Alle User in eine Liste "UserList" überführen"
2.) Eine Liste für alle Autos erstellen
3.) Klasse Car enthält eine leere Liste vom Typ User.
4.) Beim Zuordnen: User suchen und dem auto zuweisen. Wenn User Auto nicht mehr benötigt. Car.Users.Remove(user)

Code:
Pseudocode:

// Stellt einen User da
class User
{
   public string Name;
}

// Stellt ein Auto dar, welchem User zugewiesen werden können
class Car
{
   public string Kennzeichen;
   public UserList Users;
}

// eine Liste alle vorhandenen User enthält
class UserList : List<User>
{
}

Die Klasse Car stellt mit der Liste Users nun ein klassische 1:n Beziehung dar.
 
Zuletzt bearbeitet:
Ggf. kann der User auch noch ein Property vom Typ Car erhalten. Wenn dieses dann belegt ist, kannst Du a) auf das Auto schließen und b) sehen, ob der User bereits einem Auto zugewiesen wurde. Falls ja, dann kann der User keinem anderen Auto zugewiesen werden.

Code:
PSEUDOCODE:

// stellt einen User dar
class User
{
   public string Name;
   public Car Car;
}

Wobei die Zuweisung bzw. die Validierung über Methoden stattfinden sollte. :-)
 
Hallo nochmal,

ich werde versuchen eure Ratschläge zu implementieren. Die Aufgabe oben war nur eine Beispielaufgabe. Ich möchte nämlich so eine Funktion in mein Projekt einbauen und die Klasse dann hier Posten, wenn ich nicht weiterkomme.

Vielen Dank im voraus!
 
Xerxes18 schrieb:
Hallo nochmal,

ich werde versuchen eure Ratschläge zu implementieren. Die Aufgabe oben war nur eine Beispielaufgabe. Ich möchte nämlich so eine Funktion in mein Projekt einbauen und die Klasse dann hier Posten, wenn ich nicht weiterkomme.

Vielen Dank im voraus!

Mach lieber viele kleine Klassen :cool_alt:
 
So ich hätte da eine Idee:

Also ich habe zwei Tabellen bei der Anmeldung.

Ich habe vor, dass wenn in Tabelle "Klausur" etwas markiert wird, dass die Zeile zunächst in eine anderen Tabelle kopiert wird.

Wenn nun ein Student markiert und dann auf "Anmelden" geklickt wird, sollen diese ebenfalls in einer Tabelle gespeichert werden.

Wie mache ich sowas? Also wie kopiere ich die zeilen?

Hier meine Tabelle 1:

Code:
JTable table1 = new JTable(new AbstractTableModel() {

		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;

		public String getColumnName(int column) {

			switch (column) {

			case 0:
				return "Datum";
			case 1:
				return "Uhrzeit";
			case 2:
				return "Raum";
			case 3:
				return "Dauer";
			}
			return "";
		}


		public Object getValueAt(int row, int column) {

			Klausur klausur = Prufungsamt.klausuren.get(row);

			switch (column) {

			case 0:
				return  klausur.getDatum();
			case 1:
				return klausur.getUhrzeit();
			case 2:
				return klausur.getraum();
			case 3:
				return klausur.getdauer();
			
			}

			return null;
		}

		public int getColumnCount() {
			return 4;
		}

		public int getRowCount() {
			return Prufungsamt.klausuren.size();
		}



	});


Hier die Tabelle 2:

Code:
JTable table2 = new JTable(new AbstractTableModel() {

		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;

		public String getColumnName(int column) {

			switch (column) {

			case 0:
				return "Universität";
			case 1:
				return "Vorname";
			case 2:
				return "Nachname";
			case 3:
				return "Matrikelnummer";
			case 4 :
				return "Studiengang";
			}
			return "";
		}


		public Object getValueAt(int row, int column) {

			Student student = Prufungsamt.students.get(row);

			switch (column) {

			case 0:
				return  student.getuni();
			case 1:
				return student.getvorname();
			case 2:
				return student.getnachname();
			case 3:
				return student.getmatrikelnummer();
			case 4:
				return student.getstudiengang();
			}

			return null;
		}

		public int getColumnCount() {
			return 5;
		}

		public int getRowCount() {
			return Prufungsamt.students.size();
		}



	});
 
Zuletzt bearbeitet:
Xerxes18 schrieb:
So ich hätte da eine Idee:

Also ich habe zwei Tabellen bei der Anmeldung.

Ich habe vor, dass wenn in Tabelle "Klausur" etwas markiert wird, dass die Zeile zunächst in eine anderen Tabelle kopiert wird.

Schlechte Idee (in meinen Augen). Welchen Grund soll das Kopieren haben?
 
Das ist die Aufgabe, in einem Fenster sollen einer Klausur mehrere Studenten hinzugefügt werden und in einem anderen Fenster soll, wenn man eine Klausur anklickt, die Studenten angezeigt werden, die dafür angemeldet wurden.

Ich komme net mehr weiter...

MFG
 
Ich hab jetzt ehrlich gesagt den Großteil nicht durchgelesen, aber ich bin mir ziemlich sicher, dass die Idee eigentlich eher sein soll, dass es nur EINE Datenbasis gibt wo drinsteht wer/was macht und diese Informationen aber eben auf zwei unterschiedliche Arten visualisiert werden.

Man sollte immer skeptisch sein ob man eine Aufgabe richtig umsetzt, wenn man anfängt, bestimmte Daten redundant (dh in deinem Fall doppelt) abzulegen.

Die Grundsätzliche Frage ist also: Wie modellierst du die grundlegende Daten in denen vermerkt ist, wer was macht, die dann eben beide Abfragemöglichkeiten erlaubt:
- Welche Personen sind alles zu einem bestimmten Kurs angemeldet
- Welche Kurse belegt eine bestimmte Person

Da die Anzahl der Belegungen eines Studenten bzw. Teilnehmer eines Kurses nicht festgelegt ist brauchst du also eine dynamische (wachsende) Datenstruktur wie List und dann gibts im Grunde 4 verschiedene Möglichkeiten würde ich sagen.
1. Du vermerkst für jeden Kurs wer alles angemeldet ist. Dann ist es leicht einen Kurs zu fragen: "Wer ist bei dir angemeldet?". Die schwierige Frage ist dann: "Welche Kurse hat Max Mustermann?". Dafür müsste man dann alle Kurse einzeln Fragen: "Ist Max bei dir angemeldet?" Und halt am Ende alle angeben.

2. Du vermerkst für jeden Studenten, wo er sich anmeldet. Diesmal ist es genau andersrum: Wenn du nen Kurs fragst, "Wer ist bei dir angemeldet?" Musst du alle Studenten abklappern und gucken ob sie nen bestimmten Kurs belegen und dir diese alle merken. Dafür ist diesmal die andere Frage leicht: "Was belegt Max?" Weil direkt an dem Objekt die Info enthalten ist.

3. Du hast eine Art Tabelle (zB ne neue Klasse) in die Haken gesetzt werden. Dh quasi wie in Excel nach rechts alle Kurse und nach unten alle Studenten. Und immer wenn sich ein Student für etwas anmeldet setzt du in die einzelne Zelle der Tabelle nen Haken (in Java zB nen bool auf true und die Tabelle dann als 2D-BoolArray). So kann man beide Fragen beantworten, indem man bei der Abfrage halt entweder die Zeile bzw. die Spalte einmal durchläuft.
Wenn gefragt wird: "Was belegt Max?" dann muss nur in der Max-Zeile jeder true-Wert gesucht werden und dazu jeweils der Kursnahme ausgegeben werden.
Wenn gefragt wird: Wer nimmt an Mathe1 Teil?" Dann wird die Mathe1-Spalte durchgegangen und für jeden Haken der dazugehörige Name des Studenten ausgegeben.

4. Du verwendest irgendwas Datenbankmäßiges was das alles schon kann - im Prinzip wie 4 dann wahrscheinlich.

edit: Sorry jetzt erst gelesen. Du hast ja schon JTables. Dann solltest du die sicherlich eher verwenden als mein vorgeschlagenes 2D-BoolArray
 
Zuletzt bearbeitet:
Hi,

danke für die Antwort, ich habe verstanden auf was du hinaus willst. Vielleicht war es garkeine gute Idee Tabellen zu machen, aber die sehen halt ordentlicher aus.

Eine letzte Idee hätte ich noch:

Man könnte doch irgendwie die Position der Zeilen merken, weil ja die Objekte so ausgegeben werden, wie sie in der Arraylist stehen und irgendwo zunächst speichern. Dann könnte man doch wenn man dei Anmeldeliste ausgibt, diese Positonen ausgeben und den Rest löschen.

Sozusagen so eine Art Filter! Das die angeklickten immer da bleiben und der Rest automatisch gelöscht wird. Das klingt sehr einfach, aber bei der Umsetzung habe ich dann meine Startschwierigkeiten.

Wäre das eventuell eine Möglichkeit?
 
Ja genau das was Ibm1305 da vorschlägt wollte ich mit Vorschlag 1. ausdrücken - statt "pro car die Besitzer" merkt man sich dann "pro Kurs die Teilnehmer"

(sorry fürs überlesen^^)
 
Zuerst definierst Du Deine Objekte (Student, Klausur, eventuell Raum).
Das Objekt Klausur enthält eine Liste vom Typ Student. Somit kannst Du sehen, welche Studenten an einer Klausur teilnehmen.
Möglich ist auch, die Klausur dem Studenten zuzuweisen, damit Du siehst, an welchen Klausuren der Student teilnimmt.
 
Also ich habe schon zwei Klassen "Student" und "Klausur" geschrieben. Die Studentenobjekte werden in der Arraylist "students" und die Klausurobjekte in "klausuren" in der Klasse Prufungsamt gespiechert:

Klasse Students:

Code:
public class Student extends Universität {
	
	String vorname;
	String nachname;
	int matrikelnummer;
	String studiengang;
	
	
	public Student(String uni,String vorname, String nachname,int matrikelnummer, String studiengang){
		
		super(uni);
		this.vorname=vorname;
		this.nachname=nachname;
		this.matrikelnummer=matrikelnummer;
		this.studiengang=studiengang;
	
	}
	
	public String getuni(){
		return uni;
	}
	
	public String getvorname(){
		return vorname;
	}
	
	public String getnachname(){
		return nachname;
	}
	
	public int getmatrikelnummer(){
		return matrikelnummer;
	}
	
	public String getstudiengang(){
		return studiengang;
	}
	
	public String toString() { 

		return (uni+vorname+nachname+matrikelnummer+studiengang);

	}
	
	

}

Die Klasse "Uni" muss dabei einer Superklasse sein, weil in der Aufgabe steht das jedes Studenten-Objekt die Uni gleich hat

Hier die Klasse "Klausur":

Code:
public class Klausur {
	
	int datumd;
	int datumm;
	int datumy;
	String raum;
	
	int uhrzeitx;
	int uhrzeity;
	int dauer;
	
	public Klausur(int datumd,int datumm,int datumy,int uhrzeitx, int uhrzeity, String raum, int dauer){
		
		this.datumd=datumd;
		this.datumm=datumm;
		this.datumy=datumy;
		this.uhrzeitx=uhrzeitx;
		this.uhrzeity=uhrzeity;
		this.raum=raum;
		this.dauer=dauer;
	
	
	}
	
	public int getdatumd(){
		return datumd;
	}
	public int getdatumm(){
		return datumm;
	}
	public int getdatumy(){
		return datumy;
	}
	public int getuhrzeitx(){
		return uhrzeitx;
	}
	public int getuhrzeity(){
		return uhrzeity;
	}
	public String getraum(){
		return raum;
	}
	public int getdauer(){
		return dauer;
	}
	
	public String getDatum(){
		
		return (datumd+"."+datumm+"."+datumy);
	}
	
	public String getUhrzeit(){
		
		return (uhrzeitx+":"+uhrzeity);
	}
	
	public String toString() { 

		return (datumd+datumm+datumy+uhrzeitx+uhrzeity+raum+dauer);

	}

}

Wie genau muss ich das dann machen?
 
Zurück
Oben