C语言课程设计报告用于医院门诊候诊的队列管理程序_第1页
C语言课程设计报告用于医院门诊候诊的队列管理程序_第2页
C语言课程设计报告用于医院门诊候诊的队列管理程序_第3页
C语言课程设计报告用于医院门诊候诊的队列管理程序_第4页
C语言课程设计报告用于医院门诊候诊的队列管理程序_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

./C语言课程设计课程设计题目:用于医院门诊候诊的队列管理程序姓名:学号:班级:指导老师:完成日期:目录组员及其任务分配:3一、设计目的3二、需求分析3三、总体设计〔程序设计组成框图、流程图4四、详细设计6源程序代码〔分文件展示10调试测试展示13组员及其任务分配:吕智星:函数调用选项voidra<>statistics<统计当天就诊患者情况>施贝贝:分程序叫号Callnumber<叫号>,分诊室CRoom<分诊室>田渠:分程序registration<挂号>朱港平:菜单界面voidBUI<>一、设计目的数据类型、分支控制、循环控制、函数的定义及调用、结构体及数组、指针、文件操作、编译预处理等。达到系统理解、综合运用课程知识的学习目标;学会用C语言程序解决实际问题的方法;掌握程序的局部测试、调试方法,建立程序系统调试、测试的基本概念和思想,学会较大程序的系统测试和调试方法。二、需求分析方便医院门诊候诊的队列管理,采用先来先就诊的排队方式<就诊顺序与挂号单编号无关>,假设挂号时编码是连续的,但由于同一个门诊科目有3个诊室,其中35<含35>岁以上的在第一诊室,35岁以下男患者进第二诊室,其它的进第三诊室,程序启动后显示下列菜单:[实现提示]1--挂号2--叫号3--分诊室4--显示各诊室队列信息5--统计当天就诊的患者情况<要求按性别进行统计和按任意年龄区段进行统计>6--结束程序选1时,提示用户在一行内输入姓名及挂号单编号;选2时,显示排在队列中第一位患者姓名、挂号单编号,并将其从挂号序列中删除选3时,进行诊室分配选4时,按队列顺序显示个诊室排队人的姓名、挂号单编号及所在诊室选5时,进行两种统计方法的选择,并进行必要的统计计算选6时,退出程序的运行要求1~5中每一个步骤完成后都能重新显示此选择菜单三、总体设计〔程序设计组成框图、流程图<1>系统功能分析:能实现挂号功能,提示用户在一行内输入姓名及挂号单编号,并储存;能实现叫号功能,显示排在队列中第一位患者姓名、挂号单编号,并将其从挂号序列中删除;根据病人的性别与年龄,能实现诊室的分配;能按队列顺序显示各个诊室排队人的姓名、挂号单编号及所在诊室。按性别进行统计和按任意年龄区段进行统计,并打印输出;完成每个步骤之后都能重新显示此选择菜单。〔2总体设计框图<3>流程图模块一、主界面调用voidra<>流程图主界面模块,显示分程序模块,通过函数调用的选择项,输入相应的数字即可进入对应的功能模块,模块的运行应当是先1.挂号,2.叫号,3.分诊室,分配分诊室后就可以显示队列信息,之后也可选择输入年龄统计当天就诊患者情况,运行结束后就是可选择6结束程序。四、详细设计模块二、挂号voidregistration<>输入输入需要挂号病人的人数〔i:1-10人主界面BUI<>i++如果i<=10挂号主界面BUI<>i++如果i<=10挂号编号num性别sex姓名name年龄year输入挂号模块,是通过结构体数组记录患者的信息。其中需要输入患者的姓名,性别,挂号单编号<就诊顺序与挂号单编号无关>,并且,先输入需要挂号几个病人,每次挂号病人最多十个,并添加判断单次是否在预先输入需要挂号的病人的范围之内,以此来控制输入。模块运行输入挂号的次数,输入完毕后,即可返回主界面。模块三、叫号voidCallnumber<>病人病人已经分配完毕显示队列第一位患者的信息,并叫号显示队列第一位患者的信息菜单界面判断病人是否分配完毕叫号模块,首先把挂号后的第一病人进行叫号,之后能实现显示之后剩余等待叫号的的病人并排在队列中第一位患者姓名、挂号单编号,然后,通过文件写入公共将已经叫号就诊的病人保存在1.txt中实现病人叫号信息的保存。叫号完毕之后将跳过已经挂号的病人,叫号模块运行完毕时,回车即可返回主菜单界面。模块四、分诊室voidCRoom<>分诊室分诊室在35岁以上上?男性?第一诊室第二诊室第三诊室主界面 是 否是 否门诊科目有3个诊室,通过判断年龄其中35<含35>岁以上的在第一诊室,后再将剩余的患者进行性别判断进行第二、第三诊室的分配,35岁以下男患者进第二诊室,其它的进第三诊室模块五、显示队列信息voidshow<>显示分诊室所匹配的诊室信息显示分诊室所匹配的诊室信息。第一诊室人数a及患者信息主界面第二诊室人数第二诊室人数b及患者信息第三诊室人数第三诊室人数t及患者信息显示各患者队列及诊室信息模块,并且显示每名患者的详细信息,所显示的信息分为三个部分展示。而且模块运行完毕后,按回车回到主界面。模块六、统计当天就诊患者情况voidstatistics<>模块六、统计当天就诊患者情况voidstatistics<>先输入年龄界限year输出高于的人数输出低于的人数模块六、统计当天就诊患者情况voidstatistics<>先输入年龄界限year输出高于的人数输出低于的人数输出男性患者人数输出女性患者人数主界面年龄year>=y? 是 否统计模块,先输出共有多少位患者叫号就诊,统计男性患者和女性患者各有多少位,然后再判断高于或等于所输入年龄分界线和低于所输入年龄分界线的人数,最后按回车回到主界面。在小组所设计分程序模块为叫号voidCallnumber<>以及显示分诊室模块设计voidCRoom<>函数调用关系:模块三、叫号函数:voidCallnumber<>函数的具体设计:先清屏,显示窗口标题栏分程序名称,使用全局变量e和c,e表示叫号当中的人数,判断病人是否分配完毕,然后将挂号后拍在第一位的病人叫号,之后的病人继续等待叫号,并且将叫号的病人写入到文件1.txt中,变量c自加后再用e–c判断剩余等待挂号的人数。最后按回车键回到主界面。模块四、分诊室函数:voidCRoom<>函数的具体设计:先判断叫号当值变量c的值是否为0,如若为0表示c并未自加,也就表示目前没有病人叫号,提示提示请先叫号!定义全局变量fe之后判断性别,年龄使之分配到各个诊室,全局变量fe可避免病人重复分配到各个诊室,引发错误,如果多个已叫号病人可一次性分配,最后按回车键回到主界面。源程序代码〔分文件展示#include<stdio.h>//头文件#include<stdlib.h>#include<ctype.h>#include<string.h>#include<time.h>#include"windows.h"inte=0,a=0,b=0,t=0,c=0,fe=0;intk;structhos{ charname[16];//病人姓名 charsex[11];//病人性别 charnum[11];//病人挂号单编号 charyear[11];//病人年龄 introom;//病人被分到的诊室号};structhosh[100];structhos*p=&h[0];voidCallnumber<>//叫号分系统{ SetConsoleTitle<"2.叫号系统">;//窗口标题栏 system<"cls">;//清屏 intk; if<c==e> { system<"cls">; printf<"所有病人都已经分配完毕\n">; system<"pause">; return; } printf<"病人〔%s已前往就诊挂号号码:%s\n\n",p[c].name,p[c].num>; FILE*fp=fopen<"1.txt","a+">; if<fp==0>{printf<"can'topenfile\n">;} fseek<fp,0,SEEK_END>; intz=fgetc<fp>;//从文件中获取一个字符 if<z!=EOF>//查看文件是否为空 { fprintf<fp,"姓名">; fprintf<fp,"\t性别">; fprintf<fp,"\t挂号单">; fprintf<fp,"\t年龄">; fprintf<fp,"\n">; } fwrite<p[c].name,strlen<p[c].name>,1,fp>;//将姓名输出到文件中 fprintf<fp,"\t">; fwrite<p[c].sex,strlen<p[c].sex>,1,fp>; fprintf<fp,"\t">; fwrite<p[c].num,strlen<p[c].num>,1,fp>; fprintf<fp,"\t">; fwrite<p[c].year,strlen<p[c].year>,1,fp>; fprintf<fp,"\n\n">; fclose<fp>; c++; printf<"\n剩余[%d]位等待叫号的病人\n",e-c>; for<k=c;k<e;k++> printf<"目前等待叫号排序第[%d位]姓名:%s 挂号号码:%s\n",k+1-c,p[k].name,p[k].num>; system<"pause">; system<"cls">;}voidCRoom<>//分配诊室:fp〔函数{ system<"cls">; SetConsoleTitle<"3.诊室分配">; printf<"\n诊室分配结果\n">; if<c==0> { printf<"Error!请先叫号!\n">; } for<fe;fe<c;fe++> { if<atoi<p[fe].year>>=35>//字符串转换为整数 { a++; p[fe].room=1; } //其中35<含35>岁以上的患者在第一诊室 elseif<strcmp<p[fe].sex,"男">==0> { b++; p[fe].room=2; } //35岁以下男患者进第二诊室 else { t++; p[fe].room=3; } //其它的患者进第三诊室 printf<"\n病人<%s>性别:%s挂号编号:%s已被分配到第[%d]诊室\n",p[fe].name,p[fe].sex,p[fe].num,p[fe].room>; } system<"pause">; system<"cls">;}调试测试展示:通过vc6.0进行测试;源代码:#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<string.h>#defineN100intS1=0,S2=0,S3=0,man=0,woman=0,pl=0,g=0;//定义s为诊室,p1指针intk;structhos{ charname[15];//患者姓名 charsex[10];//患者性别 charnum[10];//挂号单编号 charyear[10];//患者年龄 introom;//被分到的诊室号};structhosh[N];structhos*p=&h[0];voidintroduce<>//功能介绍introduce〔函数{ printf<" \n◎功能选择◎\n">; printf<"┌──────────────────────────────┐\n">; printf<"│●1-挂号│\n">; printf<"│●2-叫号│\n">; printf<"│●3-分诊室│\n">; printf<"│●4-显示各诊室队列信息│\n">; printf<"│●5-统计当天就诊患者情况<要求按性别和任意年龄区段进行统计│\n">; printf<"│●6-结束程序│\n">; printf<"└──────────────────────────────┘\n">;}voidrun<>{ voidintroduce<>; voidinput<>; voidjiaohao<>; voidfp<>; voidstatistic<>; voidtype_statistic<>; charfunction='1',j[10]; while<function> { switch<function> { case'1':input<>;break; case'2':jiaohao<>;break; case'3':fp<>;break; case'4':statistic<>;break; case'5':type_statistic<>;break; case'6':exit<0>;break; default:system<"cls">;//清屏 printf<"\n\terror\n\n请重新输入:">; } printf<"请选择功能">; introduce<>; function=getchar<>; gets<j>; while<isdigit<function>==0> //isdigit<function>:判断function字符是不是数字 { printf<"您输入有误,请重新输入">; function=getchar<>; gets<j>; } } }voidinput<>{ intchange<char>;// intd; chari,j[8],s[15]; printf<"请输入需要挂号的病人人数<请输入0到9之间的数>:">; i=getchar<>; gets<j>; while<isdigit<i>==0> //isdigit<i>:判断i字符是不是数字 { printf<"您输入有误,请重新输入">; i=getchar<>; gets<j>; } printf<"请输入%d位病人的个人信息\n",change<i>>; for<k=1;k<=change<i>;k++> { printf<"第%2d位病人:\n",k>; printf<"姓名:">; strcpy<p[pl].name,gets<s>>; printf<"编号:">; strcpy<p[pl].num,gets<s>>; /* for<d=pl;d>=0;d--> { if<p[pl].num==p[d].num&&pl!=d> printf<"error">; }*/ printf<"性别:">; strcpy<p[pl].sex,gets<s>>; printf<"年龄:">; strcpy<p[pl].year,gets<s>>; pl++; } printf<"已经挂号的病人\n">; for<k=g;k<pl;k++> printf<"第%2d位姓名:%s 挂号号码%s\n",k+1-g,p[k].name,p[k].num>; system<"pause">; //暂停 system<"cls">; //清屏}voidjiaohao<>{ if<g==pl> { system<"cls">; printf<"所有病人都已经分配完毕\n">; return; } printf<"病人%s已前往就诊挂号号码:%5s\n\n",p[g].name,p[g].num>; g++; printf<"剩余%2d位等待叫号的病人\n",pl-g>; for<k=g;k<pl;k++> printf<"挂号排序第%2d位姓名:%s 挂号号码:%5s\n",k+1-g,p[k].name,p[k].num>; system<"pause">; system<"cls">;}voidfp<>//分配诊室:fp〔函数{ S1=0;S2=0;S3=0; for<k=0;k<g;k++> { if<atoi<p[k].year>>=35> { S1++; p[k].room=1; } //其中35<含35>岁以上的患者在第一诊室 else if<strcmp<p[k].sex,"man">==0> { S2++; p[k].room=2; } //35岁以下男患者进第二诊室 else { S3++; p[k].room=3 ; } //其它的患者进第三诊室 printf<"病人%s被分配在第%d诊室\n",p[k].name,p[k].room,p[k].num>; } system<"pause">; system<"cls">;}voidstatistic<>//病人信息输出:statistic<

温馨提示

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

评论

0/150

提交评论