医院病床安排算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
目录........................................................................................................................................................... I 1 课程设计内容 .. (1)
1.1课程设计目的 (1)
1.2课程设计要求 (1)
1.3课程设计背景 (1)
2 概要设计 (2)
2.1程序模块结构图 (2)
2.2主界面模块说明 (2)
2.3病人模块说明 (2)
2.3.1 病人数据模块说明 (2)
2.3.2 状态显示模块说明 (2)
2.3.3 病人初始化模块说明 (2)
2.3.4 看病模块(递归)说明 (2)
2.4系统模块说明 (2)
2.4.1 系统界面模块说明 (2)
2.4.2 随机数模块说明 (3)
2.4.3 队列处理模块说明 (3)
3 详细设计 (4)
3.1主程序的实现 (4)
3.2病人模块的实现 (4)
3.2.1 病人数据模块的实现 (4)
3.2.2 状态显示模块的实现 (4)
3.2.3 病人初始化模块的实现 (5)
3.2.4 看病模块的实现 (7)
3.3系统模块的实现 (8)
3.3.1 系统界面模块的实现 (8)
3.3.2 随机数模块的实现 (8)
3.3.3 队列处理模块的实现 (8)
4 运行结果 (11)
4.1输入 (11)
4.2模拟病人看病流程 (11)
小结 (14)
参考文献 (15)
1 课程设计内容
1.1 课程设计目的
1)课程设计题目:医院病床安排
2)需求分析:根据自己的选题,书写相关的文字说明。
3)总体结构设计:绘制所选题目系统的功能模块图(函数)及相关说明。
4)各子模块设计:各子模块的程序流程图及相关说明。
5)编程实现:选定C或C++语言对各子模块进行编程并进行集成。
6)测试结果:输入数据、输出结果的图示。
7)总结:总结课程设计的过程、体会及建议。
1.2 课程设计要求
随机产生n个病人,现医院有m张病床,m张病床上当前已经有p(p<=m)位正在住院的病人,每个已经住院或准备住院的病人都有对应自身的住院时长。合理安排所有病人,使所有病人在最短等待时间完成住院治疗。
病人看病的流程是:挂号,排队等待安排住院时间,住院,手术,出院等几个阶段。医院实行先到先服务的原则。既如果问诊时有剩余床位,可立即入住,如果没有,则排队等待,同时医院对急诊病人有特殊照顾,如果是外伤,则不需要排队,可直接接受服务。既外伤病人有较高的优先权。其排队流程可如下图所示:
因为病人n是确定的常数,我们在分析该问题时不考虑后面病人的增加,平均等待时间=总等待时间/病人总数,因为病人总数n是确定的,所以只要下去分析如何使总等待时间最小就行。
1.3 课程设计背景
医院病床利用统计是医院信息管理最活跃的要素之一,合理分析床位利用情况对于提高医院经济效益,改善病房管理,挖掘潜力增强服务能力等有十分重要的意义。当该住院部对全体非急症病人是按照FCFS(First come, First serve)规则安排住院,但等待住院病人队列却越来越长,医院希望能通过某种方式来解决该住院部的病床合理安排问题,以提高对医院资源的有效利用。为此,我们引进高响应比优先(High-priority response ratio)算法。
2.1
2.2
主界面模块提供本程序的功能菜单,使本程序各个功能一目了然,给用户一个直观的使用体验,方便用户简单快捷的使用本程序。
2.3 病人模块说明
2.3.1 病人数据模块说明
这个模块用struct包装病人数据,并放在3个队列中。一个是未入院病人列表,一个是等待病人列表,另一个是正在治疗列表。
2.3.2 状态显示模块说明
这个模块用于实现显示所有病人的实时状态,通过列表的方式直观的显示在界面上。
2.3.3 病人初始化模块说明
这个模块用于初始化所有病人数据,同时建立3个队列。
2.3.4 看病模块(递归)说明
这个模块用于实现对病人的处理以及调动。
2.4 系统模块说明
2.4.1 系统界面模块说明
这个模块用于显示系统的标题画面,以及等待画面。
2.4.2 随机数模块说明
这个模块用于生成随机数来支持病人初始化模块的运行。
2.4.3 队列处理模块说明
这个模块用于处理病人队列,实现对病人队列的插入、取出、删除、排序等功能,来支持看病模块中对病人的3个队列处理。
3 详细设计
3.1 主程序的实现
主程序通过获得输入数据和调用其他模块来实现整个系统的功能。
以上过程的主要实现代码如下:
#include
#include"patient.h"
int main(int argc, char** argv) {
int n,m,p,w=0; //n:未看病病人,m:病床数,p:已入住病人,w:等待人数
patient inList[100]; //未看病病人列表
patient waitList[100]; //等待列表
patient treatList[100]; //治疗列表
////////病人初始化//////////
patient_init(&n,&m,&p,&w,inList,waitList,treatList);
////////看病//////////
see_doctor(&n,m,&p,&w,inList,waitList,treatList);
return 0;
}
3.2 病人模块的实现
3.2.1 病人数据模块的实现
用struct包装病人数据。
以上过程主要实现代码如下:
struct patient{
int id;
int treatTime;
bool emergency;
};
3.2.2 状态显示模块的实现
在界面上直观的显示所有病人的实时状态。
以上过程主要实现代码如下:
////////////////////病人显示/////////////////////
void patient_display(int n,int m,int p,int w,patient *inList,patient *waitList,patient *treatList){