C#披萨订单系统:如何在发票区正确展示各披萨的crust与topping信息
问题原因
你当前使用单个字符串变量pizzaSelection存储披萨信息,每次循环都会用新披萨的内容覆盖它,所以最终发票区域只能显示最后一款披萨的信息。
解决方案
改用集合(比如List<string>)来存储每一款披萨的描述,这样就能保留所有披萨的信息,后续发票循环时逐一取出展示:
- 在订单输入循环前,初始化一个字符串列表用于存储所有披萨信息
- 每完成一款披萨的选择,就将其描述添加到列表中
- 发票区域遍历这个列表,输出每一款披萨的信息
修改后的完整代码
// Ask user for pizza order details //crust selection qtyPizzas = numPizzas(); // 新增:初始化列表存储所有披萨信息 List<string> pizzaSelections = new List<string>(); for (loop = 1; loop <= qtyPizzas; loop++) { crustOption = selectCrust(); crustPrice = crustCost(crustOption); if (crustOption == 1) { crustString = "thin crust"; } else { crustString = "deep pan"; } //topping selection toppingOption = selectTopping(); toppingPrice = toppingCost(toppingOption); if (toppingOption == 1) { toppingString = "ham"; } else if (toppingOption == 2) { toppingString = "mushrooms"; } else if (toppingOption == 3) { toppingString = "mediterranean vegetables"; } else if (toppingOption == 4) { toppingString = "extra cheese"; } unitPrice = crustPrice + toppingPrice; totalPizzaCost = totalPizzaCost + unitPrice; Console.WriteLine("- Pizza #" + loop + ": " + crustString + " with " + toppingString + " (£" + unitPrice + ")"); // 修改:将当前披萨信息添加到列表,而非覆盖单个变量 pizzaSelections.Add($"{crustString} {toppingString}"); } Console.Write("pizza delivery? (y/n): "); deliveryOption = Console.ReadLine(); // Calculate delivery cost based on distance if (deliveryOption == "y") { Console.Write("Enter delivery distance in miles: "); deliveryDistance = Convert.ToDouble(Console.ReadLine()); if (deliveryDistance <= 2) { deliveryCost += 0; } else if (deliveryDistance <= 5) { deliveryCost += 3.00; } else if (deliveryDistance <= 8) { deliveryCost += 5.00; } else { Console.WriteLine("Sorry, we do not deliver that far."); } } // calculate total cost vat = (totalPizzaCost + deliveryCost) * (100 + 20) / 100; orderVAT = vat - totalPizzaCost - deliveryCost; // Output the invoice Console.WriteLine(""); Console.WriteLine("INVOICE"); Console.WriteLine("------------------------------"); Console.WriteLine("Customer ID: " + customerID); Console.WriteLine(""); Console.WriteLine("Pizzas:"); // 修改:遍历列表输出每一款披萨信息 for (int i = 0; i < pizzaSelections.Count; i++) { Console.WriteLine($"pizza # {i+1}: {pizzaSelections[i]}"); } Console.WriteLine(" Total pizza costs: " + totalPizzaCost.ToString("C")); Console.WriteLine(" Delivery cost: " + deliveryCost.ToString("C")); Console.WriteLine(" VAT: " + orderVAT.ToString("C")); Console.WriteLine(" Grand total (incl. VAT): " + vat.ToString("C")); Console.WriteLine("------------------------------"); Console.ReadKey();
额外优化建议
- 可以自定义一个
Pizza类,把饼底、配料、单价等属性封装进去,代码会更清晰易维护 - 字符串拼接优先使用C#的字符串插值(
$"")替代传统的+拼接,可读性更好
内容的提问来源于stack exchange,提问作者Beth Morgan
相关产品推荐
相关产品推荐

