# Bundesliga modellieren



## NDEBUG (30. Jul 2009)

Als alter C-Programmierer tue ich mir irgendwie reichlich schwer in Klassen zu denken. Daher hab ich mir als Lernaufgabe gestellt Bundesliga-Ergebnisse mit einem Java-Programm zu managen. Ich hab auch schon nen Entwurf und es wäre nett, wenn da mal ein Profi drüberguckt und mir sagt was eventuell schlecht ist und zu Problemen führen kann.

Hier die Anforderungen:
- Das Programm soll die Ergebnisse der Fußballbundesliga verwalten, dazu muß es alle Mannschaften und Begegnungen mit Ergebnissen verwalten können.
- Sämtliche Daten sollen als XML abgespeichert werden und zwar saisonweise (die Saison-Dateien werden nach dem Schema "_x Liga- Saison 20xx/20xx.xml_" abgespeichert, z.B. "1. Bundesliga - Saison 2009/2010.xml")
- Es soll automatisch eine Tabelle erstellt werden können.

Zukünftige Anforderungen:
- Es sollen die Spieler der Mannschaften mitverwaltet werden können.
- Die Architektur soll erlauben, daß größere mathematische Berechnungen für Spieltage und Saisons möglich sind.
- Es soll möglich sein zu den verschiedenen Mannschaften weitere Informationen zu verwalten (Stadion, Personal, Einnahmen, usw.)


Hier mein Entwurf ...






Was mich an dem Entwurf n bisschen stört ist, daß der "Data"-Block sehr monolithisch aussieht. So hat da fast jede Klasse ja eine Collection von einer anderen Klasse drin. Und das würde die Klassen sehr abhängig voneineander machen.

Also ist das gut oder was kann man besser machen? Für Verbesserungsvorschläge jeglicher Art schonmal vielen Danke


----------



## bygones (30. Jul 2009)

nur kurz druebergefolgen.

Saison braucht keine Mannschaften zu kennen imho... einen Saison hat einen Zeitraum, und diverse Spieltage.
Ein Spieltag besteht aus mehreren Begegnungen und eine Begegnung besteht immer aus 2 Mannschaften - jede Mannschaft hat dann eine Reihe von Spielern.



> Und das würde die Klassen sehr abhängig voneineander machen


wenn sie logisch zusammengehoeren ist eine Abhaengikeit die logische Konsequenz


----------



## Gast2 (31. Jul 2009)

Eine Saison kann schon Mannschaften haben z.B. beim Fußball
die Bundesliga hat 18 Manschaften
die Premiere Leauge 20...


edit: okay hier eventuell eher die Liga nicht die Saison...

Aber die Begnung kann nur 2 Manschaften enthalten würde ich auf jeden Fall mit aufnehmen...


Wenn dus als XML abspeichern willst würde sich eventuell JAXB empfehlen...


----------



## NDEBUG (31. Jul 2009)

"mannschaften" hab ich mir als Teil von Saison gedacht, da die Mannschaftskonfiguration der Liga für jede Saison spezifisch ist. Es steigen Mannschaften ja saisonweise auf- und ab. So hat die Saison 2009/2010 teilweise andere Mannschaften als die Saison 2008/2009.

Begegnung hat ich mir so gedacht, daß ich zwei "Pointer" mache, die in das Array "mannschaften" zeigen, jeweils einer für heim und einer für ausw. So müsste die Klasse Saison dann die Methode

```
Mannschaft getMannschaft(String mannschaftsName) { ... }
```
haben.

Edit: Ich hab einige Änderungen vorgenommen.
- Ich konzentriere mich erstmal nur auf eine einzige Saison, daher ist "Liga" rausgeflogen.
- Ich habe "Tabelle" neu hinzugefügt.

Das neue Diagramm ist hier anguckbar http://img76.imageshack.us/img76/6551/fuballmanager.jpg. Ich kann meinen ersten Post nicht editieren, daher so.


----------



## NDEBUG (5. Aug 2009)

Mal der aktuelle Stand der Entwicklung hier und ich hab auch einige Fragen  Doch zunächst erstmal Code ...

Das ganze xml Zeugs werde ich noch aus den einzelnen Klassen rausholen und in einer einziger Klasse zusammenbasteln. Jedes Object speichert auch einen Verweis auf seine zugrundeliegende "XML" Quelle und ist mit ihr fest verbunden. Ändert man also einen Wert z.B. einer Mannschaft so ändert dies automatisch auch den zugehörigen XML "Code". So kann man ganz einfach das ganze XML auf einmal schreiben und muss nicht durch alles durchiterieren. In fussballmanager.java wird dieses Prinzip durch ein paar Test-Anweisungen deutlich.

\src\de\fussballmanager\main\Fussballmanager.java
\src\de\fussballmanager\data\Liga.java
\src\de\fussballmanager\data\Mannschaft.java
\src\de\fussballmanager\data\Spieler.java
Und hier ein Test-XML-File ... liga.xml

Und nun meine Fragen.
1. Geht das besser, daß ich eine permanente Verbindung zwischen Daten im Speicher und XML-File auf der Platte habe?
2. Wenn ich das XML zurückschreibe verwende ich

```
DOMSource sourceXML = new DOMSource(this.ligaXML);
StreamResult outputDest = new StreamResult(System.out);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(sourceXML, outputDest);
```
Er macht aber aus
[XML]<?xml version="1.0" encoding="UTF-8"?>
<liga name="Freundschaftsliga" saison="2009/2010">
(...)[/XML]
das hier
[XML]<?xml version="1.0" encoding="UTF-8" standalone="no"?><liga name="Freundschaftsliga" saison="2009/2010">
(...)[/XML]
Also er fügt 'standalone="no"' ein und bricht die Zeile vor '<liga (...)' nicht um. Warum? Und wie kann ich ihn dazu bringen, daß er nichts einfügt und den Zeilenumbruch macht?

EDIT: Frage 2 hat sich erledigt. Dieser angepasste Code erzeugt das XML so wie ich es wollte.

```
DOMSource sourceXML = new DOMSource(this.ligaNodeXML);
StreamResult outputDest = new StreamResult(System.out);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.VERSION, "1.0");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(sourceXML, outputDest);
```


----------



## NDEBUG (8. Aug 2009)

Pünktlich zum ersten Spieltag das nächte Update hier. Da das Projekt immer größer wird, gibts nen Download vom 'src' und 'daten' Ordner (siehe Anhang).

Das kleine Programm besitzt nun ein GUI und der ganze XML Kram ist sauber von der Implementierung der "Daten-Klassen" durch die abstrakte Klasse "XmlEntity" getrennt. Speichern ist noch nicht möglich. Einfach mal ausprobieren und ich würde mich freuen wenn ihr mir eure Erfahrungen und Verbesserungsvorschläge mitteilt.

EDIT: der aktuelle Spieltag für Menschen, die kein Premiere haben:anhören


----------



## NDEBUG (11. Aug 2009)

Fertig! Der Fussballmanager ist nun fertig. Es ist alles drin ... Tabelle, Spieltage, Mannschaften, Speichern, Historie, etc. Es ist auch möglich die Spieltage direkt von "Bundesliga.de" zu aktualisieren. Dazu geht man auf "Bundesliga.de", wählt den gewünschten Spieltag, markiert die Spiele, die aktualisiert werden sollen (oder auch einfach alle Spiele des Spieltags) und fügt sie im dafür vorgesehen Tab ein. Klick und fertig.

Hier also der Source Code ... wer Fehler findet kann sie hier gerne posten. Ich werd sie dann ausmerzen. Ansonsten werd ich an dem Programm aber erstmal nicht weiter arbeiten.


----------



## experto2000 (11. Aug 2009)

Gut gemacht.
Echt spitze.
Kein Scherz.
Noch eine Frage holt er die Ergebnisse von selber wenn nein würde ich das noch machen.


----------



## NDEBUG (13. Aug 2009)

Nein, automatisch macht es das nicht. Das Update Feature war auch weniger für die Ergebniseingabe gedacht, als vielmehr für die Aktualisierung der Spieltermine, denn diese sind natürlich noch nicht für alle Spieltage fix terminiert. So zeigt das Programm für die späteren Spieltage z.B. an, daß alle Spiele eines Spieltages am gleichen Tag zur gleichen Uhrzeit stattfinden, was nicht so sein wird. Das liegt daran, daß diese Spieltage wie gesagt terminlich noch nicht genau fixiert sind.

Das nächste Programm wird aber sowas in der Art haben und noch viel mehr. Darum gehts... "Fifa Fußball-Weltmeisterschaft in Südafrika 2010".


----------



## TheChemist (14. Aug 2009)

Super Programm, ich bin zwar nicht gerade der Fußballbegeistertste aber das macht ja nichts. Ein Freund von mir kann damit mehr anfangen und findet es auch super.


----------



## tele (4. Jan 2010)

Hallo,

ich habe ein kleines Problem. Ich möchte eine Ligenverwaltung programmieren.
Mit GUI und speichern der Ergebnisse. Der Anwender soll die Ergebnisse interaktiv
eingeben können. Die Ergebnisse sollen gespeichert werden, damit man sich den Spieltag
und die dazu gehörige Tabelle von früheren Spieltagen anzeigen lassen kann. Ich habe 
festgestellt das es kompliziert ist ein Programm zu schreiben, damit eine Mannschaft
einmal ein Heim- und Gastspiel gegen alle anderen Mannschaften hat. Außerdem weiß 
ich nicht wie das Speichern und Laden funktioniert.

Kann mir da jemand helfen?


----------

