Warning: include_once(/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php): failed to open stream: No such file or directory in /var/www/html/fields/dbp09/local/config.php on line 4

Warning: include_once(): Failed opening '/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php' for inclusion (include_path='.:/opt/php/lib/php') in /var/www/html/fields/dbp09/local/config.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/fields/dbp09/local/config.php:4) in /var/www/html/pmwiki-2.2.86/pmwiki.php on line 1250
Datenbankpraktikum SS 2009 - Gruppe 3 - Statistiken

Statistiken

von F.Hebestreit, P. Middendorf, D.Künne

Vorgaben

Die Statistiken innerhalb von Tuks sollen mindestens genau die gleiche Aussagekraft haben, wie die bisher verwendeten. Diese wurden bisher mittels Skripten aus den Punktedateien der Tutoren generiert und grafisch aufbereitet.
Dabei ist zwischen zwei Auswertungen zu unterscheiden: Zum Einen die Auswertung, die nach Abschluss der Testate geführt wird und anzeigt, welche Studenten eine Zulassung zur Klausur haben und wie sie im Testatbetrieb abgeschnitten haben. Die zweite Auswertung erfolgt jeweils nach einer Klausur. Hier werden ähnliche Daten wie bei den Testaten ausgewertet.

Als erstes soll angezeigt werden, mit welchem Erfolg die einzelnen Aufgaben bearbeitet wurden. Diese Auswertung erfolgt einmal als Tabelle und einmal anhand einer Grafik.

Abb. 1: Abgabe pro Aufgabe

Abb. 2: Abgabe + Prozent

Des Weiteren soll angezeigt werden, wie viele Studenten mit der gleichen Punktzahl eine Klausur / die Übungsblätter bearbeitet haben. Hierbei wird die Auswertung einmal für alle Studenten erstellt und anschließend noch nach Studiengängen getrennt.

Abb. 3: Verteilung der Punkte über alle Teilnehmer

Bei den Klausuren muss zusätzlich noch eine Auswertung erfolgen, aus der der Aushang generiert werden kann. Hier muss zur Matrikelnummer eines Studenten seine Note und sein ECTS-Grade vermerkt werden.
Außerdem wird noch eine Bestenliste erzeugt, die die Studenten nach absteigender Punktezahl sortiert ausgibt.

Umsetzung

Anzeige abhängig von Login

Da es möglich sein sollte, dass sich verschiedene Benutzer des Systems die Statistiken anzeigen lassen können, muss eine Filterung auf die anzuzeigenden Daten möglich sein.

  • Benutzer mit Rolle "Student"
    • darf sich seine Endnote in einer Klausur / Prüfung / Seminar anschauen
    • darf eine Auswertung seiner Übungsblätter anschauen
  • Benutzer mit Rolle "Tutor"
    • darf sich die Endnoten seiner Tutanden in einer Klausur / Prüfung / Seminar anschauen
    • darf eine Auswertung seiner Tutanden über die Übungsblätter anschauen
    • darf sich die Zulassungen seiner Tutanden in der betreuten Veranstaltung anzeigen lassen
  • Benutzer mit Rolle "Übungsleiter" / "Dozent"
    • alle Ansichten eines Tutors für alle eingetragenen Teilnehmer in der Veranstaltung

Um diese Filterung durchzuführen und möglichst nicht für jede Rolle eine eigene Methode / eine eigene SQL-Query schreiben zu müssen, verwenden wir die IN-Klausel von SQL. Der Methode wird hierfür ein Array mit allen Logins übergeben, für die sich der angemeldete Benutzer Statistiken anzeigen lassen darf. Im SQL-Statement wird dann abgefragt, dass in der Ergebnismenge nur Einträge zu den übergebenen Logins enthalten sind.

SELECT 
  Vorname, Nachname, Note 
FROM 
  Personen, pruefen 
WHERE 
  Personen.Login = pruefen.StudLogin AND 
  VerID = ? AND 
  StudLogin IN (join($logins,"','"))
SQL-Statement liefert die Noten in einem Seminar

Grafische Aufbereitung der Daten

Ein Großteil der Daten wird lediglich in Tabellenform ausgegeben und mit Links zu weiterführenden Informationen versehen. Wie in der beispielhaften Abbildung 4 zu sehen ist, wird für alle in die Vorlesung eingetragenen Studenten angezeigt mit welchem Erfolg sie an den einzelnen Übungsblättern oder Klausuren teilgenommen haben. Über den angezeigten Prozentsatz gelangt man zu einer weiteren Ansicht, in der für den gewählten Studenten die Punkte aufgabenweise aufgelistet werden. Die explizite Generierung einer Bestenliste entfällt somit, da es in diesen Tabellen problemlos möglich ist nach den Werten in den einzelnen Spalten zu sortieren.

Abb. 4: Anzeige der Übungsblätter

Des Weiteren gibt es eine Liste in der angezeigt wird, welcher Student zum aktuellen Zeitpunkt über eine Klausurzulassung verfügt (Abbildung 5) und eine Liste, die die Endnote und den ECTS-Grade eines Studenten anzeigt (Abbildung 6).

Abb. 5: Liste mit Zulassungsinformationen

Abb. 6: Notenliste eines Seminares

Da die erzeugten Grafiken möglichst nah an den Vorgaben sein sollten, haben wir uns gegen PlotKit und für JPGraph entschieden. Außerdem wird durch den Einsatz von PHP zur Erzeugung der Grafiken auch Rechenlast von den Clients genommen, da hier die Bilder bereits komplett auf dem Server erzeugt werden. Da sich einige der Grafiken sehr ähnlich sind, haben wir pro Grafiktyp eine Vorlage verwendet, die dann dynamisch mit den anzuzeigenden Werten befüllt wird. Dafür wird diese PHP-Datei als src-Attribut eines image-Tags eingebunden und die benotigten Daten werden an diesen Aufruf angehängt.

<img src="lib/AkkuBalkenDiagramm.php?DatenZurErzeugung" alt="Abgaben und Prozent" title="Abgaben und Prozent"/>
Aufruf eines generierten Bildes

Aus diesen übergebenen Daten wird dann mit der JPGraph-Library das gewünschte Diagramm erzeugt (vergleiche Abbildung 2 und Abbildung 3)

Abb. 7: akkumuliertes Diagramm aus zwei Datenreihen

Abb. 8: einfaches Balkendiagramm

Probleme

Bei der Umsetzung zeigte sich, dass das ursprüngliche Datenbankdesign nicht ganz ausreichte um alle Daten sinnvoll aufbereiten zu können. Aus diesem Grund wurden die Studiengaenge als eigene Entität aus den Studenten ausgelagert und die Entitäten Notenschluessel und ECTS-Grade erzeugt. Letzteres wurde notwendig, da wir uns dazu entschieden haben, die Berechnung der Noten und des ECTS-Grades in der Datenbank zu machen. Dies stellt einen enorme Performanceverbesserung im Vergleich zu einer Berechnung mittels PHP dar.


Page last modified on September 04, 2009, at 02:37 PM