sharezone-app icon indicating copy to clipboard operation
sharezone-app copied to clipboard

Add more grading systems

Open Jonas-Sander opened this issue 4 months ago • 2 comments

Added grade systems:

  • GradingSystem.sixToOneWithDecimals => '6 - 1 (mit Kommazahlen)'.
  • GradingSystem.oneToFiveWithDecimals => '1 - 5 (mit Kommazahlen)'.
  • GradingSystem.oneToSixWithDecimals => '1 - 6 (mit Kommazahlen)'.
  • GradingSystem.zeroToHundredPercentWithDecimals => '0 - 100% (mit Kommazahlen)'.
  • GradingSystem.austrianBehaviouralGrades => 'Österreichische Verhaltensnoten'.

Not yet added:

  • GradePerformance

Bugs:

  • The GradingSystem.austrianBehaviouralGrades will display a number if not exactly a value of the system (e.g. best and second best are added, average is between both grades -> number is shown)

Before the code differentiated between grade systems where the user would choose between a list of values and where a grade numerical value would need be written.

Now there is not a clear cut differentiation anymore. E.g. 0 - 15 points was a list of possible values before, now it is a ContinuousNumericalPossibleGradesResult:

- class ZeroToFiveteenPointsGradingSystem extends _GradingSystem
-     with EquatableMixin {
-   @override
-   IList<String> get possibleValues => const IListConst([
-         '0',
-         '1',
-         '2',
-         '3',
-         '4',
-         '5',
-         '6',
-         '7',
-         '8',
-         '9',
-         '10',
-         '11',
-         '12',
-         '13',
-         '14',
-         '15',
-       ]);
- 
-   // ....
- }

+ const zeroToFivteenPointsSpec = GradingSystemSpec(
+   gradingSystem: GradingSystem.zeroToFivteenPoints,
+   possibleGrades: ContinuousNumericalPossibleGradesResult(
+     min: 0,
+     max: 15,
+     decimalsAllowed: false,
+   ),
+ );

The UI will need to decide what type of input it should show.
Values with special grade strings can be accessed by ContinuousNumericalPossibleGradesResult.specialGrades.

class ContinuousNumericalPossibleGradesResult extends PossibleGradesResult {
  final num min;
  final num max;
  final bool decimalsAllowed;

  /// Special non-numerical grade strings that have an assigned numerical value.
  ///
  /// For example [GradingSystem.oneToSixWithPlusAndMinus] might have the values:
  /// `{'1+':0.75,'1-':1.25, /**...*/ '5-':5.25}`.
  final IMap<String, num> specialGrades;

  const ContinuousNumericalPossibleGradesResult({
    required this.min,
    required this.max,
    required this.decimalsAllowed,
    this.specialGrades = const IMapConst({}),
  });
}

final oneToSixWithPlusAndMinusSpec =
    GradingSystemSpec.continuousFromPossibleGradesResult(
  gradingSystem: GradingSystem.oneToSixWithPlusAndMinus,
  possibleGrades: const ContinuousNumericalPossibleGradesResult(
    min: 0.75,
    max: 6,
    decimalsAllowed: true,
    specialGrades: IMapConst(
      {
        '1+': 0.75,
        '1-': 1.25,
        '2+': 1.75,
        '2-': 2.25,
        '3+': 2.75,
        '3-': 3.25,
        '4+': 3.75,
        '4-': 4.25,
        '5+': 4.75,
        '5-': 5.25,
      },
    ),
  ),
);

There is another grade result for grade systems where the user would never see a number:

class NonNumericalPossibleGradesResult extends PossibleGradesResult {
  final IList<String> grades;

  const NonNumericalPossibleGradesResult(this.grades);
}

final austrianBehaviouralGradesSpec = GradingSystemSpec.nonNumerical(
  GradingSystem.austrianBehaviouralGrades,
  const IMapConst({
    'Sehr zufriedenstellend': 1,
    'Zufriedenstellend': 2,
    'Wenig zufriedenstellend': 3,
    'Nicht zufriedenstellend': 4,
  }),
);

The numbers are for the internal calculations or we might decide to use it to show the user how close he is to one of the results.

Österreichische Verhaltensnoten

  • 'Sehr zufriedenstellend
  • 'Zufriedenstellend'
  • 'Wenig zufriedenstellend
  • 'Nicht zufriedenstellend

I just hardcoded the names as string for now. I'm not sure if an enum is better for the future?

Österreichiches Notensystem (1-5)

Wikipedia: Schulnote (Österreich)](https://de.wikipedia.org/wiki/Schulnote#%C3%96sterreich)

Informell werden oft Zwischennoten (z. B.: 2–3) sowie erhöhte und erniedrigte Noten (z. B.: 2+, 3−) verwendet, wobei bei letzteren 1+ oft als 1! (Einser mit Rufzeichen) oder I (römischer Einser) geschrieben wird. 5+ und 5− sind ungebräuchlich. Diese Zwischennoten sind weder in Schularbeiten noch in Zeugnissen zulässig, sondern beschränken sich auf Relativierungen in der Mitarbeit.

Das Schulnotensystem wird auch von Hochschulen verwendet, wobei die Note 5 bedeutet, dass die Lehrveranstaltungsprüfung nicht bestanden wurde.

I just made it decimal and added no special grade strings (like e.g. "4-"). Should I add the special grade strings? I don't know what the exact value would be (e.g.: 4.25 vs 4.33).

Schweizer Notensystem (6-1)

In der Schweiz gibt es in den meisten Kantonen die Noten 6 bis 1. Hierbei ist 6 die beste Note, 1 die schlechteste, 4 eine genügende.[23]

In den Zeugnissen sind nur halbe Noten zugelassen (z. B. 4.5).

Häufig werden halbe Noten wie eine 5.5 auch in anderer Form geschrieben, z. B. als 5–6 (fünf-bis-sechs) oder 5½ (fünfeinhalb).

Bei Zwischennoten, die nicht im Zeugnis auftauchen, können vielerorts weitere Abstufungen verwendet werden, 5+ oder 5- (»fünf bis«) steht etwa für 5.25, -5 (»bis fünf«) hingegen für 4.75. Auch als Dezimalzahlen geschriebene Noten sind gebräuchlich, etwa 5.1 oder 5.13.

Because so many different ways could be chosen, I just made it decimal and added no special grade strings (like e.g. "4+"). Should I add the special grade strings?

Häufig werden Noten mit einer linearen Notenskala festgelegt:

image

Eine Besonderheit des schweizerischen Notensystems ist, dass es nicht symmetrisch ist: Die Noten 1 bis 3,5 sind ungenügend, 4 bis 6 genügend. Eine Note unter 2 kann entsprechend nicht mit der Bestnote kompensiert werden. Erwartet wird aber oft eine Normalverteilung der Noten mit einem Mittelwert von ca. 4.5, was dazu führt, dass praktisch nie sehr niedrige Noten vergeben werden.

WTFFF

An Gymnasien wird bei mehreren Fächern nicht der Notendurchschnitt berechnet, sondern Saldopunkte: Dabei werden die Abweichungen aller Noten von 4 betrachtet. Abweichungen nach oben zählen einfach und ergeben Plus- oder Hochpunkte, Abweichungen nach unten zählen doppelt und ergeben Minus- oder Tiefpunkte. Die Summe der Plus- und Minuspunkte muss so berechnet grösser oder gleich 0 sein, damit ein Schüler promoviert wird. Beispiel: Die Noten 3.5, 4.5 und 4.5 führen zu Abweichungen von -0.5 × 2 + 0.5 + 0.5, das ergibt 0 Saldopunkte. Dagegen führen die Noten 3, 4.5 und 5 zu -1 × 2 + 0.5 + 1, das ergibt -0.5 Saldopunkte.

WTFFF

Jonas-Sander avatar Apr 09 '24 11:04 Jonas-Sander

Visit the preview URL for this PR (updated for commit 4faa738):

https://sharezone-test--pr1441-other-grading-system-6ll8wnwr.web.app

(expires Sat, 13 Apr 2024 16:15:17 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: 4cb3ae61e1e018abfd9841fd3239f5b49ccc034b

github-actions[bot] avatar Apr 09 '24 12:04 github-actions[bot]

@nilsreichardt ready for review

Jonas-Sander avatar Apr 10 '24 12:04 Jonas-Sander

Visit the preview URL for this PR (updated for commit 5332c96):

https://sharezone-console-dev--pr1441-other-grading-system-vx0qqjdb.web.app

(expires Sat, 13 Apr 2024 15:04:55 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: 471536afe3f6ec4895d9ea75513730b515d17eb6

github-actions[bot] avatar Apr 10 '24 15:04 github-actions[bot]

Visit the preview URL for this PR (updated for commit 5332c96):

https://sharezone-website-dev--pr1441-other-grading-system-83ob3tmw.web.app

(expires Sat, 13 Apr 2024 15:05:01 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: 372b0431a96247f908d9a97d5d865de1c8b3b04e

github-actions[bot] avatar Apr 10 '24 15:04 github-actions[bot]