Softwaretechnik 2004: Beispielanwendung
LVV - Lehrveranstaltungs-Verwaltungs-Programm
Klassendiagramm
Aufbau der
Beschreibung des Klassendiagramms Dieses Diagramm
beschreibt die Klassenstruktur der kompletten Anwendung, d.h. hier
müssen die Klassen der GUI (Dialoge und sonstige Fenster)
einbezogen werden. Jede Klasse muss komplett durchmodelliert werden.
Alle Membervariablen müssen vorhanden sein, außerdem alle
Methoden. Jede Methode muss erklärt werden. Bei komplexeren
Methoden sollte der Ablauf grob skizziert werden, so dass erkennbar
wird, auf welche anderen Klassen die Methode zugreift. In dieser Stufe
des Designs ist die Entwicklungsplattform bekannt, d.h. die Klassen
müssen an Besonderheiten der Programmiersprache und an
verwendete Libraries angepaßt werden. Der Aufbau der
Beschreibung sollte so sein, dass zuerst die Datenklassen erklärt
werden und man sich dann durch die Dialoge und Fenster arbeitet. Die
Dialoge sollten nach Aktoren gruppiert werden, so dass zuerst alle
Dialoge beschrieben werden, die der Aktor Administrator
sieht, anschließend die Dialoge des Lehrbeauftragten usw.
Klassendiagramm anzeigen (Achtung: falls der Internet-Explorer das Bild
nicht darstellen kann, auf Festplatte speichern und mit z.B. Paint öffnen).
Anmerkung zur
Datenspeicherung: Wie bereits in
der Anforderungsdefinition erwähnt, würde die
Datenspeicherung idealerweise in einer Datenbank erfolgen. Dies
würde u.a. auch zu einigen weiteren Hilfsklassen führen.
Da dies allerdings erst Thema des 5. Semesters ist, gehen wir hier
davon aus, dass die Speicherung irgendwie erfolgt. Die
Save/Load/Delete-Methoden der Datenklassen sind
entsprechend nur sehr knapp dokumentiert. In der realen
SWT-Projektaufgabe muss dies ausführlicher und konkreter
geschehen, da ihr dies natürlich auch realisieren müsst.
Anmerkungen zur Datenkapselung:
Bei Betrachtung der Datenstruktur läßt sich erkennen, dass es einige Datenobjekte gibt, die nur innerhalb eines anderen Datenobjekts existieren können. Beispiele wären die Dateiabgabe, die nur innerhalb einer Arbeitsgruppe existieren kann. Die Arbeitsgruppe wiederum kann nur innerhalb einer Abgabe exisitieren, die Abgabe nur innerhalb eines Lehrveranstaltungstermins, und dieser nur innerhalb einer Lehrveranstaltung. Außerdem gibt es gewisse Regeln, die gewisse Aktionen unter bestimmten Bedingungen verhindern, beispielsweise ist eine Dateiabgabe nicht mehr möglich, wenn der Lehrveranstaltungstermin bereits abgeschlossen ist. Dies kann allerdings nicht das Objekt LVVDateiabgabe prüfen, sondern nur der Termin selbst. D.h. man muss dafür sorgen, dass das Anlegen oder Bearbeiten einer Dateiabgabe nur über den LV-Termin möglich ist.
Ein zweites Beispiel für solche Regeln ist das Objekt LVVLehrbeauftragter. Es darf keine zwei Lehrbeauftragten mit gleicher Personalnummer geben. Das Objekt LVVLehrbeauftragter kann diese Prüfung allerdings nicht vornehmen, da es seine anderen Instanzen überhaupt nicht kennt. Deshalb wird dies von der Klasse LVVLehrbeauftragterCollection übernommen. Auch hier gilt, dass der Lehrbeauftragte nicht ohne Kontrolle dieser Klasse änderbar sein darf.
Deshalb geben Collections, sofern sie eine Referenz auf ein Datenobjekt zurückgegeben, immer einen const-Zeiger zurück. Dadurch ist es nicht möglich, auf dem Datenobjekt ändernde Funktionen aufzurufen. Dies erfordert allerdings ein großes Stück Selbstdisziplin.
Beispielanwendung
für diesen Mechanismus: Ein Beispiel für
diesen Mechanismus der Datenkapselung mittels const Funktionen
findet sich hier (ConstTest).
Jede der Datenklassen führt Prüfungen
durch, falls solche erforderlich sind, und wirft Exceptions bei
illegalen Zuständen. D.h.: Idealerweise sollte z.B. die
Matrikelnummer des Studenten schon bei der Erfassung im Dialog
geprüft werden. Trotzdem prüft auch die
LVVStudentCollection selbst nochmal das selbe, so dass durch einen
Programmfehler im Dialog trotzdem keine illegalen Zustände
erreicht werden können. Diese Vorgehensweise sollte überall
umgesetzt werden: Nie darauf verlassen, dass die Daten korrekt
ankommen, sondern eher zweimal prüfen als einmal zuwenig. Grund:
die Eingabe eines Datenobjekts kann über fünf oder mehr
Wege im Programm möglich sein, und es kann sein, dass eine
bestimmte Prüfung nur an einigen dieser Stellen umgesetzt wurde.
Für den Fall, dass irgendwo wegen der fehlenden Prüfung
illegale Daten entstehen, würde die Prüfung direkt in der
entsprechenden Datenklasse zumindest eine Absicherung dagegen bieten,
dass die falschen Daten in den Datenspeicher gelangen. Die bei
Erkennung des Fehlerzustands ausgelöste Exception führt
zwar zu einem Absturz des Programms, aber immerhin bleiben die Daten
korrekt, was viel wichtiger ist.
Klasse LVVGlobal
Diese Klasse dient als Kapselklasse für globale Daten, d.h. Daten, die überall in der Anwendung gleich sind. Gemäß Document-View-Design der MFC wäre dies die von CDocument abgeleitete Klasse. Allerdings enthält diese Klasse sehr viel Funktionalität, die eben nicht von allen Stellen der LVV-Anwendung aus erreichbar sein soll. Aus diesem Grund werden die wirklich globalen Daten der Anwendung (Liste der Lehrbeauftragten, Liste der Studenten, Liste der Lehrveranstaltungen und angemeldeter Benutzer) in einer eigenen Klasse verwaltet. Diese Klasse steckt im LVVDocument und darf nur einmal existieren (wie auch die von ihr verwalteten Datenklassen).
Beim Initialisieren der Anwendung werden die Daten nacheinander eingelesen, d.h. beim Einlesen der Lehrbeauftragten sind die Studenten noch nicht bekannt und die Referenz kann erst anschließend in diese Klasse gesetzt werden.
Membervariablen:
listLehrbeauftragte: Liste aller Lehrbeauftragten im Programm, siehe LVVLehrbeauftragteCollection.
listStudenten: Liste aller Studenten im Programm, siehe LVVStudentCollection.
listLehrveranstaltungen: Liste aller Lehrbeauftragten im Programm, siehe LVVLehrveranstaltungCollection.
benutzer: Der aktuell angemeldete Benutzer. Dies kann ein Student oder ein Lehrbeauftragter sein. Deshalb ist benutzer vom Typ LVVPerson.
Memberfunktionen:
Get- und Set-Methoden für jede der drei Variablen. Die Get-Methoden liefern keine konstanten Objekte zurück (Ausnahme: der angemeldete Benutzer darf nur über die Studenten- bzw. Lehrbeauftragte-Collection-Klasse modifiziert werden, also liefert GetBenutzer() einen konstanten Zeiger zurück.
Klasse LVVDaten
Diese abstrakte Klasse ist die Basisklasse aller Datenklassen der Anwendung. Sie erlaubt es, eine Referenz auf eine Instanz von LVVGlobal zu speichern. Dadurch ist es der Datenklasse möglich, auf Daten wie Lehrbeauftragte, Studenten, Lehrveranstaltungen und den aktuell angemeldeten Benutzer zuzugreifen. So kann z.B. ein Lehrveranstaltungstermin die teilnehmenden Studenten verwalten, die in einer Instanz von LVVStudent gespeichert werden.
Falls irgendwo eine neue Datenklasse erzeugt wird (z.B. im Add oder im Load einer Collection), muss immer auch die Referenz auf LVVGlobaleDaten dieser neuen Datenklasse gesetzt werden
Membervariablen:
globaleDaten: Dieser Zeiger auf eine Instanz von LVVGlobal (die einzige in der Anwendung erlaubte Instanz) enthält alle globalen Daten.
Memberfunktionen:
Get- und Set-Methoden, die direkt auf die Get-/Set-Methoden von globaleDaten weiterleiten, also z.B. GetLehrbeauftragte und SetLehrbeauftragte. GetBenutzer liefert eine konstante Referenz auf das Datenobjekt zurück, alle anderen Get-Methoden nicht.
Klasse LVVPerson
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Die Klasse LVVPerson bildet einen menschlichen Benutzer der Anwendung ab. Hiervon gibt es zwei Sorten: Lehrbeauftragte und Studenten. Beide haben gemeinsame Attribute, die von dieser abstrakten Klassen verwaltet werden.
Die Attribute sind:
strName: Vor- und Nachname der Person
strEMail: Mailadresse der Person
strLogin: Login der Person
strPasswort: Passwort der Person
Die Methoden sind:
Konstruktor: Initialisiert alle Felder mit Leerstrings.
Kopierkonstruktor: Erzeugt eine komplette Kopie dieser Person.
CString GetName() const: Konstante Funktion zum Abrufen des Namens der Person.
SetName (CString str_Name): Setzen des Namens der Person. Die Methode wirft eine Exception, wenn ein leerer Name übergeben wird.
CString GetEMail() const: Konstante Funktion zum Abrufen der E-Mailadresse der Person.
SetEMail (CString str_EMail): Setzen der E-Mailadresse der Person. Die Methode wirft eine Exception, wenn die Adresse nicht gültig ist (z.b. kein @ enthalten). Die Adresse kann leer sein.
CString GetLogin () const: Konstante Funktion zum Abrufen des Login-Namens der Person.
SetLogin (CString str_Login): Setzen des Logins der Person. Ein leerer Login ist nicht möglich.
CString GetPasswort () const: Konstante Funktion zum Abrufen des Passworts der Person.
SetPasswort (CString str_Passwort): Setzen des Passworts der Person. Ein leeres Passwort ist nicht möglich.
Klasse LVVLehrbeauftragter
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Die Klasse LVVLehrbeauftragter bildet einen Lehrbeauftragten ab, also die Person, die Lehrveranstaltungen durchführt. Sie ist von der Klasse LVVPerson abgeleitet (jeder Lehrbeauftragte ist eine Person) und erbt dadurch die Attribute Name, E-Mail, Login und Passwort und erweitert sie um einige weitere Attribute.
Die Attribute sind:
intPersonalnummer: Damit jeder Lehrbeauftragte eindeutig erkennbar ist, wird ihm eine eindeutige ID zugewiesen, hier als Personalnummer bezeichnet.
bolAdministrator: Boolesche Variable, die angibt, ob der Lehrbeauftragte das Recht der Stammdatenadministration hat (also ein Aktor Administrator ist).
listLVTermine: Eine Liste von Objekten LVVLVTermin2Lehrbeauftragter, die angeben, welche Lehrveranstaltungstermine der Lehrbeauftragte leitet.
Die Memberfunktionen sind:
Konstruktor: Initialisiert alle Felder, die Personalnummer wird auf 0 gesetzt, der Lehrbeauftragte ist kein Administrator.
Kopierkonstruktor: Erzeugt eine komplette Kopie dieses Lehrbeauftragten, einschließlich der anhängenden Lehrveranstaltungstermine.
int GetPersonalnummer() const: Konstante Funktion zum Abrufen der Personalnummer des Lehrbeauftragten.
SetPersonalnummer (int int_Personalnummer): Setzen der Personalnummer des Lehrbeauftragten.
bool GetAdministrator() const: Konstante Funktion zum Abrufen der booleschen Variable Lehrbeauftragter kann Stammdaten administrieren.
SetAdministrator (bool bol_Administrator): Setzen der booleschen Variable Lehrbeauftragter kann Stammdaten administrieren.
const LVVLVTermin2LehrbeauftragterCollection * GetLVTerminZuordnungen() const: Konstante Funktion. Diese Methode liefert eine (als konstant deklarierte) Liste mit den Zuordnungen der Lehrveranstaltungstermine, die der Lehrbeauftragte durchgeführt hat oder durchführen wird. (entspricht der Membervariablen list_LVTermine).
Load: Diese Methode übernimmt das Laden des
Lehrbeauftragten. Sie ersetzt den Standard-MFC-Mechanismus der
Serialisierung, da die Datenspeicherung nicht in einer Binärdatei
erfolgt.
Beim Laden werden außerdem die
Lehrveranstaltungstermin-Zuordnungen des Lehrbeauftragten
(Membervariable listLVTermine) eingelesen.
Save: Durch Aufruf dieser Methode werden die Daten des Lehrbeauftragten gespeichert. Außerdem werden die Lehrveranstaltungszuordnungen aus der Membervariablen listLVTermine gespeichert.
Delete: Diese Methode dient dazu, den Lehrbeauftragten aus dem zugrundeliegenden Datenspeicher (z.B. Datenbank) zu löschen. Falls der Lehrbeauftragte bereits für Lehrveranstaltungen eingetragen ist, wird eine Exception geworfen.
AddLVTermin (CString str_LVNummer, CString str_Semester, CString str_Bezeichnung): Diese Methode ordnet dem Lehrbeauftragten einen Lehrveranstaltungstermin zu, der durch das übergebene Tripel von LV-Nummer, Semester und Bezeichnung eindeutig identifiziert ist. Die Methode ruft wiederum listLVTermine.Add (intPersonalnummer, str_LVNummer, str_Semester, str_Bezeichnung) auf. Dort wird sichergestellt, dass keine Mehrfachzuordnung erfolgt.
DeleteLVTermin (int int_IndexLVTermin): Löscht die n-te Zuordnung des Lehrbeauftragten zum angegebenen Termin.
Klasse LVVLehrbeauftragterCollection
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse enthält eine Liste von Lehrbeauftragten. Sie kapselt eine Instanz der MFC-Klasse CTypedPtrList, die ein Array von Pointern verwaltet und es mittels des Template-Mechanismus erlaubt, sämtliche Methodendeklarationen typsicher zu gestalten. Sie ist nicht von dieser Klasse abgeleitet, da die meisten der Methoden von CTypedPtrList nicht in dieser Klasse benötigt werden.
Die Membervariablen sind:
listLehrbeauftragte: Dies ist die Instanz von CTypedPtrList, in der die einzelnen Objekte vom Typ LVVLehrbeauftragter gespeichert werden. Alle Methoden der Klasse manipulieren diese Liste.
Die Funktionen sind:
Load: Statt den Standard-MFC-Serialisierungsmechanismus zu verwenden, erfolgen Laden und Speichern manuell z.B. in einer Datenbank. Es werden nacheinander alle Lehrbeauftragten geladen (Objekte vom Typ LVVLehrbeauftragter werden erzeugt und für jedes wird die Methode Load aufgerufen) und zur listLehrbeauftragte zugefügt.
Save: Diese Methode dient zum Speichern der Daten dieser Collection. Es wird nacheinander für jeden Lehrbeauftragten die Methode Save aufgerufen.
int Add (CString str_Name, CString str_EMail, CString str_Login, CString str_Passwort, int int_Personalnummer, bool bol_Administrator): Diese Methode erzeugt einen Lehrbeauftragten aus den übergebenen Daten und fügt ihn an die Liste an. Bevor dies geschieht, wird geprüft, ob die Personalnummer oder der Login schon in einem anderen Lehrbeauftragten vorkommt oder ob der Login bei einem Studenten bereits vorkommt. Falls ja, wird eine Exception ausgelöst, da die Personalnummer genau einen Lehrbeauftragten und der Login genau einen Studenten oder Lehrbeauftragten eindeutig identifizieren. Rückgabe ist der Index des so zugefügten Objekts.
const LVVLehrbeauftragter * GetLehrbeauftragerAt (int int_Index) const: Diese konstante Methode liefert das LVVLehrbeauftragter-Objekt an der Stelle x innerhalb der Liste zurück. Es wird ein Pointer auf den Original-Lehrbeauftragten zurückgeliefert, allerdings ist dieses Objekt ein const-Pointer, so dass es nicht möglich ist, den auf diese Weise erhaltenen Lehrbeauftragten zu ändern und dadurch ohne Kenntnis der Collection deren Inhalt zu ändern.
int GetCount() const: Diese konstante Methode liefert die Anzahl der Datensätze in der Collection zurück.
int GetIndexOfPersonalnummer (int int_Personalnummer): Diese Methode liefert den Index des Lehrbeauftragten mit der übergebenen Personalnummer. Falls die Personalnummer nicht gefunden wird, wird -1 zurückgegeben.
DeleteAt (int int_Index): Diese Methode löscht den Lehrbeauftragten an Stelle x. Er wird aus der internen Liste entfernt, außerdem wird die Methode Delete von LVVLehrbeauftragter aufgerufen, dadurch kann er aus dem zugrundeliegenden Datenspeicher entfernt werden.
Die Collection enthält außerdem diverse Funktionen für die Manipulation eines einzelnen Objekts LVVLehrbeauftragter (Hinweis: um die Methodenanzahl nicht zu groß werden zu lassen, werden hier nur Set-Methoden beschrieben. Get-Methoden für den Zugriff auf ein Feld des n-ten Lehrbeauftragten wären zwar ebenfalls sinnvoll, sind aber über Aufruf von GetLehrbeauftragerAt() und anschließendem Aufruf der Get-Methode des zurückgegebenen Objekts realisierbar, d.h. hier würde man nur Code verdoppeln)
SetName (int int_Index, CString str_Name): Setzen des Namens des Lehrbeauftragten an Stelle int_Index.
SetEMail (int int_Index, CString str_EMail): Setzen der Mailadresse des Lehrbeauftragten an Stelle int_Index.
SetLogin (int int_Index, CString str_Login): Setzen des Logins des Lehrbeauftragten an Stelle int_Index. Diese Methode prüft, ob der Login bereits bei einem anderen Lehrbeauftragten vorhanden ist und wirft in diesem Fall eine Exception. Die Instanz von LVVLehrbeauftragter prüft, ob der Login gültig ist (kein Leerstring).
SetPasswort (int int_Index, CString str_Passwort): Setzen des Passworts des Lehrbeauftragten an Stelle int_Index. Die Instanz von LVVLehrbeauftragter prüft, ob das Passwort gültig ist (kein Leerstring).
SetPersonalnummer (int int_Index, long int lng_Personalnummer): Setzen der Personalnummer des Lehrbeauftragten an Stelle int_Index. Die Methode löst eine Exception aus, falls die Personalnummer bereits bei einem anderen Lehrbeauftragten vorkommt.
SetAdministrator (int int_Index, bool bol_Administrator): Setzen des Administratorrechts des Lehrbeauftragten an Stelle int_Index.
AddLVTermin (int int_Personalnummer, CString str_LVNummer, CString str_Semester, CString str_Bezeichnung): Diese Methode ordnet dem Lehrbeauftragten mit der übergebenen Personalnummer einen Lehrveranstaltungstermin zu, der durch das übergebene Tripel von LV-Nummer, Semester und Bezeichnung eindeutig identifiziert ist. Die Methode sucht den Lehrbeauftragten (erzeugt eine Exception, falls nicht gefunden) und ruft für diesen die Methode AddLVTermin (str_LVNummer, str_Semester, str_Bezeichnung) auf.
DeleteLVTermin (int int_IndexLehrbeauftragter, int int_IndexLVTermin): Löscht die Zuordnung zu einem LV-Termin an Stelle int_IndexLVTermin des Lehrbeauftragten an Stelle int_IndexLehrbeauftragter. Es wird DeleteLVTermin (int_IndexLVTermin) des Lehrbeauftragten aufgerufen.
Klasse LVVLVTermin2Lehrbeauftragter
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse bildet die Zuordnung eines Lehrveranstaltungstermins zu einem Lehrbeauftragten ab. Dies geschieht durch die Schlüsseldaten der beiden Objekte: Ein Lehrbeauftragter hat eine eindeutige Personalnummer, der Lehrveranstaltungstermin ist durch LV-Nummer, Semester und Gruppenbezeichnung eindeutig identifizierbar.
Attribute:
intPersonalnummer: Personalnummer des Lehrbeauftragten
strLVNummer: Die Lehrveranstaltungsnummer, als String.
strSemester: Das Semester, in der Form WS2003 oder SS2004.
strTerminBezeichnung: Die Bezeichnung des Termins, also z.B. Gruppe a.
Memberfunktionen:
long int GetPersonalnummer() const: Diese konstante Funktion liefert die Personalnummer zurück.
SetPersonalnummer (long int lng_Personalnummer): Setzen der Personalnummer des Lehrbeauftragten.
CString GetLVNummer() const: Diese konstante Funktion liefert die Lehrveranstaltungsnummer zurück.
SetLVNummer (CString str_LVNummer): Setzen der Lehrveranstaltungsnummer des LV-Termins.
CString GetSemester() const: Diese konstante Funktion liefert die Semesterbezeichnung zurück.
SetSemester (CString str_Semester): Setzen der Semesterbezeichnung des LV-Termins.
CString GetTerminBezeichnung() const: Diese konstante Funktion liefert die LV-Termin-Bezeichnung zurück.
SetTerminBezeichnung (CString str_TerminBezeichnung): Setzen der Bezeichnung des LV-Termins.
Load: Laden dieser Zuordnung aus dem zugrundeliegenden Datenspeicher.
Save: Speichern dieser Zuordnung in den zugrundeliegenden Datenspeicher.
Delete: Diese Funktion dient zum Löschen der Zuordnung aus dem zugrundeliegenden Datenspeicher.
const LVVLehrveranstaltungsTermin *GetLehrveranstaltung() const: Diese konstante Methode liefert den (ebenfalls konstanten) Zeiger auf den Lehrveranstaltungstermin dieser Zuordnung zurück. Der Termin wird aus den globalen Lehrveranstaltungen geholt, und nicht permanent in dieser Klasse gespeichert. Dies wäre allerdings ebenfalls möglich.
const LVVLehrbeauftragter *GetLehrbeauftragter() const: Diese konstante Methode liefert den (ebenfalls konstanten) Zeiger auf den Lehrbeauftragten dieser Zuordnung zurück. Der Lehrbeauftragte wird aus den globalen Lehrbeauftragten geholt, und nicht permanent in dieser Klasse gespeichert. Dies wäre allerdings ebenfalls möglich.
Klasse LVVLVTermin2LehrbeauftragterCollection
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse enthält eine Liste von Instanzen von LVVLVTermin2Lehrbeauftragter. Sie kapselt eine Instanz der MFC-Klasse CTypedPtrList, die ein Array von Pointern verwaltet und es mittels des Template-Mechanismus erlaubt, sämtliche Methodendeklarationen typsicher zu gestalten.
Die Membervariablen sind:
listLVTermin2Lehrbeauftragter: Dies ist die Instanz von CTypedPtrList, in der die einzelnen Objekte vom Typ LVVLVTermin2Lehrbeauftragter gespeichert werden. Alle Methoden der Klasse manipulieren diese Liste.
Die Funktionen sind:
Load: Statt den Standard-MFC-Serialisierungsmechanismus zu verwenden, erfolgen Laden und Speichern manuell z.B. in einer Datenbank. Es werden nacheinander alle Zuordnungen geladen (Objekte vom Typ LVVLVTermin2Lehrbeauftragter werden erzeugt und für jedes wird die Methode Load aufgerufen) und zur listLVTermin2Lehrbeauftragter zugefügt.
Save: Diese Methode dient zum Speichern der Daten dieser Collection. Es wird nacheinander für jedes Datenobjekt die Methode Save aufgerufen.
int Add (int int_Personalnummer, CString str_LVNummer, CString str_Semester, CString str_Bezeichnung): Diese Methode erzeugt eine Zuordnung aus den übergebenen Daten und fügt sie an die Liste an. Bevor dies geschieht, wird geprüft, ob eine solche Zuordnung bereits existiert (ob einem Lehrbeauftragten bereits dieser Lehrveranstaltungstermin zugeordnet wurde. Falls ja, wird eine Exception ausgelöst. Rückgabe ist der Index des so an die Liste angehängten Objekts.
const LVVLVTermin2Lehrbeauftragter * GetLVTermin2LehrbeauftragterAt (int int_Index) const: Diese konstante Methode liefert das LVVLVTermin2Lehrbeauftragter-Objekt an der Stelle x innerhalb der Liste zurück. Es wird ein Pointer auf das Original-Objekt zurückgeliefert, allerdings ist dieses Objekt ein const-Pointer, so dass es nicht möglich ist, den auf diese Weise erhaltenen Datensatz zu ändern und dadurch ohne Kenntnis der Collection deren Inhalt zu ändern.
int GetCount() const: Diese konstante Methode liefert die Anzahl der Datensätze in der Collection zurück.
int GetIndexOfDatensatz (int int_Personalnummer, CString str_LVNummer, CString str_Semester, CString str_Bezeichnung): Diese Methode liefert den Index der Zuordnung eines bestimmten Lehrbeauftragtem zu einem bestimmten LV-Termin zurück. Falls es diese Zuordnung nicht in der Collection gibt, wird -1 zurückgegeben.
DeleteAt (int int_Index): Diese Methode löscht die Zuordnung an Stelle x. Er wird aus der internen Liste entfernt, außerdem wird die Methode Delete von LVVLVTermin2Lehrbeauftragter aufgerufen, dadurch kann er aus dem zugrundeliegenden Datenspeicher entfernt werden.
Die Collection enthält außerdem diverse Funktionen für die Manipulation eines einzelnen Objekts LVVLVTermin2Lehrbeauftragter.
Die SetXXX-Methoden zum Setzen eines Werts im n-ten Objekt LVVLVTermin2Lehrbeauftragter werden hier nicht mehr weiter dokumentiert, da sie den Set-Methoden eines Objekts LVVLVTermin2Lehrbeauftragter entsprechen und nach dem selben Verfahren funktionieren wie in der Klasse LVVLehrbeauftragterCollection.
Meine Faulheit
nicht als Beispiel nehmen ! Die Doku des
fertigen Projekts sollte solche Vereinfachungen nicht enthalten.
Jede Methode jeder Klasse muss dokumentiert werden, auch wenn es
sich auf Copy&Paste beschränkt.
Klasse LVVStudent
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse bildet einen Studenten ab. Ein Student ist eine Person, d.h. er erbt die Attribute Name, Mailadresse, Login und Passwort von der Klasse LVVPerson.
Weitere Attribute sind:
lngMatrikelnummer: Die Matrikelnummer des Studenten, die ihn eindeutig identifiziert. Es muss sich um eine long int handeln, weil Matrikelnummern sechsstellig sind.
strEinstiegssemester: Das Einstiegssemester des Studenten in der Form WS2003 oder SS2004 (also zwei Buchstaben für Sommer-/Wintersemester, dann die vier Ziffern des Jahres).
listLVTermine: Eine Liste von Objekten LVVLVTermin2Student, die angeben, welche Lehrveranstaltungstermine der Student belegt hat.
Die Methoden sind:
Konstruktor: Initialisiert alle Felder, die Matrikelnummer wird auf 0 gesetzt.
Kopierkonstruktor: Erzeugt eine komplette Kopie dieses Studenten, einschließlich der anhängenden Lehrveranstaltungstermine.
long int GetMatrikelnummer () const: Konstante Funktion zum Abrufen der Matrikelnummer des Studenten.
SetMatrikelnummer (long int lng_Matrikelnummer): Setzen der Matrikelnummer des Studenten.
const LVVLVTermin2StudentCollection * GetLVTerminZuordnungen() const: Konstante Funktion. Diese Methode liefert eine (als konstant deklarierte) Liste mit den Zuordnungen der Lehrveranstaltungstermine, die der Student belegt hat (entspricht der Membervariablen listLVTermine).
Load: Diese Methode übernimmt das Laden des
Studenten. Sie ersetzt den Standard-MFC-Mechanismus der
Serialisierung, da die Datenspeicherung nicht in einer Binärdatei
erfolgt.
Beim Laden werden außerdem die
Lehrveranstaltungstermin-Zuordnungen des Studenten (Membervariable
listLVTermine) eingelesen.
Save: Durch Aufruf dieser Methode werden die Daten des Studenten gespeichert. Außerdem werden die Lehrveranstaltungszuordnungen aus der Membervariablen listLVTermine gespeichert.
Delete (): Diese Methode dient dazu, den Studenten aus dem zugrundeliegenden Datenspeicher (z.B. Datenbank) zu löschen. Falls der Student bereits Lehrveranstaltungen belegt hat, wird eine Exception geworfen.
AddLVTermin (CString str_LVNummer, CString str_Semester, CString str_Bezeichnung): Diese Methode ordnet dem Studenten einen Lehrveranstaltungstermin zu, der durch das übergebene Tripel von LV-Nummer, Semester und Bezeichnung eindeutig identifiziert ist. Die Methode ruft wiederum listLVTermine.Add (lngMatrikelnummer, str_LVNummer, str_Semester, str_Bezeichnung) auf. Dort wird sichergestellt, dass keine Mehrfachzuordnung erfolgt.
DeleteLVTermin (int int_IndexLVTermin): Löscht die n-te Zuordnung des Studenten zum angegebenen Termin.
Klasse LVVStudentCollection
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse enthält eine Liste von Studenten. Sie kapselt eine Instanz der MFC-Klasse CTypedPtrList, die ein Array von Pointern verwaltet und es mittels des Template-Mechanismus erlaubt, sämtliche Methodendeklarationen typsicher zu gestalten. Sie ist nicht von dieser Klasse abgeleitet, da die meisten der Methoden von CTypedPtrList nicht in dieser Klasse benötigt werden.
Die Membervariablen sind:
listStudenten: Dies ist die Instanz von CTypedPtrList, in der die einzelnen Objekte vom Typ LVVStudenten gespeichert werden. Alle Methoden der Klasse manipulieren diese Liste.
Die Funktionen sind:
Load: Statt den Standard-MFC-Serialisierungsmechanismus zu verwenden, erfolgen Laden und Speichern manuell z.B. in einer Datenbank. Es werden nacheinander alle Zuordnungen geladen (Objekte vom Typ LVVStudent werden erzeugt und für jedes wird die Methode Load aufgerufen) und zur listStudent zugefügt.
Save: Diese Methode dient zum Speichern der Daten dieser Collection. Es wird nacheinander für jeden Studenten die Methode Save aufgerufen.
int Add (CString str_Name, CString str_EMail, CString str_Login, CString str_Passwort, long lng_Matrikelnummer, CString str_Einstiegssemester): Diese Methode erzeugt ein LVVStudent-Objekt aus den übergebenen Daten und fügt es an die Liste an. Bevor dies geschieht, wird geprüft, ob ein anderer Student bereits diese Matrikelnummer hat oder ob der Login an einen anderen Student oder einen anderen Lehrbeauftragten vergeben ist. Falls ja, wird eine Exception ausgelöst. Rückgabe ist der Index des so an die Liste angehängten Objekts.
const LVVStudent * GetStudentAt (int int_Index) const: Diese konstante Methode liefert das LVVStudent-Objekt an der Stelle x innerhalb der Liste zurück. Es wird ein Pointer auf das Original-Objekt zurückgeliefert, allerdings ist dieses Objekt ein const-Pointer, so dass es nicht möglich ist, den auf diese Weise erhaltenen Datensatz zu ändern und dadurch ohne Kenntnis der Collection deren Inhalt zu ändern.
int GetCount() const: Diese konstante Methode liefert die Anzahl der Datensätze in der Collection zurück.
int GetIndexOfDatensatz (long int lng_Matrikelnummer): Diese Methode liefert den Index des LVVStudent-Objekts mit der übergebenen Matrikelnummer zurück. Falls es diese Matrikelnummer nicht in der Collection gibt, wird -1 zurückgegeben.
DeleteAt (int int_Index): Diese Methode löscht den Studenten an Stelle x. Er wird aus der internen Liste entfernt, außerdem wird die Methode Delete von LVVStudent aufgerufen, dadurch kann er aus dem zugrundeliegenden Datenspeicher entfernt werden.
Die Collection enthält außerdem diverse Funktionen für die Manipulation eines einzelnen Objekts LVVStudent.
Die SetXXX-Methoden zum Setzen eines Werts im n-ten Objekt LVVStudent werden hier nicht mehr weiter dokumentiert, da sie den Set-Methoden eines Objekts LVVStudent entsprechen und nach dem selben Verfahren funktionieren wie in der Klasse LVVLehrbeauftragterCollection.
AddLVTermin (long int lng_Matrikelnummer, CString str_LVNummer, CString str_Semester, CString str_Bezeichnung): Diese Methode ordnet dem Studenten mit der übergebenen Matrikelnummer einen Lehrveranstaltungstermin zu, der durch das übergebene Tripel von LV-Nummer, Semester und Bezeichnung eindeutig identifiziert ist. Die Methode sucht den Studenten (erzeugt eine Exception, falls nicht gefunden) und ruft für diesen die Methode AddLVTermin (str_LVNummer, str_Semester, str_Bezeichnung) auf.
DeleteLVTermin (int int_IndexStudent, int int_IndexLVTermin): Löscht die Zuordnung zu einem LV-Termin an Stelle int_IndexLVTermin des Studenten an Stelle int_IndexStudent. Es wird DeleteLVTermin (int_IndexLVTermin) des Studenten aufgerufen.
Klasse LVVLVTermin2Student
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse bildet die Zuordnung eines Lehrveranstaltungstermins zu einem Studenten ab. Dies geschieht durch die Schlüsseldaten der beiden Objekte: Ein Student hat eine eindeutige Matrikelnummer, der Lehrveranstaltungstermin ist durch LV-Nummer, Semester und Gruppenbezeichnung eindeutig identifizierbar.
Attribute:
lngMatrikelnummer: Matrikelnummer des Studenten
strLVNummer: Die Lehrveranstaltungsnummer, als String.
strSemester: Das Semester, in der Form WS2003 oder SS2004.
strTerminBezeichnung: Die Bezeichnung des Termins, also z.B. Gruppe a.
Memberfunktionen:
long int GetMatrikelnummer() const: Diese konstante Funktion liefert die Matrikelnummer zurück.
SetMatrikelnummer (long int lng_Matrikelnummer): Setzen der Matrikelnummer des Studenten.
CString GetLVNummer() const: Diese konstante Funktion liefert die Lehrveranstaltungsnummer zurück.
SetLVNummer (CString str_LVNummer): Setzen der Lehrveranstaltungsnummer des LV-Termins.
CString GetSemester() const: Diese konstante Funktion liefert die Semesterbezeichnung zurück.
SetSemester (CString str_Semester): Setzen der Semesterbezeichnung des LV-Termins.
CString GetTerminBezeichnung() const: Diese konstante Funktion liefert die LV-Termin-Bezeichnung zurück.
SetTerminBezeichnung (CString str_TerminBezeichnung): Setzen der Bezeichnung des LV-Termins.
Load: Laden dieser Zuordnung aus dem zugrundeliegenden Datenspeicher.
Save: Speichern dieser Zuordnung in den zugrundeliegenden Datenspeicher.
Delete: Diese Funktion dient zum Löschen der Zuordnung aus dem zugrundeliegenden Datenspeicher.
const LVVLehrveranstaltungsTermin *GetLehrveranstaltung() const: Diese konstante Methode liefert den (ebenfalls konstanten) Zeiger auf den Lehrveranstaltungstermin dieser Zuordnung zurück. Der Termin wird aus den globalen Lehrveranstaltungen geholt, und nicht permanent in dieser Klasse gespeichert. Dies wäre allerdings ebenfalls möglich.
const LVVStudent *GetStudent() const: Diese konstante Methode liefert den (ebenfalls konstanten) Zeiger auf den Studenten dieser Zuordnung zurück. Der Student wird aus den globalen Lehrbeauftragten geholt, und nicht permanent in dieser Klasse gespeichert. Dies wäre allerdings ebenfalls möglich.
Klasse LVVLVTermin2StudentCollection
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse enthält eine Liste von Instanzen von LVVLVTermin2Student. Sie kapselt eine Instanz der MFC-Klasse CTypedPtrList, die ein Array von Pointern verwaltet und es mittels des Template-Mechanismus erlaubt, sämtliche Methodendeklarationen typsicher zu gestalten.
Die Membervariablen sind:
listLVTermin2Student: Dies ist die Instanz von CTypedPtrList, in der die einzelnen Objekte vom Typ LVVLVTermin2Student gespeichert werden. Alle Methoden der Klasse manipulieren diese Liste.
Die Funktionen sind:
Load: Laden der Zuordnungen aus dem Datenspeicher. Es werden nacheinander alle Zuordnungen geladen (Objekte vom Typ LVVLVTermin2Student werden erzeugt und für jedes wird die Methode Load aufgerufen) und zur listLVTermin2Student zugefügt.
Save: Diese Methode dient zum Speichern der Daten dieser Collection. Es wird nacheinander für jedes Datenobjekt die Methode Save aufgerufen.
int Add (long int lng_Matrikelnummer, CString str_LVNummer, CString str_Semester, CString str_Bezeichnung): Diese Methode erzeugt eine Zuordnung aus den übergebenen Daten und fügt sie an die Liste an. Bevor dies geschieht, wird geprüft, ob eine solche Zuordnung bereits existiert (ob diesem Studenten bereits dieser Lehrveranstaltungstermin zugeordnet wurde. Falls ja, wird eine Exception ausgelöst. Rückgabe ist der Index des so an die Liste angehängten Objekts.
const LVVLVTermin2Student * GetLVTermin2StudentAt (int int_Index) const: Diese konstante Methode liefert das LVVLVTermin2Student-Objekt an der Stelle x innerhalb der Liste zurück. Es wird ein Pointer auf das Original-Objekt zurückgeliefert, allerdings ist dieses Objekt ein const-Pointer, so dass es nicht möglich ist, den auf diese Weise erhaltenen Datensatz zu ändern und dadurch ohne Kenntnis der Collection deren Inhalt zu ändern.
int GetCount() const: Diese konstante Methode liefert die Anzahl der Datensätze in der Collection zurück.
int GetIndexOfDatensatz (long int lng_Matrikelnummer, CString str_LVNummer, CString str_Semester, CString str_Bezeichnung): Diese Methode liefert den Index der Zuordnung eines bestimmten Studenten zu einem bestimmten LV-Termin zurück. Falls es diese Zuordnung nicht in der Collection gibt, wird -1 zurückgegeben.
DeleteAt (int int_Index): Diese Methode löscht die Zuordnung an Stelle x. Er wird aus der internen Liste entfernt, außerdem wird die Methode Delete von LVVLVTermin2Student aufgerufen, dadurch kann er aus dem zugrundeliegenden Datenspeicher entfernt werden.
Die Collection enthält außerdem diverse Funktionen für die Manipulation eines einzelnen Objekts LVVLVTermin2Student.
Die SetXXX-Methoden zum Setzen eines Werts im n-ten Objekt LVVLVTermin2Student werden hier nicht mehr weiter dokumentiert, da sie den Set-Methoden eines Objekts LVVLVTermin2Student entsprechen und nach dem selben Verfahren funktionieren wie in der Klasse LVVLehrbeauftragterCollection.
Klasse LVVLehrveranstaltung
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse bildet eine Lehrveranstaltung gemäß Vorlesungsverzeichnis ab. Jede Lehrveranstaltung ist eindeutig identifiziert durch die Lehrveranstaltungs-Nummer.
Die Klasse dient als Einstiegspunkt für alle Zugriffe auf Termine, Abgaben innerhalb Terminen und alle weiteren darin gekapselten Objekte.
Die Membervariablen sind:
strLVNummer: Die Nummer der Lehrveranstaltung. Sie wird als String angegeben, da auch andere Zeichen denkbar wären.
strBezeichnung: Bezeichnung der Lehrveranstaltung.
intWochenstunden: Anzahl der Wochenstunden.
listLVTermine: Diese Liste enthält alle Lehrveranstaltungstermine, die jemals durchgeführt wurden.
Die Memberfunktionen sind:
CString GetLVNummer() const: Diese konstante Funktion liefert die LV-Nummer zurück.
SetLVNummer (CString str_LVNummer): Setzen der LV-Nummer.
CString GetBezeichnung() const: Diese konstante Funktion liefert die Bezeichnung zurück.
SetBezeichnung(CString str_Bezeichnung): Setzen der Bezeichnung.
int GetWochenstunden() const: Diese konstante Funktion liefert die Zahl der Wochenstunden zurück.
SetWochenstunden(int int_Wochenstunden): Setzen der Zahl der Wochenstunden.
Load: Laden dieser Lehrveranstaltung aus dem zugrundeliegenden Datenspeicher. Es werden außerdem die Lehrveranstaltungstermine geladen (und damit deren abhängige Objekte).
Save: Speichern dieser Lehrveranstaltung (und damit der abhängigen Objekte) in den zugrundeliegenden Datenspeicher.
Delete: Diese Funktion dient zum Löschen der Lehrveranstaltung aus dem zugrundeliegenden Datenspeicher. Falls bereits Termine existieren, wird eine Exception geworfen.
Außerdem werden Zugriffe auf die Liste der Lehrveranstaltungstermine von dieser Klasse gekapselt:
const LVVLVTerminCollection *GetLVTermine () const: Diese konstanten Methode liefert einen konstanten Zeiger auf die LV-Termine dieser Lehrveranstaltung zurück, d.h. die so erhaltene LV-Termin-Liste ist nicht modifizierbar.
int AddLVTermin (CString str_LVNummer, CString str_Semester, CString str_Bezeichnung, CTime dat_Beginn, CTime dat_Ende, int int_Wochentag, CTimeSpan time_UhrzeitBeginn, CTimeSpan time_UhrzeitEnde): Hinzufügen eines LV-Termins zur Liste der Termine. Rückgabe ist der Index des neuen Termins innerhalb der Terminliste.
DeleteLVTermin (int int_IndexTermin): Löschen des Termins an der Stelle x aus der Liste der Termine. Ruft die Delete-Methode des Termins auf.
Zur Manipulation der Abgaben innerhalb eines bestimmten LV-Termins gibt es die Funktionen SetAbgabeXXX, AddAbgabe und DeleteAbgabe, die als Parameter den Index einer Abgabe in einem LV-Termin übergeben bekommen und die Aufrufe an diese Abgabe weiterleiten.
Zur Manipulation der Arbeitsgruppen innerhalb der Abgaben gibt es die Methoden SetArbeitsgruppeXXX, AddArbeitsgruppe und DeleteArbeitsgruppe.
Zur Manipulation der Dateiabgaben innerhalb einer Arbeitsgruppe gibt es die Methoden SetDateiabgabeXXX, AddDateiabgabe und DeleteDateiabgabe.
Zur Manipulation der Studenten-Zuordnungen innerhalb der Arbeitsgruppen gibt es die Methoden SetArbeitsgruppeStudentXXX, AddArbeitsgruppeStudent und DeleteArbeitsgruppeStudent.
Klasse LVVLehrveranstaltungCollection
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse enthält eine Liste von Lehrveranstaltungen. Sie kapselt eine Instanz der MFC-Klasse CTypedPtrList, die ein Array von Pointern verwaltet und es mittels des Template-Mechanismus erlaubt, sämtliche Methodendeklarationen typsicher zu gestalten. Sie ist nicht von dieser Klasse abgeleitet, da die meisten der Methoden von CTypedPtrList nicht in dieser Klasse benötigt werden.
Die Membervariablen sind:
listLehrveranstaltung: Dies ist die Instanz von CTypedPtrList, in der die einzelnen Objekte vom Typ LVVLehrveranstaltung gespeichert werden. Alle Methoden der Klasse manipulieren diese Liste.
Die Funktionen sind:
Load: Statt den Standard-MFC-Serialisierungsmechanismus zu verwenden, erfolgen Laden und Speichern manuell z.B. in einer Datenbank. Es werden nacheinander alle Zuordnungen geladen (Objekte vom Typ LVVLehrveranstaltung werden erzeugt und für jedes wird die Methode Load aufgerufen) und zur listLehrveranstaltung zugefügt.
Save: Diese Methode dient zum Speichern der Daten dieser Collection. Es wird nacheinander für jede Lehrveranstaltung die Methode Save aufgerufen.
int Add (CString str_LVNummer, CString str_Bezeichnung, int int_Wochenstunden): Diese Methode erzeugt ein LVVLehrveranstaltung-Objekt aus den übergebenen Daten und fügt es an die Liste an. Bevor dies geschieht, wird geprüft, ob eine andere Lehrveranstaltung bereits diese LV-Nummer hat. Falls ja, wird eine Exception ausgelöst. Rückgabe ist der Index des so an die Liste angehängten Objekts.
const LVVLehrveranstaltung * GetLehrveranstaltungAt (int int_Index) const: Diese konstante Methode liefert das LVVLehrveranstaltung-Objekt an der Stelle x innerhalb der Liste zurück. Es wird ein Pointer auf das Original-Objekt zurückgeliefert, allerdings ist dieses Objekt ein const-Pointer, so dass es nicht möglich ist, den auf diese Weise erhaltenen Datensatz zu ändern und dadurch ohne Kenntnis der Collection deren Inhalt zu ändern.
int GetCount() const: Diese konstante Methode liefert die Anzahl der Datensätze in der Collection zurück.
int GetIndexOfDatensatz (CString str_LVNummer): Diese Methode liefert den Index des LVVLehrveranstaltung-Objekts mit der übergebenen LV-Nummer zurück. Falls es diese LV-Nummer nicht in der Collection gibt, wird -1 zurückgegeben.
DeleteAt (int int_Index): Diese Methode löscht die Lehrveranstaltung an Stelle x. Er wird aus der internen Liste entfernt, außerdem wird die Methode Delete von LVVLehrveranstaltung aufgerufen, dadurch kann er aus dem zugrundeliegenden Datenspeicher entfernt werden.
Die Collection enthält außerdem diverse Funktionen für die Manipulation eines einzelnen Objekts LVVLehrveranstaltung.
Die SetXXX-Methoden zum Setzen eines Werts im n-ten Objekt LVVLehrveranstaltung werden hier nicht mehr weiter dokumentiert, da sie den Set-Methoden eines Objekts LVVLehrveranstaltung entsprechen und nach dem selben Verfahren funktionieren wie in der Klasse LVVLehrveranstaltungCollection.
AddLVTermin (int int_IndexLehrveranstaltung, ...............): Diese Methode fügt der Lehrveranstaltung an Stelle x einen Lehrveranstaltungstermin mit den übergebenen Daten zu. Die Methode sucht die Lehrveranstaltung (erzeugt eine Exception, falls nicht gefunden) und ruft für diese die Methode AddLVTermin (.....) auf.
DeleteLVTermin (int int_IndexLehrveranstaltung, int int_IndexTermin): Die Methode sucht die Lehrveranstaltung an Stelle int_IndexLehrveranstaltung (erzeugt Exception, falls nicht gefunden) und ruft für diese die Methode DeleteLVTermin (int_IndexTermin) auf.
Die Set-Methoden für die Felder eines LV-Termins müssen als SetLVTerminXXX ebenfalls angeboten werden, jeweils mit dem Index der Lehrveranstaltung und dem Index des LV-Termins als Parameter. In diesen Methoden erfolgt keine weitere Prüfung, dies geschieht erst in der LV-Termin-Liste der Subklasse.
int AddStudentZuordnung (int int_IndexLV, int int_IndexLVTermin, long int lng_Matrikelnummer): Hinzufügen eines Studenten zur Teilnehmerliste des Termins an Stelle int_IndexLVTermin in der Lehrveranstaltung int_IndexLV. Die Methode ruft AddStudentZuordnung (lng_Matrikelnummer) für den LV-Termin auf.
DeleteStudentZuordnung (int int_IndexLV, int int_IndexLVTermin, int int_IndexZuordnung): Löschen der Studentenzuordnung an der Stelle int_IndexZuordnung aus der Liste der Studentenzuordnungen des LV-Termins an Stelle int_IndexLVTermin in der Lehrveranstaltung int_IndexLV. Da der Student aus der Lehrveranstaltung entfernt wird, wird er außerdem aus allen Abgaben gelöscht (siehe Methode DeleteArbeitsgruppeStudent). Falls dadurch eine leere Arbeitsgruppe entsteht, wird auch diese gelöscht (siehe DeleteArbeitsgruppe).
Zur Manipulation der Abgaben innerhalb eines bestimmten LV-Termins gibt es die Funktionen SetAbgabeXXX, AddAbgabe und DeleteAbgabe, die als Parameter den Index einer Abgabe in einem LV-Termin übergeben bekommen und die Aufrufe an diese Abgabe weiterleiten.
Zur Manipulation der Arbeitsgruppen innerhalb der Abgaben gibt es die Methoden SetArbeitsgruppeXXX, AddArbeitsgruppe und DeleteArbeitsgruppe.
Zur Manipulation der Dateiabgaben innerhalb einer Arbeitsgruppe gibt es die Methoden SetDateiabgabeXXX, AddDateiabgabe und DeleteDateiabgabe.
Zur Manipulation der Studenten-Zuordnungen innerhalb der Arbeitsgruppen gibt es die Methoden SetArbeitsgruppeStudentXXX, AddArbeitsgruppeStudent und DeleteArbeitsgruppeStudent.
Klasse LVVLVTermin
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse bildet einen Lehrveranstaltungstermin ab. Jeder Termin ist eindeutig identifiziert durch die Lehrveranstaltungs-Nummer, das Semester und die Bezeichnung.
An dieser Klasse hängen die Abgaben innerhalb des Termins, darin wiederum die Arbeitsgruppen und alle weiteren darin gekapselten Objekte.
Die Membervariablen sind:
strLVNummer: Die Nummer der Lehrveranstaltung. Sie wird als String angegeben, da auch andere Zeichen denkbar wären.
strSemester: Kürzel des Semesters der Veranstaltung, also z.B. WS2004 oder SS2002.
strBezeichnung: Bezeichnung der Lehrveranstaltung.
datBeginn: An diesem Datum beginnt die Lehrveranstaltung.
datEnde: An diesem Datum endet die Lehrveranstaltung.
intWochentag: An diesem Wochentag findet die Veranstaltung statt. Die Wochentage werden von 0 (Montag) bis 6 (Sonntag) durchnummeriert.
timeUhrzeitBeginn: Am angegebenen Wochentag beginnt die Veranstaltung zu dieser Uhrzeit.
timeUhrzeitEnde: Die Veranstaltung endet zu dieser Uhrzeit.
bolAktiv: Wurde diese Veranstaltung aktiviert, d.h. für die Durchführung durch den Lehrbeauftragten freigegeben ?
bolDurchgefuehrt: Nachdem der Lehrbeauftragte die Veranstaltung durchgeführt hat und alle Noten feststehen, wird vom Durchführenden dieses Flag auf TRUE gesetzt.
listAbgaben: Diese Liste enthält alle Abgaben der Veranstaltung.
listStudent: Diese Liste enthält die Studenten der Veranstaltung (Instanz von LVVLVTermin2StudentCollection). Wichtig: Diese Daten sind bereits im Student enthalten, wenn auch in einer anderen Gruppierung. Aus diesem Grund wird diese Liste nicht im Datenmodell gespeichert, sondern aus der Liste der Studenten erzeugt (indem die Studenten durchlaufen werden und für jeden Student geprüft wird, ob er diese Veranstaltung belegt hat). Entsprechend wird diese Liste beim Speichern oder Laden nicht berührt. Nur beim Löschen dieses Termins muss die Zuordnung aus den Studenten entfernt werden (über die LVVStudentCollection). Die Liste wird beim ersten Abrufen über die Methode GetStudentZuordnungen eingelesen.
lehrbeauftragter: In dieser Variablen wird der durchführende Lehrbeauftragte gespeichert. Die Zuordnung wird beim Lehrbeauftragten gespeichert, d.h. hier wird nur ein Abbild der Lehrbeauftragten-Zuordnung abgelegt, auch das Ändern des zugeordneten Lehrbeauftragten kann nur über das LVVLehrbeauftragter-Objekt erfolgen.
Die Memberfunktionen sind:
Zugriff auf die einzelnen Felder (GetXXX/SetXXX): Soweit hier keine Besonderheiten gelten, gilt das selbe Prinzip wie in der Klasse LVVStudent. Im folgenden werden nur die Set-Methode beschrieben, bei denen z.B. unter bestimmten Umständen Exceptions geworfen werden.
In den Methoden SetBeginn, SetEnde, SetWochentag, SetUhrzeitBeginn und SetUhrzeitEnde wird eine Exception ausgelöst, wenn die Veranstaltung bereits durchgeführt wurde.
SetAktiv(bool bol_Aktiv): Hat bol_Aktiv den Wert FALSE (zurücksetzen des Aktiv-Werts) und wurden zur Veranstaltung bereits Abgaben erfaßt, dann müssen diese zuerst gelöscht werden.
SetDurchgefuehrt (bool bol_Durchgefuehrt): Wurde die Veranstaltung noch nicht aktiviert, oder sind keine Abgaben erfaßt oder sind keine Studenten zugeordnet, kann dieser Wert nicht auf TRUE gesetzt werden.
Load: Laden dieses Termins aus dem zugrundeliegenden Datenspeicher. Es werden außerdem die Abgaben geladen (und damit deren abhängige Objekte). Die Studenten-Liste wird nicht beim Termin gespeichert.
Save: Speichern dieses Termins (und damit der abhängigen Objekte) in den zugrundeliegenden Datenspeicher. Die Studenten-Liste wird nicht beim Termin gespeichert.
Delete: Diese Funktion dient zum Löschen des Termins aus dem zugrundeliegenden Datenspeicher. Falls bereits Abgaben existieren, wird eine Exception geworfen. Zum Entfernen der Studenten-Zuordnungen wird die Studentenliste dieser Klasse durchlaufen und die Zuordnung aus jedem Studenten entfernt (über die globale LVVStudentCollection).
Außerdem werden Zugriffe auf die Liste der Abgaben von dieser Klasse gekapselt:
const LVVAbgabeCollection *GetAbgaben() const: Diese konstanten Methode liefert einen konstanten Zeiger auf die Abgaben dieses LV-Termins zurück, d.h. die so erhaltene Abgaben-Liste ist nicht modifizierbar.
int AddAbgabe (CString str_Bezeichnung, int int_Maximalpunktzahl): Hinzufügen einer Abgabe zur Liste der Abgaben. Rückgabe ist der Index der neuen Abgabe innerhalb der Abgabenliste.
DeleteAbgabe (int int_IndexAbgabe): Löschen der Abgabe an der Stelle x aus der Liste der Abgaben. Ruft die Delete-Methode der Abgabe auf.
const LVVLVTermin2StudentCollection *GetStudentZuordnungen() const: Diese konstanten Methode liefert einen konstanten Zeiger auf die Studenten-Zuordnungen dieses LV-Termins zurück, d.h. die so erhaltene Liste ist nicht modifizierbar. Zum Ermitteln der Daten siehe Membervariable listStudent.
int AddStudentZuordnung (long int lng_Matrikelnummer): Hinzufügen eines Studenten zur Teilnehmerliste dieses Termins. Methode sucht den Studenten in den globalen Daten und ruft für diesen die Methode AddLVTermin () auf. Rückgabe ist der Index der neuen Zuordnung innerhalb der Studentenzuordnungsliste (die Liste muss neu errrechnet werden und der Index gesucht werden, da die Liste nur ein Abbild der Zuordnungsliste im Student ist).
DeleteStudentZuordnung (int int_IndexZuordnung): Löschen der Studentenzuordnung an der Stelle x aus der Liste der Studentenzuordnungen. Methode sucht den Studenten in den globalen Daten und ruft für diesen die Methode DeleteLVTerminZuordnung() auf. Falls der Student den Termin nicht belegt hat, wird eine Exception ausgelöst. Die interne Studentenliste muss nach dem Löschen neu ermittelt werden, da sie nur ein Abbild der Liste im Studenten ist.
const LVVLVTermin2Lehrbeauftragter *GetLehrbeauftragterZuordnung() const: Diese konstanten Methode liefert einen konstanten Zeiger auf die Lehrbeauftragter-Zuordnung dieses LV-Termins zurück, d.h. das so erhaltene Objekt ist nicht modifizierbar. Zum Ermitteln der Daten siehe Membervariable lehrbeauftragter. Ein Setzen erfolgt nicht über diese Klasse, sondern direkt im Lehrbeauftragten.
Zur Manipulation der Abgaben innerhalb des LV-Termins gibt es die Funktionen SetAbgabeXXX, AddAbgabe und DeleteAbgabe, die als Parameter den Index einer Abgabe übergeben bekommen und die Aufrufe an diese Abgabe weiterleiten.
Zur Manipulation der Arbeitsgruppen innerhalb der Abgaben gibt es die Methoden SetArbeitsgruppeXXX, AddArbeitsgruppe und DeleteArbeitsgruppe.
Zur Manipulation der Dateiabgaben innerhalb einer Arbeitsgruppe gibt es die Methoden SetDateiabgabeXXX, AddDateiabgabe und DeleteDateiabgabe.
Zur Manipulation der Studenten-Zuordnungen innerhalb der Arbeitsgruppen gibt es die Methoden SetArbeitsgruppeStudentXXX, AddArbeitsgruppeStudent und DeleteArbeitsgruppeStudent.
Klasse LVVLVTerminCollection
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse enthält eine Liste von LV-Terminen. Diese Liste wird pro Lehrveranstaltung verwaltet. Sie kapselt eine Instanz der MFC-Klasse CTypedPtrList, die ein Array von Pointern verwaltet und es mittels des Template-Mechanismus erlaubt, sämtliche Methodendeklarationen typsicher zu gestalten. Sie ist nicht von dieser Klasse abgeleitet, da die meisten der Methoden von CTypedPtrList nicht in dieser Klasse benötigt werden.
Die Membervariablen sind:
listLVTermine: Dies ist die Instanz von CTypedPtrList, in der die einzelnen Objekte vom Typ LVVLVTermin gespeichert werden. Alle Methoden der Klasse manipulieren diese Liste.
Die Funktionen sind:
Load: Statt den Standard-MFC-Serialisierungsmechanismus zu verwenden, erfolgen Laden und Speichern manuell z.B. in einer Datenbank. Es werden nacheinander alle Zuordnungen geladen (Objekte vom Typ LVVLVTermin werden erzeugt und für jedes wird die Methode Load aufgerufen) und zur listLVTermine zugefügt.
Save: Diese Methode dient zum Speichern der Daten dieser Collection. Es wird nacheinander für jeden LV-Termin die Methode Save aufgerufen.
int Add (CString str_LVNummer, CString str_Semester, CString str_Bezeichnung, CTime dat_Beginn, CTime dat_Ende, int int_Wochentag, CTimeSpan time_UhrzeitBeginn, CTimeSpan time_UhrzeitEnde): Diese Methode erzeugt ein LVVLVTermin-Objekt aus den übergebenen Daten und fügt es an die Liste an. Bevor dies geschieht, wird geprüft, ob ein anderer Termin im übergebenen Semester bereits die gewünschte Bezeichnung trägt. Falls ja, wird eine Exception ausgelöst. Termin-Daten wie Aktiv oder Durchgeführt werden erst später gesetzt (es macht keinen Sinn, einen Termin direkt zu aktivieren, ohne zuerst die Studenten zuzuordnen). Rückgabe ist der Index des so an die Liste angehängten Objekts.
const LVVLVTermin * GetLVTerminAt (int int_Index) const: Diese konstante Methode liefert das LVVLVTermin-Objekt an der Stelle x innerhalb der Liste zurück. Es wird ein Pointer auf das Original-Objekt zurückgeliefert, allerdings ist dieses Objekt ein const-Pointer, so dass es nicht möglich ist, den auf diese Weise erhaltenen Datensatz zu ändern und dadurch ohne Kenntnis der Collection deren Inhalt zu ändern.
int GetCount() const: Diese konstante Methode liefert die Anzahl der Datensätze in der Collection zurück.
int GetIndexOfDatensatz (CString str_LVNummer, CString str_Semester, CString str_Bezeichnung): Diese Methode liefert den Index des LVVLVTermin-Objekts mit den übergebenen Daten zurück. Falls es keinen solchen Datensatz in der Collection gibt, wird -1 zurückgegeben.
DeleteAt (int int_Index): Diese Methode löscht den LV-Termin an Stelle x. Er wird aus der internen Liste entfernt, außerdem wird die Methode Delete von LVVLVTermin aufgerufen, dadurch kann er aus dem zugrundeliegenden Datenspeicher entfernt werden.
Die Collection enthält außerdem diverse Funktionen für die Manipulation eines einzelnen Objekts LVVLVTermin.
Die SetXXX-Methoden zum Setzen eines Werts im n-ten Objekt LVVLVTermin werden hier nicht mehr weiter dokumentiert, da sie den Set-Methoden eines Objekts LVVLVTermin entsprechen und nach dem selben Verfahren funktionieren wie in der Klasse LVVLehrveranstaltungCollection.
Eine Besonderheit sind SetLVNummer, SetSemester und SetBezeichnung, die jeweils darauf prüfen, dass kein anderer Termin die selben Daten hat.
Zur Manipulation der Abgaben innerhalb eines bestimmten LV-Termins gibt es die Funktionen SetAbgabeXXX, AddAbgabe und DeleteAbgabe, die als Parameter den Index einer Abgabe in einem LV-Termin übergeben bekommen und die Aufrufe an diese Abgabe weiterleiten.
Zur Manipulation der Arbeitsgruppen innerhalb der Abgaben gibt es die Methoden SetArbeitsgruppeXXX, AddArbeitsgruppe und DeleteArbeitsgruppe.
Zur Manipulation der Dateiabgaben innerhalb einer Arbeitsgruppe gibt es die Methoden SetDateiabgabeXXX, AddDateiabgabe und DeleteDateiabgabe.
Zur Manipulation der Studenten-Zuordnungen innerhalb der Arbeitsgruppen gibt es die Methoden SetArbeitsgruppeStudentXXX, AddArbeitsgruppeStudent und DeleteArbeitsgruppeStudent.
Klasse LVVDateiabgabe
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse bildet eine abgegebene Datei ab, die innerhalb einer Abgabe von einem Mitglied einer Arbeitsgruppe abgegeben wurde.
Ihre Attribute sind:
intNummer: Dateiabgaben werden innerhalb der Arbeitsgruppe durchnummeriert. Diese Nummern werden von der kapselnden LVVDateiabgabeCollection beim Hinzufügen vergeben.
strDateiname: Der Name der abgegebenen Datei.
strKommentar: Ein Kommentar zur Abgabe, z.B. was überhaupt abgegeben wurde.
byteDatei: Array mit den Binärdaten der Datei.
Die Methoden sind:
Konstruktor (int int_Nummer): Initialisiert alle Felder. Die laufende Nummer des Datensatzes muss übergeben werden (vergibt die kapselnde LVVDateiabgabeCollection).
Kopierkonstruktor: Erzeugt eine komplette Kopie dieser Klasse.
int GetNummer () const: Konstante Funktion zum Abrufen der laufenden Nummer dieses Datensatzes (Set ist nicht möglich, siehe Konstruktor).
CString GetDateiname () const: Konstante Funktion zum Abrufen des Namens der abgegebenen Datei.
SetDateiname (CString str_Dateiname): Setzen des Dateinamens.
CString GetKommentar () const: Konstante Funktion zum Abrufen des Kommentars zur abgegebenen Datei.
SetKommentar (CString str_Kommentar): Setzen des Kommentars.
byte[] GetDatei() const: Konstante Funktion zum Abrufen der Binärdaten der abgegebenen Datei.
SetDatei(byte[] byte_Datei): Setzen der Binärdaten der Datei.
Load: Diese Methode übernimmt das Laden der Dateiabgabe.
Save: Durch Aufruf dieser Methode werden die Daten der Klasse gespeichert.
Delete (): Diese Methode dient dazu, diese Abgabe aus dem zugrundeliegenden Datenspeicher (z.B. Datenbank) zu löschen.
Klasse LVVDateiabgabeCollection
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse enthält eine Liste von Dateiabgaben. Sie kapselt eine Instanz der MFC-Klasse CTypedPtrList, die ein Array von Pointern verwaltet und es mittels des Template-Mechanismus erlaubt, sämtliche Methodendeklarationen typsicher zu gestalten. Sie ist nicht von dieser Klasse abgeleitet, da die meisten der Methoden von CTypedPtrList nicht in dieser Klasse benötigt werden.
Die Membervariablen sind:
listDateiabgaben: Dies ist die Instanz von CTypedPtrList, in der die einzelnen Objekte vom Typ LVVDateiabgabe gespeichert werden. Alle Methoden der Klasse manipulieren diese Liste.
Die Funktionen sind:
Load: Laden der Daten. Es werden nacheinander alle Dateiabgaben geladen (Objekte vom Typ LVVDateiabgabe werden erzeugt und für jedes wird die Methode Load aufgerufen) und zur listDateiabgaben zugefügt.
Save: Diese Methode dient zum Speichern der Daten dieser Collection. Es wird nacheinander für jede Dateiabgabe die Methode Save aufgerufen.
int Add (CString str_Dateiname, CString str_Kommentar, byte[] byteDatei): Diese Methode erzeugt ein LVVDateiabgabe-Objekt aus den übergebenen Daten und fügt es an die Liste an. Die Laufende Nummer des Objekts wird auf die bisherige maximale Nummer + 1 gesetzt. Rückgabe ist der Index des so an die Liste angehängten Objekts.
const LVVDateiabgabe * GetDateiabgabeAt (int int_Index) const: Diese konstante Methode liefert das LVVDateiabgabe-Objekt an der Stelle x innerhalb der Liste zurück. Es wird ein Pointer auf das Original-Objekt zurückgeliefert, allerdings ist dieses Objekt ein const-Pointer, so dass es nicht möglich ist, den auf diese Weise erhaltenen Datensatz zu ändern und dadurch ohne Kenntnis der Collection deren Inhalt zu ändern.
int GetCount() const: Diese konstante Methode liefert die Anzahl der Datensätze in der Collection zurück.
DeleteAt (int int_Index): Diese Methode löscht die Dateiabgabe an Stelle x. Er wird aus der internen Liste entfernt, außerdem wird die Methode Delete von LVVDateiabgabe aufgerufen, dadurch kann er aus dem zugrundeliegenden Datenspeicher entfernt werden.
Die Collection enthält außerdem diverse Funktionen für die Manipulation eines einzelnen Objekts LVVDateiabgabe.
Die SetXXX-Methoden zum Setzen eines Werts im n-ten Objekt LVVDateiabgabe werden hier nicht mehr weiter dokumentiert, da sie den Set-Methoden eines Objekts LVVDateiabgabe entsprechen und nach dem selben Verfahren funktionieren wie in der Klasse LVVLehrbeauftragterCollection.
Klasse LVVArbeitsgruppe
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse bildet eine Arbeitsgruppe von Studenten für eine bestimmte Abgabe ab. Instanzen dieser Klasse sollten nur innerhalb einer Abgabe existieren können. Die Bewertungen selbst sind nicht in dieser Klasse enthalten, sondern in Instanzen der Klasse LVVArbeitsgruppeStudent.
Ihre Attribute sind:
strGruppe: Die Bezeichnung der Arbeitsgruppe.
datMail: Falls eine Mail mit der Bewertung verschickt wurde, wird das Datum hier eingetragen.
strMailEmpfaenger: Falls eine Mail mit der Bewertung verschickt wurde, wird als String eine kommaseparierte Liste der Empfänger eingetragen.
listStudenten: Die Liste der Studenten in dieser Arbeitsgruppe, bzw. eine Liste von Objekten vom Typ LVVArbeitsgruppeStudent. Enthält außerdem die Bewertungen der einzelnen Abgaben.
listDateiAbgaben: Die Liste der Dateien, die von den Studenten der Arbeitsgruppe abgegeben wurden.
Die Methoden sind:
Konstruktor: Initialisiert alle Felder.
Kopierkonstruktor: Erzeugt eine komplette Kopie dieser Klasse.
Get/Set-Methoden für Gruppennamen, Bewertung, Punktzahl, Maildatum und Mailempfänger.
Load: Diese Methode übernimmt das Laden der Dateiabgabe.
Save: Durch Aufruf dieser Methode werden die Daten der Klasse gespeichert.
Delete (): Diese Methode dient dazu, diese Abgabe aus dem zugrundeliegenden Datenspeicher (z.B. Datenbank) zu löschen. Alle abhängigen Daten (Dateiabgaben, Studentenzuordnungen) werden ebenfalls mitgelöscht.
Zugriff auf die einzelnen Dateiabgaben:
SetDateiabgabeXXX-Methoden für die einzelnen Felder der Datei-Abgabe, wobei als Parameter jeweils der Index der zu ändernden Abgabe und der neue Wert angegeben werden.
AddDateiAbgabe (CString str_Dateiname, CString str_Kommentar, byte[] byteDatei): Diese Methode fügt der Liste der Dateiabgaben eine neue Abgabe mit den übergebenen Daten zu. Rückgabe ist der Index der neu erzeugten Abgabe.
DeleteDateiAbgabe (int int_IndexDateiAbgabe): Die Methode ruft für die DateiAbgabe an Stelle int_IndexDateiAbgabe die Methode DeleteAt (int_IndexDateiAbgabe) auf.
Modifikation der Studenten-Zuordnungen:
SetStudentZuordnungXXX-Methoden für die einzelnen Felder der Studentenzuordnung, wobei als Parameter jeweils der Index der zu ändernden Studentenzuordnung und der neue Wert angegeben werden.
AddStudentzuordnung (long int lngMatrikelnummer): Diese Methode fügt der Liste der Studentenzuordnungen den Studenten mit der übergebenen Matrikelnummer zu. Rückgabe ist der Index der neu erzeugten Zuordnung.
DeleteStudentzuordnung (int int_IndexStudentenzuordnung): Die Methode ruft für die Studentenzuordnung an Stelle int_Index Studentenzuordnung die Methode DeleteAt (int_IndexStudentenzuordnung) auf.
Klasse LVVArbeitsgruppeCollection
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse enthält eine Liste von Arbeitsgruppen innerhalb einer Abgabe. Sie kapselt eine Instanz der MFC-Klasse CTypedPtrList, die ein Array von Pointern verwaltet und es mittels des Template-Mechanismus erlaubt, sämtliche Methodendeklarationen typsicher zu gestalten. Sie ist nicht von dieser Klasse abgeleitet, da die meisten der Methoden von CTypedPtrList nicht in dieser Klasse benötigt werden.
Die Membervariablen sind:
listArbeitsgruppen: Dies ist die Instanz von CTypedPtrList, in der die einzelnen Objekte vom Typ LVVArbeitsgruppe gespeichert werden. Alle Methoden der Klasse manipulieren diese Liste.
Die Funktionen sind:
Load: Laden der Daten. Es werden nacheinander alle Arbeitsgruppen geladen (Objekte vom Typ LVVArbeitsgruppe werden erzeugt und für jedes wird die Methode Load aufgerufen) und zur listDateiabgaben zugefügt.
Save: Diese Methode dient zum Speichern der Daten dieser Collection. Es wird nacheinander für jede Dateiabgabe die Methode Save aufgerufen.
int Add (CString str_Gruppe): Diese Methode erzeugt ein LVVArbeitsgruppe-Objekt aus den übergebenen Daten (beim Erzeugen ist meist nur die Bezeichnung vorhanden) und fügt es an die Liste an. Rückgabe ist der Index des so an die Liste angehängten Objekts. Falls schon eine Gruppe mit dieser Bezeichnung existiert, wird eine Exception ausgelöst.
const LVVArbeitsgruppe * GetArbeitsgruppeAt (int int_Index) const: Diese konstante Methode liefert das LVVArbeitsgruppe-Objekt an der Stelle x innerhalb der Liste zurück. Es wird ein Pointer auf das Original-Objekt zurückgeliefert, allerdings ist dieses Objekt ein const-Pointer, so dass es nicht möglich ist, den auf diese Weise erhaltenen Datensatz zu ändern und dadurch ohne Kenntnis der Collection deren Inhalt zu ändern.
int GetCount() const: Diese konstante Methode liefert die Anzahl der Datensätze in der Collection zurück.
DeleteAt (int int_Index): Diese Methode löscht die Arbeitsgruppe an Stelle x. Sie wird aus der internen Liste entfernt, außerdem wird die Methode Delete von LVVArbeitsgruppe aufgerufen, dadurch kann sie aus dem zugrundeliegenden Datenspeicher entfernt werden.
Die Collection enthält außerdem diverse Funktionen für die Manipulation eines einzelnen Objekts LVVArbeitsgruppe.
Die SetXXX-Methoden zum Setzen eines Werts im n-ten Objekt LVVArbeitsgruppe werden hier nicht mehr weiter dokumentiert, da sie den Set-Methoden eines Objekts LVVArbeitsgruppe entsprechen und nach dem selben Verfahren funktionieren wie in der Klasse LVVLehrbeauftragterCollection.
Methoden für die Manipulation einer DateiAbgabe innerhalb einer Arbeitsgruppe:
SetDateiabgabeXXX-Methoden für die einzelnen Felder der Datei-Abgabe, wobei als Parameter jeweils der Index der zu ändernden Abgabe innerhalb einer Arbeitsgruppe und der neue Wert angegeben werden.
AddDateiAbgabe (int int_IndexArbeitsgruppe, CString str_Dateiname, CString str_Kommentar, byte[] byteDatei): Diese Methode fügt der Liste der Dateiabgaben der Arbeitsgruppe an der Stelle int_IndexArbeitsgruppe eine neue Abgabe mit den übergebenen Daten zu. Rückgabe ist der Index der neu erzeugten Abgabe innerhalb der Arbeitsgruppe.
DeleteDateiAbgabe (int int_IndexArbeitsgruppe, int int_IndexDateiAbgabe): Die Methode ruft für die DateiAbgabe an Stelle int_IndexDateiAbgabe der Arbeitsgruppe an Stelle int_IndexArbeitsgruppe die Methode DeleteAt (int_IndexDateiAbgabe) auf.
Methoden für die Manipulation einer Studentenzuordnung innerhalb einer Arbeitsgruppe:
SetStudentZuordnungXXX-Methoden für die einzelnen Felder der Studentenzuordnung, wobei als Parameter jeweils der Index der zu ändernden Studentenzuordnung innerhalb einer Arbeitsgruppe und der neue Wert angegeben werden.
AddStudentenzuordnung (int int_IndexArbeitsgruppe, long lng_Matrikelnummer): Diese Methode fügt der Liste der Studentenzuordnungen der Arbeitsgruppe an der Stelle int_IndexArbeitsgruppe eine neue Studentenzuordnung mit den übergebenen Daten zu. Rückgabe ist der Index der neu erzeugten Studentenzuordnung innerhalb der Arbeitsgruppe.
DeleteStudentenzuordnung (int int_IndexArbeitsgruppe, int int_IndexStudentenzuordnung): Die Methode ruft für die Studentenzuordnung an Stelle int_IndexStudentenzuordnung der Arbeitsgruppe an Stelle int_IndexArbeitsgruppe die Methode DeleteAt (int_IndexStudentenzuordnung) auf.
Klasse LVVArbeitsgruppeStudent
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse bildet die Zuordnung von Studenten zu Arbeitsgruppen von Studenten für eine bestimmte Abgabe ab. Instanzen dieser Klasse sollten nur innerhalb einer Abgabe existieren können.
Ihre Attribute sind:
lngMatrikelnummer: Die Matrikelnummer eines Studenten, der in der Arbeitsgruppe ist.
strBewertung: Die für den Studenten spezifische Bewertung der Abgabe. Falls keine Einzelnoten gemacht werden, ist die Bewertung für alle Studenten der Arbeitsgruppe gleich.
intPunktzahl: Punktzahl des Studenten bei dieser Abgabe.
Die Methoden sind:
Konstruktor: Initialisiert alle Felder.
Kopierkonstruktor: Erzeugt eine komplette Kopie dieser Klasse.
Get/Set-Methoden für Matrikelnummer, Bewertung und Punktzahl.
Load: Diese Methode übernimmt das Laden der Zuordnung.
Save: Durch Aufruf dieser Methode werden die Daten der Klasse gespeichert.
Delete (): Diese Methode dient dazu, diese Zuordnung aus dem zugrundeliegenden Datenspeicher (z.B. Datenbank) zu löschen.
Klasse LVVArbeitsgruppeStudentCollection
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse enthält die Liste von Zuordnungen von Student zu Arbeitsgruppe innerhalb einer Arbeitsgruppe. Sie kapselt eine Instanz der MFC-Klasse CTypedPtrList, die ein Array von Pointern verwaltet und es mittels des Template-Mechanismus erlaubt, sämtliche Methodendeklarationen typsicher zu gestalten. Sie ist nicht von dieser Klasse abgeleitet, da die meisten der Methoden von CTypedPtrList nicht in dieser Klasse benötigt werden.
Die Membervariablen sind:
listArbeitsgruppeStudenten: Dies ist die Instanz von CTypedPtrList, in der die einzelnen Objekte vom Typ LVVArbeitsgruppeStudent gespeichert werden. Alle Methoden der Klasse manipulieren diese Liste.
Die Funktionen sind:
Load: Laden der Daten. Es werden nacheinander alle Zuordnungen geladen (Objekte vom Typ LVVArbeitsgruppeStudent werden erzeugt und für jedes wird die Methode Load aufgerufen) und zur listArbeitsgruppeStudenten zugefügt.
Save: Diese Methode dient zum Speichern der Daten dieser Collection. Es wird nacheinander für jede Dateiabgabe die Methode Save aufgerufen.
int Add (long int lng_Matrikelnummer): Diese Methode fügt einen Studenten an die Liste der Zuordnungen an, d.h. sie erzeugt ein neues Objekt LVVArbeitsgruppeStudent mit der übergebenen Matrikelnummer. Falls die Matrikelnummer bereits in der Liste der Zuordnungen steht, wird eine Exception ausgelöst. Rückgabe ist der Index des so an die Liste angehängten Objekts.
const LVVArbeitsgruppeStudent * GetArbeitsgruppeStudentAt (int int_Index) const: Diese konstante Methode liefert das LVVArbeitsgruppeStudent-Objekt an der Stelle x innerhalb der Liste zurück. Es wird ein Pointer auf das Original-Objekt zurückgeliefert, allerdings ist dieses Objekt ein const-Pointer, so dass es nicht möglich ist, den auf diese Weise erhaltenen Datensatz zu ändern und dadurch ohne Kenntnis der Collection deren Inhalt zu ändern.
int GetCount() const: Diese konstante Methode liefert die Anzahl der Datensätze in der Collection zurück.
DeleteAt (int int_Index): Diese Methode löscht die Studenten-Zuordnung an Stelle x. Sie wird aus der internen Liste entfernt, außerdem wird die Methode Delete von LVVArbeitsgruppeStudent aufgerufen, dadurch kann der Datensatz aus dem zugrundeliegenden Datenspeicher entfernt werden.
Die Collection enthält außerdem diverse Funktionen für die Manipulation eines einzelnen Objekts LVVArbeitsgruppe.
Die SetXXX-Methoden zum Setzen eines Werts im n-ten Objekt LVVArbeitsgruppeStudent werden hier nicht mehr weiter dokumentiert, da sie den Set-Methoden eines Objekts LVVArbeitsgruppeStudent entsprechen und nach dem selben Verfahren funktionieren wie in der Klasse LVVLehrbeauftragterCollection.
Klasse LVVAbgabe
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse bildet eine abzugebende Aufgabe innerhalb eines Lehrveranstaltungstermins ab. Instanzen dieser Klasse sollten nur innerhalb einer Lehrveranstaltungstermins existieren können.
Ihre Attribute sind:
strBezeichnung: Die (in der Veranstaltung) eindeutige Bezeichnung der Abgabe, z.B. Aufgabe 9 oder Klassendiagramm.
intMaximalPunktzahl: Maximal erreichbare Punktzahl bei dieser Abgabe.
listArbeitsgruppen: Liste mit den Arbeitsgruppen dieser Abgabe.
Die Methoden sind:
Konstruktor: Initialisiert alle Felder.
Kopierkonstruktor: Erzeugt eine komplette Kopie dieser Klasse.
Get/Set-Methoden für Bezeichnung und Maximalpunktzahl.
Load: Diese Methode übernimmt das Laden der Abgabe.
Save: Durch Aufruf dieser Methode werden die Daten der Klasse gespeichert.
Delete (): Diese Methode dient dazu, diese Abgabe aus dem zugrundeliegenden Datenspeicher (z.B. Datenbank) zu löschen. Alle zur Abgabe gehörenden Arbeitsgruppen werden ebenfalls gelöscht.
Zugriff auf die einzelnen Arbeitsgruppen:
SetArbeitsgruppeXXX-Methoden für die einzelnen Felder der Arbeitsgruppen innerhalb der Abgabe, wobei als Parameter jeweils der Index der zu ändernden Arbeitsgruppe und der neue Wert angegeben werden.
AddArbeitsgruppe (CString str_Gruppe): Diese Methode fügt der Liste der Arbeitsgruppen eine neue Arbeitsgruppe mit der übergebenen Bezeichnung zu. Rückgabe ist der Index der neu erzeugten Arbeitsgruppe.
DeleteArbeitsgruppe (int int_IndexArbeitsgruppe): Die Methode ruft für die Arbeitsgruppe an Stelle int_IndexArbeitsgruppe die Methode DeleteAt (int_IndexArbeitsgruppe) auf.
Zugriff auf die Daten innerhalb der Arbeitsgruppe:
SetDateiAbgabeXXX (int int_IndexArbeitsgruppe, int int_IndexDateiAbgabe), AddDateiAbgabe (int int_IndexArbeitsgruppe, CString str_Dateiname, CString str_Kommentar, byte[] byteDatei), DeleteDateiAbgabe (int int_IndexArbeitsgruppe, int int_IndexDateiAbgabe): Manipulation der Dateiabgaben in einer der Arbeitsgruppen.
SetStudentZuordnungXXX (int int_IndexArbeitsgruppe, int int_IndexStudentZuordnung), AddStudentZuordnung (int int_IndexArbeitsgruppe, CString str_Dateiname, CString str_Kommentar, byte[] byteDatei), DeleteStudentZuordnung (int int_IndexArbeitsgruppe, int int_IndexStudentZuordnung): Manipulation der StudentenZuordnung in einer der Arbeitsgruppen.
Klasse LVVAbgabeCollection
Abgeleitet von der abstrakten Klasse LVVDaten für den Zugriff auf die globalen Stammdaten.
Diese Klasse enthält die Liste von abzugebenden Aufgaben innerhalb einer Arbeitsgruppe. Sie kapselt eine Instanz der MFC-Klasse CTypedPtrList, die ein Array von Pointern verwaltet und es mittels des Template-Mechanismus erlaubt, sämtliche Methodendeklarationen typsicher zu gestalten. Sie ist nicht von dieser Klasse abgeleitet, da die meisten der Methoden von CTypedPtrList nicht in dieser Klasse benötigt werden.
Die Membervariablen sind:
listAbgaben: Dies ist die Instanz von CTypedPtrList, in der die einzelnen Objekte vom Typ LVVAbgabe gespeichert werden. Alle Methoden der Klasse manipulieren diese Liste.
Die Funktionen sind:
Load: Laden der Daten. Es werden nacheinander alle Abgabe geladen (Objekte vom Typ LVVAbgabe werden erzeugt und für jedes wird die Methode Load aufgerufen) und zur listAbgaben zugefügt.
Save: Diese Methode dient zum Speichern der Daten dieser Collection. Es wird nacheinander für jede Abgabe die Methode Save aufgerufen.
int Add (CString str_Bezeichnung, int int_Maximalpunktzahl): Diese Methode fügt eine Abgabe an die Liste der Abgaben an, d.h. sie erzeugt ein neues Objekt LVVAbgabe mit den übergebenen Daten. Falls die Bezeichnung bereits für eine andere Abgabe vergeben ist, wird eine Exception ausgelöst. Rückgabe ist der Index des so an die Liste angehängten Objekts.
const LVVAbgabe * GetAbgabeAt (int int_Index) const: Diese konstante Methode liefert das LVVAbgabe-Objekt an der Stelle x innerhalb der Liste zurück. Es wird ein Pointer auf das Original-Objekt zurückgeliefert, allerdings ist dieses Objekt ein const-Pointer, so dass es nicht möglich ist, den auf diese Weise erhaltenen Datensatz zu ändern und dadurch ohne Kenntnis der Collection deren Inhalt zu ändern.
int GetCount() const: Diese konstante Methode liefert die Anzahl der Datensätze in der Collection zurück.
DeleteAt (int int_Index): Diese Methode löscht die Studenten-Zuordnung an Stelle x. Sie wird aus der internen Liste entfernt, außerdem wird die Methode Delete von LVVAbgabe aufgerufen, dadurch kann der Datensatz aus dem zugrundeliegenden Datenspeicher entfernt werden.
Die Collection enthält außerdem diverse Funktionen für die Manipulation eines einzelnen Objekts LVVAbgabe.
Die SetXXX-Methoden zum Setzen eines Werts im n-ten Objekt LVVAbgabe werden hier nicht mehr weiter dokumentiert, da sie den Set-Methoden eines Objekts LVVAbgabe entsprechen und nach dem selben Verfahren funktionieren wie in der Klasse LVVLehrbeauftragterCollection.
SetBezeichnung (int int_IndexAbgabe, CString str_Bezeichnung): Setzen der Bezeichnung an Stelle int_IndexAbgabe. Falls eine andere Abgabe mit der übergebenen Bezeichnung vorhanden ist, wird eine Exception ausgelöst.
Funktionen für die Manipulation der einzelnen Arbeitsgruppen einer Abgabe:
SetArbeitsgruppeXXX-Methoden für die einzelnen Felder der Arbeitsgruppen innerhalb der Abgabe, wobei als Parameter jeweils der Index der Abgabe, der Index der zu ändernden Arbeitsgruppe und der neue Wert angegeben werden.
AddArbeitsgruppe (int int_IndexAbgabe, CString str_Gruppe): Diese Methode fügt der Liste der Arbeitsgruppen einer bestimmten Abgabe eine neue Arbeitsgruppe mit der übergebenen Bezeichnung zu. Rückgabe ist der Index der neu erzeugten Arbeitsgruppe.
DeleteArbeitsgruppe (int int_IndexAbgabe, int int_IndexArbeitsgruppe): Die Methode ruft für die Arbeitsgruppe an Stelle int_IndexArbeitsgruppe in der angegebenen Abgabe die Methode DeleteAt (int_IndexArbeitsgruppe) auf.
Analog gibt es die Methoden SetDateiabgabeXXX, AddDateiabgabe und DeleteDateiabgabe, die dazu dienen, eine Dateiabgabe innerhalb einer Arbeitsgruppe zu manipulieren.
Des weiteren gibt es die Methoden SetArbeitsgruppeStudentXXX, AddArbeitsgruppeStudent und DeleteArbeitsgruppeStudent, die dazu dienen, innerhalb einer Arbeitsgruppe die Studentenzuordnung zu manipulieren oder die Abgabe zu bewerten.
Oberflächen-Klassen und Anbindung an die MFC
In diesem Teil der Dokumentation werden die Klassen beschrieben, die die Oberfläche abbilden oder als Control-Klassen verwendet werden.
Klasse LVVDocument
Diese Klasse ist von der MFC-Klasse CDocument abgeleitet und ist die oberste Kapsel-Ebene für alle Daten der Anwendung.
Es wird nicht die Serialize-Fähigkeit der MFC verwendet, sondern eine eigene Funktionalität, die die Daten in einem nicht weiter beschriebenen Datenspeicher verwaltet.
Datenkapselung,
die Zweite: Theoretisch müßte
die zu Beginn dieses Kapitels beschrieben Datenkapselung auch über
die Klasse LVVDocument laufen, d.h. alle Modifikationen an
Lehrbeauftragten, Studenten oder Lehrbeauftragten müßten
nur mithilfe der Document-Klasse erlaubt sein (so wie bereits z.B.
das Löschen einer Arbeitsgruppe nur über die
Zwischenschritte Lehrveranstaltung, LV-Termin und Abgabe erlaubt
ist). Da hier die
Gründe nicht mehr ganz so zwingend sind wie bei der Kapselung
von z.B. Arbeitsgruppe in einem LV-Termin (ob die Arbeitsgruppe noch
modifizierbar ist, weiß nur der Termin selbst, da nur er weiß,
ob er bereits abgeschlossen wurde), wurde darauf verzichtet. Die
Stammdatencollections sind aus der Document-Klasse abrufbar und
dabei direkt modifizierbar.
Membervariablen sind:
globaleDaten: Diese Klasse kapselt alle globalen Daten, die Referenz auf diese Instanz wird an alle Datenklassen weitergegeben. Sie wird bei jeder Document-Initialisierung (Überladene Methode OnNewDocument) neu erzeugt und beim Einlesen der Studenten, Lehrbeauftragten und Lehrveranstaltungen befüllt.
lehrveranstaltungGewaehlt: Im Hauptfenster der Anwendung (linkes Teilfenster) kann in einem TreeControl eine Lehrveranstaltung ausgewählt werden, diese wird anschließend in diese Membervariable gespeichert, damit das rechte Teilfenster weiß, welche Lehrveranstaltung im linken Fenster gewählt ist. Falls keine Lehrveranstaltung gewählt ist, steht hier der Wert NULL.
lvTerminGewaehlt: Im Hauptfenster der Anwendung (linkes Teilfenster) kann in einem TreeControl eine LV-Termin ausgewählt werden, dieser wird anschließend in diese Membervariable gespeichert, damit das rechte Teilfenster weiß, welcher LV-Termin im linken Fenster gewählt ist. Falls kein LV-Termin gewählt ist, steht hier der Wert NULL.
abgabeGewaehlt: Im Hauptfenster der Anwendung (linkes Teilfenster) kann in einem TreeControl eine Abgabe ausgewählt werden, diese wird anschließend in diese Membervariable gespeichert, damit das rechte Teilfenster weiß, welche Abgabe im linken Fenster gewählt ist. Falls keine Abgabe gewählt ist, steht hier der Wert NULL.
Überladene Memberfunktionen:
Überladene
Funktionen: Falls Funktionen
überladen werden, müssen diese mit ihrer neuen
Funktionalität ebenfalls dokumentiert werden.
OnNewDocument: Diese Methode von CDocument wurde überladen, um die Membervariable globaleDaten zu initialisieren und die globalen Daten (Lehrbeauftragte, Studenten und Lehrveranstaltungen einzulesen (d.h. ihre Daten aus dem zugrundeliegenden Datenspeicher zu laden).
OnSaveDocument: Diese Methode wird normalerweise beim Speichern aufgerufen und sorgt für das Initialisieren des MFC-Serialisierungsmechnanismus. Hier wird in einem anderen Datenspeicher geschrieben, d.h. die gesamte Standard-Logik der MFC wird umgangen.
Weitere Funktionen:
LVVLehrbeauftragteCollection * GetLehrbeauftragte (): Diese Methode liefert die Collection aller vorhandenen Lehrbeauftragten (siehe Membervariable globaleDaten) . Sie kann anschließend durch Aufruf von Add..., Delete.... oder Set...-Methoden modifiziert werden.
LVVStudentCollection * GetStudenten (): Diese Methode liefert die Collection aller vorhandenen Studenten (siehe Membervariable globaleDaten). Sie kann anschließend durch Aufruf von Add..., Delete.... oder Set...-Methoden modifiziert werden.
LVVLehrveranstaltungCollection * GetLehrveranstaltungen (): Diese Methode liefert die Collection aller vorhandenen Lehrveranstaltungen (siehe Membervariable globaleDaten ). Sie kann anschließend durch Aufruf von Add..., Delete.... oder Set...-Methoden modifiziert werden.
const LVVPerson*GetAngemeldetePerson() const : Diese Methode liefert die angemeldete Person (Student oder Lehrbeauftragter, siehe Membervariable globaleDaten) zurück. Die Funktion liefert einen konstanten Zeiger zurück, da es keinen Sinn macht, den angemeldeten User zu modifizieren.
SetAngemeldetePerson (LVVPerson* personAngemeldet): Setzen der angemeldeten Person (Student oder Lehrbeauftragter). Dies muss beim Anwendungsstart von außen geschehen, da die Document-Klasse zu tief im System steckt um Anmeldedialoge anzuzeigen.
const LVVLVTermin * GetLVTerminGewaehlt() const: Abrufen des in der Membervariablen lvTerminGewaehlt gespeicherten Werts, Rückgabe ist ein konstanter Wert.
SetLVTerminGewaehlt(LVVLVTermin *lvTermin): Setzen des Werts der Membervariablen lvTerminGewaehlt.
const LVVLehrveranstaltung *GetLehrveranstaltungGewaehlt() const: Abrufen des in der Membervariablen lehrveranstaltungGewaehlt gespeicherten Werts, Rückgabe ist konstanter Wert.
SetLehrveranstaltungGewaehlt(LVVLehrveranstaltung *lehrveranstaltung): Setzen des Werts der Membervariablen lehrveranstaltungGewaehlt.
const LVVAbgabe *GetAbgabeGewaehlt() const: Abrufen des in der Membervariablen abgabeGewaehlt gespeicherten Werts, Rückgabe ist konstanter Wert.
SetAbgabeGewaehlt(LVVAbgabe *abgabe): Setzen des Werts der Membervariablen abgabeGewaehlt.
Grundlagen der Benutzerführung:
Bei Anwendungsstart wird das Hauptfenster initialisiert und sofort der Login-Dialog eingeblendet. Hat der Benutzer sich authentifiziert, steht ihm die Anwendung zur Verfügung. Er hat diese Möglichkeiten:
Stammdaten bearbeiten: Dies geschieht über Menüpunkte im Hauptmenü.
Lehrveranstaltungsdaten bearbeiten: Dies geschieht im Hauptfenster, das zweigeteilt ist: Im linken Teilfenster ist eine TreeControl enthalten, in der Lehrveranstaltungen, deren Termine und deren Abgaben als dreistufige Baumstruktur angezeigt werden.
Wählt der Benutzer im linken Fenster eine Abgabe aus, werden ihm im rechten Fenster die Arbeitsgruppen der Abgabe angezeigt.
Das Bearbeiten von Abgaben, Arbeitsgruppen und Dateiabgaben erfolgt über Buttons in den Fenstern.
Nach jeder bearbeitenden Aktion erfolgt direkt ein Save im Datenmodell, z.B. bei fast jedem Klick auf OK in einem Dialog.
Klasse LVVMainFrame
Diese Klasse bildet das Hauptfenster der Anwendung. Sie ist von CFrameWnd abgeleitet, der Standard-MFC-Klasse für das Anwendungsfenster.
Sie enthält eine Membervariable m_Splitter vom Typ CSplitterWnd, mittels der ein geteiltes Fenster abgebildet wird. Das Initialisieren der Splitter-Window erfolgt in der überladenen Methode OnCreateClient von CFrameWnd. Sie enthält im linken Teil eine Instanz von LVVLehrveranstaltungView, im rechten Teil eine Instanz von LVVArbeitsgruppeView.
Klasse LVVDialogLogin
Dieser Dialog wird beim Start der Anwendung angezeigt und dient dazu, den Benutzer zu authentifizieren. Dazu werden Login und Passwort eingegeben. Die Validierung der Eingaben erfolgt nicht in diesem Dialog, sondern im Hauptfenster, aus dem heraus er angezeigt wird.
Der Dialog enthält jeweils eine Membervariable für Login und Passwort, außerdem Get-Methoden zum Abfragen der Eingabe.
Klasse LVVViewLehrveranstaltung
Diese von CTreeView abgeleitete Klasse wird im Hauptfenster der Anwendung im linken Teilfenster angezeigt. Sie stellt die Lehrveranstaltungen und alle Daten in einer Baumstruktur dar:
Auf der obersten Ebene stehen alle Lehrveranstaltungen, sortiert nach LV-Nummer.
In der Ebene darunter werden die Semester aufgelistet, in denen die Lehrveranstaltung stattfand. Die Semester werden in der Form WS 2003 oder SS 2004 aufgelistet.
In der nächsten Ebene werden die einzelnen Lehrveranstaltungstermine innerhalb des Semesters aufgelistet.
Falls der Benutzer ein Administrator ist oder aber der Lehrbeauftragte, der die Veranstaltung durchführt, oder ein Student, der die Veranstaltung belegt hat, werden ihm auf der nächsten Ebene die einzelnen Abgaben der Veranstaltung angezeigt.
Durch Klick auf eine Abgabe wird im rechten Teil des geteilten Fensters (in der Instanz von LVVArbeitsgruppeView) die einzelnen Arbeitsgruppen der Abgabe angezeigt. Dies geschieht, indem die gewählte Abgabe in LVVDocument geschrieben wird (Methode LVVDocument.SetAbgabeGewaehlt), anschließend wird LVVDocument.UpdateAllViews aufgerufen, und die LVVArbeitsgruppeView kann ihre Daten an die gewählte Abgabe anpassen.
Damit stellt diese View den Use-Case Auswahl des Veranstaltungstermins dar.
Verweise auf
Use-Case-Diagramm Das
Klassendiagramm wird anhand des Use-Case-Diagramms erstellt, d.h. es
schadet auf keinen Fall, bei bestimmten Aktionen auf den Use-Case zu
verweisen, der gerade umgesetzt wird. Im folgenden geschieht dies bei den
Events, die von z.B. einem Button-Klick ausgelöst werden, der mit
einem Use-Case korrespondiert.
Überladene Methoden:
Beim ersten Aktivieren der View (überladene Methode OnActivate) wird der Login-Dialog LVVDialogLogin angezeigt. Nachdem der User Login und Passwort angegeben wird, werden die in LVVDocument gespeicherten Studenten und Lehrbeauftragten durchlaufen und es wird nach der Person mit diesem Login-Namen gesucht. Wird niemand gefunden, wird eine Fehlermeldung angezeigt und der Login-Dialog wird erneut angezeigt. Das selbe geschieht, falls das Passwort falsch ist. Ist der Login erfolgreich, wird die so authentifizierte Person (Student oder Lehrbeauftragter) im Document gespeichert.
OnUpdate: In dieser Funktion wird das TreeControl mit
der oben angegebenen Struktur befüllt.
Beim Befüllen aufgrund einer Änderung an den
Lehrveranstaltungsdaten (z.B. neue Abgabe) sollte darauf geachtet
werden, dass die vorherige Auswahl und der vorherige Aufklapp-Status
erhalten bleibt.
Windows-Ereignisse:
Windows-Events
im Klassendiagramm: Sofern von
Controls ausgelöste Events eine wichtige Funktionalität
(hier: die Verbindung zwischen den beiden Views) auslösen, dann
sollten sie auch im Klassendiagramm auftauchen. Natürlich muss
hier nicht jeder Mausklick landen, aber jede Kernaktion. Schließlich
wird fast jeder Use-Case durch eine Benutzeraktion, also ein
Windows-Event ausgelöst.
OnTreeViewSelectionChanged: Bei einer Änderung der Auswahl (Ereignis der TreeControl) wird geprüft, ob gerade eine Lehrveranstaltung, ein LV-Termin oder eine Abgabe gewählt ist, wenn ja, wird sie im LVVDocument als aktuelle Lehrveranstaltung / LV-Termin / Abgabe gesetzt, ansonsten wird NULL gesetzt. Anschließend wird LVVDocument.UpdateAllViews aufgerufen.
Diese View verarbeitet alle Menüereignisse des Hauptmenüs, die das Bearbeiten der Stammdaten betreffen.
OnMenuLehrbeauftragteBearbeitenKlick: Menüpunkt Lehrbeauftragte bearbeiten: Dieser Menüpunkt ist nur aktiv, wenn gerade ein Lehrbeauftragter angemeldet ist. Beim Klick wird der Dialog LVVDialogLehrbeauftragte angezeigt. Anschließend wird LVVDocument.UpdateAllViews aufgerufen.
OnMenuStudentenBearbeitenKlick: Menüpunkt Studenten bearbeiten: Dieser Menüpunkt ist immer aktiv, denn Lehrbeauftragte dürfen die Daten ihrer Studenten bearbeiten, Studenten dürfen ihre eigene Mailadresse bearbeiten. Beim Klick wird der Dialog LVVDialogStudentenListeBearbeiten angezeigt. Anschließend wird LVVDocument.UpdateAllViews aufgerufen.
OnMenuLehrveranstaltungBearbeitenKlick: Menüpunkt Lehrveranstaltung bearbeiten: Dieser Menüpunkt ist nur aktiv, wenn ein Administrator angemeldet ist. Beim Klick wird der Dialog LVVDialogLehrveranstaltung angezeigt. Anschließend wird LVVDocument.UpdateAllViews aufgerufen.
In der Toolbarleiste finden sich Buttons für folgende Aufgaben:
OnLehrveranstaltungErstellenKlick: Lehrveranstaltung erstellen: Dieser Button ist nur aktiv, wenn ein Administrator angemeldet ist. Beim Klick wird der Dialog LVVDialogLehrveranstaltungBearbeiten für das Erstellen einer Lehrveranstaltung angezeigt. Nach dem Klick auf OK wird die neue Lehrveranstaltung zur Lehrveranstaltungsliste im Document zugefügt. Anschließend wird LVVDocument.UpdateAllViews aufgerufen.
OnLehrveranstaltungBearbeitenKlick: Lehrveranstaltung bearbeiten: Dieser Button ist nur
aktiv, wenn ein Administrator angemeldet ist.
Ist im TreeControl gerade keine Lehrveranstaltung gewählt, wird
eine Fehlermeldung ausgelöst. Beim Klick wird der Dialog
LVVDialogLehrveranstaltungBearbeiten für das Bearbeiten der
gewählten Lehrveranstaltung angezeigt. Nach dem Klick auf OK
werden die Änderungen in der Lehrveranstaltungsliste im
Document übernommen. Anschließend wird
LVVDocument.UpdateAllViews aufgerufen.
OnLehrveranstaltungEntfernenKlick: Lehrveranstaltung
löschen: Dieser
Button ist nur aktiv, wenn ein Administrator angemeldet ist.
Ist im TreeControl gerade keine Lehrveranstaltung gewählt, wird
eine Fehlermeldung ausgelöst.
Enthält die Lehrveranstaltung bereits Termine, ist
ein Löschen nicht möglich.
Der Benutzer muss zuerst das
Löschen bestätigen, danach wird die Lehrveranstaltung aus
der Lehrveranstaltungscollection im Document entfernt.
Datenbearbeitung
in Control-Klassen Bei der
Beschreibung dieser Funktionalität sei auf den Dialog
LVVDialogLehrveranstaltung verwiesen. Dieser Dialog enthält
eine identische Funktionalität wie sie in der
LVVViewLehrveranstaltung zu finden ist. Hier wäre also doppelt
zu coden. Da dies bei zukünftigen Änderungen gefährlich
ist, sollte man die Logik des Lehrveranstaltung erstellen /
bearbeiten / löschen in eine eigene Control-Klasse
auslagern. In der View-Klasse bleibt nur der View-spezifische Teil
der Anwendungslogik, also z.B. das Ermitteln der in TreeControl /
ListBox gewählten Lehrveranstaltung.
Anschließend wird die statische Methode der Control-Klasse
aufgerufen.
Auf ein Klassendiagramm wird verzichtet, da es sich nur um eine einzelne Klasse ohne Assoziationen zu anderen Klassen handelt.
Klasse LVVLehrveranstaltungBearbeitung
Diese Klasse der Control-Schicht enthält
statische Funktionen für das Arbeiten mit Lehrveranstaltungen
(Erstellen, Bearbeiten, Löschen). Sie kapselt den Teil der
Logik, der unabhängig vom aufrufenden Dialog immer gleich ist.
static LVVLehrveranstaltung*
LehrveranstaltungErstellen (CWnd *windowParent): Diese statische
Funktion dient dazu, eine Lehrveranstaltung zu erstellen. Sie
prüft zuerst einmal, ob das Erstellen überhaupt möglich
ist (der angemeldete Benutzer muss Administrator sein). Sie zeigt
den Dialog LVVDialogLehrveranstaltungBearbeiten an. Wird darin auf
OK geklickt, wird die neue Lehrveranstaltung der
Lehrveranstaltung-Collection im Document zugefügt. Der
Rückgabewert ist die so erstellte Lehrveranstaltung oder
NULL, falls im Dialog auf Abbrechen geklickt wurde.
Der Parameter windowParent ist das
Parent-Fenster, aus dem heraus die Funktion aufgerufen wurde.
Erforderlich für das Anzeigen des modalen Dialogs zum
LV-Erstellen.
static bool LehrveranstaltungBearbeiten (CWnd
*windowParent, LVVLehrveranstaltung *lehrveranstaltung): Diese
statische Funktion dient dazu, eine Lehrveranstaltung zu
bearbeiten. Sie prüft zuerst einmal, ob das Bearbeiten
überhaupt möglich ist (der angemeldete Benutzer muss
Administrator sein). Sie zeigt den Dialog
LVVDialogLehrveranstaltungBearbeiten mit der übergebenen
Lehrveranstaltung an. Wird darin auf OK geklickt,
werden die Änderungen in der Lehrveranstaltung-Collection im
Document übernommen. Der Rückgabewert ist TRUE, falls im
Dialog auf OK geklickt wurde, sonst FALSE..
Der Parameter windowParent ist das
Parent-Fenster, aus dem heraus die Funktion aufgerufen wurde.
Erforderlich für das Anzeigen des modalen Dialogs zum
LV-Bearbeiten.
static bool LehrveranstaltungLoeschen (CWnd
*windowParent, LVVLehrveranstaltung *lehrveranstaltung): Diese
statische Funktion dient dazu, eine Lehrveranstaltung zu löschen.
Sie prüft zuerst einmal, ob das Löschen überhaupt
möglich ist (der angemeldete Benutzer muss Administrator
sein, die Lehrveranstaltung darf keine Termine haben).
Anschließend muss der Benutzer das Löschen bestätigen.
Der Rückgabewert ist TRUE, falls wirklich gelöscht
wurde, sonst FALSE..
Der Parameter windowParent ist das
Parent-Fenster, aus dem heraus die Funktion aufgerufen wurde.
Erforderlich für das Anzeigen des modalen Dialogs für
die Sicherheitsabfrage.
OnLVTerminHinzufuegenKlick: Lehrveranstaltungstermin erstellen (Use Case Stammdatenverwaltung: Veranstaltungstermin anlegen): Dieser Button ist nur aktiv, wenn ein Administrator angemeldet ist. Ist keine Lehrveranstaltung im TreeControl gewählt, ist ein Erstellen nicht möglich. Beim Klick wird der Dialog LVVDialogLehrveranstaltungsterminBearbeiten für das Erstellen eines Lehrveranstaltungstermins angezeigt. Nach dem Klick auf OK wird der neue Lehrveranstaltungstermin zur Lehrveranstaltungsterminliste im Document zugefügt. Außerdem werden dem Lehrveranstaltungstermin für jeden im Dialog gewählten Studenten ein Objekt LVVLVTermin2Student zugefügt. Anschließend wird LVVDocument.UpdateAllViews aufgerufen.
OnLVTerminBearbeitenKlick: Lehrveranstaltungstermin bearbeiten (Use Cases
Stammdatenverwaltung: Veranstaltungstermin bearbeiten,
Stammdatenverwaltung: Veranstaltungstermin starten,
Stammdatenverwaltung: Zufügen von Studenten zum
Veranstaltungstermin, Lehrbeauftragter:
Veranstaltungstermin abschliessen): Dieser Button ist nur
aktiv, wenn ein Administrator oder ein Lehrbeauftragter angemeldet
ist.
Ist
im TreeControl gerade kein Lehrveranstaltungstermin
gewählt, wird eine Fehlermeldung ausgelöst. Beim Klick
wird der Dialog LVVDialogLehrveranstaltungsterminBearbeiten
für das Bearbeiten der gewählten Lehrveranstaltung
angezeigt. Nach dem Klick auf OK werden die Änderungen in der
Lehrveranstaltungsterminliste
im Document übernommen. Für alle im Dialog gewählten
Studenten wird geprüft, ob der Student neu hinzugekommen ist
(neues Objekt LVVLVTermin2Student zu Termin zufügen). Außerdem
muss geprüft werden, ob Studenten nicht mehr gewählt sind
(aus Termin entfernt), in diesem Fall muss das
LVVLVTermin2Student-Objekt aus dem Termin entfernt werden. Falls
dieser Student an Arbeitsgruppen beteiligt war, werden seine Daten
aus diesen entfernt. Hat der Lehrbeauftragte sich geändert,
muss eventuell das Objekt LVVLVTermin2Lehrbeauftragter des
vorherigen Lehrbeauftragten gelöscht werden. Anschließend
wird ein neues Objekt LVVLVTermin2Lehrbeauftragter erstellt und im
neuen Lehrbeauftragten abgelegt.
Zum Schluss wird LVVDocument.UpdateAllViews aufgerufen.
OnLVTerminEntfernenKlick: Lehrveranstaltungstermin
löschen (Use-Case
Stammdatenverwaltung: Veranstaltungstermin löschen):
Dieser
Button ist nur aktiv, wenn ein Administrator angemeldet ist.
Ist im TreeControl gerade kein Lehrveranstaltungstermin
gewählt, wird eine Fehlermeldung
ausgelöst. Wurde der Lehrveranstaltungstermin bereits
gestartet, ist ein Löschen nicht möglich.
Der Benutzer muss zuerst das Löschen bestätigen,
danach wird die Lehrveranstaltung aus der
Lehrveranstaltungscollection im Document entfernt. In der
Lehrveranstaltungstermin-Collection werden beim Löschen des
Studenten aus dem Termin (Methode DeleteStudentZuordnung)
automatisch alle Zuordnungen zu Arbeitsgruppen gelöscht,
außerdem werden dadurch entstehende leere Arbeitsgruppen
gelöscht.
OnNotenlisteKlick: Notenliste des Lehrveranstaltungstermins (Use-Case Lehrbeauftragter: Bewertungsliste pro Veranstaltung erstellen): Nach Klick auf diesen Button wird ein Ausdruck erstellt, in dem in tabellarischer Übersicht die Bewertungen aller Studenten auftauchen (in den Zeilen die Studenten, in den Spalten die Einzelpunktzahlen, in der letzten Spalte die Gesamtpunktzahl).
OnAbgabeHinzufuegenKlick: Abgabe erstellen (Use Case Lehrbeauftragter: Abgabe anlegen): Dieser Button ist nur aktiv, wenn ein Lehrbeauftragter angemeldet ist. Ist kein Lehrveranstaltungstermin im TreeControl gewählt, ist ein Erstellen nicht möglich. Wurde der Lehrveranstaltungstermin noch nicht gestartet, ist kein Anlegen von Abgaben möglich. Beim Klick wird der Dialog LVVDialogAbgabeBearbeiten für das Erstellen einer Abgabe angezeigt. Nach dem Klick auf OK wird die neue Abgabe zur Abgabenliste des Lehrveranstaltungstermins im Document zugefügt. Anschließend wird LVVDocument.UpdateAllViews aufgerufen.
OnAbgabeBearbeitenKlick: Abgabe bearbeiten (Use Cases Lehrbeauftragter:
Abgabe bearbeiten): Dieser Button ist nur aktiv, wenn ein
Lehrbeauftragter angemeldet ist.
Ist im TreeControl gerade keine Abgabe gewählt, wird eine
Fehlermeldung ausgelöst. Beim Klick wird der Dialog
LVVDialogAbgabeBearbeiten
für das Bearbeiten der gewählten Abgabe
angezeigt. Nach dem Klick auf OK werden
die Änderungen in der Abgabenliste
des Lehrveranstaltungstermins im
Document übernommen.
Anschließend wird LVVDocument.UpdateAllViews
aufgerufen.
OnAbgabeEntfernenKlick: Abgabe
löschen (Use
Case Lehrbeauftragter: Abgabe
löschen):
Dieser
Button ist nur aktiv, wenn ein Lehrbeauftragter angemeldet ist.
Ist
im TreeControl gerade kein Lehrveranstaltungstermin
gewählt, wird eine Fehlermeldung
ausgelöst. Ist der Lehrveranstaltungstermin bereits
abgeschlossen, kann nur der Administrator die Abgabe noch löschen.
Der Benutzer muss zuerst das Löschen bestätigen,
danach wird die Abgabe aus der Abgabencollection des
Lehrveranstaltungstermins im Document entfernt. Alle Arbeitsgruppen
und alle Dateiabgaben werden automatisch mitgelöscht..
Klasse LVVViewArbeitsgruppe
Diese von CFormView abgeleitete Klasse stellt die Daten innerhalb einer Abgabe dar. Sie enthält eine Liste (CListCtrl) aller Arbeitsgruppen. Beim Klick auf eine Arbeitsgruppe wird im unteren Teil des Fensters angezeigt, welche Studenten in dieser Arbeitsgruppe vorhanden sind und welche Dateien sie abgegeben haben. Falls ein Student angemeldet ist, wird NUR die Arbeitsgruppe in der Liste angezeigt, zu der er in dieser Abgabe gehörte (oder eine leere Liste, falls er zu keiner Arbeitsgruppe gehörte). Ist die Abgabe bereits bewertet, werden neben jedem Student Punktzahl und Bemerkung angezeigt. Wurde die Bewertung per Mail versendet, werden auch die Daten dieser Mail (Datum und Empfänger) angezeigt.
Neben der Liste der Arbeitsgruppen gibt es die Buttons Neu, Bearbeiten, Löschen, Bewerten (Dateiabgaben erfassen und bewerten), Bewertung mailen und Alle Gruppen wie in letzter Abgabe erzeugen.
Die View bildet den Use-Case Student: Einsehen eigener Abgaben ab.
Memberfunktionen:
OnUpdate: Diese Funktion von CView wird überladen,
um die Daten der Abgabe anzuzeigen. Sie wird aufgerufen, sobald sich
im linken Teilfenster des Hauptfensters die Auswahl ändert. Ist
eine Abgabe ausgewählt, wird sie ins LVVDocument geschrieben
und ist abrufbar für diese View.
Ist eine Abgabe gewählt, wird das ListControl mit
den Arbeitsgruppen befüllt (in der ersten Spalte wird die
Bezeichnung der Gruppe angezeigt, in der zweiten Spalte die Namen
aller Studenten der Gruppe). Außerdem werden die Daten der
ersten Arbeitsgruppe angezeigt.
OnListArbeitsgruppeSelectionChanged: Auswahländerung in ListControl der Arbeitsgruppen: Die Details der gerade gewählten Arbeitsgruppe werden angezeigt. Dies ist die Liste der Studenten (mit Bewertungen und Punktzahl) in einem weiteren CListControl. Außerdem wird die Liste der Dateiabgaben angezeigt.
OnArbeitsgruppeHinzufuegenKlick: Klick auf Arbeitsgruppe anlegen (bildet den Use-Case Lehrbeauftragter: Zusammenfassen von Studenten zu Arbeitsgruppen ab): Ist der Lehrveranstaltungstermin abgeschlossen, ist diese Aktion zumindest für einen Lehrbeauftragten nicht möglich. Der Dialog LVVDialogArbeitsgruppeBearbeiten wird angezeigt. Nach dem Klick auf OK wird die Arbeitsgruppe erzeugt und der aktuellen Abgabe zugefügt. Außerdem werden die im Dialog gewählten Studenten zugefügt (pro Student wird die Methode LVVArbeitsgruppe.AddStudentZuordnung aufgerufen).
OnArbeitsgruppeBearbeitenKlick: Klick auf Arbeitsgruppe bearbeiten (bildet die Use-Cases Lehrbeauftragter: Zusammenfassen von Studenten zu Arbeitsgruppen und Lehrbeauftragter: Studenten ohne Arbeitsgruppe ab): Ist keine Arbeitsgruppe zum Bearbeiten gewählt, ist kein Bearbeiten möglich. Ist der Lehrveranstaltungstermin abgeschlossen, ist diese Aktion zumindest für einen Lehrbeauftragten nicht möglich. Der Dialog LVVDialogArbeitsgruppeBearbeiten wird für die gewählte Arbeitsgruppe angezeigt. Nach dem Klick auf OK werden die Werte der Arbeitsgruppe aktualisiert. Außerdem werden die im Dialog neu hinzugekommenen Studenten zugefügt (pro Student wird die Methode LVVArbeitsgruppe.AddStudentZuordnung aufgerufen), im Dialog entfernte Studenten werden mittels LVVArbeitsgruppe.DeleteStudentZuordnung entfernt.
OnArbeitsgruppeEntfernenKlick: Klick auf Arbeitsgruppe löschen : Dient dem Löschen einer Arbeitsgruppe. Ein Löschen ist nur möglich, falls eine Arbeitsgruppe im ListControl gewählt ist und der Lehrveranstaltungstermin noch nicht abgeschlossen ist (Ausnahme: ein Administrator ist angemeldet). Nach einer Sicherheitsabfrage wird die Arbeitsgruppe gelöscht. Alle anhängenden Daten (Dateiabgaben) werden mitgelöscht.
OnArbeitsgruppeErzeugenLetzteAbgabeKlick: Klick auf Alle Arbeitsgruppen wie in letzter Abgabe erzeugen: Alle Arbeitsgruppen werden so angelegt, wie dies in der vorhergehenden Abgabe der Fall war (d.h. die Gruppennamen und die Studentenzuordnungen werden übernommen). Falls bereits Arbeitsgruppen definiert waren, werden diese gelöscht, eine Sicherheitsabfrage warnt den Benutzer vor den Folgen. Handelt es sich bei dieser Abgabe um die erste der Veranstaltung, wird jeder Student in eine eigene Arbeitsgruppe eingeteilt.
OnBewertungBearbeitenKlick: Klick auf Bewertungsdaten bearbeiten
(bildet die Use-Cases Lehrbeauftragter: Studenten ohne
Arbeitsgruppe, Lehrbeauftragter: Abgabe-Datei erfassen,
Lehrbeauftragter: Abgabe-Datei bearbeiten,
Lehrbeauftragter: Abgabe-Datei löschen,
Lehrbeauftragter: Abgabe bewerten und Student:
Abgabe tätigen ab). Diese Funktionalität ist dem
Lehrbeauftragte möglich, sofern der Lehrveranstaltungstermin
noch nicht abgeschlossen wurde. Dem Studenten ist ein Bearbeiten
möglich, wenn nicht mehr als 14 Tage seit dem in der Abgabe
festgelegten Datum vergangen sind.
Der Dialog LVVDialogArbeitsgruppeBewertungBearbeiten
wird angezeigt.
Wird im Dialog auf OK geklickt, werden die
Studentenzuordnungen (die die Benotungen enthalten) und die
Dateiabgaben angepaßt. Dazu wird die Liste der
Studentenzuordnungen der Arbeitsgruppe durchlaufen und in jeder
Zuordnung die Note an den Wert des Dialogs angepaßt (an der
Datensatz-Anzahl kann sich in diesem Dialog nichts ändern). Für
die Liste der Dateiabgaben ist mehr Aufwand nötig, da
Dateiabgaben entfernt oder hinzugefügt werden können. Dies
erkennt man am Vergleich der laufenden Nummern der einzelnen
Abgaben.
OnBewertungsmailSendenKlick: Klick auf Bewertungsmail versenden (bildet den Use-Case Lehrbeauftragter: Bewertung versenden ab): Mittels der Klasse LVVMail wird eine Benachrichtigungsmail mit der Bewertung an alle Studenten der Arbeitsgruppe versendet.
OnAusdruckBewertungenStudentKlick: Neben der Liste der Studenten befindet sich ein Button Ausdruck, der es dem Lehrbeauftragten und dem Studenten erlaubt, sich einen Ausdruck aller Bewertungen dieses Studenten in dieser Veranstaltung zu erstellen (bildet die Use-Cases Lehrbeauftragter: Bewertungsliste pro Student erstellen und Student: Erstellen einer Bewertungsübersicht ab).
OnAusdruckBewertungenStudentAbgabeKlick: Neben der Liste der Studenten befindet sich ein Button Ausdruck dieser Abgabe , der es dem Lehrbeauftragten und dem Studenten erlaubt, sich einen Ausdruck der Bewertung dieser Abgabe dieses Studenten in dieser Veranstaltung zu erstellen (bildet den Use-Case Student: Erstellen eines Bewertungsausdrucks einer Abgabe ab).
Klasse LVVMail
Diese Klasse dient dazu, Bewertungsmails zu Abgaben zu versenden. Sie bietet eine statische Methode SendMail (CString str_Empfaenger, CString str_Text), in der das Versenden einer Mail an den angegebenen Empfänger mit dem angegebenen Text erfolgt. Wie das Mailsenden technisch funktioniert, wird hier nicht weiter spezifiziert.
Klasse LVVDialogLehrbeauftragte
Dieser Dialog enthält eine Listbox mit der Liste aller Lehrbeauftragten im System. Außerdem enthält er die Buttons Neu, Bearbeiten, Löschen und Schließen für genau diese Aktionen.
Den Dialog können nur Lehrbeauftragte erreichen.
Membervariablen:
document: Hier wird der Zeiger auf die Instanz von LVVDocument gespeichert, in der die Stammdaten enthalten sind. Der Wert wird per Konstruktor übergeben.
Memberfunktionen:
Konstruktor: Dieser Konstruktor hat als Parameter eine Referenz auf LVVDocument. Der Wert wird in der Membervariablen document abgelegt.
DoDataExchange: Diese von CWnd überladene Funktion dient dazu, den Dialog beim Initialisieren mit den Daten zu versorgen. Die ListBox wird mit Daten gefüllt, d.h. alle Lehrbeauftragten werden in der Form Name, Vorname eingefügt.
OnNeuKlick (Use-Case Lehrbeauftragten anlegen): Auf den Button Neuen Lehrbeauftragten erstellen wird geklickt. Hat der angemeldete Lehrbeauftragte nicht das Recht Administrator, wird ihm eine Fehlermeldung angezeigt.
Andernfalls wird der Dialog LVVDialogLehrbeauftragteBearbeiten wird angezeigt. Falls in diesem Dialog auf OK geklickt wird, wird ein neuer Lehrbeauftragter angelegt. Da im Bearbeiten-Dialog die Eingabe bereits auf Gültigkeit geprüft wird, kann der Lehrbeauftragte mit den Daten des Dialogs direkt angelegt und zur Lehrbeauftragten-Collection im Document zugefügt werden.
OnBearbeitenKlick (Use-Case Lehrbeauftragten bearbeiten): Auf den Button Lehrbeauftragten bearbeiten wird geklickt. Ist kein Lehrbeauftragter in der ListBox gewählt, wird eine Fehlermeldung ausgelöst. Hat der angemeldete Lehrbeauftragte nicht das Recht Administrator, wird ihm eine Fehlermeldung angezeigt, falls er nicht sich selbst ausgewählt hat. Hat er sich selbst gewählt, darf er nur die Mailadresse bearbeiten.
Ist ein Bearbeiten möglich, wird der Dialog LVVDialogLehrbeauftragteBearbeiten mit den Daten des gewählten Lehrbeauftragten angezeigt. Falls in diesem Dialog auf OK geklickt wird, werden die Werte angepaßt. Im Bearbeiten-Dialog werden die Eingaben bereits auf Gültigkeit geprüft, deshalb können die Daten über die SetXXX-Methoden der Lehrbeauftragte-Collection angepaßt werden.
OnLoeschenKlick (Use-Case Lehrbeauftragten löschen): Auf den Button Lehrbeauftragten löschen wird geklickt. Hat der angemeldete Lehrbeauftragte nicht das Recht Administrator, wird ihm eine Fehlermeldung angezeigt. Ist kein Lehrbeauftragter in der ListBox gewählt, wird eine Fehlermeldung ausgelöst. Ist der aktuell angemeldete Benutzer gewählt, wird ebenfalls eine Fehlermeldung ausgelöst (sich selbst bei laufender Anwendung zu löschen ist garantiert ungeschickt). Ist der Lehrbeauftragte bereits als Durchführender in Lehrveranstaltungen eingetragen, wird ebenfalls eine Fehlermeldung angezeigt (ein Löschen ist in diesem Fall nicht möglich).
Kann gelöscht werden, muss der Benutzer dies zuerst bestätigen, anschließend wird der Lehrbeauftragte aus der globalen Lehrbeauftragten-Collection entfernt.
Klasse LVVDialogLehrbeauftragterBearbeiten
Dieser Dialog dient dazu, die Daten eines Lehrbeauftragten zu bearbeiten oder einen neuen Lehrbeauftragten anzulegen.
Der Dialog erlaubt dem Benutzer das Bearbeiten der relevanten Werte (Textfelder für Name, Login, Passwort, Mailadresse und Personalnummer und eine Checkbox für das Administrator-Recht). Das Lehrbeauftragter-Datenobjekt wird nicht modifiziert, dies bleibt dem Verwender des Dialogs überlassen (dem Dialog LVVDialogLehrbeauftragte).
Membervariablen:
document: Hier wird der Zeiger auf die Instanz von LVVDocument gespeichert, in der die Stammdaten enthalten sind. Der Wert wird per Konstruktor übergeben.
lehrbeauftragterBearbeiten: Falls ein Lehrbeauftragter bearbeitet werden soll, wird eine Referenz auf dessen Datenobjekt in dieser Variablen gespeichert. Die Werte der Eingabefelder werden beim Klick auf OK nicht in dieser Variablen gespeichert.
Außerdem Membervariablen, in denen beim Klick auf OK die neuen Werte gespeichert werden.
Memberfunktionen:
DoDataExchange: Diese überladene Funktion dient dazu, die Werte der Eingabefelder zu setzen bzw. sie beim Klick auf OK in die Membervariablen der Klasse zu setzen. Außerdem erfolgt hier die Prüfung der Eingabewerte. Die Personalnummer darf bei keinem anderen Lehrbeauftragten vorkommen. Ein Name muss vorhanden sein. Die Mailadresse sollte gültig sein, falls vorhanden (also ein @-Zeichen und eine gültige Domänenangabe enthalten, außerdem keine ungültigen Zeichen). Ein Login und ein Passwort sind ebenfalls Pflicht. Der Login darf bei keinem anderen Lehrbeauftragten und keinem Studenten vorkommen (Prüfung erfolgt durch Durchlaufen der LehrbeauftragteCollection und der StudentCollection im Document).
Get-Funktionen für das Abrufen der aktuellen Werte im Dialog.
SetLehrbeauftragter(const LVVLehrbeauftragter *lehrbeauftragter): Setzen des Lehrbeauftragten, dessen Daten in dieser Klasse beim Bearbeiten angezeigt werden sollen. Wird ein neuer Lehrbeauftragter angelegt, wird hier NULL übergeben. Die Daten des Lehrbeauftragten werden in die Membervariablen des Dialogs geschrieben, so dass sie beim folgenden DoDataExchange in die Eingabefelder geschrieben werden können.
Klasse LVVDialogStudentenListe
Diese abstrakte Dialogklasse enthält eine ListBox mit allen Studenten der Anwendung. Von ihr erben LVVDialogStudentenWahl und LVVDialogStudentenBearbeiten, die den Dialog als Auswahl- bzw. Bearbeiten-Dialog benutzen.
Membervariablen:
document: Hier wird der Zeiger auf die Instanz von LVVDocument gespeichert, in der die Stammdaten enthalten sind. Der Wert wird per Konstruktor in den Subklassen übergeben.
Memberfunktionen sind:
DoDataExchange: Diese von CWnd überladene Funktion dient dazu, den Dialog beim Initialisieren mit den Daten zu versorgen. Die ListBox wird mit Daten gefüllt, d.h. alle Studenten werden in der Form Name, Vorname eingefügt. Ist ein Student angemeldet, sieht er hier nur sich selbst, kann also überhaupt nicht auf andere Studenten zugreifen. Ein Lehrbeauftragter sieht alle Studenten.
SetStudenten (const LVVStudentCollection* studenten): Mittels dieser Methode können die anzuzeigenden Studenten explizit gesetzt werden. Wird diese Methode aufgerufen, werden nicht alle vorhandenen Studenten angezeigt, sondern nur die aus der übergebenen Collection.
SetStudentenToList ( const LVVStudentCollection* studenten): Diese private Methode dient dazu, eine übergebene Studenten-Liste in die ListBox zu setzen. Sie wird aus DoDataExchange und aus SetStudenten heraus aufgerufen.
Klasse LVVDialogStudentenListeAuswahl
Dieser von LVVDialogStudentenListe abgeleitete Dialog enthält eine Listbox mit der Liste aller Studenten im System, sowie einen OK-Button. Er dient zu Auswahl von mehreren Studenten, d.h. die ListBox sollte Mehrfachauswahl erlauben.
Memberfunktionen sind:
Konstruktor: Dieser Konstruktor hat als Parameter eine Referenz auf LVVDocument. Der Wert wird in der Membervariablen document abgelegt.
const LVVStudentCollection* GetStudentenSelected(): Diese Methode ruft alle gewählten Studenten ab, es wird eine konstanten Collection zurückgegeben, da sie nicht zum Ändern gedacht ist.
Klasse LVVDialogStudentenListeBearbeiten
Dieser von LVVDialogStudentenListe abgeleitete Dialog enthält eine Listbox mit der Liste aller Studenten im System. Außerdem enthält er die Buttons Neu, Bearbeiten, Löschen und Schließen für genau diese Aktionen.
Memberfunktionen:
Konstruktor: Dieser Konstruktor hat als Parameter eine Referenz auf LVVDocument. Der Wert wird in der Membervariablen document abgelegt.
OnNeuKlick (Use-Case Student anlegen): Auf den Button Neuen Student erstellen wird geklickt. Ist ein Student angemeldet oder hat ein angemeldeter Lehrbeauftragter nicht das Recht Administrator, wird ihm eine Fehlermeldung angezeigt.
Andernfalls wird der Dialog LVVDialogStudentBearbeiten wird angezeigt. Falls in diesem Dialog auf OK geklickt wird, wird ein neuer Student angelegt. Da im Bearbeiten-Dialog die Eingabe bereits auf Gültigkeit geprüft wird, kann der Student mit den Daten des Dialogs direkt angelegt und zur Student-Collection im Document zugefügt werden.
OnBearbeitenKlick (Use-Cases Administrator: Student bearbeiten, Lehrbeauftragter: Studentendaten bearbeiten, Student: Mailadresse anpassen): Auf den Button Student bearbeiten wird geklickt. Ist kein Student in der ListBox gewählt, wird eine Fehlermeldung ausgelöst.
Ist ein Bearbeiten möglich, wird der Dialog LVVDialogStudentBearbeiten mit den Daten des gewählten Studenten angezeigt. Falls in diesem Dialog auf OK geklickt wird, werden die Werte angepaßt. Im Bearbeiten-Dialog werden die Eingaben bereits auf Gültigkeit geprüft, deshalb können die Daten über die SetXXX-Methoden der Studenten-Collection angepaßt werden.
OnLoeschenKlick (Use-Case Student löschen): Auf den Button Student löschen wird geklickt. Ist ein Student angemeldet oder hat ein angemeldeter Lehrbeauftragter nicht das Recht Administrator, wird ihm eine Fehlermeldung angezeigt. Ist kein Student in der ListBox gewählt, wird eine Fehlermeldung ausgelöst. Hat der Student bereits Lehrveranstaltungen belegt, wird ebenfalls eine Fehlermeldung angezeigt (ein Löschen ist in diesem Fall nicht möglich).
Kann gelöscht werden, muss der Benutzer dies zuerst bestätigen, anschließend wird der Student aus der globalen Studenten-Collection entfernt.
Klasse LVVDialogStudentBearbeiten
Dieser Dialog dient dazu, die Daten eines Studenten zu bearbeiten oder einen neuen Studenten anzulegen.
Der Dialog erlaubt dem Benutzer das Bearbeiten der relevanten Werte (Textfelder für Name, Login, Passwort, Mailadresse, Matrikelnummer und Einstiegssemester). Das Student-Datenobjekt wird nicht modifiziert, dies bleibt dem Verwender des Dialogs überlassen (dem Dialog LVVDialogStudenten).
Falls ein Lehrbeauftragter angemeldet ist und der angemeldete Benutzer nicht das Recht Administrator hat, darf er nur die Mailadresse des Studenten bearbeiten. Falls ein Student angemeldet ist, darf er nur seine eigenen Daten bearbeiten, und zwar nur die Mailadresse. In beiden Fällen werden alle Eingabefelder außer Mailadresse deaktiviert.
Membervariablen:
document: Hier wird der Zeiger auf die Instanz von LVVDocument gespeichert, in der die Stammdaten enthalten sind. Der Wert wird per Konstruktor übergeben.
studentBearbeiten: Falls ein Student bearbeitet werden soll, wird eine Referenz auf dessen Datenobjekt in dieser Variablen gespeichert. Die Werte der Eingabefelder werden beim Klick auf OK nicht in dieser Variablen gespeichert.
Außerdem Membervariablen, in denen beim Klick auf OK die neuen Werte gespeichert werden.
Memberfunktionen:
DoDataExchange: Diese überladene Funktion dient dazu, die Werte der Eingabefelder zu setzen bzw. sie beim Klick auf OK in die Membervariablen der Klasse zu setzen. Außerdem erfolgt hier die Prüfung der Eingabewerte. Die Matrikelnummer darf bei keinem anderen Studenten vorkommen. Ein Name muss vorhanden sein. Die Mailadresse sollte gültig sein, falls vorhanden (also ein @-Zeichen und eine gültige Domänenangabe enthalten, außerdem keine ungültigen Zeichen). Ein Login und ein Passwort sind ebenfalls Pflicht. Der Login darf bei keinem anderen Lehrbeauftragten und keinem Studenten vorkommen (Prüfung erfolgt durch Durchlaufen der LehrbeauftragteCollection und der StudentCollection im Document).
Get-Funktionen für das Abrufen der aktuellen Werte im Dialog.
SetStudent (const LVVStudent *student): Setzen des Studenten, dessen Daten in dieser Klasse beim Bearbeiten angezeigt werden sollen. Wird ein neuer Student angelegt, wird hier NULL übergeben. Die Daten des Studenten werden in die Membervariablen des Dialogs geschrieben, so dass sie beim folgenden DoDataExchange in die Eingabefelder geschrieben werden können.
Klasse LVVDialogLehrveranstaltung
Dieser Dialog enthält eine Listbox mit der Liste aller Lehrveranstaltungen im System. Außerdem enthält er die Buttons Neu, Bearbeiten, Löschen und Schließen für genau diese Aktionen.
Den Dialog darf nur ein Lehrbeauftragter öffnen, Studenten benötigen ihn nicht.
Membervariablen:
document: Hier wird der Zeiger auf die Instanz von LVVDocument gespeichert, in der die Stammdaten enthalten sind. Der Wert wird per Konstruktor übergeben.
Memberfunktionen:
Konstruktor: Dieser Konstruktor hat als Parameter eine Referenz auf LVVDocument. Der Wert wird in der Membervariablen document abgelegt.
DoDataExchange: Diese von CWnd überladene Funktion dient dazu, den Dialog beim Initialisieren mit den Daten zu versorgen. Die ListBox wird mit Daten gefüllt, d.h. alle Lehrveranstaltungen werden in der Form LV-Nummer, Bezeichnung eingefügt.
OnNeuKlick (Use-Case Lehrveranstaltung anlegen): Auf den Button Neue Lehrveranstaltung erstellen wird geklickt. Ist ein Student angemeldet oder hat ein angemeldeter Lehrbeauftragter nicht das Recht Administrator, wird ihm eine Fehlermeldung angezeigt.
Andernfalls wird der Dialog LVVDialogLehrveranstaltungBearbeiten wird angezeigt. Falls in diesem Dialog auf OK geklickt wird, wird eine neue Lehrveranstaltung angelegt. Da im Bearbeiten-Dialog die Eingabe bereits auf Gültigkeit geprüft wird, kann die Lehrveranstaltung mit den Daten des Dialogs direkt angelegt und zur Lehrveranstaltung-Collection im Document zugefügt werden.
OnBearbeitenKlick (Use-Case Lehrveranstaltung bearbeiten): Auf den Button Lehrveranstaltung bearbeiten wird geklickt. Ist kein Administrator angemeldet, ist das Bearbeiten nicht möglich. Ist keine Lehrveranstaltung in der ListBox gewählt, wird eine Fehlermeldung ausgelöst.
Ist ein Bearbeiten möglich, wird der Dialog LVVDialogLehrveranstaltungBearbeiten mit den Daten der gewählten Lehrveranstaltung angezeigt. Falls in diesem Dialog auf OK geklickt wird, werden die Werte angepaßt. Im Bearbeiten-Dialog werden die Eingaben bereits auf Gültigkeit geprüft, deshalb können die Daten über die SetXXX-Methoden der Lehrveranstaltung-Collection angepaßt werden.
OnLoeschenKlick (Use-Case Lehrveranstaltung löschen): Auf den Button Lehrveranstaltung löschen wird geklickt. Ist ein Student angemeldet oder hat ein angemeldeter Lehrbeauftragter nicht das Recht Administrator, wird ihm eine Fehlermeldung angezeigt. Ist keine Lehrveranstaltung in der ListBox gewählt, wird eine Fehlermeldung ausgelöst. Enthält die Lehrveranstaltung bereits Termine, wird ebenfalls eine Fehlermeldung angezeigt (ein Löschen ist in diesem Fall nicht möglich).
Kann gelöscht werden, muss der Benutzer dies zuerst bestätigen, anschließend wird die Lehrveranstaltung aus der globalen Lehrveranstaltungs-Collection entfernt.
Klasse LVVDialogLehrveranstaltungBearbeiten
Dieser Dialog dient dazu, die Daten einer Lehrveranstaltung zu bearbeiten oder eine neue Lehrveranstaltung anzulegen.
Der Dialog erlaubt dem Benutzer das Bearbeiten der relevanten Werte (Textfelder für LV-Nummer, Bezeichnung und Semesterwochenstundenzahl). Das Lehrveranstaltung-Datenobjekt wird nicht modifiziert, dies bleibt dem Verwender des Dialogs überlassen (dem Dialog LVVDialogLehrveranstaltung).
In diesen Dialog darf nur ein Administrator gelangen.
Membervariablen:
document: Hier wird der Zeiger auf die Instanz von LVVDocument gespeichert, in der die Stammdaten enthalten sind. Der Wert wird per Konstruktor übergeben.
lehrveranstaltungBearbeiten: Falls eine Lehrveranstaltung bearbeitet werden soll, wird eine Referenz auf dessen Datenobjekt in dieser Variablen gespeichert. Die Werte der Eingabefelder werden beim Klick auf OK nicht in dieser Variablen gespeichert.
Außerdem Membervariablen, in denen beim Klick auf OK die neuen Werte gespeichert werden.
Memberfunktionen:
DoDataExchange: Diese überladene Funktion dient dazu, die Werte der Eingabefelder zu setzen bzw. sie beim Klick auf OK in die Membervariablen der Klasse zu setzen. Außerdem erfolgt hier die Prüfung der Eingabewerte. Eine LV-Nummer muss vorhanden sein, und sie darf in keiner anderen Lehrveranstaltung vorkommen (Prüfung erfolgt durch Durchlaufen der LehrveranstaltungCollection im Document). Die Bezeichnung muss vorhanden sein.
Get-Funktionen für das Abrufen der aktuellen Werte im Dialog.
SetLehrveranstaltung (const LVVLehrveranstaltung *lehrveranstaltung): Setzen der Lehrveranstaltung, deren Daten in dieser Klasse beim Bearbeiten angezeigt werden sollen. Wird eine neue Lehrveranstaltung angelegt, wird hier NULL übergeben. Die Daten der Lehrveranstaltung werden in die Membervariablen des Dialogs geschrieben, so dass sie beim folgenden DoDataExchange in die Eingabefelder geschrieben werden können.
Klasse LVVDialogLehrveranstaltungsterminBearbeiten
Dieser Dialog dient dazu, die Daten eines Lehrveranstaltungstermins zu bearbeiten oder einen neuen Lehrveranstaltungstermin anzulegen.
Der Dialog erlaubt dem Benutzer das Bearbeiten der relevanten Werte (Textfelder für Semester und Bezeichnung, DatePicker für Beginn, Ende und die Uhrzeiten, eine ComboBox für den Wochentag und ein für die Auswahl des Lehrbeauftragten sowie Checkboxen für die Flags Gestartet und Durchgeführt). Der Administrator kann alle Felder bearbeiten, der Lehrbeauftragte kann nur das Flag Durchgeführt setzen.
Außerdem werden in einer ListBox alle Studenten aufgelistet, die den Termin belegt haben. Der Administrator kann Studenten frei hinzufügen oder entfernen, der Lehrbeauftragte, der den Termin durchführt, kann nur neue Studenten hinzufügen.
Das Lehrveranstaltungstermin-Datenobjekt wird nicht modifiziert, dies bleibt dem Verwender des Dialogs überlassen (der View LVVViewLehrveranstaltung).
In diesen Dialog dürfen Administrator und Lehrbeauftragter gelangen (letzterer nur, wenn er selbst den Lehrveranstaltungstermin durchführt).
Membervariablen:
document: Hier wird der Zeiger auf die Instanz von LVVDocument gespeichert, in der die Stammdaten enthalten sind. Der Wert wird per Konstruktor übergeben.
lehrveranstaltungsterminBearbeiten: Falls ein Lehrveranstaltungstermin bearbeitet werden soll, wird eine Referenz auf dessen Datenobjekt in dieser Variablen gespeichert. Die Werte der Eingabefelder werden beim Klick auf OK nicht in dieser Variablen gespeichert.
Außerdem Membervariablen, in denen beim Klick auf OK die neuen Werte gespeichert werden.
Memberfunktionen:
DoDataExchange: Diese überladene Funktion dient dazu, die Werte der Eingabefelder zu setzen bzw. sie beim Klick auf OK in die Membervariablen der Klasse zu setzen. Außerdem erfolgt hier die Prüfung der Eingabewerte. Eine Bezeichnung muss vorhanden sein, und sie darf in keinem anderen Lehrveranstaltungstermin dieser Lehrveranstaltung in diesem Semester vorkommen (Prüfung erfolgt durch Durchlaufen der LehrveranstaltungsterminCollection im Document). Beginn und Ende müssen gültig sein, d.h. der Beginn muss vor dem Ende liegen. Auf weitere Prüflogik wird verzichtet, da auch Terminzeiten außerhalb der Vorlesungszeiträume denkbar wären.
OnStudentHinzufuegenKlick: Klick auf den Button Student hinzufügen: Beim Klick auf diesen Button wird der Dialog LVVDialogStudentenListeAuswahl angezeigt, in dem mehrere Studenten ausgewählt werden können. Nach Beenden dieses Dialogs werden die gewählten Studenten ermittelt. Jeder Student, der noch nicht in der ListBox enthalten ist, wird zugefügt.
OnStudentEntfernenKlick: Klick auf den Button Student entfernen: Ist ein Student in der ListBox der Studenten gewählt, wird er nach einer Sicherheitsabfrage entfernt.
Get-Funktionen für das Abrufen der aktuellen Werte im Dialog.
SetLehrveranstaltungstermin (const LVVLehrveranstaltungstermin *lehrveranstaltungstermin): Setzen des Lehrveranstaltungstermins, dessen Daten in dieser Klasse beim Bearbeiten angezeigt werden sollen. Wird ein neuer Lehrveranstaltungstermin angelegt, wird hier NULL übergeben. Die Daten des Lehrveranstaltungstermins werden in die Membervariablen des Dialogs geschrieben, so dass sie beim folgenden DoDataExchange in die Eingabefelder geschrieben werden können.
const LVVStudentCollection* GetListStudenten (): Abrufen der Liste der Studenten, die am Lehrveranstaltungstermin teilnehmen. Der Aufrufer muss die Collection durchlaufen und pro LVVStudent-Objekt prüfen, ob dieser Student in der LVVLVTermin2StudentCollection im Termin vorhanden ist, oder ob ein entsprechendes Zuordnungsobjekt erzeugt oder gelöscht werden muss. Die Liste ist konstant, da sie nur als Information darüber dient, welche Studenten gewählt wurden, aber nicht selbst modifiziert werden darf.
Klasse LVVDialogAbgabeBearbeiten
Dieser Dialog dient dazu, die Daten einer Abgabe innerhalb eines Lehrveranstaltungstermins zu bearbeiten oder eine neue Abgabe anzulegen.
Der Dialog erlaubt dem Lehrbeauftragten das Bearbeiten der relevanten Werte (Textfelder für Bezeichnung und Maximalpunktzahl).
Das Abgabe-Datenobjekt wird nicht modifiziert, dies bleibt dem Verwender des Dialogs überlassen (der View LVVViewLehrveranstaltung).
Membervariablen:
document: Hier wird der Zeiger auf die Instanz von LVVDocument gespeichert, in der die Stammdaten enthalten sind. Der Wert wird per Konstruktor übergeben.
abgabeBearbeiten: Falls eine Abgabe bearbeitet werden soll, wird eine Referenz auf dessen Datenobjekt in dieser Variablen gespeichert. Die Werte der Eingabefelder werden beim Klick auf OK nicht in dieser Variablen gespeichert.
lehrveranstaltungstermin: Da für die Eingabeprüfung auch der Lehrveranstaltungstermin erforderlich ist, wird dieser hier gespeichert (muss generell gesetzt sein, da eine Abgabe ohne Termin nicht existieren kann).
Außerdem Membervariablen, in denen beim Klick auf OK die neuen Werte gespeichert werden.
Memberfunktionen:
Konstruktor: Ihm wird der Lehrveranstaltungstermin übergeben, in dem die Abgabe erzeugt werden soll bzw. vorhanden ist. Grund ist, dass der Lehrveranstaltungstermin bei der Eingabeprüfung benötigt wird, um die Eindeutigkeit der Bezeichnung der Abgabe zu prüfen.
DoDataExchange: Diese überladene Funktion dient dazu, die Werte der Eingabefelder zu setzen bzw. sie beim Klick auf OK in die Membervariablen der Klasse zu setzen. Außerdem erfolgt hier die Prüfung der Eingabewerte. Eine Bezeichnung muss vorhanden sein, und sie darf in keiner anderen Abgabe dieses Lehrveranstaltungstermins vorkommen (Prüfung erfolgt durch Durchlaufen der AbgabeCollection des Lehrveranstaltungstermins im Document).
Get-Funktionen für das Abrufen der aktuellen Werte im Dialog.
SetAbgabe (const LVVAbgabe *abgabe): Setzen der Abgabe, deren Daten in dieser Klasse beim Bearbeiten angezeigt werden sollen. Wird eine neue Abgabe angelegt, wird hier NULL übergeben. Die Daten der Abgabe werden in die Membervariablen des Dialogs geschrieben, so dass sie beim folgenden DoDataExchange in die Eingabefelder geschrieben werden können.
Klasse LVVDialogArbeitsgruppeBearbeiten
Dieser Dialog dient dazu, die Daten einer Arbeitsgruppe innerhalb einer Abgabe zu bearbeiten oder eine neue Arbeitsgruppe anzulegen.
Der Dialog erlaubt dem Lehrbeauftragten das Bearbeiten der relevanten Werte (Textfeld für die Bezeichnung). In einer ListBox werden die Studenten angezeigt, die zu dieser Arbeitsgruppe gehören, neben der ListBox sind Buttons für das Hinzufügen oder Entfernen von Studenten.
Das Arbeitsgruppe-Datenobjekt wird nicht modifiziert, dies bleibt dem Verwender des Dialogs überlassen (der View LVVViewArbeitsgruppe).
Membervariablen:
document: Hier wird der Zeiger auf die Instanz von LVVDocument gespeichert, in der die Stammdaten enthalten sind. Der Wert wird per Konstruktor übergeben.
arbeitsgruppeBearbeiten: Falls eine Arbeitsgruppe bearbeitet werden soll, wird eine Referenz auf dessen Datenobjekt in dieser Variablen gespeichert. Die Werte der Eingabefelder werden beim Klick auf OK nicht in dieser Variablen gespeichert.
abgabe: Da für die Eingabeprüfung auch die Abgabe erforderlich ist, wird diese hier gespeichert (muss generell gesetzt sein, da eine Arbeitsgruppe ohne Abgabe nicht existieren kann).
listStudenten: In dieser Liste werden die Studenten gespeichert, die in die Arbeitsgruppe gehören. Sie können in diesem Dialog modifiziert werden.
Außerdem Membervariablen, in denen beim Klick auf OK die neuen Werte gespeichert werden.
Memberfunktionen:
Konstruktor: Ihm wird die Abgabe übergeben, in dem die Arbeitsgruppe erzeugt werden soll bzw. vorhanden ist. Grund ist, dass die Abgabe bei der Eingabeprüfung benötigt wird, um die Eindeutigkeit der Bezeichnung der Arbeitsgruppe zu prüfen und zu verhindern, dass Studenten mehrfach zugeordnet werden..
DoDataExchange: Diese überladene Funktion dient dazu, die Werte der Eingabefelder zu setzen bzw. sie beim Klick auf OK in die Membervariablen der Klasse zu setzen. Außerdem erfolgt hier die Prüfung der Eingabewerte. Eine Bezeichnung muss vorhanden sein, und sie darf in keiner anderen Arbeitsgruppe dieser Abgabe vorkommen (Prüfung erfolgt durch Durchlaufen der ArbeitsgruppeCollection der Abgabe im Document). Mindestens ein Student muss in der Arbeitsgruppe vorhanden sein. Dass kein Student in zwei Arbeitsgruppen auftaucht, wird durch die Initialisierung der Studentenauswahl sichergestellt.
OnStudentHinzufuegenKlick: Klick auf den Button Studenten hinzufügen: Es wird eine Liste der Studenten ermittelt, die diesen Lehrveranstaltungstermin belegt haben, aber noch nicht in dieser Arbeitsgruppe sind. Der Dialog LVVDialogStudentenListeAuswahl wird angezeigt, wobei die eben ermittelte Studentencollection angezeigt wird.
Nach dem Klick auf OK werden die neu hinzugekommenen Studenten zu der Membervariablen listStudent zugefügt (aber es wird noch nichts im Datenobjekt LVVArbeitsgruppe geändert).
OnStudentEntfernenKlick: Klick auf den Button Studenten entfernen: Ist kein Student gewählt, wird eine Fehlermeldung angezeigt. Ansonsten wird der Student nach dem Bestätigen einer Sicherheitsabfrage aus der Membervariablen listStudent entfernt (aber es wird noch nichts im Datenobjekt LVVArbeitsgruppe geändert).
Get-Funktionen für das Abrufen der aktuellen Werte im Dialog.
const LVVStudentCollection* GetStudenten(): Abrufen der Studenten, die zur Arbeitsgruppe gehören sollen (einschließlich der Modifikationen durch Hinzufügen oder Entfernen).
SetArbeitsgruppe (const LVVArbeitsgruppe *arbeitsgruppe): Setzen der Arbeitsgruppe, deren Daten in dieser Klasse beim Bearbeiten angezeigt werden sollen. Wird eine neue Arbeitsgruppe angelegt, wird hier NULL übergeben. Die Daten der Arbeitsgruppe werden in die Membervariablen des Dialogs geschrieben, so dass sie beim folgenden DoDataExchange in die Eingabefelder geschrieben werden können.
Klasse LVVDialogBewertungBearbeiten
Dieser Dialog dient dazu, eine einzelne Bewertung zu bearbeiten. Dazu kann man einen beliebig langen Kommentartext und eine Punktzahl eingeben.
Memberfunktionen:
Der Dialog verfügt nur über Get- und Set-Funktionen für Kommentartext und Punktzahl.
Klasse LVVDateiabgabeBearbeiten
Dieser Dialog dient zum Eingeben einer Dateiabgabe. Man kann eine Datei auswählen und einen Kommentartext dazu angeben (z.B. eine Beschreibung der Datei). Der Kommentartext ist genauso wie die Datei Pflicht.
Memberfunktionen:
Der Dialog verfügt nur über Get-Funktionen für Kommentartext und Datei.
SetKommentar(): Der Kommentartext kann von außen gesetzt werden. Der Dateiname ist fest, kann nur beim Erzeugen einer Dateiabgabe geändert werden. Wird diese Methode aufgerufen, ist ein Ändern der Datei nicht möglich, der Button Dateiauswahl wird deaktiviert.
Klasse LVVDialogArbeitsgruppeBewertungBearbeiten
In diesem Dialog erfolgt das Verwalten der Dateiabgaben und das Bewerten der Leistungen der Arbeitsgruppe. Hierzu enthält er eine Liste der Studenten (CListCtrl), in der neben dem Studenten-Namen auch Individualbewertung und punktzahl enthalten sind.
In einer zweiten Liste (CListBox) werden die Dateiabgaben der Arbeitsgruppe angezeigt.
Membervariablen:
arbeitsgruppe: Dies ist die Arbeitsgruppe, deren Daten im Dialog angezeigt und bearbeitet werden.
listStudentZuordnungen: In dieser Liste werden die Studenten-Zuordnungen mitsamt den Einzelnoten verwaltet. Sie wird beim Initialisieren gesetzt, kann anschließend geändert werden. Nach dem Schließen des Dialogs können die Daten gespeichert werden, allerdings nicht über diese Liste, da sie nur als konstanter Zeiger nach außen gegeben wird.
listDateiabgaben: Diese Liste enthält die Dateiabgaben der Arbeitsgruppe in Kopie. Dadurch können hier Elemente zugefügt und entfernt werden, ohne dass der Originaldatensatz beeinträchtigt wird.
abgabe: Hier sind Informationen über die Abgabe erforderlich.
lehrveranstaltungstermin: Der Dialog benötigt für einige Eingabeprüfungen die Angabe des Lehrveranstaltungstermins.
Memberfunktionen:
DoDataExchange(): Initialisieren der Eingabefelder im
Dialog: Die Liste der Studenten wird gefüllt, ihre Einzelnoten
(falls vorhanden) werden angezeigt. Die Liste der Dateiabgaben wird
ebenfalls gefüllt. Falls Bewertungsmails versendet wurden,
werden deren Daten angezeigt.
Beim Klick auf OK geschieht hier nichts, da Bewertungen
und Dateiabgaben beim Bearbeiten in Klassenvariablen gespeichert
werden.
SetArbeitsgruppe (const LVVArbeitsgruppe *arbeitsgruppe): Setzen der Arbeitsgruppe, deren Daten in dieser Klasse beim Bearbeiten angezeigt werden sollen. Wird eine neue Arbeitsgruppe angelegt, wird hier NULL übergeben. Die Daten der Arbeitsgruppe werden in die Membervariablen des Dialogs geschrieben, so dass sie beim folgenden DoDataExchange in die Eingabefelder geschrieben werden können.
SetAbgabe (const LVVAbgabe *abgabe): Setzen der Abgabe, zu der die Arbeitsgruppe gehört. Die Abgabe ist erforderlich für einige Eingabeprüfungen, wird aber nicht modifiziert.
SetLehrveranstaltungstermin (const LVVLVTermin*lvTermin): Setzen des Lehrveranstaltungstermins, zu dem die Arbeitsgruppe gehört. Der LV-Termin ist erforderlich für einige Eingabeprüfungen, wird aber nicht modifiziert.
OnBewertungAlleStudentenKlick: Klick auf den Button Bewertung für alle Studenten abgeben (nur möglich, wenn Lehrveranstaltung noch nicht abgeschlossen ist oder der angemeldete Benutzer ein Administrator ist): Der Dialog LVVDialogBewertungBearbeiten wird angezeigt, die Eingaben werden in allen StudentenZuordnungen übernommen.
OnBewertungStudentGewaehltKlick: Klick auf den Button Bewertung für den gewählten Studenten abgeben (nur möglich, wenn ein Student gewählt ist und die Lehrveranstaltung noch nicht abgeschlossen ist oder der angemeldete Benutzer ein Administrator ist): Der Dialog LVVDialogBewertungBearbeiten wird angezeigt, die Eingaben werden für die gewählte StudentenZuordnungen übernommen.
OnBewertungBearbeitenAlleStudentenKlick: Klick auf den Button Bewertung für den gewählten Studenten bearbeiten (nur möglich, wenn ein Student gewählt ist und die Lehrveranstaltung noch nicht abgeschlossen ist oder der angemeldete Benutzer ein Administrator ist): Der Dialog LVVDialogBewertungBearbeiten wird mit den Bewertungsinformationen der gewählten Studentenzuordnung angezeigt, anschließend werden die Eingaben wieder übernommen.
OnBewertungBearbeitenStudentGewaehltKlick: Klick auf den Button Bewertung für alle Studenten bearbeiten (nur möglich, wenn die Lehrveranstaltung noch nicht abgeschlossen ist oder der angemeldete Benutzer ein Administrator ist): Der Dialog LVVDialogBewertungBearbeiten wird mit den Bewertungsinformationen der ersten Studentenzuordnung (in der Liste) angezeigt, anschließend werden die Eingaben wieder übernommen. Hinweis: Falls es unterschiedliche Bewertungen gibt, werden diese dadurch verworfen, da nur die erste Bewertung im Dialog angezeigt wird.
OnDateiabgabeHinzufuegenKlick: Klick auf den Button Dateiabgabe zufügen:
Dies ist dem durchführenden Lehrbeauftragten der Veranstaltung
möglich (solange die Veranstaltung nicht abgeschlossen ist),
außerdem dem Administrator. Ein Student darf dies nur, wenn
die Veranstaltung nicht abgeschlossen ist und er die Abgabe
innerhalb von 14 Tagen nach dem festgelegten Abgabedatum tätigt.
Es öffnet sich der Dialog
LVVDateiabgabeBearbeiten, in dem eine Datei gewählt wird und
ein Kommentar abgegeben werden kann. Anschließend wird ein
neues Objekt LVVDateiabgabe zur Membervariablen listDateiabgaben
zugefügt.
OnDateiabgabeBearbeitenKlick: Klick auf den Button Dateiabgabe bearbeiten:
Dies ist dem durchführenden Lehrbeauftragten der Veranstaltung
möglich (solange die Veranstaltung nicht abgeschlossen ist),
außerdem dem Administrator. Ein Student darf dies nicht
Es öffnet sich der Dialog
LVVDateiabgabeBearbeiten, in dem allerdings die Datei nicht geändert
werden kann, nur der Kommentar kann angepaßt werden. Die
Änderungen werden in listDateiabgaben nachgezogen.
OnDateiabgabeEntfernenKlick: Klick auf den Button Dateiabgabe entfernen: Dies ist dem durchführenden Lehrbeauftragten der Veranstaltung möglich (solange die Veranstaltung nicht abgeschlossen ist), außerdem dem Administrator. Ein Student darf dies nicht, sogar wenn er die Abgabe gerade erst selbst zugefügt hat. Ist keine Dateiabgabe gewählt, erscheint eine Fehlermeldung. Nach einer Sicherheitsabfrage wird die gewählte Dateiabgabe aus der Membervariablen listDateiabgaben entfernt.
const LVVArbeitsgruppeStudentCollection * GetStudentenZuordnung (): Abrufen der Studentenzuordnung, in der die Einzelnoten enthalten sind. An der Anzahl der Elemente wird hier nichts geändert, nur an den Bewertungen. Es wird eine konstante Collection zurückgegeben, so dass der Aufrufer die Änderungen manuell in die echte Datenklasse übertragen muss.
const LVVDateiAbgabeCollection * GetDateiAbgaben(): Abrufen der Dateiabgaben, die in der Membervariablen listDateiabgaben gespeichert wurden. Es wird eine konstante Collection zurückgegeben, so dass der Aufrufer die Änderungen manuell in die echte Datenklasse übertragen muss.