C#巴士乘客程序:添加性别识别与按性别年龄互动功能求助
巴士C#程序功能完善求助
我刚完成编程1课程,最后的作业是开发名为“巴士”的C#程序,需求包括识别巴士上的乘客、按年龄排序、计算乘客平均年龄等。但有两个功能未能及时完成,现寻求帮助:
- 为乘客添加性别识别功能;
- 实现“戳一下”功能,根据乘客的不同年龄和性别输出不同的评论。
以下是当前的程序代码:
using System; using System.Globalization; using System.Runtime.ExceptionServices; using System.Security.Cryptography; namespace Bussen { class Buss { //passagerare means passenger public int[] passagerare = new int[25]; public int antal_passagerare; public void Run() { Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("Welcome to the awesome Buss-simulator"); int menu; do { //the menu of every choise you can make. Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("Välj ett alternativ: "); Console.WriteLine("1. Lägg till en passagerare. "); Console.WriteLine("2. Kontrollera åldern på passagerarna. "); Console.WriteLine("3. Beräkna den sammanlagda åldern på passagerarna. "); Console.WriteLine("4. Beräkna medelåldern på passagerarna. "); Console.WriteLine("5. Identifiera den äldsta passageraren. "); Console.WriteLine("6. Hitta åldern. "); Console.WriteLine("7. Sortera bussen efter ålder. "); Console.WriteLine("8. Print sex. "); Console.WriteLine("0. Avsluta programmet. "); menu = int.Parse(Console.ReadLine()); switch (menu) { case 1: add_passenger(); break; case 2: Print_buss(); break; case 3: Calc_total_age(); break; case 4: Calc_average_age(); break; case 5: Max_age(); break; case 6: Find_age(); break; case 7: Sort_buss(); break; case 8: Print_sex(); break; case 0: menu = 0; break; } } while (menu != 0); } //where you add you passengers by age public void add_passenger() { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Skriv in hur många passagerare ni vill lägga till."); string str1 = Console.ReadLine(); int size = Convert.ToInt32(str1); for (int i = 0; i < size; i++) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Lägg till en passagerare genom att skriva in personens ålder ålder: "); string answer = Console.ReadLine(); int nya_passagerare = Convert.ToInt32(answer); passagerare[i] = nya_passagerare; antal_passagerare++; } } // this is where you print out all the passengers. public void Print_buss() { for (int i = 0; i < antal_passagerare; i++) { Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine("Passagerarnas ålder är: " + passagerare[i]); } } //this is where you add the total age on every passenger. public void Calc_total_age() { int sum = 0; for (int i = 0; i < passagerare.Length; i++) { sum += passagerare[i]; } Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Den sammanlagda åldern på passagerarna är " + sum + "."); } //where you calculate the average age on the buss public void Calc_average_age() { int sum = 0; for (int i = 0; i < antal_passagerare; i++) { sum += passagerare[i]; } double dsum = Convert.ToDouble(sum); double dsum1 = dsum / antal_passagerare; Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine("Passagerarnas medelålder är " + dsum1 + " år."); Console.WriteLine(" "); } //where you find the oldest passenger on the buss public void Max_age() { int maxAge = passagerare[0]; foreach (var enPassagerare in passagerare) if (enPassagerare > maxAge) maxAge = enPassagerare; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Den äldsta passageraren är " + maxAge + " år gammal."); } //this where you find with seat the diffent passengers sitt on between surtn ages public void Find_age() { bool found = false; Console.WriteLine("Vilken är den yngst åldern som du vill hitta ?"); int yngst = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Vilken är det högst åldern som du vill hitta ?"); int högst = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Passagerarna som mellan åldern " + yngst + " - " + högst + " sitter i : "); for (int i = 0; i < passagerare.Length; i++) { if (passagerare[i] > högst || passagerare[i] > yngst) { Console.WriteLine("stolen " + i); found = true; } } if(!found) { Console.WriteLine("OBS det finns inte sån ålder i bussen "); } } //this is where you sort the buss from ungest to oldest passenger public void Sort_buss() { int temp; for (int i = 0; i < passagerare.Length - 1; i++) { for (int j = 0; j < passagerare.Length - 1 - i; j++) { if (passagerare[j] > passagerare[j + 1]) { temp = passagerare[j]; passagerare[j] = passagerare[j + 1]; passagerare[j + 1] = temp; } } } for (int i = 0; i < passagerare.Length; i++) { Console.WriteLine("Passagerare " + (i + 1) + " är " + passagerare[i] + " år gammal "); } } //this is where im supose to identify with sex every passenger has... public void Print_sex() { for (int k = 0; k < info.Length +1; k++) { Console.WriteLine("Plats" + info[k] + kön); } } class Program { public static void Main(string[] args) { var minbuss = new Buss(); minbuss.Run(); var mysex = new sex(); Console.ForegroundColor = ConsoleColor.DarkCyan; Console.Write("press any key to continue . . . "); Console.ReadKey(true); } } } }
解决方案
1. 重构代码实现性别识别
原代码用单独数组存储年龄,无法关联性别信息,建议创建Passenger类封装乘客的年龄和性别,同时优化输入验证和代码结构:
完整修改后的代码
using System; using System.Collections.Generic; using System.Linq; namespace Bussen { public class Passenger { public int Age { get; set; } public string Gender { get; set; } public Passenger(int age, string gender) { Age = age; Gender = gender; } } class Buss { private List<Passenger> passengers = new List<Passenger>(); private const int MaxCapacity = 25; public void Run() { Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("Welcome to the awesome Buss-simulator"); int menu; do { Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("\nVälj ett alternativ: "); Console.WriteLine("1. Lägg till en passagerare. "); Console.WriteLine("2. Kontrollera passagerarnas uppgifter. "); Console.WriteLine("3. Beräkna den sammanlagda åldern på passagerarna. "); Console.WriteLine("4. Beräkna medelåldern på passagerarna. "); Console.WriteLine("5. Identifiera den äldsta passageraren. "); Console.WriteLine("6. Hitta passagerare inom åldersintervall. "); Console.WriteLine("7. Sortera bussen efter ålder. "); Console.WriteLine("8. Visa alla passagerares kön. "); Console.WriteLine("9. Peta på en passagerare. "); Console.WriteLine("0. Avsluta programmet. "); // 处理输入异常 if (!int.TryParse(Console.ReadLine(), out menu)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Ogiltigt val, försök igen!"); menu = -1; continue; } switch (menu) { case 1: AddPassenger(); break; case 2: PrintPassengers(); break; case 3: CalculateTotalAge(); break; case 4: CalculateAverageAge(); break; case 5: FindOldestPassenger(); break; case 6: FindPassengersByAgeRange(); break; case 7: SortPassengersByAge(); break; case 8: PrintPassengerGenders(); break; case 9: PokePassenger(); break; case 0: Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Tack för att du använde buss-simulatorn!"); break; default: Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Ogiltigt val, försök igen!"); break; } } while (menu != 0); } private void AddPassenger() { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Skriv in hur många passagerare ni vill lägga till."); if (!int.TryParse(Console.ReadLine(), out int size)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Ogiltigt nummer, försök igen!"); return; } if (passengers.Count + size > MaxCapacity) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"Bussen kan bara ta {MaxCapacity} passagerare!"); return; } for (int i = 0; i < size; i++) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"Ange passagerare {i+1} ålder:"); if (!int.TryParse(Console.ReadLine(), out int age) || age < 0 || age > 120) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Ogiltig ålder, försök igen!"); i--; continue; } Console.WriteLine($"Ange passagerare {i+1} kön (M/K/Annat):"); string gender = Console.ReadLine().Trim().ToUpper(); if (string.IsNullOrEmpty(gender) || !new[] {"M", "K", "ANNAT"}.Contains(gender)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Ogiltigt kön, använd M/K/Annat!"); i--; continue; } passengers.Add(new Passenger(age, gender)); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Passagerare tillagd!"); } } private void PrintPassengers() { if (passengers.Count == 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Det finns inga passagerare i bussen!"); return; } Console.ForegroundColor = ConsoleColor.Magenta; for (int i = 0; i < passengers.Count; i++) { Console.WriteLine($"Passagerare {i+1}: Ålder {passengers[i].Age}, Kön {passengers[i].Gender}"); } } private void CalculateTotalAge() { if (passengers.Count == 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Det finns inga passagerare i bussen!"); return; } int totalAge = passengers.Sum(p => p.Age); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"Den sammanlagda åldern på passagerarna är {totalAge}."); } private void CalculateAverageAge() { if (passengers.Count == 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Det finns inga passagerare i bussen!"); return; } double averageAge = passengers.Average(p => p.Age); Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine($"Passagerarnas medelålder är {Math.Round(averageAge, 2)} år."); } private void FindOldestPassenger() { if (passengers.Count == 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Det finns inga passagerare i bussen!"); return; } Passenger oldest = passengers.OrderByDescending(p => p.Age).First(); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine($"Den äldsta passageraren är {oldest.Age} år gammal, kön {oldest.Gender}."); } private void FindPassengersByAgeRange() { if (passengers.Count == 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Det finns inga passagerare i bussen!"); return; } Console.WriteLine("Vilken är den yngsta åldern som du vill hitta?"); if (!int.TryParse(Console.ReadLine(), out int minAge) || minAge < 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Ogiltig ålder!"); return; } Console.WriteLine("Vilken är den högsta åldern som du vill hitta?"); if (!int.TryParse(Console.ReadLine(), out int maxAge) || maxAge < minAge) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Högsta åldern måste vara större än den yngsta!"); return; } var matched = passengers.Where(p => p.Age >= minAge && p.Age <= maxAge).ToList(); if (matched.Count == 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"OBS: Det finns inga passagerare i åldersintervallet {minAge} - {maxAge}!"); return; } Console.WriteLine($"Passagerarna i åldersintervallet {minAge} - {maxAge}:"); foreach (var p in matched) { Console.WriteLine($"Ålder {p.Age}, Kön {p.Gender}"); } } private void SortPassengersByAge() { if (passengers.Count == 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Det finns inga passagerare i bussen!"); return; } var sorted = passengers.OrderBy(p => p.Age).ToList(); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("Bussen sorterad efter ålder (ungast först):"); for (int i = 0; i < sorted.Count; i++) { Console.WriteLine($"Passagerare {i+1}: Ålder {sorted[i].Age}, Kön {sorted[i].Gender}"); } passengers = sorted; } private void PrintPassengerGenders() { if (passengers.Count == 0) {
相关产品推荐
相关产品推荐

