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

如何修复C#编写的K-pop周边售卖程序累计计算选购商品总金额的逻辑错误

K-pop周边售卖结算程序C#代码修正

原有代码核心问题

  • total变量未初始化,且每次结算时是直接赋值而非累加,导致无法累计多件商品金额
  • 外层使用了固定次数的for循环,限制了用户可购买的商品种类数量
  • 存在大量重复的商品选择、数量输入逻辑,代码冗余且容易出错
  • 计算总金额时错误乘以了choice变量(商品编号),导致金额计算错误
  • RED VELVET周边的价格在分支中错误写为700php,和定义的980php不符
  • 未实现结算后询问用户是否需要再次使用程序的功能
  • 未做输入合法性校验,用户输入非数字时会直接崩溃

修正后完整代码

using System;

namespace KpopMerchCheckout
{
    class Program
    {
        static void Main(string[] args)
        {
            // 控制程序是否重启
            bool restartProgram;
            do
            {
                restartProgram = false;
                int total = 0; // 初始化总金额为0
                string w = "WELCOME ";
                Console.SetCursorPosition((Console.WindowWidth - w.Length) / 2, Console.CursorTop);
                Console.WriteLine(w);
                Console.WriteLine("");
                System.Threading.Thread.Sleep(2000);

                string p = "HERE'S OUR MERCHANDISES! ";
                Console.SetCursorPosition((Console.WindowWidth - p.Length) / 2, Console.CursorTop);
                Console.WriteLine(p);
                System.Threading.Thread.Sleep(2000);

                string[] products = { "[1]BLACKPINK Lightstick ", "[2]DREAMCATCHER Seasons Greetings",
                                    "[3]RED VELVET Summer Package"};

                for (int g = 0; g < products.Length; g++)
                {
                    Console.WriteLine(products[g]);
                }

                bool isCheckout = false;
                // 选购循环,用户选择结算时退出
                while (!isCheckout)
                {
                    int choice = 0;
                    bool inputValid = false;
                    // 商品选择输入校验
                    while (!inputValid)
                    {
                        Console.Write("Pick your product: ");
                        inputValid = int.TryParse(Console.ReadLine(), out choice) && choice >= 1 && choice <= 3;
                        if (!inputValid)
                        {
                            Console.WriteLine("请输入1-3之间的有效商品编号!");
                        }
                    }

                    int price = 0;
                    switch (choice)
                    {
                        case 1:
                            Console.WriteLine("BLACKPINK Lightstick 1500php");
                            price = 1500;
                            break;
                        case 2:
                            Console.WriteLine("DREAMCATCHER Seasons Greetings 920php");
                            price = 920;
                            break;
                        case 3:
                            Console.WriteLine("RED VELVET Summer Package 980php");
                            price = 980;
                            break;
                    }

                    int quanti = 0;
                    inputValid = false;
                    // 购买数量输入校验
                    while (!inputValid)
                    {
                        Console.WriteLine("Quantity of product: ");
                        inputValid = int.TryParse(Console.ReadLine(), out quanti) && quanti > 0;
                        if (!inputValid)
                        {
                            Console.WriteLine("请输入大于0的有效购买数量!");
                        }
                    }

                    // 累加当前商品金额到总金额
                    total += price * quanti;
                    System.Threading.Thread.Sleep(2000);

                    int decide = 0;
                    inputValid = false;
                    // 操作选择输入校验
                    while (!inputValid)
                    {
                        Console.WriteLine("[1] Add more products     [2] Pay: ");
                        inputValid = int.TryParse(Console.ReadLine(), out decide) && (decide == 1 || decide == 2);
                        if (!inputValid)
                        {
                            Console.WriteLine("请输入1或2选择对应操作!");
                        }
                    }

                    if (decide == 2)
                    {
                        isCheckout = true;
                    }
                }

                // 输出总金额
                Console.WriteLine($"所有商品总金额:{total}php");

                // 询问是否需要再次使用程序
                int restartChoice = 0;
                bool restartValid = false;
                while (!restartValid)
                {
                    Console.WriteLine("是否需要再次使用程序?[1] 是 [2] 否");
                    restartValid = int.TryParse(Console.ReadLine(), out restartChoice) && (restartChoice == 1 || restartChoice == 2);
                    if (!restartValid)
                    {
                        Console.WriteLine("请输入1或2选择对应操作!");
                    }
                }

                if (restartChoice == 1)
                {
                    restartProgram = true;
                    Console.Clear();
                }

            } while (restartProgram);

            Console.WriteLine("感谢使用,程序即将退出");
            System.Threading.Thread.Sleep(1000);
        }
    }
}

关键修正说明

  • 初始化total = 0,每次用户选购完商品就将当前商品的金额累加到total中,确保多件商品金额可以正确累计
  • 替换原有固定次数的for循环为无限循环,用户选择结算时才退出选购流程,不受商品数量限制
  • 抽离重复的商品选择、价格匹配逻辑,消除冗余代码
  • 修复金额计算公式,删除错误的choice乘数
  • 统一所有分支中商品的价格定义,避免数值不一致
  • 新增结算完成后是否重启程序的判断逻辑,符合需求
  • 补充了基础的输入合法性校验,避免用户输入非法值导致程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:36:02