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
相关产品推荐
相关产品推荐

