Skip to content

Kmom01: Gör ett menyprogram

Du ska göra ett menyprogram och strukturera koden i funktioner. Du skapar din app i kmom01 och kallar den Menu. OBS Alla utskrifter görs i menyalternativen. Skriv ut det metoderna returnerar.

Du har jobbat igenom allt material i “kmom01”.

Börja med att göra ett flödesschema och/eller pseudokod. Läs igenom kraven och tänk igenom din kod innan du börjar skriva kod. Sen skapar du ett nytt projekt/app som du kallar Menu.

MenyvalMetodnamnReturvärde
1PrintInfoAboutCsharp()void
2ConvertCelsiusToFahrenheit(double tempCelsius)double
3RepeatLetters()string
4CreateAcronym()string
5CountSumAndAverage()string
6ValidateSsn()bool

Uppdatera “Program.cs” med en meny. Utskriften av menyn lägger du i en metod som du själv bestämmer namnet på. Verifiera att menyn fungerar innan du fortsätter. Det kan du göra genom att lägga en utskrift i varje case-sats, det vill säga för varje meny-alternativ.

(Metodnamn: void PrintInfoAboutCsharp())

Syftet med denna uppgiften är att du ska hitta information om C# och .NET och välja ut 3 meningar (minst 200 tecken) med den informationen du tycker är viktigast att veta.

Minst 3 meningar efterfrågas. Skriv något om C#, till exempel vilka som utvecklade det, vad det är för språk och plattformen .NET (dotnet). PrintInfoAboutCsharp har ingen retur.

(Metodnamn: double ConvertCelsiusToFahrenheit(double tempCelsius))

Fråga efter en temperatur i Celsius (ska kunna vara ett tal med decimaler) och returnera motsvarande temperatur i Farenheit avrundat till 2 decimaler. Inmatningen av temperaturen i Celcius ska ske innan anrop av metoden ConvertCelsiusToFahrenheit. Inmatning sker innan metoden anropas. Utskriften sker efter anropet. Exempel:

Terminal window
input: 11.344 output: "52.42"

(Metodnamn: string RepeatLetters())

Fråga efter en sträng och skriva ut en ny sträng där varje tecken har ökat med +1 och är separerat med ”-”. Inmatning sker i metoden. Utskriften sker efter anropet. Exempel:

Terminal window
input: "apa" output: "a-pp-aaa"
input: "kassler" output: "k-aa-sss-ssss-lllll-eeeeee-rrrrrrr"

(Metodnamn: string CreateAcronym())

Fråga efter en sträng och skapa en akronym genom att plocka ut alla stora bokstäver i namnet du skriver in. Inmatning sker i metoden. Utskriften sker efter anropet. Exempel:

Terminal window
input: "BRöderna Ivarsson Osby" output: "BRIO"
input: "Ingvar Kamprad Elmtaryd Agunnaryd" output: "IKEA"

(Metodnamn: string CountSumAndAverage())

Låt användaren mata in tal tills texten “klar” matas in. Då skriv summan av talen och medelvärdet av talen ut. Metoden returnerar en sträng med summan och medelvärdet enligt output nedan. Avrunda medelvärdet till 2 decimaler. Inmatning sker i metoden. Utskriften sker efter anropet. Exempel:

Terminal window
input: 1
input: 2
input: 3
input: "klar" output: "Summan=6 och medelvärdet=2"

Menyval 6: Validera personnummer med hjälp av Luhnalgoritmen

Section titled “Menyval 6: Validera personnummer med hjälp av Luhnalgoritmen”

(Metodnamn: bool ValidateSsn())

Luhnalgoritmen används för att verifiera giltigheten hos nummer, särskilt kreditkortsnummer och personnummer.

Algoritmen funkar på så sätt att varannan siffra multipliceras med 2 och varannan med 1, med start på första siffran i personnumret. Om något tal vid multiplikationen blir större än 9 ersätts det talet med dess siffersumma. Därefter summeras alla tal och om summan är jämt delbar med 10 så är kontrollsiffran korrekt. Om personnumret validerar ska metoden returnera true annars false. Koden ska klara av personnummer med och utan - innan de fyra sista siffrorna. Om för får eller för många siffror skickas med ska det bli false. Inmatning sker i metoden. Efter anropet av metoden skrivs texten “Valid” ut om personnumret var korrekt och annars skrivs texten “Not valid” ut beroende på om metoden returnerar true eller false.

Terminal window
8 1 1 2 1 8 9 8 7 6
* 2 1 2 1 2 1 2 1 2 1
-------------------------
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
16 1 2 2 2 8 18 8 14 6

Vilket blir 1 + 6 + 1 + 2 + 2 + 2 + 8 + 1 + 8 + 8 + 1 + 4 + 6 = 50 som är delbart med 10.

Exempel:

Terminal window
input: "811218-9876" output: "Valid"
input: "231218-9874" output: "Not valid"
input: "8181818181" output: "Valid"

Så här kan det se ut när du är klar med uppgiften. Videon visar hur menyprogrammet ser ut när marie testkör de olika alternativen.

Play

Du testar din kod manuellt genom att köra alla menyalternativ och verifiera input och output under varje deluppgift.

Du testar din kod med enhetstester som du hämtar så här:

Terminal window
task download-tests -- kmom01

Då ser det ut så här:

Terminal window
pwd // stå i kmom01
tree -L 2
.
├── Menu
│   ├── Menu.csproj
│   ├── Program.cs
├── Menu.Tests
│   ├── Menu.Tests.csproj
│   ├── Option1to3Test.cs
│   ├── Option4to6Test.cs

För att testerna ska kunna köras behöver du lägga dessa två rader överst i din Program.cs.

// Överst i kmom01/Menu/Program.cs
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("Menu.Tests")]

Kör testerna i terminalen, så här:

Terminal window
pwd // stå i kmom01/Menu.Tests
dotnet test
dotnet test --logger "console;verbosity=normal" // mer information

Då får vi hoppas att alla tester går igenom! Lycka till!

Felsök med hjälp av utskrifter med Console.WriteLine(). Använd gärna debuggern i VS Code.

Glöm inte att använda ‘dotnet format’ för att formatera din kod. Se i slutet av Mer C# för mer information om ‘dotnet format’.

Arbeta i main -branchen och gör många och små commits i ditt lokala Git-repo, du kan ha ungefär 6-10 commits för en sådan här uppgift. Och pusha varje commit till ditt GitHub repo.

Lycka till och hojta till i forumet om du behöver hjälp!