编辑代码

import Foundation

// 定义三个菜单的字典
let menu1: [String: Double] = ["电视": 2000.0, "冰箱": 3000.0, "洗衣机": 1500.0] // 家用品
let menu2: [String: Double] = ["苹果": 5.0, "香蕉": 3.0, "面包": 10.0] // 食品
let menu3: [String: Double] = ["笔": 2.0, "纸张": 1.0, "文件夹": 10.0] // 办公用品

// 初始化下单情况的字典
var mymenu: [String: Int] = [:]

// 无限循环,等待用户输入
while true {
    print("请输入'y'退出,或者按任意键继续")
    if let userInput = readLine()?.trimmingCharacters(in: .whitespacesAndNewlines), userInput == "y" {
        break // 退出循环
    }

    // 输出菜单供用户选择
    print("请选择菜单类型:")
    print("1. 家用品")
    print("2. 食品")
    print("3. 办公用品")

    if let menuChoice = readLine()?.trimmingCharacters(in: .whitespacesAndNewlines),
       let menu = parseMenuChoice(menuChoice) {
        let currentMenu = menu

        // 读取商品编号
        print("请输入商品编号:")
        if let itemID = readLine()?.trimmingCharacters(in: .whitespacesAndNewlines),
           let item = currentMenu.first(where: { $0.key == itemID }) {
            let itemName = item.key
            let itemPrice = item.value

            // 读取购买数量
            print("请输入购买数量:")
            if let input = readLine()?.trimmingCharacters(in: .whitespacesAndNewlines),
               let numb = Int(input) {
                mymenu[itemName, default: 0] += numb
                print("已将\(itemName)添加到您的订单中,数量为\(numb)个。")
            } else {
                print("请输入一个有效的购买数量。")
            }
        } else {
            print("无效的商品编号,请重新输入。")
        }
    } else {
        print("无效的菜单选择,请重新输入。")
    }
}

// 打印小票
print("====小票=====")
print("名称\t数量\t*\t单价\t=\t价格")
print("--------------------")

var totalCost: Double = 0.0
for (product, numb) in mymenu {
    if let price = getPriceForItem(product, menu1: menu1, menu2: menu2, menu3: menu3) {
        let cost = price * Double(numb)
        totalCost += cost
        print("\(product)\t\(numb)\t*\t\(price)\t=\t\(cost)")
    }
}

print("--------------------")
print("总价: \(totalCost)")
print("感谢您的光临,祝您生活愉快!")

// 辅助函数,用于根据菜单选择返回相应的菜单字典
func parseMenuChoice(_ choice: String) -> [String: Double]? {
    switch choice {
    case "1":
        return menu1
    case "2":
        return menu2
    case "3":
        return menu3
    default:
        return nil
    }
}

// 辅助函数,用于根据商品名称获取价格
func getPriceForItem(_ item: String, menu1: [String: Double], menu2: [String: Double], menu3: [String: Double]) -> Double? {
    return menu1[item] ?? menu2[item] ?? menu3[item]
}