python模拟银行取号叫号系统
模拟银行取号叫号系统
需求如下:
1.当客户使用排队系统,排队机按存储的号码递增,生成一个号码并打印,排队机将此号码在无线空闲状态下发送给主机。
2.主机根据现有各窗口业务状况,如果有某个窗口空闲,则立即指派任务。如果有客户在前面等待则让最新的号码加入排队队列。银行排队叫号系统工作流程
3.当工作人员按下呼叫器的呼叫键时,呼叫器通过无线模块往主机提出要求,主机收到要求后,给出应答,应答包括安排的客户号码和现有排队等待的人数。如果没人排队,则提示**空闲信息。
4.主机确定有人在排队的情况下,将最前面一个号码发送给语音播放系统,播放语音告知客户。并将号码发给对应的显示屏显示。
设计算法
其实需求有不清晰之处:未明确窗口与业务的对应关系,对应关系有三种:①窗口与业务是一对一的关系;②窗口与业务是一对多的关系;③窗口与业务是多对一的关系;④窗口与业务是多对多的关系。其中一对一的关系实现起来最简单,我们依次为例进行分析。
算法分为两个模块,一个是用户界面的取号模块,另一个是工作人员的叫号模块,如果要实现两个模块之间来回切换,我们还要实现两个模块的链接。我们用一个字典来存储所有客户的叫号信息,通过字典的写入(取号),修改(叫号)实现两个模块的链接,假定过号必须重新叫号。
1、字典。
字典可以设置为:
pos_dict = {"银行卡服务窗口":t1,"社保卡服务窗口":t2,"金融卡服务窗口":t3,"其他服务窗口":t4}
其中t1,t2,t3,t4表示对应业务的排队名单,是列表类型。
2、取号。
我们假设服务与数字相对应:1. 银行卡服务;2. 社保卡服务 3. 金融卡服务 4. 其他服务。获取用户输入的数字,判定用户需要何种服务,设置计数码,使用while循环对号码进行累次递加,并打印出取号信息。
使用append()将函数新取号的用户加入t列表中,方便后续叫号使用。
while True:id = eval(input('请选择业务类型:1. 银行卡服务;2. 社保卡服务 \
3. 金融卡服务 4. 其他 5. 切换到工作人员窗口\n'))if id == 1:a += 1A_num = "A" + str(a) #为了以示区分,在取号上加了A,B,C,Dt1.append(A_num)pos_dict['银行卡服务窗口'] = t1print('你的排队号码是A{},当前你选择的是银行卡服务。\n'.format(a))#print(pos_dict['银行卡服务窗口'])#上面是一行禁用的代码,不禁用时用来测试运行时结果是否正确。
3、叫号。
叫号需要切换到工作人员的界面,我们用pop()函数对字典中的t列表进行取出元素并删除的操作,取出的元素放到popped_num变量中,并打印出叫号信息,用len()函数可以获取当前的等待人数。
while True:key = input("呼叫客户按y,切换到用户界面按n,结束进程请按e\n")if key == "y":window_num = input("请输入当前窗口类型:1. 银行卡服务;2. 社保卡服务 \
3. 金融卡服务 4. 其他 5.切换到客户界面\n")if window_num =="1":try:popped_num = t1.pop(0) #pop()函数,从列表取出第0个元素将其存储在popped_num,并删除print("请{}号客户前往1号窗口办理业务,当前排队人数为{}人\n"\.format(popped_num,len(t1)))except:print("目前1号窗口空闲,无人排队")#列表为空时,pop()函数报错,故except表示列表为空
完整代码
#银行取号叫号系统
def get_num(): #实现取号,并把每一个号存入列表中。global t1,t2,t3,t4,a,b,c,d,pos_dict #定义全局变量,用来切换客户和工作人员窗口时数据能同步更新。#t1,t2,t3,t4表示对应业务的排队名单#a,b,c,d表示对应业务的取号计数变量#pos_dict 是整个数据存储的字典pos_dict = {"银行卡服务窗口":t1,"社保卡服务窗口":t2,"金融卡服务窗口":t3,"其他服务窗口":t4}while True:id = eval(input('请选择业务类型:1. 银行卡服务;2. 社保卡服务 \
3. 金融卡服务 4. 其他 5. 切换到工作人员窗口\n'))if id == 1:a += 1A_num = "A" + str(a) #为了以示区分,在取号上加了A,B,C,Dt1.append(A_num)pos_dict['银行卡服务窗口'] = t1print('你的排队号码是A{},当前你选择的是银行卡服务。\n'.format(a))#print(pos_dict['银行卡服务窗口'])#上面是一行禁用的代码,不禁用时用来测试运行时结果是否正确。elif id ==2:b += 1B_num = "B" + str(b)t2.append(B_num)pos_dict['社保卡服务窗口'] = t2print('你的排队号码是B{},当前你选择的是社保卡服务。\n'.format(b))elif id ==3:c += 1C_num = "C" + str(c)t3.append(C_num)pos_dict['金融卡服务窗口'] = t3print('你的排队号码是C{},当前你选择的是金融卡服务。\n'.format(c))elif id == 4:d += 1D_num = "D" + str(c)t4.append(D_num)pos_dict['其他服务窗口'] = t4print('你的排队号码是D{},当前你选择的是其他服务。\n'.format(d))elif id == 5:break #输入5的时候切换到工作人员界面else:print("输入有误,请重新输入!")return pos_dictdef yell_num(pos_dict):t1 = pos_dict['银行卡服务窗口']t2 = pos_dict['社保卡服务窗口']t3 = pos_dict['金融卡服务窗口']t4 = pos_dict['其他服务窗口'] while True:key = input("呼叫客户按y,切换到用户界面按n,结束进程请按e\n")if key == "y":window_num = input("请输入当前窗口类型:1. 银行卡服务;2. 社保卡服务 \
3. 金融卡服务 4. 其他 5.切换到客户界面\n")if window_num =="1":try:popped_num = t1.pop(0) #pop()函数,从列表取出第0个元素将其存储在popped_num,并删除print("请{}号客户前往1号窗口办理业务,当前排队人数为{}人\n"\.format(popped_num,len(t1)))except:print("目前1号窗口空闲,无人排队")#列表为空时,pop()函数报错,故except表示列表为空elif window_num =="2":try:popped_num = t2.pop(0)print("请{}号客户前往2号窗口办理业务,当前排队人数为{}人\n"\.format(popped_num,len(t2)))except:print("目前2号窗口空闲,无人排队")elif window_num =="3":try:popped_num = t3.pop(0)print("请{}号客户前往3号窗口办理业务,当前排队人数为{}人\n"\.format(popped_num,len(t3)))except:print("目前3号窗口空闲,无人排队")elif window_num =="4":try:popped_num = t4.pop(0)print("请{}号客户前往4号窗口办理业务,当前排队人数为{}人\n"\.format(popped_num,len(t4)))except:print("目前4号窗口空闲,无人排队")elif window_num =="5":#设置输入5切换到用户界面get_num()else:print("输入错误,请重新输入!\n")elif key == "n":get_num()elif key == "e":breakelse:print("输入错误,请重新输入!\n")def main():pos_dict =get_num()yell_num(pos_dict)a=0
b=0
c=0
d=0
t1 = []
t2 = []
t3 = []
t4 = []
main()
程序运行的结果截图如下:
需要注意的问题
1、关于全局变量。
代码中使用了全局变量,global t1,t2,t3,t4,a,b,c,d,pos_dict ,是因为我们的取号模块和叫号模块需要来回切换,如果不使用全局模块就会出现从叫号模块返回取号模块后,取号又重新从A1开始,再回到叫号模块,也从A1开始。
2、关于其他的“”窗口-业务“”对应关系的处理
由于python只学了一个月,所以目前只写出了一一对应关系下的模拟系统,其他关系的系统写出来后会继续上传。也希望能有朋友一起交流一下。
3、写代码的时候发现的一行代码太长的问题
用英文的 \ 是可以解决一行代码太长的情况的,但是要注意在print语句中用 \ 时,我们需要把第二行的代码取消缩进,顶格书写,否则会有空格。具体如下(第二个是正确的):
写在最后
本文科生学习python以来,第一次写博客,希望大家多多见谅,多多指教,谢谢!
python模拟银行取号叫号系统相关推荐
- 数据结构——数据结构模拟银行排号叫号系统参考
数据结构模拟银行排号叫号系统参考 4/27.作业三 用队列的简单操作实现,代码较简单,提示信息易懂 定义一个结构体SqQueue 判断队列是否为空 判断队列是否已满 向队列中插入元素 元素e出队,并用 ...
- C语言-实现一个简易的银行排号叫号系统
这两天在网上看到这个题目,感觉挺有意思,就做了一下.我在网上看到其他人都是用C++做的,因为不懂C++语言,没看懂,尝试着用C语言做了该题.希望能来看该题的大神指点指点,估计还有些bug没找出来. 本 ...
- 模拟银行窗口排队叫号系统的运作
最近在网上看到了一道面试题,初看很简单,细看有点意思的一道题目: http://blog.csdn.net/zhangxiaoxiang/archive/2011/04/01/6294132.aspx ...
- 51单片机银行自助排队叫号系统VIP热敏打印功能DY-SV17F语音播报
实践制作DIY- GC0138-银行自助排队叫号系统VIP 基于51单片机设计---银行自助排队叫号系统VIP 二.功能介绍: STC89C52最小系统板+0.96寸OLED显示器+DY-SV17F语 ...
- 学习Opencv+Python之银行卡卡号识别
学习Opencv+Python之银行卡卡号识别 思路: 获取模板轮廓 获取模板中每个数字的轮廓 获取银行卡卡号轮廓 分别提取卡号中的每个数字的轮廓 对比识别 代码: # 导入工具包 from imut ...
- 基于Python+django的 医院排队叫号系统-计算机毕业设计
项目介绍 随着时代发展,越来越多的人需要到医院进行挂号检查等操作,如果全部都到医院现场挂号,一方面的浪费大量的时间和精力,另一方面是浪费大量的医疗资源,为了能够让患者更加方便的进行挂号,我们通过pyt ...
- 线程同步之模拟银行取钱实例
线程同步的机制就是队列和锁,把共享的资源加上一把锁,然后把线程进行排队,实现安全的线程.下面为大家模拟银行取钱的实例,代码如下: public class Unsafebank {public s ...
- python 模拟登录公众号平台,主动推消息等一系列操作
最近迷上了用python写爬虫,一发不可收拾,下面我们来说一下如何实现模拟登录微信公众号平台. 故事起因,由于本人注册了一个公众号,想着如何通过脚本实现像部分用户发送消息呢? 如何实现一键上传材料 ...
- 基于Java语言实现模拟银行存取款业务系统
资源下载地址:https://download.csdn.net/download/sheziqiong/85820969 1.项目简介 本项目的主要功能是模拟银行的存取款业务,当用户登录时需判断银行 ...
- python模拟银行存取款_python 模拟银行转账功能过程详解
首先画出流程图,流程图与现实代码有出入,因为刚开始画流程图的时候,有些东西没考虑进去,后来写着写着就慢慢能想起来并实现了. 另有一点经验推荐给新手朋友,如果说碰到一个项目无从下手的话,就先慢慢去写,写 ...
最新文章
- Apache2.4部署python3.6+django2.0项目
- react-router中离开确认组件Prompt
- 服务器如何运行java文件_在linux服务器上运行java文件
- DeepLearning:CNN网络学习之LetNet-5解读(论文+分析+代码)
- Python中标准模块importlib详解
- m5310模组数据上传至onenet_5G通信模组799元限量发售,中国移动意欲何为?
- vue click同时传入事件对象和自定义参数
- matlab采样频谱,Matlab对采样数据进行频谱分析
- 学习随笔:Django 补充及常见Web攻击 和 ueditor
- linux x64下安装oracle 11g
- 腾讯正式下线PC版QQ秀 网友:我的时代落幕了
- 判断整数_2021暑期强化不定方程整数解问题
- 梦笔记2022-02-28
- densenet代码解读
- win10系统word软件变英文各类解决方法
- python基础教程doc_python基础教程之Word Cloud (词云) - Python|python基础教程|python入门|python教程...
- 计算机远程桌面修复,大师教您Win10远程桌面连接的修复手段
- 无效虚假询盘,如何避免上当?
- 非线性控制1.0——S函数定义
- 360视频:CMP和ACP投影