新闻资讯

<主页 > 新闻资讯 >

k8排队叫号系统设计c语言

发布日期:2020-10-28 04:11

  本文设计了一套排队叫号系统。该系统是以排队抽号顺序为核心,客户利用客户端抽号,工作人员利用叫号端叫号;通过显示器及时显示当前所叫号数,客户及时了解排队信息,通过合理的程序结构来执行排队抽号。以提高排队等待效率,解决排队秩序混乱,前拥后挤等现象,实现排队自动化,规范化。

  本系统由键盘输入系统、单片机系统、屏幕显示系统及叫号提示音系统组成,系统分为两个部分:抽号部分和叫号部分,其控制核心为AT89C51单片机,抽号部分和叫号部分采用一块 LCD液晶显示器,这样显示数据直观,便于客户理解,抽号部分输入只需使用一个抽号按键即可,便于客户操作,叫号部分包括叫两个号键,系统采用自动清零,无需人工操作。

  设备上电后,显示器屏幕亮,无信息显示。当客户按键后,每按一下,队伍加1,显示器显示客户队伍号;排满20位后,再按取号键,屏幕显示“队伍满”。当客服叫号时,队伍减1,程序进行信息处理,在显示器上显示“几号客户到几号窗口”,同时进行声音提示;当队伍空时,显示“队伍空”,显示器屏幕清空,储存的队伍号码归零处理。

  单片机的可擦除只读存储器可以反复擦除100次。从工作原理上讲,单片机就是一种微型计算机,是一种“程序存储式”计算机。它是在一块硅片上集成了中央处理器(CPU)、随机内存(RAM)、程序内存(ROM或EPROM)、定时/计数器以及各种I/O接口,也就是集成在一块芯片上的计算机。

  用LCD显示一个字符时比较复杂,因为一个字符由6x8或8x8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8个字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。

  这样一来就组成某个字符。但对于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立游标,在此送上该字符对应的代码即可。

  系统Proteus仿线为控制核心,包括显示电路,音乐提示电路,晶振电路。

  液晶显示电路:P1口接LCD1602的8个双向数据线的数据/命令选择端,P3.5接1602的读/写选择端,P3.6接1602的使能信号。BLA、BLK分别是1602的背光源的正负极,VL是1602对比度调整端。本文是通过对RS、RW以及E的高低电平进行写指令和写数据操作来控制1602的显示的。

  声音提示电路:使用最简单的蜂鸣器来作为提示音部分,通过改变端口高低电平来进行发声,并对延时进行修改来调试发声频率,从而修改发出的声音的好坏。

  仿真是在软件Proteus 7.4上进行的,用C语言编写的程序,通过keil生成了hex文件,经过调试,仿真实现了排队叫号系统的功能。

  客户取号:按下客户端取号按键,屏幕显示“Your No.is 03!”。

  以下是根据文档,开发完成后的简单demo,可以模拟在实际门诊排队叫号系统运行时,HIS系统和叫号软件之间的UDP消息传输。

  当在Web界面上点击“下一位”按钮时,网页会向叫号软件的5020端口发送如下UDP报文:

  Cmd:1//Cmd是叫号软件的命令识别码,1-下一位;2-重呼;3-呼叫特定Sn; 4-过号;5-受理

  这两天在网上看到这个题目,感觉挺有意思,就做了一下。我在网上看到其他人都是用C++做的,因为不懂C++语言,没看懂,尝试着用C语言做了该题。希望能来看该题的大神指点指点,估计还有些bug没找出来。

  本人编程基础差,利用闲暇的时间来做此题,总时间加在一起,花了一天左右吧。网上有人花了半小时做完该题,让我膜拜啊,太佩服。

  每行只会有一条输入(比如:C语言可使用gets函数获取一行输入命令的字符串)。

  a、若输入不符合要求(如:命令字非法,或其他认为输入的错误)均需输出error

  1、取号。可获取普通号和vip号码。如初始状态,输入get,则获取普通号码,执行结果为1,如再次输入get vip,则获取VIP号码,执行结果为vip 2。如果末尾的2号被删除,则再次调用get时应输出2。VIP号码有绝对的优先级。普通号和vip号码统一编号,取号均为连续号码。号码从1开始编号,最大为100000.

  2、叫号。获取当前应该处理用户的号码。例如当前排队号码为1 2 3 4 5 7,当输入call,执行结果为1,如1为vip号码,则为vip 1.如果再连续调用6次,第六次执行结果应为error

  3、删除号码。客户不想办理时可删除号码,叫号时则跳过此号码。例如当前排队号码为1 2 3 4 5,输入delete 5,执行结果为5,如果5为vip则显示vip 5。再次输出delete 5,执行结果为error

  4、获取当前排队总人数。获取当前排队人数。例如当前排队号码为1 2 3 4 5 6,执行结果为6

  6、重置排号机。例如输入reset,则重置排号机,进入初始状态,无需输出。

  本人实现的思路:构造一个数据链表,用data存当前的位号,vip表示是否为vip号码(1:是,0:否)然后构造相应操作的子函数,来对整个链表进行操作。也曾想过用数组的方式来实现,但想了一会没想出来,还是觉得用链表的方式实现要方便一些。

  在各子函数处理时,要注意题目的一些要求。稍微复杂一点的函数是叫号call和删除delete函数,这两种情况都要对最后一个节点单独处理,另外取号get需要考虑vip的情况。所以的子函如下所示,包括命令解析、链表头初始化、相应的操作函数。

  在输出error格式上,调试时为了知道是哪里的error,并没有按照题目的格式要求输出,加了位置信息。另外一点题目要求排号上限不超过100000,本人作答时没有考虑该条件。如果需要加条件限制的话,就在get函数中加一个判断GetNumFlag的语句即可。

  有bug,并不能完美实现叫号操作,晚辈提出一点修改意见,如有不对,希望指正! 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器...

  ,参考了网上两篇文章,一篇java的和一篇linux c++的,然后我在windows下实现了它,开发工具是vs2008.在文章最后我会给出直接可编译可执行代码。Java版参考:...

  等待 银行窗口办理业务 VIP客户及公务客户优先办理 VIP及公务窗口闲置时可以为普通用户办理业务 2.注意 为节约空间,仅在博客中提供部分代码 本程序采用手动运行方式而非随时间自动运行,...

  轮到自己的时候才会去办理业务,因此极大的提高了工作效率,缩短了等候时间,其实这其中的原理便是一个简单的循环队列实现的。 1.队列的定义 ...

  过程中,主要重复两件事: 1.病人到达诊室,将病历本交给护士,排到等待队列中候诊。 2.护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。 //main.cpp #include iostream #...

  #includestdio.h #includestdlib.h #includewindows.h typedef struct list { int data; char data1[10]; struct list *next; }lnode,*linklist; typedef struct temp ... linklist

  候诊,而病人的病情有轻重之分,不能简单的根据先来先服务的原则进行诊断治疗,所以医院根据病人的病情规定了不同的优先级别。医生在诊断治疗时,总是选择优先...

  1. 我们说的oc是动态运行时语言是什么意思? 答案:多态。 主要是将数据类型的确定由编译时,推迟到了运行时。 这个问题其实浅涉及到两个概念,运行时和多态。 简单来说,运行时机制使我们直到运行时才去决定一...

  题图 Comfreak在学校的时候,我不爱去食堂成功,一是由于暗黑料理,更重要的一点是人太多了,队伍往往从窗口排到了门口,点菜、计算价格、付款三种业务由打饭阿姨一人完...

  看完你就明白的锁系列之自旋锁 在上一篇文章 看完你就应该能明白的悲观锁和乐观锁 中我们已经学习到了什么是悲观锁和乐观锁、悲观锁和乐观锁的实现、优缺点分别是什么。其中乐观锁的实现之一 CAS 算法中提到了一个...

  数构课设 为时一个礼拜的课设终于完成了 来小小的记录一下我的成果~(虽然

  简介 医院为了能实现日常的运营,经常涉及到的功能是:医生信息录入(医生...