课程设计:医院门诊候诊队列管理系统方案.doc_第1页
课程设计:医院门诊候诊队列管理系统方案.doc_第2页
课程设计:医院门诊候诊队列管理系统方案.doc_第3页
课程设计:医院门诊候诊队列管理系统方案.doc_第4页
课程设计:医院门诊候诊队列管理系统方案.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

. . . .题目:医院门诊候诊队列管理系统 要求采用先来先就诊的排队方式(就诊顺序与挂号单编号无关),假设挂号时编码是连续的,但由于同一个门诊科目有三个诊室,其中35(含35)岁以上的在第一诊室,35岁以下的男患者进第二诊室,其它的进第三诊室,程序启动后显示下列菜单:系统功能的基本要求:(1)* 挂号 *(2)* 叫号 *(3)* 分诊室 *(4)* 显示各诊室队列信息 *(5)* 统计当天就诊的患者情况(要求按性别进行统计和按任意年龄区段进行统计)*(6)* 结束程序 *选1 时,提示用户在一行内输入姓名及挂号单编号;选2 时,显示排在队列中第一位患者姓名、挂号单编号,并将其从挂号序列中删除选3时,进行诊室分配选4时,按队列顺序显示各个诊室排队人的姓名、挂号单编号及所在诊室选5时,进行两种统计方法的选择,并进行必要的统计计算选6时,退出程序的运行要求15中每一个步骤完成后都能重新显示此选择菜单系统功能分析:1. 能实现挂号功能,提示用户在一行内输入姓名及挂号单编号,并储存;2. 能实现叫号功能,显示排在队列中第一位患者姓名、挂号单编号,并将其从挂号序列中删除;3. 根据病人的性别与年龄,能实现诊室的分配;4. 能按队列顺序显示各个诊室排队人的姓名、挂号单编号及所在诊室。5. 按性别进行统计和按任意年龄区段进行统计,并打印输出;6. 完成每个步骤之后都能重新显示此选择菜单。一、 模块算法设计模块二:挂号系统void guahao(struct hospital hos )模块图:模块三:叫号void jiaohao(struct hospital hos )模块一:显示主界面void introduce( )模块四:按照年龄和性别进行分诊void fenzhen(struct hospital hos )模块五:显示各诊室患者排队信息void xianshi(struct hospital hos )模块六:分性别和任意年龄进行统计void tongji(struct hospital hos )模块七:系统日志功能void rizhi()二、 流程图设计模块一,主界面函数的详细流程图:主界面函数void introduce( ) 选 择5、当前人数统计7、退出程序6、系统日志3、分诊室4、显示各诊室信息2、叫号1、挂号主界面模块,通过主界面面板中的选择项,输入相应的数字即可进入对应的功能模块。但是,在运行模块二、模块三和模块四三个功能模块时,需要先将模块二、模块三依次运行,直至两者显示“叫号完毕!”,“诊室已分配完毕!”,这时方可进行模块四的运行。模块二,挂号系统的详细流程图:姓名name模块二:挂号系统void guahao(struct hospital hos ) 输入性别sex年龄age编号 系统分配选择输入 0或1 选择1主界面 选择0挂号模块,是通过数组记录患者的信息。其中患者的编号是预先制定好的,从1000开始,依次增加。并且,每个患者的信息输入完成之后,还可选择“1”继续输入、“2”停止输入并返回主菜单,以此来控制数据的采集。模块运行完毕时,回车即可返回主界面。模块三,叫号系统的详细流程图:显示队列中第一位患者信息模块三:叫号系统void jiaohao(struct hospital hos )主界面显示队列中剩余患者信息叫号模块,能实现显示排在队列中第一位患者姓名、挂号单编号,然后,通过清屏形式将其从挂号序列中删除的功能。通过分诊步骤之后,再操作此模块将显示下一位患者的信息,即实现了题目中“从挂号序列中删除”的要求。模块运行完毕时,回车即可返回主界面。模块四,分诊模块的详细流程图:第一诊室男性?在35岁以上?模块四:按照年龄和性别进行分诊void fenzhen(struct hospital hos )是主界面第二诊室 否 是第三诊室 否按照年龄及性别进行分诊模块,能实现对患者进行分诊功能,先通过判断年龄进行第一诊室的分配,然后再将剩余的患者进行性别判断进行第二、第三诊室的分配。即年龄在35岁(含35岁)以上的患者分在第一诊室,35岁以下的男性患者分在第二诊室,剩余患者的分在第三诊室。此步骤需要和叫号步骤交替运行,方可将挂号患者所在的诊室分配完全。模块运行完毕时,回车即可返回主界面。模块五,显示功能详细流程图:第一诊室人数S1及患者信息模块五:显示各诊室患者排队信息void xianshi(struct hospital hos ) 主界面第二诊室人数S2及患者信息第三诊室人数S3及患者信息显示各患者队列及诊室信息模块,可以实现将当前所有患者的所在诊室以及其详细信息展示出来的功能,所显示的信息分为三个部分展示。而且模块运行完毕时,回车即可返回主界面。模块六,统计模块的详细流程图:输出高于的人数年龄age=X?模块六:分性别和任意年龄进行统计void tongji(struct hospital hos )输入年龄界限X 是输出低于的人数输出男性患者人数 否输出女性患者人数主界面统计模块,分为性别统计和按任意年龄统计。按任意年龄统计,通过输入的年龄界限X与年龄数组中的数据进行判断比较,输出相应的人数,并且输入的年龄界限必须是可行的实际值,否则无意义;按性别统计,直接打印数据即可。模块运行完毕时,回车即可返回主界面。模块七,系统日志功能详细流程图:输出“已输入一位患者信息”以及对应时间ctime(&now)模块七:系统日志功能void rizhi( )输出“已进行一次叫号操作”以及对应时间ctime(&now) 记录挂号、叫号 分诊室等操作输出“已进行一次分诊室操作”以及对应的时间ctime(&now)主界面系统日志模块,是对用户的操作进行记录的函数。本程序中只对患者挂号操作、叫号操作以及分诊室操作三方面进行记录,在患者诊室划分完毕之后生成系统日志。模块运行完毕时,回车即可返回主界面。三、 详细设计1. 头文件及全局变量的定义在头文件“hospital.h”中定义的全局变量有:int count=0;/全局变量,挂号总人数;int S1=0;/全局变量,第一诊室人数;int S2=0;/全局变量,第二诊室人数;int S3=0;/全局变量,第三诊室人数;int j=10000;/全局变量,初始挂号编号;int m=0;/全局变量,已叫号人数;int l=0;/全局变量,判定患者是否分配完毕;int h10000;/全局变量,日志功能中记录操作痕迹;int a=0;/全局变量,日志功能中操作痕迹总量;time_t now10000;/全局变量,日志功能中显示时间;d=0;/全局变量,日志功能中时间顺序的下标;还有统一定义的变量,如结构体数组“struct hospital hos ”中的姓名name、年龄age、性别sex以及诊室room等。2. 各模块的函数定义及相关变量的使用模块一、主界面:函数原型:void introduce( )参数:无返回值:void模块的具体实现:直接采用printf函数将主界面打印出来。模块二、挂号函数:函数原型:void guahao(struct hospital hos )参数:hos 用来存入挂号者的信息返回值:void函数的具体设计:定义变量i,用dowhile循环输入每个挂号病人的信息(编号已经预先制定),再将病人编号信息定为J(10000)每循环一次全局变量count自加一次,在循环的结尾提示病人编号为J且给出选择0或1(将其赋给i,若i=0结束输入;若i=1继续输入),这样在输完病人的信息后,系统会自动分配编号给病人。当i=0时,停止采集数据,并清屏、暂停以及引用introduce( )函数返回主界面。模块三、叫号函数:函数原型: void jiaohao(struct hospital hos )参数:hos 输出存入的病人信息返回值:void函数的具体设计:先清屏,再定义局部变量i (用于循环控制),利用结构体数组输出被叫号病人的各项信息,同时m+(m表示被叫号的人数);if : m = count则显示叫号完毕,else :显示剩余挂号人数(count-m),然后利用for循环(i = 0 ; i count ; i +)输出每个等待叫号病人的信息,最后清屏、暂停,并引用introduce( )函数返回主界面。模块四、分诊室函数:函数原型:void fenzhen(struct hospital hos )参数:hos 利用结构数组存入的病人信息将其分类返回值:void函数的具体设计:先清屏,定义局部变量k=m-l,先用if函数判断m = 0 ?(若是,则显示“还未进行叫号!”;若否,则执行下一步),使用if else函数连续两次判断年龄age与35岁的关系,以及是否为man,再根据题意分配到各个诊室,分配到的诊室,对应的变量(S1、S2、S3)自加;然后显示此病人(被叫号之后的患者)的所有信息(包括所分配的诊室)。最后清屏、暂停,并引用introduce( )函数返回主界面。模块五、显示函数:函数原型: void xianshi(struct hospital hos )参数:hos 将已叫号的病人信息显示出来,并显示各分诊室的病患信息返回值:void函数的具体设计:定义局部i, 利用for函数,for(i = 0 ; i m ; i +)以及在for函数中使用if else函数分别判断各个病人所属的诊室编号,if hosi.room=1/2/3,则以诊室为单位输出各个以叫号病人的信息,以上步骤重复三次;然后分别输出各诊室的患者总人数S1、S2、S3。最后清屏、暂停,并引用introduce( )函数返回主界面。模块六、统计函数:函数原型: void tongji(struct hospital hos )参数:hos 利用存入的数据进行统计,分性别统计和按任意年龄统计返回值:void函数具体设计:先定义局部变量man、woman、X(任意年龄)、up(高于此年龄的人数)、down(低于此年龄的人数)、n(循环控制)。先在for (n = 0 ; n c ount ; n+)循环中利用strcmp( )函数进行性别判定(若为man,则man+,否则woman+);然后再提示输入年龄界限X,在for ( n = 0 ; n count ; n +)循环中判断年龄hos .age与X的大小(若X大则down+,否则up+)。将就诊人数m以及man、woman、up、down的相关数据打印输出,最后清屏、暂停,并引用introduce( )函数返回主界面。模块七、系统日志功能:函数原型:void rizhi( )参数:无返回值:void函数具体实现:引用记录数组h ,在需要记录的函数里进行记录,每记录一次,数组h 的下标自加;再用同样方法用数组now 记录每次操作对应的时间。然后,将相关记录按顺序打印输出。最后清屏、暂停,并引用introduce( )函数返回主界面。一、二、三、四、五、 系统实现与测试1. 开发平台和工具选择及软件编码参考规范程序风格:1) 本程序使用vc6.0进行编译的,并采用TAB键进行缩进控制;2) 左右花括号位置采用GNU的风格,使左括号与右括号都在同一列左对起;3) 程序采用了分文件形式,每个文件对应各自相应的模块;4) 每个分程序代码段的前端添加了多行注释和说明;5) 新增的功能(如:暂停、清屏功能)和简短代码后面进行了单行注释;6) 关键字if,while ,for与其后的条件判断的表达式之间,插入一个空格分隔;7) 程序中的全局变量和相关变量的定义和取值等进行了细致的注释;8) 各个模块的函数标识符是使用汉语拼音进行命名的,通俗易懂。2. 系统测试各模块展示:模块一、主界面 void introduce()函数:模块二、挂号 void guahao(struct hospital hos【】)函数:模块三、叫号 void jiaohao(struct hospital hos【】)函数:模块四、分诊室 void fenzhen(struct hospital hos【】)函数:模块五、显示 void xianshi(struct hospital hos【】)函数:模块六、统计 void tongji(struct hospital hos【】)函数:模块七:系统日志功能void rizhi()四、五、 课程总结1. 心得体会一个人常会被自己的习惯思维所局限,交流与合作通过思维碰撞和知识互补可以拓宽自己的思路,拓展自己的知识面,一个人因为自己的习惯思维,常会对自己犯的错误视为不见,而通过别人的帮助检测能够帮助较快的找到错误所在。因此,我们需要从团队合作中发现自己的不足和差距。这一次的课程设计真的让我们获益匪浅,不仅让我们体会到编程的魅力,也更让我们明白如何团结合作。编程真的需要细心以及耐心,我们常常会遇到问题,这个时候我们就要冷静,耐心的去面对,还有就是平时要有好的编程习惯,这一点真的很重要。另外我们在编程的时候也要注重与别人的交流和合作,毕竟我们在团队合作中所得到的经验比个人实践摸索得到的更加丰富、更加完善,而且在合作中我们会收获成功,还能收获友谊,总之团队合作对我们来说是至关重要的!2. 设计的独特之处1) 功能选择栏可以在每个模块运行之后再次出现;2) 新增了程序日志功能,记录当前操作和时间;3) 通过使用特殊字符、TAP键、空格等,使运行界面更加美观。3. 课题完成情况本程序已将题目的要求实现出来,程序能够正常运行,且在较为极端的操作下仍能工作(即各步骤的重复操作以及不按步骤进行操作)。但是程序中的日志功能效果不佳,在添加使用日志功能时,刚开始显示的是静态时间,即每一步操作的时间记录都相同;最后,经过更改,虽然时间与电脑同步,但运行时有警告。另外,程序中多次使用了for语句,使程序的可读性和易理解性降低。3.4. 设想在程序运行的第一项挂号系统中,若是可以在患者信息输入错误的情况下能进行及时的修改或删除的话,程序的实用性将大大提高;若是可以将主界面通过做成消息框进行显示的话,程序运行效果会更好。组员及其任务分配源程序代码(分文件展示):1. 主函数(Main.c)#include#include#include#include#define Max 1000#includeHead.h#includeintroduce.h#includeguahao.h#includejiaohao.h#includefenzhen.h#includexianshi.h#includetongji.h#includerizhi.hint main(void)int choice;introduce();doprintf(Enter your choice:);scanf(%d,&choice);system(cls);/清屏switch(choice)case 1:guahao(hos); break;case 2:jiaohao(hos); break;case 3:fenzhen(hos); break;case 4:xianshi(hos); break;case 5:tongji(hos); break;case 7:exit(0); break; case 6:rizhi(); break;default:system(cls);introduce();while(choice!=7);return 0;2. 头文件(Head.h):int count=0;/全局变量,挂号总人数;int S1=0;/全局变量,第一诊室人数;int S2=0;/全局变量,第二诊室人数;int S3=0;/全局变量,第三诊室人数;int j=10000;/全局变量,初始挂号编号;int m=0;/全局变量,已叫号人数;int l=0;int h10000;int a=0;time_t now10000;d=0;struct hospitalchar name10;int num;int age;int room;char sex5;hosMax;3. 主界面功能选择(introduce.h):void introduce()printf(-n);printf(|*|n);printf(|* *|n);printf(|* *|n);printf(|* 医院门诊候诊管理系统 *|n);printf(|* *|n);printf(|* *|n);printf(|* *|n);printf(|* *|n);printf(|* 功能选择: *|n);printf(|* 1.挂号 *|n);printf(|* 2.叫号 *|n);printf(|* 3分诊室 *|n);printf(|* 4.各诊室信息 *|n);printf(|* 5.当前人数统计 *|n);printf(|* 6.系统日志 *|n);printf(|* 7.退出程序 *|n);printf(|* *|n);printf(|* *|n);printf(|* *|n);printf(|* 请按数字键进行选择 *|n);printf(|*|n);printf(-n);4. 挂号(guahao.h):/*实现挂号功能,提示用户在一行内输入姓名、性别等信息并储存;*/void guahao(struct hospital hos)int i;printf(医院门诊候诊管理系统医院门诊候诊管理系统);printf(n);printf(n);printf(n);if(m!=l)printf( 请分配诊室后再叫号!n);elseif(m=count)printf( 叫号已完毕!n);elseprintf(被叫号人信息如下:n);printf(n);printf(姓名:%sn年龄:%dn编号:%dn,,hosm.age,hosm.num);m+;ha=2;time(&nowd);d+;a+;if(m=count)printf( 叫号已完毕!n);elseprintf( 此时剩余挂号人数为:%dn,count-m);printf(n);for(i=m;i医院门诊候诊管理系统l)l+;if(hosk.age35)hosk.room=1;S1+;printf(挂号队列中第%d名患者:nn姓名:%sn年龄:%dn编号:%dn诊室:第%d诊室n,m,,hosk.age,hosk.num,hosk.room);ha=3;time(&nowd);d+;a+;elseif(strcmp(hosk.sex,man)=0)hosk.room=2;S2+;printf(挂号队列中第%d名患者:nn姓名:%sn年龄:%dn编号:%dn诊室:第%d诊室n,m,,hosk.age,hosk.num,hosk.room);ha=3;time(&nowd);d+;a+;elsehosk.room=3;S3+;printf(挂号队列中第%d名患者:nn姓名:%sn年龄:%dn编号:%dn诊室:第%d诊室n,m,,hosk.age,hosk.num,hosk.room);ha=3;time(&nowd);d+;a+;elseprintf( 患者已分配完毕!n);system(pause);system(cls);introduce();7. 显示各诊室患者信息(xianshi.h)/*按队列顺序显示各个诊室总人数及各诊室患者详细信息;*/void xianshi(struct hospital hos)int i,j;printf(医院门诊候诊管理系统0)printf(第一诊室患者如下:n);j=1;for(i=0;i0)printf(第二诊室患者如下:n);j=1;for(i=0;i0)printf

温馨提示

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

评论

0/150

提交评论