1、目 录目 录 I1 课程设计内容 11.1 课程设计目的 11.2 课程设计要求 11.3 课程设计背景 12 概要设计 22.1 程序模块结构图 22.2 主界面模块说明 22.3 病人模块说明 22.3.1 病人数据模块说明 22.3.2 状态显示模块说明 22.3.3 病人初始化模块说明 22.3.4 看病模块(递归)说明 22.4 系统模块说明 22.4.1 系统界面模块说明 22.4.2 随机数模块说明 32.4.3 队列处理模块说明 33 详细设计 43.1 主程序的实现 43.2 病人模块的实现 43.2.1 病人数据模块的实现 43.2.2 状态显示模块的实现 43.2.3 病
2、人初始化模块的实现 53.2.4 看病模块的实现 73.3 系统模块的实现 83.3.1 系统界面模块的实现 83.3.2 随机数模块的实现 83.3.3 队列处理模块的实现 84 运行结果 114.1 输入 114.2 模拟病人看病流程 11小 结 14参考文献 151 课程设计内容1.1 课程设计目的1) 课程设计题目:医院病床安排2) 3) 总体结构设计:绘制所选题目系统的功能模块图( 函数)及相关说明。4) 各子模块设计:各子模块的程序流程图及相关说明。5) 编程实现:选定 C 或 C+语言对各子模块进行编程并进行集成。6) 测试结果:输入数据、 输出结果的图示。7) 总结:总结课程设
3、计的过程 、体会及建议。 1.2 课程设计要求病人看病的流程是:挂号,排队等待安排住院时间,住院,手术, 出院等几个阶段。医院实行先到先服务的原则。既如果问诊时有剩余床位,可立即入住,如果没有,则排队等待,同时医院对急诊病人有特殊照顾,如果是外伤,则不需要排队,可直接接受服务。既外伤病人有较高的优先权。其排队流程可如下图所示:因为病人 n 是确定的常数,我们在分析该问题时不考虑后面病人的增加,平均等待时间=总等待时间 /病人总数,因为病人总数 n 是确定的 ,所以只要下去分析如何使总等待时间最小就行。1.3 课程设计背景医院病床利用统计是医院信息管理最活跃的要素之一,合理分析床位利用情况对于提
4、高医院经济效益,改善病房管理,挖掘潜力增强服务能力等有十分重要的意义。当该住院部对全体非急症病人是按照 FCFS(First come, First serve)规则安排住院,但等待住院病人队列却越来越长,医院希望能通过某种方式来解决该住院部的病床合理安排问题,以提高对医院资源的有效利用。为此,我们引进高响应比优先(High-priority response ratio)算法。2 概要设计2.1 程序模块结构图图 2-1 程序结构模块图2.2 主界面模块说明主界面模块提供本程序的功能菜单,使本程序各个功能一目了然,给用户一个直观的使用体验,方便用户简单快捷的使用本程序。2.3 病人模块说明2
5、.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 队列处理模
6、块说明这个模块用于处理病人队列,实现对病人队列的插入、取出、删除、排序等功能,来支持看病模块中对病人的 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 inList100; /未看病 病人列表 patient waitList100; /等待列表 patient treatList100;
7、 /治疗列表 /病人初始化/ patient_init(/看病/ see_doctor(return 0; 3.2 病人模块的实现3.2.1 病人数据模块的实现用 struct 包装病人数据。以上过程主要实现代码如下:struct patientint id;int treatTime;bool emergency; ;3.2.2 状态显示模块的实现在界面上直观的显示所有病人的实时状态。以上过程主要实现代码如下:/病人显示/ void patient_display(int n,int m,int p,int w,patient *inList,patient *waitList,patien
8、t *treatList)bool flag1,flag2,flag3;std:cout*n;std:cout*m;std:cout*p;if(*p0 则进入等待队列/ if(*n0)indat=pop(n,inList);if(indat.emergency=true)push_front(w,waitList,indat);elsepush_back(w,waitList,indat);/正在治疗的病人 treatTime-/ for(int i=0;i0) treatListi.treatTime-;else del(p,treatList,i);/如果 存在空余病房 则等待病人入院/
9、if(*p0)indat=pop(w,waitList);push_back(p,treatList,indat);sort(*w,waitList);Sleep(1000);if(*p0)see_doctor(n,m,p,w,inList,waitList,treatList);3.3 系统模块的实现3.3.1 系统界面模块的实现这个模块用于显示系统的标题画面,以及等待画面以上过程主要实现代码如下:void sys_display()std:coutj;i-)datx=inListi;inListi=inListi-1;*n=*n+1;inListj=indat; /添加到队尾/void p
10、ush_back(int *n,patient *inList,patient indat)inList*n=indat;*n=*n+1; /删除指定 id 病人/void del(int *n,patient *inList,int ix)*n=*n-1;for(int i=ix;iinListi+1.treatTime)datx=inListi;inListi=inListi+1;inListi+1=datx;/对普通病人排序/for(int i=em;iinListi+1.treatTime)datx=inListi;inListi=inListi+1;inListi+1=datx; L
11、ZW 压缩界面如下图 3-4 所示:4 运行结果4.1 输入输入病人数:25,病床数:10,已入住病人数:9等待数据处理:4.2 模拟病人看病流程1 课程设计内容1.1 课程设计目的课程设计题目:二维码签到系统1.2 课程设计要求程序要求实现的功能有:2.老师对课程进行增删改查,同时生成课程二维码3.老师对学生进行增删改查4.老师对课程的签到记录进行查看,可以查看未签到和已签到的人员名单5.学生扫码登录进行签到1.3 课程设计背景签到是由 LBS(Location-Based Services)地理位置应用所带来的专有名词,是指用户通过智能的移动终端设备, 借助移动运营商的定位技术,精确的获得
12、自己的位置,并通 过终端上的应用程序,把自己的位置信息发布出去。LBS 应用最早出现在国外,后来由国内的行业先驱引 进国内,并且在过去的一年多时间里如雨后春笋般的在国内 生根发芽,并很快就被城市里追逐潮流的年轻族群所追捧。 但是另一方面,LBS 应用因为其本身技术上的局限性, 普遍 存在签到地点位置不真实的情况,对商家的销售计划只有非 常小的参考价值。为了解决签到地点位置不真实的问题,在 会员管理系统中,引入二维码识别技术结合商户门店前端识 别模块,对用户手机进行身份认证的模式来解决这个问题。2 概要设计2.1 程序模块结构图图 2-1 程序结构模块图2.2 管理员登陆模块说明此模块用管理员身
13、份登陆,进行教师的增删管理。2.3 教师管理模块说明此模块用教师身份登陆,进行学生管理,课程管理与签到管理。2.4 学生管理模块说明此模块用学生身份登陆,进行课程签到。3 详细设计3.1 用户管理3.1.1 用户登陆图 3-1 用户登录3.1.2 管理用户图 3-2 管理教师图 3-3 管理学生3.2 教师管理3.2.1 管理课程以上过程主要实现代码如下:public class CourseAction extends BaseActionprivate static final long serialVersionUID = 3538737571007845990L;private Cou
14、rseInfo course; /课程private static int id;private String qrcodeAddress;public int getId() return id;public void setId(int id) this.id = id;public String getQrcodeAddress() return qrcodeAddress;public void setQrcodeAddress(String qrcodeAddress) this.qrcodeAddress = qrcodeAddress;/private List pcourseI
15、nfo; /数据库中所有课程public List getPcourseInfo() return pcourseInfo;public void setPcourseInfo(List pcourseInfo) this.pcourseInfo = pcourseInfo;/获得课程信息public String requestCourse()course=CourseBusiness.getCourseInfo(1);System.out.println(course.getId()+“ “+course.getCourseName();return “success“;/添加课程publ
16、ic String addCourse()CourseInfo courseX=new CourseInfo();courseX.setId(id);courseX.setCourseName(this.getParameter(“courseName“);courseX.setQrcodeAddress(this.getParameter(“qrcodeAddress“);courseX.setTeachPridId(1);courseX.setqCodeEffictiveId(1);Date date=new Date();DateFormat format=new SimpleDateF
17、ormat(“yyyy-MM-dd HH:mm:ss“);String time=format.format(date);courseX.setCourseCreateTime(time);CourseBusiness.addCourseInfo(courseX);return “success“;/删除课程public String del()int inId=Integer.valueOf(this.getParameter(“id“);int rid=Integer.valueOf(this.getParameter(“rid“);CourseBusiness.deleteCourseI
18、nfo(inId);return “success“;/修改课程public String updateCourse()CourseInfo courseX=new CourseInfo();courseX.setId(2);courseX.setCourseName(“Chinese“);courseX.setQrcodeAddress(“G:/“);courseX.setTeachPridId(1);courseX.setqCodeEffictiveId(1);Date date=new Date();DateFormat format=new SimpleDateFormat(“yyyy
19、-MM-dd HH:mm:ss“);String time=format.format(date);courseX.setCourseCreateTime(time);CourseBusiness.updateCourseInfo(courseX);return “success“;public String listCourse()pcourseInfo=CourseBusiness.getAllCourse();this.setId(pcourseInfo.get(pcourseInfo.size()-1).getId()+1);return “listCourse“;public Str
20、ing toAdd() return “toAdd“;public String toMod()int inId=Integer.valueOf(this.getParameter(“id“);return “toMod“;public String detail()int inId=Integer.valueOf(this.getParameter(“id“);return “detail“;/success 后的跳转路径/public String url=“course_listCourse.action“;public String getUrl() return url;/publi
21、c String getUploadPath(String pathName)return “source“;/* 生成二维码* * see 类、类#方法、类#成员*/public String createCode()String pathName = “code“;pathName=pathName+“;if (ObjectUtils.isNull(id)return SUCCESS;String serverAddress = “http:/192.168.1.3:8080/sign/mobile_toMobileLogin.action?id=“+id;String returnPat
22、h = getUploadPath(pathName);String allpath = SystemUtils.getTomcatPath() + returnPath;/ 创建目录SystemUtils.mkdirs(allpath);int width = 250;int height = 250;/ 二维码的图片格式String format = “gif“;BitMatrix bitMatrix;tryHashtable hints = new Hashtable();/ 内容所使用编码hints.put(EncodeHintType.CHARACTER_SET, “utf-8“);
23、bitMatrix = new MultiFormatWriter().encode(serverAddress, BarcodeFormat.QR_CODE, width, height, hints);qrcodeAddress = returnPath+“/“+String.valueOf(id) + “.jpg“;/ 生成二维码File outputFile = new File(allpath + “/“+String.valueOf(id) + “.jpg“);MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile
24、);catch (WriterException e)e.printStackTrace();catch (IOException e)e.printStackTrace();return “success“;图 3-4 管理课程3.2.2 查询课程签到记录以上过程主要实现代码如下:public class recordAction extends BaseAction private static final long serialVersionUID = 164430992663608274L;/ /success 后的跳转路径/public static String url=“sign
25、_listSignList.action?coursePriId=“;public String getUrl() return url;public void setUrl(String url) this.url = url;/ / /添加一条记录 /public String addRecord() recordInfo recordx = new recordInfo();recordx.setStudentPriId(2);recordx.setCoursePriId(1);/ recordx.setSignTime(new Date(2015, 7, 1);RecordBusine
26、ss.addRecord(recordx);return “add“;/ /课程记录/private List signlist;public List getSignlist() return signlist;public void setSignlist(List signlist) this.signlist = signlist;/ /获得某门课的签到记录 /public String listSignList() / 获得课程 IDint courseId = Integer.valueOf(this.getParameter(“coursePriId“);this.setUrl(
27、“sign_listSignList.action?coursePriId=“+courseId);this.setSignlist(RecordBusiness.requestList(courseId);return “listSignList“;public String deleteSign() int id = Integer.valueOf(this.getParameter(“id“);RecordBusiness.deleteSign(id);return “success“;public String studentSign()String name=this.getPara
28、meter(“username“);String pwd=this.getParameter(“password“);HttpSession session=this.getSession();int courseId=Integer.valueOf(String)session.getAttribute(“courseId“);boolean flag=RecordBusiness.signRecord(name, pwd, courseId);if(flag=true)return “success“;return “error“;图 3-5 查询课程签到记录3.3 学生管理3.3.1 学
29、生签到以上过程主要实现代码如下:签到列表.main-contentmargin-left:0px;function check()var flag = true;var check=document.getElementsByName(“idList“);for(var i=0;i签到管理签到列表签到列表课程名学生姓名签到时间操 作$sign.courseName$sign.studentName$sign.signTime删除图 3-6 学生签到图 3-7 签到成功图 3-6 删除签到记录小 结我们用的这个算法类似于操作系统中的“短作业优先”算法,在此基础之上我们增加了一个最高优先级急诊。这个算法实现起来比较容易,效率也比较好。同时,通过这一个星期的课程设计,对我的编程技巧有很大的提高。参考文献1 计算机常用算法与程序设计案例教程 杨克昌等 清华大学出版社.2. 数据结构严蔚敏 吴伟民 清华大学出版社3. 数据结构习题与解析李春葆 清华大学出版社.