Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
modul:m320_2024:learningunits:lu09:aufgaben:schulverwaltung [2024/09/16 13:26] msutermodul:m320_2024:learningunits:lu09:aufgaben:schulverwaltung [2024/09/26 10:04] (aktuell) msuter
Zeile 1: Zeile 1:
 ====== LU09.A01 - Schulverwaltung ====== ====== LU09.A01 - Schulverwaltung ======
 +<nodisp>TODO: ''show_report'' in ''Student'' entfernen. Die Methode macht das gleiche wie das ''property''</nodisp>
 <WRAP center round todo 60%> <WRAP center round todo 60%>
  
Zeile 23: Zeile 23:
 Dabei nutzen Sie Ihr Wissen zu ein- und zweiseitiger Beziehung sowie den 4 gezeigten Fällen der Referenzzuweisung. Ebenso verwenden Sie Mehrfachbeziehungen. Dabei nutzen Sie Ihr Wissen zu ein- und zweiseitiger Beziehung sowie den 4 gezeigten Fällen der Referenzzuweisung. Ebenso verwenden Sie Mehrfachbeziehungen.
  
-{{https://ritholtz.com/wp-content/uploads/2020/03/dontpanic.jpg}}+{{https://ritholtz.com/wp-content/uploads/2020/03/dontpanic.jpg?300|}}
  
 ===== Vorgehen ===== ===== Vorgehen =====
Zeile 47: Zeile 47:
   * Fügt einen Studenten in die Liste ein.   * Fügt einen Studenten in die Liste ein.
   * Beachten Sie, dass gemäss Klassendiagramm max. 20 Studenten möglich sind. Das müssen Sie beim Zufügen von Studenten umsetzen.    * Beachten Sie, dass gemäss Klassendiagramm max. 20 Studenten möglich sind. Das müssen Sie beim Zufügen von Studenten umsetzen. 
 +  * Beim Versuch mehr als 20 Studenten einzufügen, soll die Methode einen ''OverflowError'' werfen.
  
-=== count_student ===+=== count_students ===
   * Gibt die Anzahl Studenten zurück.   * Gibt die Anzahl Studenten zurück.
  
 === take_student(index) === === take_student(index) ===
   * Liefert den Studenten beim angegebenen Index.   * Liefert den Studenten beim angegebenen Index.
-  * Stellen Sie sicher, dass ein ungültiger Index zu keinem Laufzeitfehler führt. Stattdessen soll bei einem ungültigen Index der Wert ''None'' zurück gegeben werden.+  * Bei einem ungültigen Index soll ein ''IndexError'' ausgelöst werden.
  
 === show_student_list === === show_student_list ===
-  * Diese Methode liefert eine Liste aller Studenten an. Die Ausgabe könnte wie folgt aussehen:+  * Diese Methode liefert eine Liste aller Studenten. Die Ausgabe könnte wie folgt aussehen:
  
 <code> <code>
Zeile 65: Zeile 66:
  
 === show_student_report(name) === === show_student_report(name) ===
-  * Diese Methode liefert das Zeugnis für einen Studenten mit allen Fächern und dem Notenschnitt an. Die Ausgabe könnte wie folgt aussehen:+  * Diese Methode liefert das Zeugnis für einen Studenten mit allen Fächern und dem Notenschnitt. Die Ausgabe könnte wie folgt aussehen:
  
 <code> <code>
-...+Zeugnis für: Cem 
 +   Mathe     :  4.25 
 +   Deutsch   :  5.50 
 +   Turnen    :  5.50
 </code> </code>
 +
 +<WRAP center round tip 60%>
 +Die Methode erzeugt selber keine Liste, sie ruft lediglich eine Methode in einem anderen Objekt auf.
 +</WRAP>
  
 ==== Student ==== ==== Student ====
 === Konstruktor === === Konstruktor ===
   * Beachten Sie die Parameter und Defaultwerte.   * Beachten Sie die Parameter und Defaultwerte.
- 
 === show_report === === show_report ===
-  * Diese Methode liefert das Zeugnis dieses Studenten mit allen Fächern und dem Notenschnitt. +Gibt die Referenz auf das ''report''-Objekt aus dem Attribut zurück.
- +
-Die Ausgabe könnte wie folgt aussehen: +
- +
-<code> +
-... +
-</code>+
  
 ==== StudentReport ==== ==== StudentReport ====
Zeile 91: Zeile 92:
 === add_subject === === add_subject ===
   * Beachten Sie, dass gemäss Klassendiagramm max. 3 Fächer möglich sind.   * Beachten Sie, dass gemäss Klassendiagramm max. 3 Fächer möglich sind.
-  * Beim Versuch mehr als 3 Fächer (''Subject'') einzufügen, soll die Methode einen ''???Error'' werfen.+  * Beim Versuch mehr als 3 Fächer (''Subject'') einzufügen, soll die Methode einen ''OverflowError'' werfen.
  
 === take_subject === === take_subject ===
-  * Stellen Sie sicher, dass ein ungültiger Index zu keinem Laufzeitfehler führtStattdessen soll bei einem ungültigen Index der Wert ''None'' zurück gegeben werden.+  * Liefert das Fach (''Subject'') beim angegebenen Index. 
 +  * Bei einem ungültigen Index soll ein ''IndexError'' ausgelöst werden.
  
 === show_overview === === show_overview ===
Zeile 100: Zeile 102:
  
 <code> <code>
-...+Zeugnis für: Cem 
 +   Mathe     :  4.25 
 +   Deutsch   :  5.50 
 +   Turnen    :  5.50
 </code> </code>
  
Zeile 107: Zeile 112:
    
 <code> <code>
-...+Fach: Mathe      mit 2 Noten 
 + - 1: 5.00 am 01.01.2011 
 + - 2: 3.50 am 02.02.2022 
 + Schnitt: 4.25 
 +Fach: Deutsch    mit 3 Noten 
 + - 1: 5.50 am 03.03.2033 
 + - 2: 6.00 am 04.04.2044 
 + - 3: 5.00 am 05.05.2055 
 + Schnitt: 5.50
 </code> </code>
  
Zeile 118: Zeile 131:
 === add_grade === === add_grade ===
   * Beachten Sie, dass gemäss Klassendiagramm max. 4 Noten möglich sind. Das müssen Sie beim Zufügen von Noten (''Grade''-Objekte) umsetzen.    * Beachten Sie, dass gemäss Klassendiagramm max. 4 Noten möglich sind. Das müssen Sie beim Zufügen von Noten (''Grade''-Objekte) umsetzen. 
 +  * Beim Versuch mehr als 4 Noten einzufügen, soll die Methode einen ''OverflowError'' werfen.
   * Die untere Grenze von 2 Noten müssen Sie (noch) nicht beachten.   * Die untere Grenze von 2 Noten müssen Sie (noch) nicht beachten.
  
 === take_grade === === take_grade ===
-  * Stellen Sie sicher, dass ein ungültiger Index zu keinem Laufzeitfehler führtStattdessen soll bei einem ungültigen Index der Wert ''None'' zurück gegeben werden.+  * Liefert die Note (''Grade'') beim angegebenen Index. 
 +  * Bei einem ungültigen Index soll ein ''IndexError'' ausgelöst werden.
  
-=== calc_average ===+=== count_grades === 
 +  * Gibt die Anzahl Noten (''Grade'') zurück. 
 + 
 +=== average ===
   * Die Methode berechnet den Notendurchschnitt aus allen ''Grade''-Objekten in der Liste.   * Die Methode berechnet den Notendurchschnitt aus allen ''Grade''-Objekten in der Liste.
   * Falls keine ''Grade''-Objekte in der Liste vorhanden sind, wird der Wert ''0.00'' zurück gegeben.   * Falls keine ''Grade''-Objekte in der Liste vorhanden sind, wird der Wert ''0.00'' zurück gegeben.
Zeile 136: Zeile 154:
 === Konstruktor === === Konstruktor ===
   * Initialisieren Sie die Werte ''value'' und ''date'' gemäss Klassendiagramm.   * Initialisieren Sie die Werte ''value'' und ''date'' gemäss Klassendiagramm.
-  * Achten Sie auf die Zusicherung für den Wert von ''value''. Diese nehmen Sie im ''__post_init__'' vor, d.hdass Sie keine setter-Methode schreiben (ist gemäss Klassendiagramm nicht vorgesehen).+  * Achten Sie auf die Zusicherung für den Wert von ''value''. Diese nehmen Sie im ''__post_init__'' vor. \\ Falls der Wert ungültig ist (keine Zahlzu gross, zu klein) lösen Sie einen ''ValueError'' aus. 
 + 
 +=== date.setter === 
 +<WRAP center round tip 60%> 
 +Diese Methode ist bereits vorgegeben. 
 +</WRAP> 
 + 
 +  * Diese Methode schreibt das Attribut ''self._date''
 +  * Je nach Art des Inputs wird dieser unterschiedlich verarbeitet: 
 +    * ''DateTime'' => direkt speichern 
 +    * ''String'' => Umwandeln in ''DateTime'' 
 +    * Alles andere => Der aktuelle Zeitstempel wird gespeichert.
  
  
 ==== main ==== ==== main ====
 In der ''main''-Methode erzeugen Sie die verschiedenen Objekte und zeigen die Zeugnisse an. In der ''main''-Methode erzeugen Sie die verschiedenen Objekte und zeigen die Zeugnisse an.
- 
-  * Erzeugen Sie die Objekte in der Reihenfolge, wie sie auch für die Zuweisung in den Konstruktoren nötig sind. Wenn Sie unsicher sind, skizzieren Sie sich den Ablauf des Programms als Sequenzdiagramm auf.  
  
 === Ausgabe === === Ausgabe ===
-Das Programm liefert  
-   * eine Liste der Studenten 
-   * pro Student das Zeugnis (Report) mit dem Notenschnitt 
-   * für einen Studenten alle Einzelnoten. Sie können hier frei wählen, für wen die Noten ausgegeben werden. 
  
-Die Ausgabe soll in etwa wie folgt aussehen:\\ +<code> 
-{{:modul:m320:learningunits:lu05:aufgaben:lu03-aufg8-schulverwaltung-2.png?200|}}+Moritz 
 +Pia 
 +Cem 
 + 
 +---- 
 +Zeugnis fürMoritz 
 +   Mathe      4.25 
 +   Deutsch    5.00 
 +   Turnen     5.00 
 +---- 
 +Zeugnis fürPia 
 +   Mathe      5.50 
 +   Deutsch    5.33 
 +   Turnen    :  5.25 
 +---
 +Zeugnis für: Cem 
 +   Mathe     :  4.25 
 +   Deutsch   :  5.50 
 +   Turnen    :  5.50 
 +---- 
 +Student Theo nicht gefunden 
 +Fach: Mathe      mit Noten 
 + - 1: 5.00 am 01.01.2011 
 + - 2: 3.50 am 02.02.2022 
 + Schnitt: 4.25 
 +Fach: Deutsch    mit 3 Noten 
 + - 1: 5.50 am 03.03.2033 
 + - 2: 6.00 am 04.04.2044 
 + - 3: 5.00 am 05.05.2055 
 + Schnitt: 5.50 
 +Fach: Turnen     mit 4 Noten 
 + - 1: 4.50 am 06.06.2066 
 + - 2: 6.00 am 07.07.1977 
 + - 3: 6.00 am 08.08.1988 
 + - 4: 5.50 am 09.09.1999 
 + Schnitt: 5.50 
 +</code>
  
 === Dauer === === Dauer ===
Zeile 162: Zeile 221:
 <details> <details>
 <summary>//=> GitHub Repo für externe Besucher//</summary> <summary>//=> GitHub Repo für externe Besucher//</summary>
-GitHub Repository https://github.com/templates-python/m319-lu10-a02-reader-module+GitHub Repository https://github.com/templates-python/m320-lu09-a01-school
  
 //Lernende am BZZ müssen den Link zum GitHub Classroom Assignment verwenden// //Lernende am BZZ müssen den Link zum GitHub Classroom Assignment verwenden//
  • modul/m320_2024/learningunits/lu09/aufgaben/schulverwaltung.1726485988.txt.gz
  • Zuletzt geändert: 2024/09/16 13:26
  • von msuter