Twee prompts bij deze proef. Met Coach krijg je hulp terwijl je de proef maakt, zonder code. Met Quoteer laat je je afgewerkte code streng verbeteren, volgens de puntenverdeling en het boeteblad.

Let op: de quoteerprompt is recent gemaakt en werd niet gebruikt bij de originele proef. De score die je ermee krijgt, zegt dus niets over de scores van toen. Had de proef geen puntenverdeling, dan is die achteraf toegevoegd.

Goal

Een goede mentale gezondheid, quality of life (Qal), is even belangrijk als je fysieke gezondheid. De firma “GetWeller” vraagt je een prototype te maken van een QualityOfLife-diary app, waarin de gebruiker kan bijhouden hoe het met zijn mentale gezondheid gesteld is.

Je maakt dit prototype als C#-consoleapplicatie, zodat GetWeller kan zien of ze jouw firma willen inhuren om nadien de volledige mobiele applicatie te ontwikkelen.

Succes!

Ga ervan uit dat de gebruiker géén foute invoer doet.

Werking

De applicatie bestaat uit enkele fasen:

  1. Eerst vraagt ze van hoeveel dagen (DagboekEntry’s) de gebruiker een dagboekinput wil schrijven.
  2. Vervolgens toont ze een samenvatting van het ingevoerde dagboek.
  3. Tot slot berekent een analysemodule hoe de Qal van de gebruiker is, op basis van het ingevoerde dagboek.

Klassen

De applicatie steunt op 2 belangrijke klassen:

  • DagboekEntry: bewaart telkens 1 dag van de gebruiker in het dagboek.
  • QalAnalyzer: bevat een aantal hulpmethoden om met de verzameling DagboekEntry’s te werken.

Een dagboek is een array of een List van DagboekEntry-objecten. Je kiest zelf.

OPGELET 1: niet alles wat je in de klassen zet, zal je mogelijk nodig hebben in de applicatie die je eromheen bouwt.

OPGELET 2: het meeste werk zit in de methode CreateDiary van QalAnalyzer. Lees dus eerst de hele opgave. Krijg je CreateDiary en de andere methoden van QalAnalyzer niet in de klasse, zet ze dan in je hoofdprogramma (voor minder punten weliswaar), zodat je verder kan.

Klasse DagboekEntry (7 punten)

Een DagboekEntry stelt 1 dag voor die de gebruiker in zijn dagboek gezet heeft. Een DagboekEntry bestaat uit volgende zaken.

Properties (40%)

  • Autoproperty IsInspired (bool): hoe geïnspireerd de gebruiker die dag was.
  • Property met private setter IsPrivate (bool): of deze entry als privé beschouwd moet worden.
  • Full property Description (string): een beschrijving van hoe de gebruiker zich die dag voelde.
    • De get geeft de beschrijving enkel terug als IsPrivate niet true is. Gaat het om een privé-entry, dan geeft de get de tekst ***PRIVATE*** terug.
  • Full property Qal (int): kan enkel waarden van 0 tot en met 100 krijgen.
    • Stelt de gebruiker een getal kleiner dan 0 in, dan wordt de Qal 0.
    • Stelt de gebruiker een getal groter dan 100 in, dan wordt de Qal 100.

Methoden (35%)

  • MakePrivate: de enige manier om IsPrivate van een DagboekEntry-object van buitenaf aan te passen. De methode aanvaardt een bool die zegt of het object privé moet worden, en geeft niets terug.
  • ResetEntry: vraagt geen parameters en geeft niets terug.
    • Zet IsInspired op false, Qal op 50 en Description leeg.
  • ShowInfo: vraagt geen parameters en geeft niets terug.
    • Toont het object als volgt op het scherm (tekst tussen vierkante haakjes wordt vervangen door de echte waarden):
********
ENTRY:
[description]
Qal= [Qal]
********

Opgelet: is het object privé, dan verschijnt bij description dus de tekst ***PRIVATE***.

Constructors (25%)

De klasse kan op 2 manieren aangemaakt worden:

  • Via een default constructor die de methode ResetEntry gebruikt.
  • Via een overloaded constructor die de Qal, IsInspired, IsPrivate en Description als parameters aanvaardt, in die volgorde.

QalAnalyzer (7 punten)

Deze klasse bevat enkel static methoden:

  • SummarizeDiary (15%):
    • Aanvaardt een array (of lijst) van DagboekEntry’s. Geeft niets terug.
    • Roept de ShowInfo-methode van elke entry op, zodat het volledige dagboek op het scherm komt.
  • AnalyseDiary (25%):
    • Aanvaardt een array (of lijst) van DagboekEntry’s. Geeft niets terug.
    • Berekent twee getallen, rekening houdend met de privacy:
      • De totale Qal: de som van de Qal van alle DagboekEntry’s die niét privé zijn. De Qal van privé-entry’s wordt overgeslagen.
      • De gemiddelde IsInspired: het aantal DagboekEntry’s waarin IsInspired true is, privé of niet, gedeeld door het totale aantal entry’s.
    • De methode toont die twee getallen. De gemiddelde IsInspired verschijnt met 2 cijfers na de komma.
  • CreateDiary (60%):
    • Aanvaardt geen parameters. Geeft een array (of lijst) van DagboekEntry’s terug.
    • Stelt de gebruiker enkele vragen en maakt zo het dagboek.
    • De werking van deze methode staat in de volgende sectie.

Werking van de methode CreateDiary

Stap 0

Er verschijnt een welkomstzin, “Rise and shine”, gevolgd door de huidige tijd in uren en minuten:

Rise and shine
Het is nu 15:25

Stap 1

Vraag de gebruiker hoeveel dagen hij wil loggen. De gebruiker voert een getal in (geen foutcontrole nodig).

  • Er wordt een lijst of array van DagboekEntry’s gevuld met dat aantal dagen.
  • Die lijst geeft de methode op het einde terug.

Stap 2a

Toon telkens de hoeveelste dag het is (vanaf 1) en welke dag van de week dat is. Dag 1 is vandaag. Wordt het programma op een maandag uitgevoerd, dan verschijnt er dus:

Dag 1: Monday
[info uit stap 2b]
Dag 2: Tuesday
[info uit stap 2b]
...

De dagen verschijnen in het Engels, zoals DayOfWeek ze geeft.

Stap 2b

De gebruiker geeft telkens in hoe hij zich voelde (description), of hij geïnspireerd was (IsInspired), welke Qal-score hij die dag geeft (Qal) en of het om een privé-entry gaat. Die informatie komt telkens in een DagboekEntry, die aan de array of lijst toegevoegd wordt.

Een deel van de uitvoer en invoer van de methode

Tekst die start met “>” is invoer van de gebruiker.

Rise and shine
Het is nu 15:25
Hoeveel dagen wil je loggen in je dagboek?
>3
Dag 1: Monday
Hoe was je dag?
>Zeer goed
Voelde je je geïnspireerd? (y/n)
>y
Welke score geef je deze dag?
>60
Is dit een private entry? (y/n)
>n
Dag 2: Tuesday
Hoe was je dag?
...

Hoofdprogramma (2 punten)

Het hoofdprogramma is heel eenvoudig. Het gebruikt de methoden van QalAnalyzer als volgt:

  • Eerst maakt het een dagboek aan met de methode CreateDiary.
  • Dan geeft het dat dagboek aan de methode SummarizeDiary.
  • Vervolgens geeft het het dagboek aan de methode AnalyseDiary.

Csv wegschrijven (4 punten) (PRO)

Voor dit deel heb je bestanden nodig, uit hoofdstuk 18.

Tot slot vraagt het hoofdprogramma of het huidige dagboek naar een csv-bestand geschreven mag worden.

Antwoordt de gebruiker ja, dan vraagt het programma hoe het bestand moet heten.

Elk DagboekEntry-object wordt 1 lijn, met de verschillende properties gescheiden door een ;.

Voorbeeld uitvoer

Tekst die start met “>” is invoer van de gebruiker. Het programma werd op een zaterdag om 18:25 uitgevoerd.

Rise and shine
Het is nu 18:25
Hoeveel dagen wil je loggen in je dagboek?
>3
Dag 1: Saturday
Hoe was je dag?
>Zeer goed
Voelde je je geïnspireerd? (y/n)
>y
Welke score geef je deze dag?
>60
Is dit een private entry? (y/n)
>n
Dag 2: Sunday
Hoe was je dag?
>Moe
Voelde je je geïnspireerd? (y/n)
>n
Welke score geef je deze dag?
>130
Is dit een private entry? (y/n)
>y
Dag 3: Monday
Hoe was je dag?
>Top
Voelde je je geïnspireerd? (y/n)
>y
Welke score geef je deze dag?
>-5
Is dit een private entry? (y/n)
>n
********
ENTRY:
Zeer goed
Qal= 60
********
********
ENTRY:
***PRIVATE***
Qal= 100
********
********
ENTRY:
Top
Qal= 0
********
Totale Qal (zonder privé): 60
Gemiddelde IsInspired: 0,67
Dagboek wegschrijven naar een csv-bestand? (ja/nee)
>ja
Hoe moet het bestand heten?
>dagboek.csv

Deze oplossing is afgeschermd.
Studenten krijgen de sleutel van hun lesgever. Heb je de sleutel al eens op dit toestel gebruikt, dan verschijnt de oplossing hier vanzelf.