En "trasig" switch-case meny C#

Permalänk

Koden nu:

using System; using System.Collections.Generic; using static System.Console; namespace Nattklubben { class Program { public static void Main(string[] args) { var myNightclub = new Nightclub(); myNightclub.Run(); ReadKey(true); } } class Nightclub { Guests[] guestList = new Guests[25]; //Skapar vektor där klassen Guests lagras, med 25 platser private int minimumAgeLimitGuest = 18; //Ingen under 18 ska få komma in på klubben private int guestsATM = 0; //Variabel som ska hålla reda på hur många gäster som finns inlagda i vektorn just nu, så man inte ska kunna lägga in fler än 25 gäster. private int maxGuests = 25; public void Run() { while (true) { //Meny med olika val för användaren Clear(); WriteLine(" -------------------------------------------------------------------------------"); WriteLine("| Welcome to the Nightclub! You will now be asked to make a choice : |"); WriteLine("| |"); WriteLine("| [A] Add a guest: |"); WriteLine("| [S] Show all guests: |"); WriteLine("| [T] Show the total age of all guests: |"); WriteLine("| [Y] Show the average age of our guests: |"); WriteLine("| [F] Find guests based on their age: |"); WriteLine("| [O] Show the oldest guest in the club ATM: |"); WriteLine("| [B] Sort all guests by age: |"); WriteLine("| [Q] Exit the nightclub-program |"); WriteLine(" -------------------------------------------------------------------------------"); ConsoleKeyInfo inputFromUser = ReadKey(true); switch (inputFromUser.Key) //Meny för vilken metod som ska anropas när användaren trycker in specifik knapp (S, A osv) { case ConsoleKey.A: { AddGuest(); //Anropar metod som låter programmet lägga till en gäst break; } case ConsoleKey.S: { PrintGuest(); //Anropar metod som skriver ut alla platser på nattklubben break; } case ConsoleKey.T: { TotAge(); //Aropar metod som lägger ihop alla åldrar på gästerna break; } case ConsoleKey.Y: { AverageAge(); //Anropar metod som räknar ut genomsnittlig ålder på gäster break; } case ConsoleKey.F: { FindAge(); //Anropar metod som låter användaren söka upp vilka användare som har en viss ålder break; } case ConsoleKey.O: { OldestGuest(); //Anropar metod för att visa den äldsta gästen just nu break; } case ConsoleKey.B: { SortByAge(); //Anropar metod för att sortera alla gäster efter ålder break; } case ConsoleKey.Q: { Environment.Exit(0); //Stänger ner program return; } default: //Om användare försöker skriva in ett val som inte finns skrivs stringen ut: { Write("Please choose one of the options from the menu. Press a random key and then try again ."); ReadLine(); break; } } } } //Metoder för huvudmenyns olika val: public void AddGuest() //Metod för att lägga till en ny gäst { string newName = ""; //Användaren får skriva in sträng som blir inlagt som dess namn i newName int newAge = 0; //Användaren får skriva in int som blir inlagt som dess ålder i newAge string newGender = "a"; //Användaren får göra ett val som är en string, alltså val där svaret ska vara ett av valen, sparas i newGender string newDrink = "a"; //samma sak som ovan men sparas i newDrink ConsoleKeyInfo userInput; //Användarens input (val) gäller för consoleKeyInfo Clear(); WriteLine("--> Add a guest <--\n"); if (guestsATM == maxGuests) { WriteLine("The nightclub is already full, we're sorry. :-("); } else { while (true) { Write("Enter your name : "); //Ber användaren skriva in sitt namn try { newName = ReadLine(); break; //Godkänt namn (man kan ju faktiskt heta vad som helst nu för tiden) } catch (Exception ex) { WriteLine(ex.Message); } } while (true) { try { Write("Enter your age : "); newAge = Convert.ToInt32(ReadLine()); //Gör om användarens svar till int if (newAge < minimumAgeLimitGuest) //String kommer upp vid ogiltig ålder dvs mindre än 18, låter användaren skriva in giltig ålder istället { WriteLine("Please don't lie about your age.. You know you have to be 18 + to get in.. ;-)"); } else { break; //Avslutar loop om ålder 18+ inskriven } } catch (FormatException) { WriteLine("Please only write numbers."); //Om annat än tal skrivs in kommer sträng upp } catch (Exception ex) { WriteLine(ex.Message); } } while (true) { Write("Choose your gender pronouns :\nShe = S\nHe = H\nThey = T\n"); try { userInput = ReadKey(true); //Sparar användarens svar i ConsoleKeyInfo newGender = userInput.Key.ToString(); //Gör om ConsoleKeyInfo (de olika valen t.ex s, m) till en string } catch (Exception ex) { WriteLine(ex.Message); } if (newGender == "S" || newGender == "H" || newGender == "T") { break; //Godkänt svar från användare } else { WriteLine("Please give us your answer : S, H or T : "); } } while (true) { Write("What do you want to drink tonight : \nBeer = B\nSoda = S\nGin and tonic = X\n"); //Låter användaren göra sitt val ang dryck. try { userInput = ReadKey(true); //Sparar användarens svar i ConsoleKeyInfo newDrink = userInput.Key.ToString(); //Gör om consoleKeyInfo till en string } catch (Exception ex) { WriteLine(ex.Message); } if (newDrink == "B" || newDrink == "S" || newDrink == "X") { break; //Godkänt svar från användaren } else { WriteLine("Please give us your answer : B, S or X : "); } } for (int i = 0; i < guestList.Length - 1; i++) { if (guestList[i] == null) //om vektorn är tom läggs info om ny gäst på element [0] { guestList[i] = new Guests(newName, newAge, newGender, newDrink); break; } else //annars på nästa plats i array { continue; } } } WriteLine("Welcome in to our club ! "); ReadKey(true); } public void PrintGuest() //Metod för att skriva ut alla nuvarande gäster på nattklubben { Clear(); WriteLine("--> Guests in the nightclub at the moment <-- \n"); int guestListNumber = 0; foreach (Guests element in guestList) //kollar av gäster i guestlist, (vektorn där all information om gästerna blir lagrad) { guestListNumber++; if (element == null) { continue; //Hoppa över att skriva ut platser som är tomma } else { WriteLine("Nightclub-guest {0} is : {1}, {2} years old. Tonight {3} is drinking {4}.", guestListNumber, element.Name, element.Age, element.GenderPronoun(), element.DrinkType()); } } WriteLine("Press any key to get back to the menu."); ReadKey(true); } public int TotAge() //Metod för att räkna ut total ålder av alla gäster i array //vill göra om void till int? hur? { Clear(); WriteLine("--> Total age of our guests <--\n"); int totalAgeOfGuests = 0; //Skapar variabel int att lagra totala åldern från element.Age i foreach (Guests element in guestList) { if (element == null) { continue; //hoppa över i loopen då elementet är tomt } else { totalAgeOfGuests += element.Age; //Hämta åldrar från human.Age och lägg in i totalAgeOfGuests } } WriteLine("The total age of all our guests is {0} years.\n", totalAgeOfGuests); WriteLine("Press any key to get back to the menu."); ReadKey(true); return totalAgeOfGuests; } public void AverageAge() //Metod för att räkna ut genomsnittlig ålder på besökare //vill göra om void till int? hur? { Clear(); WriteLine("--> Average age of our guests <--"); int numberOfGuests = 0; //skapar variabel int att lagra antal element som är med i totalAgeGuests int totalAgeOfGuests = 0; //Skapar variabel int att lagra totala åldern från element.Age i foreach (Guests element in guestList) { if (element == null) { continue; //Hoppa över tomma element i array } else { totalAgeOfGuests += element.Age; //Tar fram alla upptagna element.Age i Guests och plussar ihop numberOfGuests++; //Ökar värdet i variabeln varje gång ett nytt värde plockas fram } } WriteLine("The average age of the guests in our club is approximately {0} years.\n", totalAgeOfGuests / numberOfGuests); WriteLine("Press any key to get back to the menu."); ReadKey(true); } public void FindAge() //Metod för att hitta någon i array baserat på deras ålder { Clear(); int findSpecificAge = 0; //Skapar int-variabel som ska lagra användares val while (true) { Write("What age do you want to search for along our guests ? "); try { findSpecificAge = Convert.ToInt32(ReadLine()); if (findSpecificAge < minimumAgeLimitGuest) //Eftersom nattkklubben inte godkänner att folk under 18 kommer in så är det meningslöst för en användare att söka på det. { WriteLine("That's unnecessary, we only allow people over the age of 18 in here, try again : "); } else { break; //Ålder man kan söka efter, alltså bryter detta while } } catch (FormatException) { WriteLine("Please only write in numbers : "); } catch (Exception ex) { WriteLine(ex.Message); } } int totalNumberOfFoundGuests = 0; //Skapar variabel som ska hålla koll på hur många personer som matchar sökningen foreach (Guests element in guestList) //Loop som kollar igenom alla element i guestList { if (element == null) { continue; //Hoppa över tomma element } else if (element.Age == findSpecificAge) { WriteLine("{0} matches your search.", element.Name); //Skriver ut namnet på elementet som matchar med sökningen totalNumberOfFoundGuests++; //Ökar värdet i variabeln som räknar va hur många som matchar med sökningen } } if (totalNumberOfFoundGuests == 0) { WriteLine("\nNo guests matches your search."); } else { WriteLine("\nYou got {0} matches on your search,", totalNumberOfFoundGuests); } WriteLine("Press any key to get back to the menu."); ReadKey(true); } public int OldestGuest() //Metod för att hitta äldsta gästen just nu //vill göra om void till int? hur? { int oldest = 0; Clear(); WriteLine("--> Oldest person in the Nightclub <--"); foreach (Guests element in guestList) { if (element == null) { continue; //Hoppa över tomma element i array } else if (element.Age > oldest) //Kollar alla åldrar mot värdet i oldest (som blir nytt varje gång det finns en äldre i array { oldest = element.Age; //Sparar ner det högsta talet och elementet i oldest } } foreach (Guests element in guestList) { if (element == null) { continue; } else if (element.Age == oldest) { WriteLine("The oldest person in the nightclub right now is :\n{0}, {1} is {2} years old.", element.Name, element.GenderPronoun(), element.Age); } } WriteLine("Press any key to get back to the menu."); ReadKey(true); return oldest; } public void SortByAge() //Metod för att sortera gästerna på ålder istället för plats i vektorn { Clear(); WriteLine("--> Sort guests by age <--"); List<Guests> sortingList = new List<Guests>(); foreach (Guests element in guestList) //Lägger till alla gäster i en lista { if (element == null) //Om det inte finns någon på elementet så hoppa över plats { continue; } else { sortingList.Add(element); //Om det finns någon på elementet så lägg till uppgifter om den i listan } } for (int i = 0; i < sortingList.Count; i++) //Kod som sorterar i listan { int currentGuest = i; for (int j = i + 1; j < sortingList.Count; j++) if (sortingList[j].Age < sortingList[currentGuest].Age) { currentGuest = j; } if (currentGuest != i) { Guests valueHolder = sortingList[i]; sortingList[i] = sortingList[currentGuest]; sortingList[currentGuest] = valueHolder; } } Array.Clear(guestList, 0, guestList.Length - 1); //Tar bort alla från guestList for (int i = 0; i < sortingList.Count; i++) //Lägger till alla på nytt, men nu sorterade efter ålder { guestList[i] = (sortingList[i]); //alla nya värden ifrån guestList läggs nu över i sortingList } int guestListNumber = 0; //Skriver in ny ordning på gästerna foreach (Guests element in guestList) { guestListNumber++; if (element == null) { continue; //Om plats är ledig så hoppa över } else { WriteLine("Nightclub-guest {0}, {1}, is {2} years old.", guestListNumber, element.Name, element.Age); //Skriver ut nattklubbsgäst [plats 1 i sorteringen], med namn x är y år gammal. } } WriteLine("Press any key to get back to the menu."); ReadKey(true); } } //Klass som sparar ner info om gästerna class Guests { //Datan om gäster private string name, gender, drink; private int age; public Guests(string name, int age, string gender, string drink) //Lägger in och omvandlar koden från slutet i AddGuest() { this.name = name; this.age = age; this.gender = gender; this.drink = drink; } public string Name { get { return name; } set { name = value; } } public int Age { get { return age; } set { age = value; } } public string Gender { get { return gender; } set { gender = value; } } public string GenderPronoun() { switch (gender) { case "S": { gender = "she"; break; } case "H": { gender = "he"; break; } case "T": { gender = "they"; break; } } return gender; } public string Drink { get { return drink; } set { drink = value; } } public string DrinkType() { switch (drink) { case "B": { drink = "beer"; break; } case "S": { drink = "soda"; break; } case "X": { drink = "gin and tonic"; break; } } return drink; } } }

Jag måste förstå varför den bara skriver ut 24 värden i PrintGuest(). Snälla snälla!