数据结构与算法的设计与实现-课程设计实验报告.docx_第1页
数据结构与算法的设计与实现-课程设计实验报告.docx_第2页
数据结构与算法的设计与实现-课程设计实验报告.docx_第3页
数据结构与算法的设计与实现-课程设计实验报告.docx_第4页
数据结构与算法的设计与实现-课程设计实验报告.docx_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告课 程 设 计 报 告题目: 数据结构与算法的设计与实现 课程名称: 基于堆的优先队列设计 专业班级: 学 号: 姓 名: 指导教师: 报告日期: 2015年3月7号 计算机科学与技术学院 任务书 设计内容传统队列是一种符合先插入的元素必须先删除(FIFO)的处理逻辑,这不总是满足应用要求;很多时候需要优先级高的任务先处理(即后插入的可能先删除)。(1)基于堆的概念设计优先级队列(Priority Queue)抽象数据类型,至少包含Init_PriorityQue, Destroy_PriorityQue, Clear_PriorityQue,PriorityQue_Insert, PriorityQue_DeletMin, PriorityQue_Empty, PriorityQue_Full等操作;(2)选择适当的物理存储结构实现优先级队列ADT; (3)应用优先级队列ADT设计与实现一个医院门诊医师与病人看诊服务事件仿真程序,使医师服务效率尽量高。设计要求(1)仿真事件(如病人到达,病情复杂度/就诊时间,病人离开等)可根据某种概率分布或随机模型生成。(2)要求对各种算法进行理论分析,同时也对实测结果进行统计分析。测试数据要求有一定规模。(3)要求界面整洁、美观,操作方便。参考文献1 严蔚敏, 吴伟民. 数据结构(C语言版). 北京: 清华大学出版社,19972 严蔚敏, 吴伟民, 米宁. 数据结构题集(C语言版). 北京: 清华大学出版社,19993 Mark Allen Weiss.Data Structures and Algorithm Analysis in C, 机械工业出版社,2010, 177-19245华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告 目录任务书I1引言31.1课题背景与意义31.1.1课题背景31.1.2意义31.2国内外研究现状41.3课程设计的主要研究工作52系统需求分析与总体设计62.1系统需求分析62.2系统总体设计82.3系统设计原理93系统详细设计103.1有关数据结构的定义113.2主要算法设计114系统实现与测试134.1系统实现144.2系统测试165总结与展望175.1总结185.2工作展望186体会19参考文献21附录33 1引言1.1课题背景与意义在中国往往排队3小时看病3分钟,在大型医院里每天都会接待非常多的病人,为了更快速更有效的解决病情我们不同按照传统的方式先到的先看病,这样往往会耽误病情严重的人及时治疗,这时就要提出更好的办法。1.1.1背景我们知道在大型医院里,每天需要接治1000多名患者,排队挂号成了一个难题。以先到先治的原则,重病的患者往往因为等待时间太长,而耽误最佳的治疗时间。这是一个尴尬的局面,可医院有医院的秩序。另一方人工有限不能时时刻刻照顾每一个病人。假设,现在有5名患者需要就医,分别是1号,2号,3号,4号和5号。其中3号和5号,很严重,有生命危险,需要尽快得到医治。但是1和2都排在3号前面那该怎么办呢?当然,如果按顺序叫救治的话是没错,可人命关天,这样就不合理了。所以我们,要考虑让病重的病人排在前面。如果情况差不多,那么就按先来先看的顺序,排列病人的就医时间。根据上述情况,我们就要设计一个方案让病重的人先看,病轻的遵循先来后到的原则。 1.1.2意义现如今很多的服务行业,都意识到快速的服务,对于人们很重要。衣食住行相关的行业更是很重要的,所以,人工远远赶不上时代的需求。在这种情下,机械化更胜一筹。由此很多程序应运而生。看病排队,是个很常见的问题。然而,在这种情况下,如果死板的按“先到先治“的话,可能会耽误了最佳的治疗时间,病重者可能,会因此丧命。所以设计出看病排队程序是很有意义的。通过数据结构实现医院站队看病问题,并指出以“先重后轻,先到先看”的原则。为重病患者抓紧了最佳的治疗时间,同时也保证医院的秩序。1.2国内外研究现状 我通过上网查阅资料调查发现,看病难和看病贵,确实在世界范围内具有一定的普遍性。英国和加拿大为例。英国医保财政负担重,羊毛出在羊身上英国实行全民医保几十年过程中,出现了开支庞大、医院渎职、误诊误药、医生欺诈等许多问题,其中效率低下是饱受批评的弊病之一。在社区医疗中心,为见指定的全科医生坐等 4 个小时之久,做一项化验要预约到一星期之后,看化验结果又要等好几天。一般来说,到社区医院看病,除了医生护士给做点咨询外,几乎得不到什么立即治疗。病人住院等几个月床位也是常事。所以不少英国民众为了能更快得到治疗,就直接去看急诊,造成很多急诊部人满为患,医护人员超负荷运转,医疗质量难以保障。加拿大公费医疗是不错,就是排队时间长根据弗雷泽研究所 2013 年的统计,加拿大的患者从家庭医生推荐到专科医生看病等待的平均时间为 17.8 个星期;平均等待 CT 诊断的时间大约为 1 个月,等待一般性 B 超时间为 4 周。除了做手术、做检查等候时间长,即使患者进行一个普通的血液化验,也要等候半个月时间才能获得化验结果,而根据化验结果再去复诊,又要几个星期甚至几个月的等候时间。因此,有的患者干脆不论病情紧急与否,先去急诊室就医。国内预约挂号模式的发展与现状(一)预约挂号:预约挂号是相对于即时门诊挂号而言的挂号模式,指病人通过现场预约、复诊预约、电话或网络预约等形式,选择就诊医院、就诊学科、就诊专家及就诊时间的门诊挂号方式。这种形式既能有效地缓解病人挂号难的问题,也为病人合理安排就诊时间、为医院科学组织门诊医师出诊提供了可靠的依据1。(二)预约挂号模式:国内预约挂号模式是随着社会各个领域的发展而形成的一种社会需要的服务项目,主要有以下几种模式:1门诊现场预约是较早的一种挂号模式:包括挂号窗口预约、护士站候诊区预约、分诊服务中心预约3种方式。随着信息技术的发展,病人通过在医院放置的电脑自动挂号机挂号也是一种预约挂号的方式。2电话预约挂号分为系统自动挂号(或)和人工挂号两种形式:自动挂号是指患者通过医院专设的电话预约系统,按照电话提示音完成自动挂号;人工挂号是指病人拨通预约电话后。在服务人员协助下,完成预约挂号操作。 3网络预约挂号系统是一种基于互联网的新型挂号系统,也是目前预约挂号很重要的预约形式之一。人们可以通过在医院自行建立的网络页面注册挂号方式进行数天1.3课程设计的主要研究工作在现代化中,信息的收集、管理在工作将发挥越来越重要的作用,能否高效地管理海量信息已成为企事业单位能否高效运行的关键所在。而利用计算机技术,实现管理系统的自动化、规范化就是最好的解决方法。针对部分医疗机构就诊排队混乱的问题专门设计了该程序。 本次实验是主要解决基于堆的优先级队列设计一个医院看病系统,在这个系统中病重的人先看病,病情轻的人则是按照先到先看,这样可以让病人得到及时的治疗。根据实验的要求大致可以分为下面几个步骤入手:(1)病人到达珍室,将病历本交给护士,护士根据病人的病情指定优先级,病人排队等待队列中候诊;(2)护士从等待队列中取出下一位病人的病历,该病人就诊;要求编程模拟这一过程。程序采用菜单选择方式,其选项功能说明如下:(1)排队-不停有新的病人加入到排队队列中;(2)就诊-最前面的病人就诊,并从队列中删除;(3)查看队列-从队首到队尾列出所有排队病人病历号;(4)不在排队,余下依次就诊-从队首到队尾列出所有派队病人病历号,退出运行;(5)下班-退出运行; 2系统需求分析与总体设计2.1系统需求分析Q:假设一个病人想要看病,那么计算机会怎样排列他的位置呢?A:病人应该先挂号,即取得编号。之后根据病人的病情,来划分病情的等级。然后,输入挂号的类型(“1”就医或“2”急诊),计算机将自动划分他的就诊编号。如果,等相同则按最开始的编号排序。最后,计算机将显示最终的编号。随后,病人便可以依次就医了。 思路:(1)首先,求诊病人必须得到编号,也就是先挂号。(2)然后,医院将根据病情划分等级,分为普通病人和急诊病人。(普通病人挂就医号。急诊病人挂急诊号)(3)根据显示的提示,输入功能选择。 (4)如果出现病情等级相同的情况时,程序将按编号的先后顺序给出相应结果。(5)工作人员查看结果后,对病人进行合理的救治2.2系统总体设计 系统的流程图(如图3-1所示)图3-1系统流程图程序流程图排队程序,根据功能提示,选择相应的功能。依照屏幕的提示,患者可以得知其排队的状况。然后,根据编号的先后进行最后的就医过程。查看屏幕提示。流程图,如图3-2所示。开始功能选择界面输入功能的序号 N选项是否正确 Y 进一步确认 Y 输出最终结果结束 假设现在有五名病人需要挂号,那么按照他们来的顺序。可以将他们用A,C,D,E和F来表示。则据此可列表3-1;。病人ABCDE功能选择12212表3-1排序过程图,如图3-3所示(a) 排序前(b)分裂DAEBC(c)排序后图3-3排序过程图 2.3设计原理本次设计采用C语言作为设计语言,C语言是一种面向过程的计算机程序设计语言。最初为unix而生。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。数据结构是计算机专业的核心课程,是一门实践性很强的课程。课程设计是加强学生实践能力的一个强有力手段,要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C(C+)程序并上机调试的基本方法,还要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。 3系统详细设计3.1有关数据结构的定义#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASTABLE -1#define OVERFLOW -2#define Num 2000#define MAXQSIZE 100/存储空间分配初始量#define QUEUE_INIT_SIZE 10/存储空间分配增量 /排队号码将以2000后开始typedef struct Node /链队的定义int data;struct Node *next;QueueP;typedef structQueueP *front;/头指针QueueP *rear;/尾指针int queuesize;LinkQueue;3.2主要算法设计 * 函数名称: Init_PriorityQue * 函数功能: 生成一个空优先级队列L. * 输出参数: 无 * 返 回 值: 无 * 函数名称: Destroy_PriorityQue * 函数功能: 销毁优先级队列. * 输入参数: 队列结构指针的指针L * 输出参数: 无 * 返 回 值: 无* 函数名称: Destroy_PriorityQue * 函数功能: 销毁优先级队列. * 输入参数: 队列结构指针的指针L * 输出参数: 无 * 返 回 值: 无* 函数名称: Clear_PriorityQue * 函数功能: 清空优先级队列. * 输入参数: 队列结构指针L * 输出参数: 无 * 返 回 值: 无* 函数名称: PriorityQue_Empty * 函数功能: 检验队列是否为空. * 输入参数: 队列结构指针L * 输出参数: 无 * 返 回 值: 无* 函数名称: PriorityQue_Full * 函数功能: 检验队列是否已满. * 输入参数: 队列结构指针L * 输出参数: 无 * 返 回 值: 无其它相关函数:* 函数名称: void password(); * 函数功能: 医生登陆查看病人病情系统 * 输入参数: doctor 123456 * 输出参数: OK * 返 回 值:yes* 函数名称:int Treat(LinkQueue *y); * 函数功能: 急诊病人挂号排队程序 * 输入参数: 无 * 输出参数: OK * 返 回 值:无* 函数名称:int Patient(LinkQueue *q); * 函数功能: 普通病人挂号排队程序 * 输入参数: 无 * 输出参数: OK * 返 回 值:无void ClearScreen(void);/清屏void InitInterface();/初始化界面void Doctor(int z);/医生看病系统 4系统实现与测试4.1系统实现系统运行环境 本次课程设计采用vc+6.0集成环境进行设计。VC+是微软公司开发的一个集成开发环境,换句话说,就是使用C+的一个开发平台。有些软件就是这个编出来的,另外还有VB,VF。只是使用不同语言。但是VC+是Windows平台上的C+编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。Windows下编程需要了解Windows的消息机制以及回调(callback)函数的原理;MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等;COM是代码共享的二进制标准,需要掌握其基本原理等等。VC作为一个主流的开发平台一直深受编程爱好者的喜爱,但是很多人却对它的入门感到难于上青天,究其原因主要是大家对他错误的认识造成的,严格的来说VC+不是门语言,虽然它和C+之间有密切的关系,如果形象点比喻的话,可以把C+看作为一种“工业标准”,而VC+则是某种操作系统平台下的“厂商标准”,而“厂商标准”是在遵循“工业标准”的前提下扩展而来的。VC+应用程序的开发主要有两种模式,一种是WIN API方式,另一种则是MFC方式,传统的WIN API开发方式比较繁琐,而MFC则是对WIN API再次封装,所以MFC相对于WIN API开发更具备效率优势。要想学习好VC必须具备良好的C/C+的基础,必要的英语阅读能力也是必不可少的,因为大量的技术文档多以英文形式发布。VC基于C,C+语言,主要是由MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说VC在 Windows平台无所不能。最大缺点是开发效率不高。VC适用范围有如下几个方面 VC主要是针对Windows系统,适合一些系统级的开发,可以方便实现一些底层 的调用。在VC里边嵌入汇编语言很简单。 VC主要用在驱动程序开发。 VC执行效率高,当对系统性能要求很高的时候,可用VC开发。 VC主要适用于游戏开发。 VC多用于单片机,工业控制等软件开发,如直接对I/O地址操作,就要用C+。 VC适用开发高效,短小,轻量级的COM组件,DLL。比如WEB上的控件。 VC可以开发优秀的基于通信的程序。 VC可以开发高效灵活的文件操作程序。 VC可以开发灵活高效的数据库操作程序。 VC是编CAD软件的唯一选择,包括AUTOCAD,UG的二次开发。 VC在多线程、网络通信、分布应用方面,VC+有不可比拟的优势。本功能主要包含5个模块:(1)首先,求诊病人必须得到编号,也就是先挂号。(2)然后,医院将根据病情划分等级,分为普通病人和急诊病人。(普通病人挂就医号。急诊病人,挂急诊号。)(3)根据显示的提示,输入功能选择。 (4)如果出现病情等级相同的情况时,程序将按编号的先后顺序给出相应结果。(5)工作人员查看结果后,对病人进行合理的救治4.2系统测试运行界面图如图4-1:图4-1程序界面图就医(普通病人)挂号图,如图4-2:图4-2挂号图急诊挂号图,如图4-3:医院人员登陆界面,如图4-4:4-4医院人员登陆 5总结与展望5.1全文总结本实验是基于堆的优先级队列之病人看病模拟的仿真事件,我一开始是用堆实现的,可是我发现用堆实现有不方便之处,因为优先级相同的情况下无法做出排序,后来我就改成队列加数组的方法进行对病人号码编号和排序,本实验氛围急诊和普通病人两个进行挂号,但是在医生看来,他们的排队遵循急诊病人先看病,普通病人后看病,例如挂一个普通病号此时他的位置为1,挂一个急诊病号那么他的位置就为2,在挂一个急诊病号那么就按照时间的先后顺序,我觉得这一点从医生的角度来看特别好,但是本实验也有很多不足之处,仿真做的不够好,看了同学设计的仿真事件发现自己做的太简单了,虽然在上数据结构的时候也有上机的实验课,但是做这次课设的时候任然觉得有难度。我在这次课设中发现了自己有很多不足的地方,看着同学的课设做的功能很齐全很复杂,自己想的很简单。我发现对数据结构这门课有的只有理论上的分析,用代码实现对于我来说还是有点困难的,希望自己在以后多进行编程训练,多在编程中去解决问题,多向优秀的人请教。通过实验,有如下几点收获和体会:1、通过实验还提高了一点改错能力,对于一些常见问题加深了印象。2、编程需要有耐心,尤其实在单步调试的时候,更是马虎不得,有时候关键就是那么一步,错过了就得从头来过了。编程也需要勇气,要勇于发现自己的错误,也要勇于推翻自己之前的思路,要坚信“没有最好,只有更好”。编程,最好是一鼓作气,得天天“摸摸”它,时时想着它,要是过一阵再去碰它那就得先去读懂自己的程序了,一切的一切几乎都得从头开始。编程需要细心,有时一个不注意小错误就能引出大问题。编程也需要规范,不仅为了他人能看得懂程序,也为了方便自己以后程序的更改与进一步的完善。3、程序由算法和数据结构组成,一个好的程序不仅算法重要,数据结构的设计也很重要。5.1工作展望在今后的研究中,围绕着如下几个方面开展工作。1,进一步起强化学习意识在提高能力上下功夫,把学习作为武装和提高自己的首要任务,树立与时俱进的学习理念,养成勤于学习,乐于思考的良好习惯。结合课程实践具体要求,多从细节考虑。继续加强编码练习,多上机。2,进一步强化职责意识在学习良好的职业技能的同时,树立正确的人生观和价值观,增强事业心和责任感,认真做好职责范围内和领导交办的工作任务,不好高骛远,也不庸人自扰,凡事从点滴做起,精益求精,一丝不苟,踏实肯干,求真务实。3,进一步端正学习态度保持乐观情绪,不以物喜,不以己悲,不因一时得意而骄傲自满,也不因一时失意而妄自菲薄,保持一颗平常心,不消极埋怨,微笑面对每一天。胸装谨慎意识,外饰积极作风,工作生活谦虚谨慎,行为举止自然大方,待人接物热情诚恳。牢记:态度决定一切。4,虚心向他人请教在遇到不明白的地方要敢于向别人请教,这样可以大大节约时间,并且也可以理解的更深刻,增加和同学之间的合作。6体 会 实验非常贴合实际,让我们在完成作业的同时也能增加对民生国情的了解。通过查阅资料我想说说我的看法,不仅仅是在中国看病难,看病贵,全世界对于医院看病都没能很好的解决。医院很多潜规则,看病排队挂号,住院都要讲关系,这样是不合理也是不公平的。我觉得在目前来说,1,提高社区医疗服务,这样的话一些普通的病我们都不用非得到大医院去排几个小时才能治病。2,简化医院挂号手续,护士要对病情进行优先级排序让重病得到及时的治疗。3,医院要合理收费,不要让老百姓看个病都要花大价钱。要想从根本上解决“看病难看病贵”问题,我们国家必须有一个和谐、公平、特别是竞争的医疗卫生服务环境,必须有一支道德高尚、医术精良的医务人员队伍。这两个因素缺一不可。没有“号贩子”,看病就不再难吗?“号贩子”是可恨的!对有可能与之沆瀣一气、利益共享的医护人员和保安,也理应实行“零容忍”。但问题是,在“有病去协和”的心理驱动下,各地的三甲医院哪个不是人满为患,一号难求?“号贩子”的存在,只是破坏了公平原则,助推看病贵,但与“看病难”关系不大。举例说吧,一个医院的专家号只有200个,但求号的患者每天却有1000多名,不管是照规矩排队,还是“号贩子”叫卖号,结果总会有800名患者无法就诊。至于说是张三拿到号,还是王五拿到号,那仅是事关个体的次序问题,就整体而言,看病难的问题依然无解。卫计部门对医院贩号行为“零容忍”,值得点赞。但患者也得扪心自问:自己身体有恙,难道非得去北京不成?有数据表明,我国就医者80%集中在大医院,仅有20%在基层医院。当大医院人满为患、公众普遍抱怨“看病难”时,岂不知,有很多的医院,尤其是一些基层医院、社区医院,几乎门可罗雀。一份协和医院统计的数据显示,每天门诊量的近一半,是理论上可以在县级医院、社区医院解决的“小病”。像感冒、发烧、腹泻等病症,到社区医院看病,和到大医院看病没有区别,像有些普通病症,到大医院看病,和到中小医院看病 区别不大;即便在同一家医院,找专家诊断和普通医生诊断,区别也不大。因为现在的医生都是科班出身,诊断普通病情,水平差不多。除非病人患有疑难病症。据此,我们是否可以这样说:有些患者不管大病小病都去大医院,去凑人满为患的热闹,也在一定程度上加剧了优质医疗资源供需的不平衡。参考文献 1佟伟光,杨政,实用数据结构(第二版),科学出版社2Stephen Prata,C+ Primer Plus(第五版),中文版3谭浩强,C程序设计(第三版) 2008年5月,清华大学出版社4Stephen Prata,C+ Primer Plus (第五版)中文版2006年2月,人民邮电出版社5佟伟光,数据结构与算法 2009年8月,北京大学出版社6严蔚敏,数据结构,清华大学出版社 7Clifford A. Shaffer,数据结构与算法分析,电子工业出版社 8Sartaj Sahni,数据结构、算法与应用,械工业出版社 9严蔚敏,数据结构题集,清华大学出版社 附录 #include #include #include #include #include #include #include /包含数据输入输出函数,密码以不回显方式输入函数(getch();)的头文件#define SCR_ROW 33 #define SCR_COL 94 #define MAX_LENGTH 30 #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASTABLE -1#define OVERFLOW -2#define Num 2000#define MAXQSIZE 100/存储空间分配初始量#define QUEUE_INIT_SIZE 10/存储空间分配增量 /排队号码将以2000后开始static int lists=1; /普通挂号的人员static int treat=1; /急诊挂号的人员static int aa=1; /没有去用指针,而是采用aa,bb来纪录挂号者的号码static int bb=1;static int success; /账户密码是否成功登陆typedef int status;typedef struct Node /链队的定义int data;struct Node *next;QueueP;typedef structQueueP *front;/头指针QueueP *rear;/尾指针int queuesize;LinkQueue;char *gp_sys_name = 医师看诊模拟程序; /*系统名称*/HANDLE gh_std_out; /*标准输出设备句柄*/HANDLE gh_std_in; /*标准输入设备句柄*/unsigned long ul;status InitQueue(LinkQueue *q);/操作结果:构造一个空队列L。status DestroyQueue(LinkQueue q);/初始条件:队列Q存在.操作结果:将队列L销毁,不再存在。status ClearQueue(LinkQueue q);/初始条件:队列Q存在。操作结果:将队列L清为空队列。status EmptyQueue(LinkQueue q);/初始条件:队列Q存在。操作结果:若队列L为空队列,返回TRUE,否则返回FALSEvoid ClearScreen(void);void InitInterface();void Doctor(int z);int main() static int z=0; /全局变量Z,对排队的病人进行计数 int choice=0; COORD size = SCR_COL, SCR_ROW; /*窗口缓冲区大小*/ gh_std_out = GetStdHandle(STD_OUTPUT_HANDLE); /* 获取标准输出设备句柄*/ gh_std_in = GetStdHandle(STD_INPUT_HANDLE); /* 获取标准输入设备句柄*/ SetConsoleTitle(gp_sys_name); /*设置窗口标题*/ SetConsoleScreenBufferSize(gh_std_out, size); /*设置窗口缓冲区大小80*25*/ printf(n); printf(n); printf(*欢迎来到医院看病系统*n); printf(n); printf(n); printf(n按任意键继续.n); getch(); InitInterface(); /*界面初始化*/ /RunSys(&gp_head); /*系统功能模块的选择及运行*/ /CloseSys(gp_head); /*退出系统*/ while(1)printf(nn +-+n); printf( | 欢迎来到本医院排队就诊 |n); printf( +-+nn);printf( +-请选择您要的功能:-+n);printf( +-+n);printf( | 1、就医挂号 |n); printf( | 2、急诊挂号 |n); printf( | 3、医职人员 |n); printf( | 0、退出系统 |n);printf( +-+nn);choice=getchar();getchar();LinkQueue *q;q=(LinkQueue *)malloc(sizeof(LinkQueue); q-front=(QueueP *)malloc(sizeof(QueueP); q-rear=q-front;LinkQueue *y;y=(LinkQueue *)malloc(sizeof(LinkQueue); y-front=(QueueP *)malloc(sizeof(QueueP); y-rear=y-front; switch(choice) case 1: z=Patient(q); /调用普通病人挂号函数他那 break;case 2:z=Treat(y);/调用急诊病人挂号函数break; case 3: Doctor(z);/调用医生登陆函数 break; default:printf( +-输入错误!-+nn);getch(); system(cls); break;system(cls); return 0;status InitQueue(LinkQueue *q)/操作结果:构造一个空队列Qreturn OK;/*status DestroyQueue(LinkQueue q)/ 销毁队列Q,Q不再存在 q.front=q.rear=0; return OK; status ClearQueue(LinkQueue q) / 将Q清为空队列 q.front=q.rear=0; return OK; int Patient(LinkQueue *q) /病人挂号排队程序QueueP *p;p=(QueueP *)malloc(sizeof(QueueP);p-data=lists+;/普通挂号人员的个数赋给链表节点data,每多一个病人排队,lists加1p-next=NULL;/next指针最开始指向为空,因为最开始没人排队q-rear-next=p;/将原来的最后一个结点的指针域里指针指向P,所以P入队q-rear=p;/链队的尾指针指向刚刚入队的尾结点pprintf( +-挂号成功,您的排队号码为:-+nn %dnn,Num+p-data);printf( +-您当前的位置为:%2d-+n,lists+treat-2);struct tm *ptime; /头文件为time.h tm是一个已声明的函数,里面有tm_sec,tm_min,tm_hour,tm_mday time_t t; t=time(NULL); ptime=localtime(&t); printf( +-现在时间是: %d:%d-+n,ptime-tm_hour,ptime-tm_min);printf( +-友情提示:当有急诊病人挂号时候-+n);printf( +-此系统将以急诊病人的挂号优先-+n);printf( +-您排队的位置可能会有改变-+nn);printf( +-下一位:-+n); getch();system(cls);/清除屏幕return (lists+treat-2); /返回的是整个队列的人数int Treat(LinkQueue *y)QueueP *x;x=(QueueP *)malloc(sizeof(QueueP);x-data=treat+;x-next=NULL;y-rear-next=x;y-rear=x;printf( +-挂号成功,您的排队号码为:-+nn %dnn,Num+x-data+1000);printf( +-您当前的位置为:%2d-+n,treat-1);struct tm *ptime; time_t t; t=time(NULL); ptime=localtime(&t); printf( +-现在时间是: %d:%d-+n,ptime-tm_hour,ptime-tm_min);printf( +-下一位:-+n); getch();system(cls);return (lists+treat-2);void password()char user=doctor,a7;char password=123456,b7; /用户名密码初始为doctor,123456int i,num=0;while(num3) /密码验证程序printf( 请输入你的工作通行证:n);printf( 你总共有3次机会n);printf( 你现在还有%d次机会n,3-num);printf( 用户名:n);for(i=0;i6;i+)ai=getchar();getchar();a6=0;printf( 密码:n);for(i=0;i6;i+)bi=getch();putchar(*); /用*来回显密码b6=0;getchar();if(strcmp(user,a)=0)&(strcmp(password,b)=0) / 验证输入的用户名,密码是否正确printf( 用户认证成功!nn);success=1;break;elseprintf(n 用户名或密码错误!nn);system(cls);/清屏success=0;num+;if(num=3)/错误输入三次,将不允许再输入printf( 对不起,你输入的次数已达上限n);print

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论