# Umfrage in Java



## CoLD (30. Jun 2010)

Hallo,
ich will mir in Java eine Umfrage programmieren. Jetzt stellen sich einige Probleme.

Wie mach ich das am besten mit den Auswahlmöglichkeiten? Also ich tippe mir ja die Finger wund wenn ich alle Möglichkeite mit If überprüfe und dementsprechend die Antworten in Variablen speichere. Gibts irgendeine Möglichkeiten die Optionen irgendwie einzulesen.

Außerdem will ich die Ergebnisse langzeitig speichern und nicht nach Terminierung des Programmes löschen. Wie stell ich das an? Nur beim drücken eines Buttons sollen die Ergebnisse gelöscht werden.

Drittes Problem ist, das ich die Ergebnisse grafisch darstellen will. Am besten wäre ein Kreisdiagramm. Wie soll ich das anstellen?

Danke für die Hilfe


----------



## Lexi (30. Jun 2010)

Wenn du das ganze grafisch machen möchtest, also mit Swing/AWT o.ä. kannst du doch ganz einfach CheckBoxen oder RadioButtons verwenden. Mit getState() kannst du dann rausfinden, ob eine CheckBox ausgewählt wurde oder nicht. Die Ergebnisse kannst du dann in eine Liste packen und in eine Datei schreiben.


----------



## Ruzmanz (1. Jul 2010)

Die Daten könntest du in eine Excel Tabelle laden und dann dort ein Kreisdiagramm zeichnen lassen bzw. in Java kannst du folgende Library benutzen: JFreeChart


----------



## Shulyn (1. Jul 2010)

Wie soll die Umfrage den aussehen?
Bzw fangen wir Grundlegender an.

- Eine Statische Umfrage oder kann man sich diese selber erstellen?
- Was soll den zur eingabe benutzt werden? Einfach als Consolen input, oder ein Client, oder evtl über JSP sprich web?
- Was für Fragen soll die Umfrage den beinhalten? JA/NEIN , Skalaeingabe (Stimme zu,...Stimme nicht zu). Multiplichoice , usw usw...

Wie oft wird so 1 Umfrage den Beantwortet? Thema Speicherplatz, ist ein großer unterschied oder 10x oder 5000x...

Versuch dir ein Konzept zu erstellen. Wo solche Fragen beantwortet werden. Dann kannst du damit anfagen dir zu überlegen WIE du es umsetzen willst.

Z.b könntest du dir eine Datenbank erstellen, in dieser Speicherst du die Fragen + Antworten. Und könntest dann Z.b. via JasperReports auswertungen machen, Diagramme erstellen und vieles mehr.


----------



## CoLD (1. Jul 2010)

Shulyn hat gesagt.:


> Wie soll die Umfrage den aussehen?
> Bzw fangen wir Grundlegender an.
> 
> - Eine Statische Umfrage oder kann man sich diese selber erstellen?
> ...



Eine statische Umfrage... Frage werden mit verschiedenen Antwortmöglichkeiten aufgeführt (Stimmt, Stimmt teilweise, Stimmt nicht,...). Ca 20 Fragen...

Habe mir gedacht, eine GUI mit JRadioButtons und den Antwortmöglichkeiten zum ankreuzen und mit einem Button, mit dem man die Eingabe bestätigt. 

Zur Darstellung sollte ein Kreisdiagramm dienen, und damit ich mir nicht mit den Werten die Finger wurd tipp, speichere ich die Ergebnisse in einer Textdatei und lese sie ein, wenn ich sie darstellen will. Daraus kann ich dann die Anteile berechnen und das Kreisdiagramm plotten. Ähm ja... Die Textdatei hätte auch den Vorteil, das ich meine Ergebnisse, wie ich eigentlich auch will, langzeitig speichere und nicht nach Terminierung lösche. Nur durch einen Button sollen die Ergebnisse gelöscht werden. 

Kann ich das umsetzen? Welche Klassen sollte ich mir dafür anschauen?
Und gibts irgendeinen Tipp bei der Überprüfung der Eingabe? ich meine mit

```
if(eingabe2.equals("blabla"))
eingabe2A++
else if(eingabe2.equals("blabla2"))
eingabe2B++
... (
```
Würde ja sehr viel Zeit kosten (ich hab jetzt hier mal als Beispiel Lokale Variablen erhöht, wenn ich es mit den Textdateien mach muss ich diese dann dementsprechend umschreiben).

Tut mir Leid wenn ich grad bisschen komisch mich ausdrücke. Bin total müde :gaen: Ich hoffe ihr versteht es tdm.

Danke


----------



## Lexi (1. Jul 2010)

Wenn du alle CheckBox Instanzen in einem Array oder einer List o.ä. verwaltest kannst du deren Werte doch nach Betätigen des Auswerten Buttons einfach der Reihe nach auslesen und z.B. in einer Ergebnisliste zur weiteren Verarbeitung abspeichern.

```
List<Boolean> ergebnisListe = new ArrayList<Boolean>();

for(CheckBox c : checkBoxes){
    ergebnisListe.add(c.getState());
}
```


----------



## Ruzmanz (1. Jul 2010)

Als wir damals mit dem Programmieren angefangen haben, dann waren die Fragen in einer txt-Datei und folgendermaßen sotiert:


```
1, Wie viele Brötchen gibt es?, 4, 3, 2, 1, D; 2, Welche Antwort ist richtig?, Antwort A, Antwort B, Antwort C, Antwort D, B;
```

Zuerst kommt die Nummer, die Frage selbst, 4 Antworten und der Lösungsbuchstabe. Ich denke mal, das ist ein einfacherer Weg.

Am besten schreibst du alles in eine Zeile, dann bekommst du das mit dem BufferedReader ohne irgendwelche Schwierigkeiten ganz schnell raus. Darauf speicherst du die eingelesene Zeile in einem String[]:

stringFragenArray = zeile.split(";"); und dann jedes Element mit .split(",") trennen. und in ein zweiDimensionales Array laden. Das zweidimensonale Array sieht folgendermasen aus: ar2 = new String[stringFragenArray.length][6]; 

Die einzelnen Antworten und fragen kannst du dann in jeder Runde über eine Methode an 4 Checkboxen und einem Textfield übergeben. Wenn dein Weiter-Button gedrückt wird, dann kannst du die Frage auswerten:

if(checkbox1.getState())
     auswahl = "A";
if(checkbox1.getState())
     auswahl = "B";
if(checkbox1.getState())
     auswahl = "C";
if(checkbox1.getState())
     auswahl = "D";
if(auswahl == stringFragenArray[fragenNr][5])
     richtig = true;
else
    richtig = false

Ich denke mal das ist die einfachste Variante für eine Umfrage.


----------



## Lexi (1. Jul 2010)

Ruzmanz hat gesagt.:


> if(checkbox1.getState())
> auswahl = "A";
> if(checkbox1.getState())
> auswahl = "B";
> ...


Wenn man davon ausgeht, dass es immer nur eine richtige Antwort gibt und der Befragte auch immer nur ein Feld ankreuzt, macht es hier mehr Sinn else if zu benutzen, da sonst unnötig viele if-Abfragen durchlaufen werden könnten.


----------



## Ruzmanz (1. Jul 2010)

Sollte nur grob als Beispiel dienen. Hast vom Prinzip her Recht. Eigentlich waren die Antworten Buttons, bei denen einfach überprüft wurde, ob ihr action() (<- Ka, weis jetzt den Methodennamen nicht) mit dem Buchstaben der Lösung übereinstimmt


----------



## Lexi (1. Jul 2010)

Ich denke mal du meinst 
	
	
	
	





```
getActionCommand()
```
 oder 
	
	
	
	





```
getText()
```


----------



## Ruzmanz (1. Jul 2010)

Och, stimmt ja. Ich habe in die flasche Richtung gesucht  Habe schnell mal die GUi in Netbeans zusammengeschmissen:







setText() wird selbstverständlich für die Antworten genommen und die Lösung wird dann mit getActionCommand() abgefragt + ActionListener. Wenn man die Felder und Buttons mit Grafiken ersetzt, dann sieht das noch besser aus


----------



## CoLD (1. Jul 2010)

Ruzmanz hat gesagt.:


> Och, stimmt ja. Ich habe in die flasche Richtung gesucht  Habe schnell mal die GUi in Netbeans zusammengeschmissen:
> 
> 
> 
> ...



Ja ok erstmal... Ich war bisjetzt mal am Ideen sammeln, werd mich jetzt mal ums Layout und so kümmern.


----------



## CoLD (2. Jul 2010)

Abend,
ich hab schnell eine Frage. Ich weiß nicht genau wie ichs ausdrücken soll, sonst hätt ich auch gegoogelt.
Also ich will einen modalen JDialog machen und sobald man einen Button drückt sollen neue Komponenten erscheinen. Also der JDialog soll nicht verschwinden und ein neuer erscheinen, sondern einfach neue Komponenten erscheinen. 
Gibts da irgendeine Möglichkeit?


----------



## Antoras (3. Jul 2010)

Was meinst du mit neue Komponenten sollen erscheinen? Dass alte ausgeblendet und neue eingeblendet werden? Dann hilf dir vllt. das CardLayout weiter.


----------



## JanHH (4. Jul 2010)

Bin zufälligerweise genau in dem Bereich beruflich unterwegs (Marktforschungssoftware) und was Du tun willst ist ja eine komplette Umfragesoftware samt Auswertungen selber zu programmieren. Das dann noch mit wenig Kenntnissen und Fragen im Anfänger-Bereich. Klare Antwort: das wird nix. Mach Deine Umfrage mit surveymonkeys oder so. Wenns doch unbedingt java sein soll hilft nur ein Webframework wie seam, mit JSF+JPA. Aber da brauchst Du jetzt ca. ein halbes Jahr Einarbeitungszeit ;-).


----------



## Lexi (4. Jul 2010)

Ich glaube eher, dass er nicht gerade das riesen Projekt verwirklichen möchte. Ich denke mal das wird ne grafische Maske mit einer TextArea für die Fragestellung und verschiedenen Buttons und oder Checkboxen o.ä., die dann ausgewählt werden können. Bei einem Klick auf einen "Weiter-Button" wird dann die nächste Fragestellung geladen und die Ergebnisse der vorherigen gespeichert. 
Das kann doch nicht so tragisch sein, oder ?


----------



## CoLD (4. Jul 2010)

JanHH hat gesagt.:


> Bin zufälligerweise genau in dem Bereich beruflich unterwegs (Marktforschungssoftware) und was Du tun willst ist ja eine komplette Umfragesoftware samt Auswertungen selber zu programmieren. Das dann noch mit wenig Kenntnissen und Fragen im Anfänger-Bereich. Klare Antwort: das wird nix. Mach Deine Umfrage mit surveymonkeys oder so. Wenns doch unbedingt java sein soll hilft nur ein Webframework wie seam, mit JSF+JPA. Aber da brauchst Du jetzt ca. ein halbes Jahr Einarbeitungszeit ;-).



Ich will eigentlich bloß eine bestimmte Umfrage programmieren (Also mit RadioButtons oder normalen buttons und dann einen Aktionlistener, der das ausgewählte Element in eine Tabelle oder so reinschreibt). Zur Auswertung kann ich dann die Ergebnisse einlesen, und die Prozente errechnen. Dann könnte ich auf ein JPanel Balken zeichnen und mit Labels die Prozentzahl danebenschreiben. Oder ich nehme die schonmal erwähnte Klasse JFreeChart. 

Ich denke so würde es gehen..... Denkt ihr des ist möglich?


----------



## Lexi (4. Jul 2010)

Ich denke das ist durchaus machbar, wobei ich nicht weiß ob das mit der grafischen Darstellung so ohne weiteres umsetzbar ist, das mit den Labeln hört sich schon irgendwie komisch an...


----------



## JanHH (4. Jul 2010)

Denke aber, am einfachsten wäre sowas als Webanwendung zu realisieren. Da gibt es auch leistungsfähige technologien für eine einfache Speicherung der Daten. Allerdings ist der Einarbeitungsaufwand nicht gerade gering. Auf jeden Fall braucht man schon eine passende Klassenstruktur um die Fragen abzubilden, einen Mechanismus um sie darzustellen, die Antworten zu speichern usw.. ganz simpel ist es nicht.


----------



## Eldorado (5. Jul 2010)

Also ich habe mit JFreeChart ganz gute Erfahrungen gemacht. Vor allem musst du dir dann keinen abbrechen da was zu zeichnen, sondern hast eine schönes Diagramm, das relativ einfach zu realisieren ist.


----------

