Slutprojektet programmering 1b c#
Hej, har fått så bra hjälp och tips här att jag tänkte försöka en sista gång nu! Min kod ska vara inlämnad på söndag och jag förstår inte varför den i metoden AddGuest inte får upp ett meddelande om att det är fullt när 25 gäster skrivit in sig. Jag fattar inte heller varför metoden PrintGuest bara vill skriva ut 24 platser trots att den ska skriva ut 25. Snälla hjälp mig att förstå detta, jag har gått vilse i min egen kod, trots kommentarer och olika försök (kanske för många olika försök?).
Det handlar om C#
Tack på förhand och god jul!
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;
}
}
}