版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上C语言课程设计课程设计题目:用于医院门诊候诊的队列管理程序姓名: 学号: 班级: 指导老师: 完成日期: 目录组员及其任务分配: 函数调用选项void ra() statistics(统计当天就诊患者情况)分程序 叫号Callnumber(叫号) ,分诊室CRoom(分诊室)分程序 registration(挂号) 菜单界面void BUI() 一、设计目的数据类型、分支控制、循环控制、函数的定义及调用、结构体及数组、指针、文件操作、编译预处理等。达到系统理解、综合运用课程知识的学习目标;学会用C语言程序解决实际问题的方法;掌握程序的局部测试、调试方法,建立程序系统调
2、试、测试的基本概念和思想,学会较大程序的系统测试和调试方法。二、需求分析方便医院门诊候诊的队列管理,采用先来先就诊的排队方式(就诊顺序与挂号单编号无关),假设挂号时编码是连续的,但由于同一个门诊科目有3个诊室,其中35(含35)岁以上的在第一诊室,35岁以下男患者进第二诊室,其它的进第三诊室,程序启动后显示下列菜单:【实现提示】1挂号 2叫号 3分诊室4显示各诊室队列信息5统计当天就诊的患者情况(要求按性别进行统计和按任意年龄区段进行统计)6结束程序选1时,提示用户在一行内输入姓名及挂号单编号;选2时,显示排在队列中第一位患者姓名、挂号单编号,并将其从挂号序列中删除选3时,进行诊室分配选4时,
3、按队列顺序显示个诊室排队人的姓名、挂号单编号及所在诊室选5时,进行两种统计方法的选择,并进行必要的统计计算选6时,退出程序的运行要求15中每一个步骤完成后都能重新显示此选择菜单 三、总体设计(程序设计组成框图、流程图)(1)系统功能分析:1. 能实现挂号功能,提示用户在一行内输入姓名及挂号单编号,并储存;2. 能实现叫号功能,显示排在队列中第一位患者姓名、挂号单编号,并将其从挂号序列中删除;3. 根据病人的性别与年龄,能实现诊室的分配;4. 能按队列顺序显示各个诊室排队人的姓名、挂号单编号及所在诊室。5. 按性别进行统计和按任意年龄区段进行统计,并打印输出;6. 完成每个步骤之后都能重新显示此
4、选择菜单。(2)总体设计框图 (3)流程图 模块一、主界面调用void ra()流程图 主界面模块,显示分程序模块,通过函数调用的选择项,输入相应的数字即可进入对应的功能模块,模块的运行应当是先1.挂号,2.叫号,3.分诊室,分配分诊室后就可以显示队列信息,之后也可选择输入年龄统计当天就诊患者情况,运行结束后就是可选择6结束程序。四、详细设计 模块二、挂号void registration( )输入需要挂号病人的人数(i):1-10人 主界面BUI()i+ 如果i<=10挂号编号num性别sex姓名name年龄year输入 挂号模块,是通过结构体数组记录患者的信息。其中需要输入患者的姓名
5、,性别,挂号单编号(就诊顺序与挂号单编号无关),并且,先输入需要挂号几个病人,每次挂号病人最多十个,并添加判断单次是否在预先输入需要挂号的病人的范围之内,以此来控制输入 。模块运行输入挂号的次数,输入完毕后,即可返回主界面。模块三、叫号void Callnumber( )病人已经分配完毕显示队列第一位患者的信息,并叫号显示队列第一位患者的信息菜单界面判断病人是否分配完毕叫号模块,首先把挂号后的第一病人进行叫号,之后能实现显示之后剩余等待叫号的的病人并排在队列中第一位患者姓名、挂号单编号,然后,通过文件写入公共将已经叫号就诊的病人保存在1.txt中实现病人叫号信息的保存。叫号完毕之后将跳过已经挂
6、号的病人,叫号模块运行完毕时,回车即可返回主菜单界面。模块四、分诊室void CRoom( )分诊室在35岁以上上?男性?第一诊室第二诊室第三诊室主界面是 否 是 否门诊科目有3个诊室,通过判断年龄其中35(含35)岁以上的在第一诊室,后再将剩余的患者进行性别判断进行第二、第三诊室的分配,35岁以下男患者进第二诊室,其它的进第三诊室 模块五、显示队列信息void show( )显示分诊室所匹配的诊室信息。第一诊室人数a及患者信息 主界面第二诊室人数b及患者信息第三诊室人数t及患者信息显示各患者队列及诊室信息模块,并且显示每名患者的详细信息,所显示的信息分为三个部分展示。而且模块运行完毕后,按回
7、车回到主界面。 模块六、统计当天就诊患者情况void statistics( )模块六、统计当天就诊患者情况void statistics( )先输入年龄界限year输出高于的人数输出低于的人数输出男性患者人数输出女性患者人数主界面年龄year>=y? 是 否统计模块,先输出共有多少位患者叫号就诊,统计男性患者和女性患者各有多少位,然后再判断高于或等于所输入年龄分界线和低于所输入年龄分界线的人数,最后按回车回到主界面。在小组所设计分程序模块为叫号void Callnumber( )以及显示分诊室模块设计void CRoom( )函数调用关系:模块三、叫号函数:void Callnumbe
8、r()函数的具体设计:先清屏,显示窗口标题栏分程序名称,使用全局变量e和c,e表示叫号当中的人数,判断病人是否分配完毕,然后将挂号后拍在第一位的病人叫号,之后的病人继续等待叫号,并且将叫号的病人写入到文件1.txt中,变量c自加后再用e c判断剩余等待挂号的人数。最后按回车键回到主界面。模块四、分诊室函数:void CRoom()函数的具体设计:先判断叫号当值变量c的值是否为0,如若为0表示c并未自加,也就表示目前没有病人叫号,提示提示请先叫号! 定义全局变量fe之后判断性别,年龄使之分配到各个诊室,全局变量fe可避免病人重复分配到各个诊室,引发错误,如果多个已叫号病人可一次性分配,最后按回车
9、键回到主界面。源程序代码(分文件展示)# include <stdio.h> /头文件# include <stdlib.h># include <ctype.h> # include <string.h>#include <time.h>#include "windows.h"int e = 0, a = 0, b = 0, t = 0, c = 0,fe=0;int k;struct hoschar name16; /病人姓名char sex11; /病人性别char num11; /病人挂号单编号 char
10、year11; /病人年龄int room; /病人被分到的诊室号;struct hos h100;struct hos *p = &h0;void Callnumber() /叫号分系统SetConsoleTitle("2.叫号系统"); /窗口标题栏system("cls"); /清屏int k;if (c = e)system("cls");printf("所有病人都已经分配完毕n");system("pause");return ;printf("病人(%s)已前往就诊
11、 挂号号码:%snn", , pc.num);FILE *fp = fopen("1.txt", "a+");if (fp = 0) printf("can't open filen"); fseek(fp, 0, SEEK_END);int z = fgetc(fp); /从文件中获取一个字符if (z != EOF) /查看文件是否为空fprintf(fp, "姓名");fprintf(fp, "t性别");fprintf(fp, "t挂号单&quo
12、t;);fprintf(fp, "t年龄");fprintf(fp, "n");fwrite(, strlen(), 1, fp); /将姓名输出到文件中fprintf(fp, "t");fwrite(pc.sex, strlen(pc.sex), 1, fp);fprintf(fp, "t");fwrite(pc.num, strlen(pc.num), 1, fp); fprintf(fp, "t");fwrite(pc.year, strlen(pc.year)
13、, 1, fp);fprintf(fp, "nn");fclose(fp);c+;printf("n-剩余【%d】位等待叫号的病人-n", e - c);for (k = c; k<e; k+)printf("目前等待叫号排序第【%d位】 姓名:%s挂号号码: %sn", k + 1 - c, , pk.num);system("pause");system("cls");void CRoom() /分配诊室:fp()函数system("cls");Set
14、ConsoleTitle("3.诊室分配");printf("n-诊室分配结果-n");if (c = 0)printf(" Error! 请先叫号! n");for (fe; fe<c; fe+)if (atoi(pfe.year) >= 35) /字符串转换为整数a+;pfe.room = 1;/其中35(含35)岁以上的患者在第一诊室else if (strcmp(pfe.sex, "男") = 0)b+;pfe.room = 2;/35岁以下男患者进第二诊室 elset+;pfe.room =
15、3;/其它的患者进第三诊室printf("n病人(%s) 性别:%s 挂号编号:%s 已被分配到第【%d】诊室n", , pfe.sex, pfe.num, pfe.room);system("pause");system("cls");调试测试展示:通过vc6.0进行测试;源代码:# include <stdio.h># include <stdlib.h># include <ctype.h> # include <string.h># define N 100int
16、 S1=0,S2=0,S3=0,man=0,woman=0,pl=0,g=0; /定义s为诊室,p1指针int k;struct hoschar name15; /患者姓名char sex10; /患者性别char num10; /挂号单编号 char year10; /患者年龄int room; /被分到的诊室号;struct hos hN;struct hos *p=&h0;void introduce() /功能介绍introduce()函数printf(" n 功 能 选 择 n");printf("n");printf(" 1
17、-挂号 n");printf(" 2-叫号 n");printf(" 3分诊室 n");printf(" 4显示各诊室队列信息 n");printf(" 5统计当天就诊患者情况(要求按性别和任意年龄区段进行统计 n");printf(" 6结束程序 n");printf("n");void run()void introduce();void input ();void jiaohao();void fp();void statistic();void type_s
18、tatistic();char function='1',j10;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"
19、;); /清屏printf("nterrornn请重新输入: ");printf("请选择功能");introduce();function=getchar();gets(j);while(isdigit(function)=0)/isdigit(function):判断function字符是不是数字printf("您输入有误,请重新输入");function=getchar();gets(j);void input()int change(char);/int d;char i,j8,s15;printf("请输入需要挂号
20、的病人人数(请输入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(,gets(s);printf(&q
21、uot;编号 :");strcpy(ppl.num,gets(s);/*for(d=pl;d>=0;d-)if(ppl.num=pd.num&&pl!=d)printf("error");*/printf("性别 :");strcpy(ppl.sex,gets(s);printf("年龄 :");strcpy(ppl.year,gets(s);pl+;printf("已经挂号的病人n");for(k=g;k<pl;k+)printf("第%2d位 姓名: %s挂号号码
22、%sn",k+1-g,,pk.num);system("pause");/暂停system("cls");/清屏void jiaohao()if(g=pl)system("cls");printf("所有病人都已经分配完毕n");return;printf("病人%s已前往就诊 挂号号码:%5snn",,pg.num);g+;printf("剩余%2d位等待叫号的病人n",pl-g);for(k=g;k<pl;k+)printf(&
23、quot;挂号排序第%2d位 姓名:%s挂号号码: %5sn",k+1-g,,pk.num);system("pause");system("cls");void fp () /分配诊室:fp()函数S1=0;S2=0;S3=0;for(k=0;k<g;k+)if(atoi(pk.year)>=35)S1+; pk.room=1 ; /其中35(含35)岁以上的患者在第一诊室else if(strcmp(pk.sex,"man")=0)S2+;pk.room=2 ; /35岁以下男患者进第二诊室elseS3+;pk.room=3;/其它的患者进第三诊室printf("病人%s被分配在第%d诊室n",,pk.room,pk.num);system("pause");system("cls");void statistic() /病人信息输出:statistic( )函数for(k=0;k<g;k+)printf(" 第%2d名患者 姓名:%s挂号编号:%s 诊室:第%d诊室n",k+1,,pk.num,pk.room);printf(&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《中年级劳动素养·家用器具使用与维护-安全规范烧开水》(教案)
- 2026届高考地理一轮复习:热点赋能与核心素养进阶精讲(复习课件讲义)
- 高中地理北方地区区域地理复习讲义(高三年级)
- “情绪解码·青春赋能”-初中生情绪管理主题德育活动课教案
- 【班会育人·心理健康】《灿烂六月心护航-初三中考冲刺心理赋能团辅讲义》
- 全民国家安全教育日高中思想政治主题班会教学设计-以“统筹发展与安全 共筑青春国安防线”为例
- 筑梦绿色长城:高中地理选择性必修三“环境保护与国家安全”教学设计
- 高中《仪容礼仪与青春形象设计》主题班会教学设计
- 初中主题班会·迎2026元旦跨学科融合教学设计
- 建筑节能方案范本
- 中国物流集团有限公司2026届春季校园招聘笔试参考题库及答案解析
- 22. 冷库运行管理操作规范手册 (15字)
- 2026年江苏单招英语七选五拔高卷含答案省统考难题突破版
- 2026教科版二年级科学下册期末复习自测卷及答案(共三套)
- JJG 1189.2-2026 测量用互感器检定规程 第2部分:标准电压互感器
- 山姆会员商店质量管控
- 县级创伤中心工作制度
- 重精管理小组工作制度
- 贵州烟草公司招聘真题
- 2026春晚高考语文考点知识点梳理和总结
- 2026统编版三年级语文下册全册知识点
评论
0/150
提交评论