# Modulrechner für Hochschule



## aikon3 (22. Feb 2011)

Hallo zusammen ,

Ich habe mal eine kurze Frage wie ich ein Projekt am Besten starten soll.
Ich möchte gerne aus Übungszwecken einen Modulrechner für die Hochschule schreiben.
Also ein Modul hat 1 bis 4 Veranstaltungen die jeweils eine Note, ects usw. beinhaltet.
Aus diesen Veranstaltungen soll dann jeweils die Moduklnote berechnet werden.

Jetzt ist meine Frage ob ich die einzelnen Module in eine Datenbank schreiben soll oder es intern mit Listen usw. programmieren soll. Mir ist klar das es auf beide Arten funktioniert, aber ich habe immer beim Beginn von Programmen probleme eine geeignete datenstruktur zu finden.

Wie würdet ihr es angehen.?

mfg,

aikon3


----------



## Andi_CH (22. Feb 2011)

Wir sind hier in einem Java Forum - wenn du eine DB designen willst - na ja

Such doch erst mal die Klassen - überleg was die Klassen für Daten und Methoden brauchen und wie die zusammenhängen.

So nebenbei entsteht auch die Datenstruktur.

Dann kannst du dran gehen einen Persistenzlayer einzuplanen -> Ob der dann eine DB ansteuert oder seiralisiert oder eine XML Datei schreibt oder sonst was ist vorerst egal


----------



## fastjack (22. Feb 2011)

Das Modell hast Du ja schon beschrieben, natürlich kann man es jetzt noch aufmalen. Ich denke Du braucht sowieso beides. Eine Liste mit Modulen in der Anwendung und gespeicherte Module in der DB. Aber die DB-Seite würde ich später machen. 
Wenn Du nicht weist, wie Du anfangen sollst es zu implementieren, fange doch testdriven an. Dann merkst Du beim Entwickeln eines Testfalls schon, wie man später die Module usw. anwendet.


----------



## aikon3 (22. Feb 2011)

Okay ich habe mir jetzt auch gedacht das ich beides verwenden werde.
Jetzt hab ich aber doch schon angefangen die Datenbank zu designen für die Stammdaten.
Ich will zwei Tabellen machen mit Modul und Veranstaltung.
Aber ein Modul kann ja bis zu vier Veranstaltungen haben. Ich  habe mir jetzt gedacht das ich dann Spalte Veranstaltung1...Veranstaltung4 mache und als Fremdschlüssel verwende. Und wenn ich jetzt z.B. nur zwei Veranstaltungen in einem Modul habe, werde ich die zwei übrigen spalten mit einem String wie "none" oder so füllen.
Ist der Ansatz in Ordnung oder gehts auch besser.

Ich hoffe die Frage ist in Ordnung in einem Java Forum ???:L


----------



## Andi_CH (22. Feb 2011)

Ich wollte damit vor allem ausdrücken dass ich keine javaspezifisches Problem erkennen kann, was ich allerdings immer noch nicht behaupten kann :bahnhof:

Aber vielleicht kannst du ja mit den Hinweisen der anderen etwas anfangen.


----------



## fastjack (22. Feb 2011)

Das ist aber nicht schön... Wenn eine Veranstaltung auch zu mehreren Modulen zugeordnet werden soll, würde ich eine N:M Relation machen. Also Tabelle ModuleVeranstaltung (module_id, veranstaltung_id, ...).
Ansonsten, wenn eine Veranstaltung nur einem Modul zugeordnet werden kann, eine 1:N. Also Tabelle Veranstaltung (module_id, ...).


----------



## jgh (22. Feb 2011)

auch wenn du schon angefangen hast, deine db zu designen, oder "aufzusetzen", kann ich dir nur empfehlen, den Post von Andi_CH zu befolgen:

Es nützt dir nichts -in Abhänigkeit von deinem Ziel- wenn du die beste DB designed hast, aber außer Ein- und Auslesen von Datensätzen funktioniert nichts^^

Mal so als nicht zu Ende gedachtes Bsp:
Du willst also einen Modulrechner bauen, wie der mit Modulen rechnet weiß ich ja nicht, also brauchst du eine Klasse Modul, die u.a. aus 1-4 Veranstaltungen besteht. =>

```
import java.util.List;


public class Modul {
	
	private List<Veranstaltungen> veranstaltungen;

}
```

die konkrete Implentierung von [c]List[/c], ob nun [c]ArrayList, LinkedList, Vector[/c] oder was auch immer du nimmst, soll für den Anfang erstmal egal sein.

Also brauchst du auch noch eine Klasse Veranstaltungen...evtl auch ein Noten-Objekt?!

```
public class Veranstaltungen {
	
	private int note;
     // private Note note;
	

}
```

zusätzlich überlegst du dir, welch weiteren -für deine relevanten Berechnungen- Attribute diese Objekte benötigen...und nebenbei entsteht eine Datenstruktur. 

Wichtig ist, dass du dein eigenes Ziel nicht aus den Augen verlierst: 
Du willst einen Modulrechner bauen...

Ist natürlich auch ein wenig Geschmackssache, ich würde es in diese Richtung machen.

Datenspeicherung ist bei einer Aufgabe die du selbst als "Modulrechner" definierst, imho ein späterer Schritt...


----------



## fastjack (23. Feb 2011)

eben testdriven anfangen, dann siehst Du was Du brauchst, wie Du es später benutzt und baust auch keinen Ballast ein.

Beispiel:


```
Module module = new Module();

@Test
void shouldHaveZeroVeranstaltungen() {
    assertEquals(0, modul.getVeranstaltungen().size());
}
```

=> Kompilerfehler

Klasse Modul erzeugen:

```
class Module {
}
```

Methode getVeranstaltungen erzeugen:

```
class Module {
    List<Veranstaltung> getVeranstaltungen() {
        return null;
    }
}
```

Klasse Veranstaltung erzeugen:

```
class Veranstaltung {
}
```

Test starten => NullPointerException

```
class Module {
    List<Veranstaltung> getVeranstaltungen() {
        return new ArrayList<Veranstaltung>();
    }
}
```

Test starten => Test OK.

und so weiter...


----------



## Andi_CH (23. Feb 2011)

Ich habe noch nie tesdriven geargeitet, aber es ist sicher ein sehr guter Ansatz, denn man muss sich von Anfang an genau überlegen WAS man will bzw. WIE sich das System verhalten soll.


----------



## aikon3 (23. Feb 2011)

danke schonmal an die Antworten,
Ich habe halt am Anfang erst die ganze Persitenzschicht im Kopf gehabt, weil ich nen Projekt machen wollte mit ner eingebettetn DB. 
Aber jetzt werd ich erst meine Unit Tests schreiben und dann die ganze Logik aufbauen.

mfg


----------

