编辑代码

import Foundation  
// 定义菜单商品字典  
let menu1 = ["1": ["商品名称": "电视", "单价": 500.0, "规格": "55寸"],  
"2": ["商品名称": "洗衣机", "单价": 300.0, "规格": "8公斤"],  
"3": ["商品名称": "冰箱", "单价": 700.0, "规格": "250升"]]  
let menu2 = ["1": ["商品名称": "面包", "单价": 5.0, "规格": "一袋"],  
"2": ["商品名称": "牛奶", "单价": 10.0, "规格": "一盒"],  
"3": ["商品名称": "苹果", "单价": 3.0, "规格": "一斤"]]  
let menu3 = ["1": ["商品名称": "笔", "单价": 2.0, "规格": "黑色"],  
"2": ["商品名称": "纸张", "单价": 10.0, "规格": "A4"],  
"3": ["商品名称": "文件夹", "单价": 5.0, "规格": "塑料"]]  
// 初始化下单情况字典  
var mymenu = [String: Int]()  
// 主函数  
func main() {  
var user = ""  
var totalCost = 0.0  
// 无限循环  
while user.lowercased() != "n" {  
// 输出菜单供用户选择  
print("请选择一个菜单类型(1:家用品、2:食品、3:办公用品)")  
if let choice = readLine()?.trimmingCharacters(in: .whitespacesAndNewlines),  
let number = Int(choice) {  
var menu: [String: [String: Any]]?  
switch number { 
case 1:  
menu = menu1  
case 2:  
menu = menu2  
case 3:  
menu = menu3  
default:  
print("无效的菜单类型,请重新输入。")  
continue  
}  
guard let selectedMenu = menu else {  
continue  
}  
// 输出商品供用户选择  
for (key, value) in selectedMenu {  
print("\(key) - \(value["商品名称"]!) (\(value["规格"]!)) - 单价:\(value["单价"]!)")  
}  
// 读取用户选择的商品编号  
if let itemID = readLine()?.trimmingCharacters(in: .whitespacesAndNewlines),  
let item = selectedMenu[itemID] {  
let itemName = item["商品名称"] as? String ?? "未知商品"  
let itemPrice = item["单价"] as? Double ?? 0.0  
// 输出商品规格并读取用户输入的商品名称  
print("您选择的商品规格是:\(item["规格"]!)")  
if let userItemName = readLine()?.trimmingCharacters(in: .whitespacesAndNewlines) {  
if userItemName == itemName {  
// 读取购买数量并更新下单信息  
if let numb = readLine()?.trimmingCharacters(in: .whitespacesAndNewlines),  
let quantity = Int(numb) {  
mymenu[itemName] = mymenu[itemName] ?? 0 + quantity  
print("已添加 \(quantity) 个 \(itemName) 到您的订单中。")  
} else {  
print("无效的输入,请输入一个整数作为数量。")  
}  
} else {  
print("您输入的商品名称与选择的商品不符,请重新选择。")  
}  
} else {  
print("您没有输入商品名称,请重新输入。")  
}  
} else {  
print("无效的商品编号,请重新输入。")  
}  
} else {  
print("无效的输入,请输入一个数字。")  
}  
// 询问用户是否继续  
print("是否继续购物?(y/n)")  
user = readLine()?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""  
}  
// 打印小票  
print("============== 小票 ==============")  
print("名称\t数量\t* 单价\t= 价格")  
print("=====================================")  
// 计算总价并打印明细  
var s = 0.0  
for (itemID, quantity) in mymenu {  
    // 假设每种商品只在一个菜单中,这里简单地通过菜单字典查找单价  
    let itemPrice: Double  
    if let price = (menu1[itemID] ?? menu2[itemID] ?? menu3[itemID])?["单价"] as? Double {  
        itemPrice = price  
    } else {  
        itemPrice = 0.0  
        print("警告:找不到商品 \(itemID) 的单价,单价默认为0。")  
    }  
    let subtotal = Double(quantity) * itemPrice
    s += subtotal  
    print("\(itemID)\t\(quantity)\t* \(itemPrice)\t= \(subtotal)")  
}  
// 计算总价并打印  
print("=====================================")  
print("总价:\(s)")  
print("感谢您的光临,欢迎下次再来!")  
}  
// 调用主函数  
main()