You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)
            {
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:15:37