【Python 餐厅叫号系统点餐】

一、题目

有客人来就餐时其叫号系统会自动生成一个号码,并根据人数安排餐桌型号;当对应餐桌型号有空桌时,按餐桌编号(由小到大)即时分配餐桌安排客人就餐;当对应餐桌型号没有空桌时,客人按先后顺序排队。程序部分运行界面如下:

 餐厅餐桌设置如下表:

二、程序

# 全局变量设置
size = [2, 4, 6, 12]  # 每种桌型最大就餐人数
nums = [8, 2, 10, 4]  # 每种桌型的餐桌数量
times = [25, 45, 60, 80]  # 每种桌型平均就餐时间
flags = [[True] * nums[i] for i in range(4)]  # 标记每张桌子的初始状态,True为空闲,False为占用,默认True
s_time = 10 * 60 * 60  # 开始营业时间-10 点整,转化为秒
e_time = 14 * 60 * 60  # 结束营业时间-14 点整转化为秒
maxn = 50  # 假设队列已经足够深
qc = [[0] * maxn for i in range(4)]  # 循环队列
now_time = s_time
id = 0
# head是4个初始化0的数组,用来存储四种桌型的头指针;tail是4个初始化数组为0的数组,用来存储四种桌型的尾指针;tail-head+1则是队列的长度,也就是当前桌型已占用的桌数
head, tail = [0] * 4, [0] * 4


def gettype(num):
    type = -1
    for i in range(len(size)):
        if num <= size[i]:
            type = i
            break
    return type


def checktable(n):
    ans = []
    for i in range(nums[n]):
        if flags[n][i]:
            ans.append(i)
    return ans


def getinfo():
    return int(input("请输入客人人数:"))


if __name__ == '__main__':
    while now_time < e_time:
        # 调用函数getinfo() #获取客人人数
        number = getinfo()
        if number > 0:
            id += 1
            # 根据就餐人数确定餐桌类型
            type = gettype(number)
            if type != -1:
                qc[type][tail[type]] = id
                tail[type] = (tail[type] + 1) % maxn
                qc_len = (tail[type] - head[type] + maxn) % maxn
                print(id, "号客人,给您安排的是", size[type], "人桌,前面还有", qc_len - 1, "人在等位")
            else:
                print(id, "号客人,非常抱歉,没有适合您的桌型!")
        else:
            print("结束!")
            break
        for i in range(4):
            tables = checktable(i)
            if len(tables) > 0 and head[i] != tail[i]:
                flags[i][tables[0]] = False  # 座第一个空桌
                print(qc[i][head[i]], "号客人请用餐-->", size[i], "人桌", tables[0], "号")
                head[i] = (head[i] + 1) % maxn
            now_time += 1
            # 更新每张餐桌的就餐情况,代码略
            # 根据桌型的就餐时间,就餐时间截至则将占用桌重新释放

三、运行结果

请输入客人人数:3
1 号客人,给您安排的是 4 人桌,前面还有 0 人在等位
1 号客人请用餐--> 4 人桌 0 号
请输入客人人数:3
2 号客人,给您安排的是 4 人桌,前面还有 0 人在等位
2 号客人请用餐--> 4 人桌 1 号
请输入客人人数:3
3 号客人,给您安排的是 4 人桌,前面还有 0 人在等位
请输入客人人数:3
4 号客人,给您安排的是 4 人桌,前面还有 1 人在等位
请输入客人人数:3
5 号客人,给您安排的是 4 人桌,前面还有 2 人在等位
请输入客人人数:3
6 号客人,给您安排的是 4 人桌,前面还有 3 人在等位
请输入客人人数:3
7 号客人,给您安排的是 4 人桌,前面还有 4 人在等位
请输入客人人数:3
8 号客人,给您安排的是 4 人桌,前面还有 5 人在等位
请输入客人人数:3
9 号客人,给您安排的是 4 人桌,前面还有 6 人在等位
请输入客人人数:2
10 号客人,给您安排的是 2 人桌,前面还有 0 人在等位
10 号客人请用餐--> 2 人桌 0 号
请输入客人人数:2
11 号客人,给您安排的是 2 人桌,前面还有 0 人在等位
11 号客人请用餐--> 2 人桌 1 号
请输入客人人数:2
12 号客人,给您安排的是 2 人桌,前面还有 0 人在等位
12 号客人请用餐--> 2 人桌 2 号
请输入客人人数:2
13 号客人,给您安排的是 2 人桌,前面还有 0 人在等位
13 号客人请用餐--> 2 人桌 3 号
请输入客人人数:1
14 号客人,给您安排的是 2 人桌,前面还有 0 人在等位
14 号客人请用餐--> 2 人桌 4 号
请输入客人人数:2
15 号客人,给您安排的是 2 人桌,前面还有 0 人在等位
15 号客人请用餐--> 2 人桌 5 号
请输入客人人数:12
16 号客人,给您安排的是 12 人桌,前面还有 0 人在等位
16 号客人请用餐--> 12 人桌 0 号
请输入客人人数:20
17 号客人,非常抱歉,没有适合您的桌型!
请输入客人人数:32
18 号客人,非常抱歉,没有适合您的桌型!
请输入客人人数:-1
结束!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值