Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add more grading systems #1441

Merged
merged 100 commits into from
Apr 10, 2024
Merged

Add more grading systems #1441

merged 100 commits into from
Apr 10, 2024

Conversation

Jonas-Sander
Copy link
Collaborator

@Jonas-Sander Jonas-Sander commented Apr 9, 2024

Added grade systems:

  • GradingSystem.sixToOneWithDecimals => '6 - 1 (mit Kommazahlen)'.
  • GradingSystem.oneToFiveWithDecimals => '1 - 5 (mit Kommazahlen)'.
  • GradingSystem.oneToSixWithDecimals => '1 - 6 (mit Kommazahlen)'.
  • zeroToFivteenPointsWithDecimals
  • 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?
-> I will decide this in another PR

Ö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).
-> For now we don't add specialGrade strings here.

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?
-> We decided on no for now

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.

For now not relevant, as we decided on leaving out the grade performance for now.

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.

This is a problem for future us that we will ignore for now.

Jonas-Sander and others added 30 commits March 29, 2024 16:32
@github-actions github-actions bot added the feature: groups Groups umbrella term for courses and classes. label Apr 10, 2024
@Jonas-Sander Jonas-Sander removed feature: homework feature: timetable / calendar Includes anything regarding lessons (timetable) and events (calendar). feature: groups:courses Specific to only courses (instead of e.g. classes) feature: groups Groups umbrella term for courses and classes. labels Apr 10, 2024
Copy link
Member

@nilsreichardt nilsreichardt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

(I will at the code generation check now)

@github-actions github-actions bot added feature: holidays dependencies Changing, updating, adding or removing one or more dependencies. labels Apr 10, 2024
Copy link

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

Copy link

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

@nilsreichardt nilsreichardt merged commit 959125e into main Apr 10, 2024
37 checks passed
@nilsreichardt nilsreichardt deleted the other-grading-systems branch April 10, 2024 16:18
github-merge-queue bot pushed a commit that referenced this pull request Apr 10, 2024
Don't show the calculated average grade if the grading system is not
numerical. To be able to do this I added `GradeResult.gradingSystem` and
`GradeValue.gradingSystem`.

Before:

![image](https://github.com/SharezoneApp/sharezone-app/assets/29028262/d0eae3a3-f5db-4c0c-ba6d-0d0a2032e36d)

After:

![image](https://github.com/SharezoneApp/sharezone-app/assets/29028262/8ab3adf2-5d30-45e7-a54d-3711070c08a4)
 
Requires #1441

---------

Co-authored-by: Jonas <--help>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ci/cd dependencies Changing, updating, adding or removing one or more dependencies. documentation feature: grades Users can add their grades to Sharezone. testing
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants