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:
- Eerst vraagt ze van hoeveel dagen (DagboekEntry’s) de gebruiker een dagboekinput wil schrijven.
- Vervolgens toont ze een samenvatting van het ingevoerde dagboek.
- 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
IsPrivateniet true is. Gaat het om een privé-entry, dan geeft de get de tekst***PRIVATE***terug.
- De get geeft de beschrijving enkel terug als
- 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 omIsPrivatevan 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
IsInspiredop false,Qalop 50 enDescriptionleeg.
- Zet
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
ResetEntrygebruikt. - 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.