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

C#银行系统Switch Statement实现后控制台自动退出问题求助

问题修复方案

问题根源

当前Main函数中的菜单逻辑仅执行1次,switch分支处理完用户输入后无后续执行逻辑,程序就会直接退出。即使你在DisplayBalance方法末尾调用了DisplayMenu(),也仅能打印菜单界面,没有对应逻辑接收用户新输入、再次执行分支处理,程序跑完打印逻辑后还是会结束。同时用递归调用菜单的方式存在栈溢出风险,不推荐使用。

修复步骤

  1. 在Main函数中新增一层while死循环,将菜单展示、读取用户输入、switch分支处理的逻辑全部包裹进循环内
  2. 当用户选择选项8时,直接跳出循环结束程序
  3. 所有非退出的分支执行完成后,统一增加等待用户按回车的逻辑,清屏后再进入下一轮循环展示菜单
  4. 删掉各个功能方法(如DisplayBalance)中手动调用DisplayMenu()的代码,避免冗余和递归风险

修改后的代码示例

调整后的Main方法

private static void Main(string[] args)
{
    Client client = new Client("Tayla", "Brown", "027493922", "55 Grey Rd"); 
    Everyday everyday = new Everyday(client, Account.GenerateAccountNumber(), 2000m);
    Investment investment = new Investment(client, 500m);
    Omni omni = new Omni(client, 1000m);

    // 死循环包裹整个菜单交互逻辑
    while (true)
    {
        DisplayMenu();
        string userchoice = Console.ReadLine()?.ToUpper() ?? string.Empty;
        bool isExit = false;

        switch (userchoice)
        {
            case "1": 
                Console.Clear();
                Console.WriteLine(client.ClientInfo);
                break;
            case "2A": 
                Console.Clear();
                DisplayBalance(everyday);
                break;
            case "2B": 
                Console.Clear();
                DisplayBalance(investment);
                break;
            case "2C": 
                Console.Clear();
                DisplayBalance(omni);
                break;
            case "3A": 
                DepositAmount(everyday);
                break;
            case "3B": 
                DepositAmount(investment);
                break;
            case "3C": 
                DepositAmount(omni);
                break;
            case "4A": 
                WithdrawAmount(everyday);
                break;
            case "4B": 
                WithdrawAmount(investment);
                break;
            case "4C": 
                WithdrawAmount(omni);
                break;
            case "5": 
                DisplayDetails(everyday);
                break;
            case "6": 
                DisplayDetails(investment);
                break;
            case "7": 
                DisplayDetails(omni);
                break;
            case "8": 
                Console.WriteLine("你已选择退出网上银行服务,感谢使用!");
                isExit = true;
                break;
            default: 
                Console.Clear();
                Console.WriteLine("输入选项无效,请重新输入!");
                break;
        }

        if (isExit)
        {
            // 选择退出则跳出循环结束程序
            break;
        }

        // 所有非退出分支统一等待用户按回车后返回菜单
        Console.WriteLine("\n按回车键返回主菜单...");
        Console.ReadLine();
        Console.Clear();
    }
}

调整后的DisplayBalance方法

private static void DisplayBalance(Account account)
{
    Console.WriteLine($"{account.AccountType} 余额: {account.Balance:$#,##0.00}");
}

注意事项

  • 存款、取款、显示详情等其他功能方法不需要额外加返回菜单的逻辑,统一由主循环处理返回逻辑即可,代码维护更方便
  • 新增了空输入、无效输入的处理逻辑,避免用户直接按回车或者输入错误内容导致程序异常

内容的提问来源于stack exchange,提问作者HarryB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 17:57:03