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 - Pruefungsmodel

Klausuren und Übungsblätter

Pruefungsmodel

Klausuren und Übungsblätter werden gemeinsam in einem Model namens 'Pruefung' verwaltet. Die Unterscheidung zwischen Übungsblättern und Klausuren findet durch ein Attribut 'Typ' statt, das entweder auf 'U' oder 'K' steht. Datenbankseitig ist dieses Attribut ein Enumerator mit diesen beiden Werten. Das Model enthält

  • Typ, Veranstaltungsschlüssel und Nummer
  • Datum
  • eine Aufgabenliste

der Prüfung.

Methoden des Models:

  • Erstellen einer Pruefung aus den Daten
  • Die Pruefung ihre Aufgabenzahl, für die schon Punkte eingetragen sind, holen lassen
  • Eine Pruefung mit dem angegebenen Schlüssel aus der Datenabnk holen
  • Sich alle Pruefungen in einer bestimmten Veranstaltung holen
    • Oder nur eine spezielle Pruefungsart holen
  • Nachfragen, ob eine Pruefung zu einem bestimmten Schlüssel existiert
  • Eine Auflistung aller Pruefungen aus der Datenbank holen (wird wohl nicht gebraucht, wenn die Datenbank zu viele Pruefungen enthält)
  • Eine neue Aufgabe zu der Pruefung hinzufügen
    • Oder ein Array von Aufgaben
  • Datenbankfunktionen:
    • Pruefung in die Datenbank schreiben
    • Daten in der Datenbank aktualisieren
    • Pruefung aus der Datenbank löschen
  • Getter und Setter der Klasse sind so überladen,
    • dass man die Aufgabenliste durch das Attribut 'Aufgaben' verändern kann ('Aufgaben' steht für die Anzahl der Aufgaben)
      • Verkleinern des Attributs 'Aufgaben' schneidet die Liste zurecht
      • Vergrößern fügt Dummy-Aufgaben mit 0 Punkten ein
    • dass man sich auch ein Attribute holen kann wie
      • 'fix' gibt die maximale Aufgabennummer zurück, für die schon Punkte eingetragen sind
      • 'Aufgaben', Gebrauch siehe oben
      • 'Punkte' die maximale Punktzahl dieser Pruefung

Implementation der Getter- und Setter-Methode

Die folgenden Quelltexte sind gekürzt und der Übersichtlichkeit halber in einem lesbareren Code verfasst. Die Funktion des echten Programms ist allerdings die gleiche.

Überladener Setter

Auch der Setter prüft, ob das angegebene Attribut existiert. Wenn es existiert und kein Schlüssel ist, wird es auf den übergebenen Wert gesetzt. Wenn der Name unbekannt war, wird geprüft, ob der Name 'Aufgaben' heißt. Wenn es so ist, wird die Aufgabenliste entsprechend verändert. Ist der übergebene Wert kleiner als die alte Listenlänge, werden entsprechend viele Elemente am Ende der Liste gelöscht, ist er größer, werden Aufgaben mit 0 Punkten angehängt.

function __set($property, $value) {
  if (array_key_exists($property, $this->properties)){
    if (gehört_zum_Schlüssel($property)) fehler("Schlüssel dürfen nicht editiert werden.");
 
    $this->properties["$property"] = $value;			
  }
  elseif ($property = 'Aufgaben') {
    if ($this->fix > $value)
      fehler("Sie löschen Aufgaben, für die bereits Punkte eingetragen wurden. ");
 
    // loesche alle Aufgaben mit hoeherer Nummer
    $Aufgabenzahl = count($this->Aufgabenliste);
    for($i = $value; $i < $Aufgabenzahl; $i++){
      loesche($this->Aufgabenliste[$i]);	  
    }
 
    // Fuege Dummy-Aufgaben ein
    for($i = $Aufgabenzahl + 1; $i <= $value; $i++){
      $this->addAufgabe(new Aufgabe(array('AufgNr' => $i, 'Punkte' => 0) ,$this->env));
    } 
  } else {
    fehler('Pruefung->__set: Attribut '.$property.' existiert nicht!');
  }
}
Überladener Getter

Der Getter prüft zunächst ab, ob sich der übergebene Name als Index im property-Array befindet. Ist dies der Fall, wird es zurückgegeben. Ansonsten wird auf andere Attributnamen getestet, und zwar auf 'Aufgaben', 'Punkte', 'fix'. 'Aufgaben' gibt die Aufgabenzahl zurück, 'Punkte' die kumulierte Punktzahl, 'fix' gibt eine Zahl zurück, an Hand derer man prüfen kann, ob an der Prüfung etwas verändert werden darf. Sie beträgt entweder die maximale Aufgabennummer, für die Punkte eingetragen sind, oder ist gleich -1, falls diese Pruefung nicht die letzte ihres Typs ist. Die Aufgaben dürfen nur oberhalb dieser Grenze verändert werden, und die Pruefung darf nur gelöscht werden, wenn fix genau 0 beträgt.

function __get($property) {
  if(array_key_exists($property, $this->properties)) {
    return $this->properties[$property];
 
  } elseif ($property == 'Aufgaben') {            // Pseudoattribut 'Aufgaben'
    return count($this->Aufgabenliste);
 
  } elseif ($property == 'Punkte') {              // Pseudoattribut 'Punkte'
    $sum = 0;
    foreach($this->Aufgabenliste as $aufg)
      $sum += $aufg->Punkte;
    return $sum;
 
  } elseif ($property == 'fix') {                 // Pseudoattribut 'fix' um zu wissen,
    return $this->eintraege;                      //  ob editiert werden darf
 
  } else {
    throw new TuksException('Key '.$property.' not found!');
  }
}
Dominik Abraham, Katharina Röhr


Page last modified on August 14, 2009, at 04:45 PM