Afsluttende opgave - Tekstbaseret lommeregner
Denne opgave er en afsluttende opgave til kurset Grundlæggende C# (iterativ og procedural programmering). Opgaven er en større opgave som skal vise, at du har forstået de grundlæggende koncepter i C#-programmering.
Opgavebeskrivelse
Baseret på en standard .NET 8 (eller højere) konsolapplikation, skal du udvikle en tekstbaseret lommeregner, der giver brugeren mulighed for at udføre forskellige matematiske operationer via en konsolmenu. Hver beregning skal gemmes i en logfil, som brugeren kan få adgang til via menuen.
Her er en video, der viser, hvordan programmet kan se ud:
Krav
Følgende krav skal opfyldes:
- Programmet skal være en standard .NET 8 (eller højere) konsolapplikation.
- Benyt en konsolapplikation med top-level statement (uden en klasse
Program
og enMain
-metode) - altså en “script” stil. - Koden (variabler, metoder mv) skal være skrevet på engelsk.
- Du skal nøjes med at benytte iterativ og procedural programmering - altså ingen objektorienteret (klasser/strukturer) eller funktionel programmering (delegates, lambda mv).
- Benyt en konsolapplikation med top-level statement (uden en klasse
- Al kode skal være skrevet i
Program.cs
.- Husk at placere metoderne i toppen af filen for at få korrekt IntelliCode-understøttelse i VS, VS Code eller Rider.
- Programmet skal logge alle hændelser (start, beregninger, eventuelle fejl og afslutning) i en logfil.
- Stien til logfilen skal hentes fra en miljøvariabel (environment variabel) kaldet
CALCULATOR_LOG_PATH
(eksempelvisC:\logs\calculator.log
).- Miljøvariablen skal være tilgængelig på maskinniveau.
- I windows kan du benytte GUI eller terminal startet som Admin
setx CALCULATOR_LOG_PATH "C:\temp\calculator.log" /M
for at oprette en miljøvariabel. - Brug
Environment.GetEnvironmentVariable("CALCULATOR_LOG_PATH", EnvironmentVariableTarget.Machine)
.
- I windows kan du benytte GUI eller terminal startet som Admin
- Hvis der ikke er nogen miljøvariabel, skal logfilen gemmes i applikationens mappe i en fil kaldet
calculator.log
. -
- Miljøvariablen skal være tilgængelig på maskinniveau.
- Formatet skal være
yyyy-MM-dd HH:mm:ss Tekst
på hver linje. - Log skal ske gennem en metode kaldet
Log(string message)
. - Her er et eksempel på indholdet i en fil:
- Stien til logfilen skal hentes fra en miljøvariabel (environment variabel) kaldet
- Programmet skal benytte NuGet-pakken
Spectre.Console
til at hjælpe med at skabe en menu (en såkaldtSelectionPrompt
).- Programmet skal have en menu, der giver brugeren mulighed for at vælge mellem følgende operationer:
- Læg sammen
- Træk fra
- Gange
- Find gennemsnit af tre tal
- Afslut
- Menuen skal hentes fra en metode
string ShowMenu()
som returnerer enstring
svarende til brugerens menuvalg.
- Programmet skal have en menu, der giver brugeren mulighed for at vælge mellem følgende operationer:
- Når en menu er valgt, skal brugeren indtaste to tal, og programmet skal udføre den valgte operation.
- Du kan benytte
Console.ReadLine()
til at indlæse brugerinput eller eventuelt hjælp fraSpectre.Console
. - Afhentning af brugerinput skal ske i en metode
int GetUserInput()
som returnerer enint
.- Bemærk dog, at
Find gennemsnit
af tre tal kræver tre indtastninger.
- Bemærk dog, at
- Hvis brugeren indtaster en forkert værdi, skal programmet afsluttes med en fejlmeddelelse.
- Fejlen skal logges i en logfil.
- Brug eventuelt
Environment.Exit(1)
for at afslutte programmet.
- Resultatet af operationen skal vises i konsollen.
- Til valget af matematiske operationer skal kun bruges en
if-else
-struktur.
- Til valget af matematiske operationer skal kun bruges en
- Programmet skal fortsætte med at køre, indtil brugeren vælger at afslutte fra menuen.
- Du kan benytte
- Programmet skal benytte metoder til at udføre de forskellige matematiske operationer:
int Addition(int, int)
int Subtraction(int, int)
int Multiplication(int, int)
int Average(int[])
(gennemsnit af tre tal - bemærk at metoden skal tage et array som parameter).
Her en en skabelon til programmet som du kan benytte som udgangspunkt:
using Spectre.Console; // Kræver at pakken Spectre.Console er installeret
// Her skal du hente en sti til log fil fra en miljøvariabel (eller brug default) og gem i en variabel
// Her kan du placere metoden Log(string message)
// Her kan du placere metoden ShowMenu() som returnerer en string
// Her kan du placere metoden GetUserInput() som returnerer en int
// Her kan du placere metoden Addition(int, int) som returnerer en int
// Her kan du placere metoden Subtraction(int, int) som returnerer en int
// Her kan du placere metoden Multiplication(int, int) som returnerer en int
// Her kan du placere metoden Average(int[]) som returnerer en int
// Her kan du skabe en løkke som kører programmet indtil brugeren vælger at afslutte
// Her kan du vise menuen og afhente brugerinput
// Her kan du udføre den valgte operation og vise resultatet
// Husk at logge alle hændelser i logfilen
Aflevering og bedømmelse
Aflevering af opgaven sker ved at sende en ZIP-fil med hele projektet til mig på mail. Jeg vil ikke have /bin eller /obj mapperne med i zip-filen (så fejler mail også) - kun de filer som er nødvendige for at kunne bygge og køre projektet (.csproj og Program.cs). Du må gerne inkludere en readme.txt hvor dit navn og mailadresse fremgår.
Det jeg gør for at tjekke om det virker er at jeg pakker det ud på min egen computer og prøver at bygge og køre det (dotnet run). Jeg vil også kigge på koden for at se om de forskellige metoder mv. er implementeret som beskrevet i opgaven. Herefter aftaler vi en tid til en kort online (Teams) samtale om opgaven hvor du kan forklare mig hvordan du har tænkt og hvorfor du har valgt at gøre som du har gjort.
Når opgaven er godkendt vil du modtage et bevis på at du har løst opgaven tilfredsstillende. Beviset vil indeholde en kort beskrivelse af opgaven.