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

C# WinForm披萨点餐系统:如何强制勾选至少指定数量的复选框选项

披萨点餐程序配料强制校验功能实现

核心修改逻辑

  • 新增配料数量校验步骤:用户点击下单按钮后,先统计已勾选的配料总数
  • 匹配所选尺寸对应的最低配料要求:
    • 小份披萨:至少勾选2种配料
    • 中份披萨:至少勾选3种配料
    • 大份披萨:至少勾选4种配料
  • 校验不通过时弹出提示,终止计价流程,避免金额异常
  • 优化计价逻辑:免费额度内的配料不计费,超出部分才累加费用,彻底避免总价低于基础售价的问题

修改后完整代码

namespace PizzaApp
{
    public partial class PizzaOrder : Form
    {
        // 价格配置统一管理
        public double SmallBasePrice = 5.50;
        public double MediumBasePrice = 11.75;
        public double LargeBasePrice = 15.00;
        public double SingleToppingPrice = 0.75;

        public PizzaOrder()
        {
            InitializeComponent();
        }

        private void orderButton_Click(object sender, EventArgs e)
        {
            // 1. 统计已勾选的配料总数
            var allToppings = new List<CheckBox> { pepperoniCheckBox, onionCheckBox, mushroomCheckBox, blackOlivesCheckBox, pineappleCheckBox, extraCheeseCheckBox };
            int selectedToppingCount = allToppings.Count(t => t.Checked);

            // 2. 获取用户选择的披萨尺寸对应配置
            double basePrice = 0;
            int freeToppingCount = 0;
            int minRequiredTopping = 0;

            if (smallRadioButton.Checked)
            {
                basePrice = SmallBasePrice;
                freeToppingCount = 2;
                minRequiredTopping = 2;
            }
            else if (mediumRadioButton.Checked)
            {
                basePrice = MediumBasePrice;
                freeToppingCount = 3;
                minRequiredTopping = 3;
            }
            else if (largeRadioButton.Checked)
            {
                basePrice = LargeBasePrice;
                freeToppingCount = 4;
                minRequiredTopping = 4;
            }
            else
            {
                MessageBox.Show("请先选择披萨尺寸");
                return;
            }

            // 3. 校验配料数量是否满足最低要求
            if (selectedToppingCount < minRequiredTopping)
            {
                MessageBox.Show($"当前所选披萨尺寸需要至少选择{minRequiredTopping}种配料,请补充选择");
                return;
            }

            // 4. 计算最终总价
            double totalCost = basePrice;
            // 超出免费额度的配料才额外收费
            if (selectedToppingCount > freeToppingCount)
            {
                totalCost += (selectedToppingCount - freeToppingCount) * SingleToppingPrice;
            }

            // 5. 格式化显示总价
            totalPriceTextBox.Text = totalCost.ToString("F2");
        }

        // 以下空事件不影响功能,可保留也可直接删除
        private void sizeGroupBox_Enter(object sender, EventArgs e) {}
        private void ingredientsGroupBox_Enter(object sender, EventArgs e) {}
        private void PizzaOrder_Load(object sender, EventArgs e) {}
        private void priceLabel_Click(object sender, EventArgs e) {}
    }
}

额外优化说明

  • 移除了静态Cost变量,每次点击下单按钮重新计算价格,避免多次点击导致金额累加的bug
  • 统一配料单价配置,后续调整价格仅需修改一处即可
  • 总价格式化保留两位小数,符合金额类内容的显示习惯
  • 新增未选择披萨尺寸的提示,覆盖更多异常操作场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:36:01