Opgave 3
Opgelet : In deze opgave komen geen arrays van objecten voor.
Goal
Een goed mentale gezondheid – quality of life (Qal) - is even belangrijk als je fysieke gezondheid. De firma "GetWeller" heeft je gevraagd om een prototype te maken van een QualityOfLife-diary app, waarin de gebruiker kan bijhouden hoe het met z’n mentale gezondheid is gesteld.
Je dient dit prototype in een C# console applicatie te maken zodat GetWeller kan zien of ze jouw firma willen inhuren om de volledige mobiele applicatie nadien te ontwikkelen.
Succes!
Werking
De applicatie zal bestaan uit enkele fasen:
Eerst zal worden gevraagd van hoeveel dagen (DagboekEntry’s) de gebruiker een dagboek-input wilt schrijven.
Vervolgens wordt een samenvatting van het ingevoerde dagboek getoond
Finaal berekent een analyse-module hoe de Qal van de gebruiker is gebaseerd op het ingevoerde dagboek
Klassen
De applicatie steunt op 2 belangrijke klassen:
DagboekEntry
: deze bewaard telkens 1 dag van de gebruiker in het dagboekQalAnalyzer
: deze bevat een aantal hulpmethoden om de verzameling DagboekEntry’s te gebruiken.
OPGELET 1: niet alle zaken die je in de klasse zult zetten zal je mogelijk nodig hebben in de applicatie die je er rond gaat maken.
OPGELET 2: De hoofdmoot gebeurt in de QalAnalyzer methode CreateDiary
. Lees dus zeker eerst de hele opgave. Indien je CreateDiary
, en de andere methoden in QalAnalyzer
, niet in de klasse krijgt, raad ik je aan deze in je hoofdprogramma te plaatsen (voor minder punten weliswaar) zodat je voort kunt.
Klasse DagboekEntry (7 punten)
Een DagboekEntry
stelt 1 dag voor die de gebruiker in z’n dagboek heeft gezet. Een DagboekEntry bestaat uit volgende zaken:
Properties (40%)
Autoproperty
IsInspired
(bool) die bijhoudt hoe geïnspireerd de gebruiker die dag wasProperty met private setter
IsPrivate
(bool) die aangeeft of deze entry als privé moet beschouwd wordenFullproperty
Description
(string) die een beschrijving bevat van hoe de gebruiker zich voelde die dag:Bij Get zal enkel de description worden teruggegeven als IsPrivate niet true is. Indien het wel om een privé entry gaat dan wordt de tekst
***PRIVATE***
teruggegeven.
Fullproperty
Qal
(int) deze kan enkel waarden tussen 0 en 100 krijgen. *Indien de gebruiker een getal kleiner dan 0 instelt dan wordt de Qal op 0 ingesteld. *Indien de gebruiker een getal groter dan 100 instelt dan wordt de Qal op 100 gezet.
Methoden (35%)
MakePrivate: De enige manier om van buiten uit de IsPrivate van een DagboekEntry object aan te passen. De methode aanvaardt een bool die aangeeft of het object privaat moet gezet worden en geeft niets terug.
ResetEntry: deze methode vereist geen parameters en geeft niets terug.
Zet
IsInspired
op false, deQal
op 50 en dedescription
leeg
ShowInfo
: deze methode vereist geen parameters en geeft niets terug.Output het object naar het scherm als volgt (tekst tussen vierkante haakjes wordt vervangen door de effectieve waarden:
Opgelet: indien het object privé is dan zal dus bij description de tekst ***PRIVATE***
verschijnen
Constructors (25%)
De klasse kan op 2 manieren aangemaakt worden:
Via een default constructor die de ResetEntry methode gebruikt
Via een overloaded constructor die de Qal, IsInspired, IsPrivate en Description als parameters aanvaardt
QalAnalyzer (7 punten)
Deze klasse bevat enkel static methoden, namelijk:
SummarizeDiary
(15%):Aanvaardt een array (of lijst) van DagboekEntry’s . Geeft niets terug.
Zal alle
ShowInfo
-methoden van iedere entry aanroepen zodat het volledige dagboek op het scherm komt
AnalyseDiary
(25%):Aanvaardt een array (of lijst) van DagboekEntry’s. Geeft niets terug.
Zal het gemiddelde IsInspired tonen wat de totale Qal is, rekeningen houdend met de privacy:
De totale Qal bevat de som van alle Qal’s in de DagboekEntry’s OP VOORWAARDE dat deze niét privé is (de privé Qals worden overgeslagen en niét meegerekend)
Het gemiddelde IsInspired is de som van alle DagboekEntry’s waar de IsInspired true was, ongeacht of deze privé was of niet, gedeeld door het totaal aantal elementen in de array.
De methode toont vervolgens deze twee getalen (totale niet privé Qal, gemiddelde IsInspired)
CreateDiary
(60%) :Aanvaardt geen parameters. Geeft een array (of lijst) van DagboekEntry’s terug.
Zal aan de gebruiker enkele vragen stellen en het ‘dagboek’ maken.
De werking van deze methode leggen we in volgende sectie uit.
Een dagboek is een array of lijst van DagboekEntry-objecten
Werking CreateDiary-methode
Stap 0:
Er verschijnt een welkomstzin: Rise and shine. Gevolgd door de huidige tijd in uren en minuten:
Stap 1:
Vraag aan de gebruiker hoeveel dagen de gebruiker wilt loggen. De gebruiker voert een getal in (geen foutcontrole vereist):
Er zal een lijst of array van dagboek entries gevuld worden met het aantal dagen dat de gebruiker wilt invoeren.
Deze lijst zal op het einde van de methode als resultaat terug gegeven worden
Stap 2a:
Je toont nu telkens aan de gebruiker om de hoeveelste dag het gaat (starten van 1 ) en welke dag dat ook effectief is. Als het programma wordt uitgevoerd op zondag, dan zal er dus verschijnen:
Opmerking: de dagen mogen in het Engels verschijnen als jouw OS in die taal werd ingesteld.
Stap 2b:
De gebruiker dient nu steeds in te geven hoe hij zich voelde (description), of hij geïnspireerd was (IsInspired), de Qal score die dag (Qal) en of het om een private entry gaat. Deze informatie wordt steeds in een DagboekEntry geplaatst en aan de array toegevoegd.
Deel uitvoer/invoer van de methode
Hoofdprogramma (2 punt)
Het hoofdprogramma is zeer eenvoudig. Het gebruikt de QalAnalyzer
methoden om volgende werking te hebben:
Eerst wordt een dagboek aangemaakt met behulp van de
CreateDiary
methode.Dan wordt het dagboek meegegeven aan de
SummarizeDiary
methode.Vervolgens wordt het dagboek aan de
AnalyseDiary
methode
CSV wegschrijven (4 punten) (PRO)
Finaal wordt in het hoofdprogramma gevraagd of het huidige dagboek (de array/list) naar een csv bestand mag worden geschreven.
Indien de gebruiker ja antwoordt dan wordt gevraagd naar de naam die het bestand moet hebben.
Ieder DagboekEntry object wordt 1 lijn, met de verschillende properties met een ; gescheiden.
Last updated