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!