C#银行排队叫号系统

要具体程序
2025-02-27 10:20:45
推荐回答(1个)
回答1:

// 写了一个比较简陋的排队系统,可以参考下:

  class Program{
        static void Main(string[] args){
            ServiceWindow[] serviceWindows = new ServiceWindow[Bank.MAX];
            for (int i = 0; i < Bank.MAX; i++) 
                serviceWindows[i] = new ServiceWindow() { No = (i + 1).ToString() };

            Bank bank = new Bank(serviceWindows);
            Random rand = new Random();

            // 多线程模拟顾客取号
            new Thread(() =>{
                int k = 0;
                while (true){
                    Bank.Enqueue();

                    if (++k>=100) break;

                    Thread.Sleep(1000);
                }
            }).Start();

            // 多线程模拟服务窗口叫号
            new Thread(() =>{
                while (true){
                    bank.ServiceWindows[rand.Next(0, Bank.MAX)].Call();
                    Thread.Sleep(3000);
                }
            }).Start();

            Console.ReadKey(true);
        }
    }

    internal class Bank{
        public const int MAX = 3;
        public static ConcurrentQueue queue { get; set; }
        public static volatile uint curNo=0;
        public Bank() {
            Init();
        }
        public void Init()
        {
            queue = new ConcurrentQueue();
        }
        public Bank(ServiceWindow[] serviceWindows)
        {
            Init();
            ServiceWindows = serviceWindows;
        }
        public ServiceWindow[] ServiceWindows { get; set; }

        public static void Enqueue()
        {
            int k = 0;
            k = queue.Count();
            curNo++;
            queue.Enqueue(curNo);

            Console.WriteLine("您的号码是:" + (curNo) + ",前面还有" + k + "人在等待!");
        }
    }
    internal class ServiceWindow{
        public String No { get; set; }
        public bool Call()
        {
            uint result=0;
            bool success=false;
            success = Bank.queue.TryDequeue(out result);
            if(success) Console.WriteLine(result+"号,请到"+No+"号窗口办理业务!");
            return success;
        }
    }