医院就诊管理系统
详细设计说明书
1.引言
1.1编写目的
本详细设计说明书是针对软件工程管理与实践课程作业而编写。目的是对医院就诊管理系统进行详细设计,在概要设计的基础上进一步明确系统结构,详细地介绍系统的各个模块,为进行后面的实现和测试作准备。本详细设计说明书的预期读者为本项目小组的成员以及对该系统感兴趣,在以后想对系统进行扩展和维护的人员。
1.2背景
待开发的系统的名称:医院就诊管理系统
用户:中小型医院
2. 系统的结构
(功能)
(M1)
(功能)
(M2)
(功能)
(M3)
(M4)
(功能)
3.程序流程图
4.模块设计说明
4.1登录模块描述
该系统面向医院就诊流程中的不同人群,登陆者身份不同,其要使用的功能也各不相同,权限要求也很严格,所以,有必要设置登录界面,并设置相应的密码以明确不同权限。登录初始模块有三个选择按钮,分别对应三种不同使用者,即医生、挂号员、系统管理员。
a功能
验证登陆者输入的用户名和密码是否存在以及是否相符,验证成功则打开相应的操作界面,否则返回密码错误提示。
输入:用户名以及密码
处理:到用户数据库中验证是否存在及是否正确
输出:密码错误提示 用户名不存在 或者返回相应的操作界面
b性能
对于输入的乱码也要有一定的处理能力
c输人项
用户名以及登录密码
d输出项
密码错误提示、用户名不存在提示、返回相应操作界面
4.2挂号模块描述
挂号模块从界面上看主要分为三部分,分别是挂号功能部分、挂号单显示部分、以及新病人录入部分。由于是挂号模块,如果面对的是一位新患者,则要求输入基本信息,故整个模块要求输入的信息项较多。
a功能
录入病人信息生成挂号单,该挂号单贯穿于病人整个就诊过程,生成的挂号单暂存于挂号单数据库中,以供医生诊断以及取药付款调用。此外,挂号单中的病人ID项一直存储在病人数据库中,以供该患者以后就诊使用。
b输入项
病人ID 所挂科室 病人基本情况(病人ID 姓名 性别 年龄 住址 电话 E-mail)
c输出项
挂号单,包含病人ID及其基本信息。该基本信息写入病人信息库,该挂号单写入挂号单数据库
4.3问诊模块描述
该模块主要配合医生描述诊断结果以及给医生提供必要的诊断信息,包括病人的病史以及基本信息,诊断结束后给出所开药物列表 并写入该病人的挂号单数据库,开药时候会检查有无该药品。
a功能
给医生提供病人基本信息,包含个人信息以及病史,供诊断使用,在医生开药时提供一个药品检查功能,如果医生所开药物在药材数据库中查询不到,则返回开药失败。
b 输入项
病人ID 所开药物名称 诊断结果(文本格式)
c 输出项
诊断结果写入病史数据库 所开药物列表写入挂号单数据库 输出诊断后的挂号单,以供取药付款使用
4.4 取药付款模块描述
取药模块相对而言设计地较为简单,目的只是为了确认所取药品购买情况及付款情况。
a功能
所购买药品列表显示 确认付款功能
b输入项
病人ID
c输出项
购买购买药品列表
4.5后台管理模块描述
管理员模块主要分为三个部分,即医生管理,挂号员管理,以及管理员管理,功能大致相同,同时管理员还可以访问系统的所有数据库
a功能
管理使用该系统的用户及其信息,包含查询、增加、删除、修改,以及给用户授权,分配账号。
b输入项
账号ID
c输出项
ID拥有者的基本信息
5界面数据流跳转图
管理员界面数据流跳转图
挂号界面数据流跳转图
医生界面数据流跳转图
6开发方法说明
小组在开发该系统的过程中采用面向对象的开发形式,以界面为驱动,先通过需求讨论确定系统界面,而后以系统各个界面为驱动,推进开发过程。分模块设计系统各个部分,最后组装测试。
第二篇:考试管理系统设计报告
长治学院
课程设计报告
课程名称: 软件工程导论
设计题目: 学生考试管理系统
系 别: 计算机系
专 业: 计算机科学与技术
组 别: 第五组
学生姓名: 栗丽兵 学 号: 07407213
起止日期: 20##年7月7日~2010年7月11日
指导教师: 赵秀梅
目录
第一章 考试管理系统可行性分析.... 1
1.1问题描述及开发背景... 1
1.2开发意义、资金消耗及应用范围分析... 1
第二章 考试管理系统需求分析.... 1
2.1用户需求及功能分析汇总... 1
2.2系统流程图及数据流图... 2
2.3数据字典... 2
2.4数据库设计... 3
第三章 考试管理系统概要设计.... 4
3.1系统模块划分... 4
3.2确定目标系统实现方案... 5
第四章 目标系统详细设计.... 6
4.1数据库设计... 6
4.2创建数据源并通过数据库操作事务对象连接... 6
4.3创建前台控件与数据源间数据传输的数据窗口对象和查询对象... 7
4.3创建数据管道... 8
第五章 系统编码、测试.... 9
5.1数据管道编程... 9
5.2定义存储过程... 12
5.3数据操作编程... 12
5.4用户自定义查询编程实现... 13
第六章 测试.... 14
6.1单元模块测试与分析... 14
6.2集成测试与分析... 14
6.3确认测试与分析... 15
总结.... 15
参考文献.... 17
第一章 考试管理系统可行性分析
1.1问题描述及开发背景
随着教育改革的进行,目前高中阶段教学已逐步采用同大学教学类似的学分制,原先对于学生考试管理成绩资料的那种人工或半人工的管理方式的低效性越来越明显;而对于中学若采购成套资料管理系统,无论从资金还是人员配置方面多少都有些小题大做。鉴于以上话题的诸多特征,策划设计一个功能、可操纵性以及资金消耗与之适合的学生考试管理系统。
1.2开发意义、资金消耗及应用范围分析
开发此类系统主要是想,在兼顾到性能和资金消耗的前提下,加速中学的信息管理方式同教育改革相适应的速度。
该系统预定开发周期为一周,开发人员三人,每天工作八小时。规划同劳动量等值市场开发经费为500元(具体规划为:人员酬劳每人每小时酬劳为20元,共计420元;市场调研、计算机设备使用以及交付客户初期的系统适应性维护等经费80元。
该系统主要面向中学学生考试成绩资料管理人员。
第二章 考试管理系统需求分析
2.1用户需求及功能分析汇总
(1)保密方面:采用密码登陆方式启动。
(2) 数据存储管理方面:采用服务器—工作站方式,仅在服务器上运行数据库管理软件,各年级办公室的计算机共享数据资源;具备不同服务器间、已购数据库系统间数据块的传输功能。
(3)数据操作方面:①学生基本信息的录入、修改和查询功能;②课程开设情况记录的录入、修改和查询功能;③学期考试各课程的考场、开考时间以及考试时长等记录的录入、修改和查询功能;④学生成绩的查询功能。
(4)易以操纵性:窗口界面布置风格尽量一致,要求输入类的操作尽量少。
(5)容错性能:由于操作人员主要为教师或学生,所以对误操作的处理能能力要相对强一些。
(6)硬件及系统软件要求:基本的windowsXP平台即可。
(7)提供必要的维护文档。
2.2系统流程图及数据流图
系统流程图如图2-1所示(其中:“”表示后台数据流动,“” 表示信息管理员的前端操作)。
数据流图如图2-2所示。
2.3数据字典
(1)名字:事务
描述:需管理员操作的活动;
(2)名字:后台事务
描述:通过激活的事件或数据库系统完成的活动,对于管理员是透明的。
图2-1 系统流程图
(3)名字:学生基本信息
定义:学生基本信息=学号+姓名+性别+专业+总学分+备注
位置:数据库
(4)名字:课程信息
定义:课程信息=课程号+课程名+开课时间+学时+学分
位置:数据库
(5)名字:考试安排
定义:考试安排=考场号+考查课程号+开考时间+考试时长
位置:数据库
(6)名字:学生成绩
定义:学生成绩=学号+课程号+成绩+学分
图2-2 系统数据流图
2.4数据库设计
E-R图如图2-3所示。
图2-3 E-R图
第三章 考试管理系统概要设计
3.1系统模块划分
系统层次结构如图3-1所示,模块划分如图3-2所示。
图3-1系统层次结构示意图
图3-2系统设计模块划分示意图
说明:我负责数据库构建模块的设计。
3.2确定目标系统实现方案
方案一:快速原型增量模式开发
优点:①开发出最终版本的系统之前,所有原型系统都已通过与用户交互而得到验证,据此产生的规格说明文档正确地描述了用户的要求,因此,在开发过程的后续阶段不会因为发现了规格说明文档错误而进行较大的返工。
②开发人员通过建立原型系统已经学到了许多东西(至少知道了“系统不应该做什么,以及怎样不去做不该做的事情”),因此,在设计和编码阶段发生错误的可能性也比较小,这自然减少了在后续阶段需要改正前面阶段所犯错误的可能性。
劣势:该模式的本质特征是“快速”,但由于原型系统的用途是获知用户的真正需求,一旦需求确定了,原型版本就将被抛弃。这也决定了其对人员配备和劳动量有较高的要求。
方案二:文档驱动模块化一次性开发
优点:①由其文档驱动的特性,决定了这种方案具有阶段性和依赖性,同时可最大限度推迟系统的具体代码实现。实践表明,对于规模相对较大的软件项目来说,往往编码开始的越早,最终完成开发工作所需要的时间反而越长。因为,前面阶段的工作没做或做得不扎实,过早地考虑进行程序实现,往往导致大量返工,有时甚至发生无法弥补的问题,带来灾难性结果。
②可强迫开发人员采用规范的方法严格地规定了每个阶段必须提交的文档,这将使软件开发设计变得相对容易一些。
③由于是模块化设计,单元编码和测试,最后总装,正使得系统具有了一定的开放性。一者简化了测试阶段复杂度,另一方面也有利于软件发布以后的运行为阶段完善性维护和适应性维护。
劣势:系统的开发过程完全由文档驱动,同方案一相比,开发周期可能会较长些。
确定:从该系统的规模、应用范围、开发经费消耗和现实的开发意义等方面综合考虑,决定开发过程采用方案二进行。
第四章 目标系统详细设计
说明:由于在开发过程中我主要负责数据库模块的设计,故接下来的内容将主要叙述数据库模块的详细设计思路。
4.1数据库设计
根据第二章中图2-3所示的E-R数据结构示意图设计了四个而为关系表,分别是:学生基本信息表xs,如表4-1所示;
课程信息表kc,如表4-2所示;
考试安排表ks,如表4-3所示;
学生成绩表xs_cj,如表4-4所示;
4.2创建数据源并通过数据库操作事务对象连接
总共创建两个数据源:本地服务器数据源(用于本校日常管理),远程数据源(用于上传或下载数据)。
采用PowerBuilder的初始化文件PB.INI文件,利用通用方式通过事务对象连接数据源。连接的程序流程如图4-1所示。
表4-1学生基本信息表定义
表4-2课程信息表定义
表4-3考试安排表定义
表4-4学生成绩表定义
4.3创建前台控件与数据源间数据传输的数据窗口对象和查询对象
d_cjupdata:存储过程类数据窗口对象,用于录入、修改、删除学生成绩表中的记录;
d_kc:sql类数据窗口对象,用于通过课程号参数查询课程表中的对应记录;
d_kcpudata:quickSelect类型数据窗口对象,用于录入、修改、删除课程表中的记录;
d_stuupdata:quickSelect类型数据窗口对象,用于录入、修改、删除学生基本信息表中的记录;
d_score:sql类数据窗口对象,用于通过学号参数查询学生成绩表中的相应记录;
d_xs:sql类数据窗口对象,用于通过学号参数查询学生基本信息表中的相应记录;
query_xs:查询对象,与d_xs搭配使用;
query_kc: 查询对象,与d_kc搭配使用;
query_xs_xscj: 查询对象,与d_score搭配使用;
图4-1 通过事务对象连接数据源程序流程示意图
4.3创建数据管道
表结构定义时曾强调,表名、列名、类型、宽度、Null值等一经确定,便难以修改。要更改表的这些属性,只有利用数据管道。此外我们还经常要复制表的结构及表中部分后全部数据、讲一个表中数据加到另一个表中去(即使两个表的结构不一样),还有讲一个数据库中的表复制到另一个数据库(可能是两个不同类型的数据库包括服务器和本地库)。数据管道都能满足这些要求。具体创建使用程序流程如图4-2所示。
图4-2 数据管道创建和使用程序流程示意图
第五章 系统编码、测试
5.1数据管道编程
//(1)wf_connectdb(boolean flag,transaction trans)returns Integer两个入口参数的作用分别为:trans为定义的事务处理对象;flag=TRUE表示要连接localdb,否则连接serverdb。返回参数为transaction信息代码
Environment env//环境变量
String startupfile,start,autocommit
//获取os的type
if (getenvironment(env)<>1) then
return -20
end if
//设置相应的*.ini文件
choose case env.OSType
case Windows!,WindowsNT!
startupfile="DB.ini"
case Sol2!,AIX!,OSF1!,HPUX!
startupfile="DB.ini"
case Macintosh!
startupfile="PowerBuilder Preferences"
case else
return -21
end choose
if flag=true then
start="localdb"
else
start="serverdb"
end if
//根据当前PB.INI的设置值设置SQLCA属性
trans.dbms=ProfileString(startupfile,start,"dbms","")
trans.database=profilestring(startupfile,start,"datatbase","")
trans.userid=profilestring(startupfile,start,"userid","")
trans.dbpass=profilestring(startupfile,start,"dbpass","")
trans.logid=profilestring(startupfile,start,"logid","")
trans.logpass=profilestring(startupfile,start,"logpass","")
trans.servername=profilestring(startupfile,start,"servername","")
trans.dbparm=profilestring(startupfile,start,"dbparm","")
autoCommit=profilestring(startupfile,start,"AutoCommit","")
if autocommit="true" then
trans.autocommit=true
else
trans.autocommit=false
end if
//连接数据库
connect using trans;
if trans.sqlcode<>0 then
messagebox(string(trans.sqlcode),trans.sqlerrtext)
end if
return trans.sqlcode
//(2)wf_error(integer ret)returns(none)其中入口参数ret,表示执行数据管道操作返回的错误代码
string msg
choose case ret
case -1
msg="打不开数据管道"
case -2
msg="列数太多"
case -3
msg="要创建的表已经存在"
case -4
msg="要增加的数据的表不存在"
case -5
msg="未建立与数据库的连接"
case -6
msg="参数错误"
case -7
msg="列不匹配"
case -8
msg="访问源数据库的sql语句有致命错误"
case -9
msg="访问目标数据库的sql语句有致命错误"
case -10
msg="已经达到指定的最大错误数"
case -12
msg="不正确的标语法"
case -13
msg="需要关键字,单位指定关键字"
case -15
msg="数据管道已经在运行"
case -16
msg="源数据库出错"
case -17
msg="目标数据库出错"
case -18
msg="目标数据库处于只读状态,不能写入数据"
case -20
msg="系统出错:得不到环境信息。~n终止应用..."
case -21
msg="系统出错:未知的操作系统。~n终止应用..."
end choose
messagebox("数据管道运行出错",msg,stopsign!,ok!)
//(3)wf_startpipe(transactionsuorcetrans,transaction destrans,string p_object)returns (none)其中三个入口参数:sourcetrans表示源事务处理对象;desttrans表示目标事务处理对象;p_object表示数据库花瓣中创建的数据管道对象
int ret
u_pipe.dataobject=p_object
ret=u_pipe.start(sourcetrans,desttrans,w_pipe.dw_1,"计算机")
if ret<>1 then
wf_error(ret)
else
messagebox("数据库管道运行成功","操作成功")
end if
sle_written.text=string(u_pipe.rowswritten)
sle_read.text=string(u_pipe.rowsread)
sle_error.text=string(u_pipe.rowsinerror)
5.2定义存储过程
CREATE PROCEDURE stu_grade AS
select xs_cj.学号,xs_cj.课程号,xs_cj.成绩,xs_cj.学分
from xs_cj;
5.3数据操作编程
//(1)在数据窗口控件dw_1中显示相应表的所有数据
dw_1.retrieve()
//(2) 将数据窗口控件dw_1的焦点一到当前行的下一行
dw_1.scrollnextrow()
dw_1.selectrow(dw_1.getrow()-1,false)
dw_1.selectrow(dw_1.getrow(),true)
//(3) 将数据窗口控件dw_1的焦点一到当前行的上一行
dw_1.scrollpriorrow()
dw_1.selectrow(dw_1.getrow()+1,false)
dw_1.selectrow(dw_1.getrow(),true)
//(4)末行插入一条记录
long row
row=dw_1.insertrow(0)
//dw_1.setrow(row)
dw_1.scrolltorow(row)
dw_1.setrow(row)
dw_1.setfocus()
//(5)删除当前行的记录
dw_1.deleterow(dw_1.getrow())
//(6)在当前位置插入一条记录
long row
row=dw_1.insertrow(dw_1.getrow())
dw_1.setrow(row)
dw_1.scrolltorow(row)
dw_1.setfocus()
//(7)操作结束后,将数据窗口控件dw_1中的数据更新到数据库
dw_1.update()
dw_1.reset()
dw_1.retrieve()
5.4用户自定义查询编程实现
//通过动态游标实现
int m,n
string mysql,str
mysql=mle_1.text//读取查询语句
lb_1.reset() //重置文本框lb_1的内容
declare mycur dynamic cursor for sqlsa;//声明动态游标变量mycur
prepare sqlsa from :mysql using sqlca;//sqlsa是PowerScript提供的一种数据类型,用来存储动态Sql语句所用的所有信息
describe sqlsa into sqlda;
open dynamic mycur using descriptor sqlda;//打开游标
fetch mycur using descriptor sqlda;//读游标
m=sqlda.numoutputs
if sqlca.sqlcode=-1 then
messagebox("",sqlca.sqlerrtext,exclamation!)
return
end if
//将游标中的记录逐条插到文本框lb_1中
do while sqlca.sqlcode=0
str=""
for n=1 to m
choose case sqlda.outparmtype[n]
case typeinteger!,typedecimal!,typedouble!
str=str+string(sqlda.getdynamicnumber(n))+" "
case typestring!
str=str+string(sqlda.getdynamicstring(n))+" "
case typedate!
str=str+string(sqlda.getdynamicdate(n))+" "
end choose
next
lb_1.additem(str)
fetch mycur using descriptor sqlda;
loop
close mycur;//关闭游标
第六章 测试
6.1单元模块测试与分析
(1)数据管道连接测试详见表6-1所示。
(2)数据操作测试:由于该单元的录入、修改、查询、删除和更新这些操作的控制均由后台数据库系统管理,而后台数据库系统采用的是Microsoft发布的成熟系统,故可能出问题主要发生在前台向后台传送操作参数过程中,而这需要同人机交互模块联合测试。所以该测试推迟到集成测试阶段。
表6-1管道连接测试
6.2集成测试与分析
三模块集成后,对数据库设计方面的测试如表6-2所示。
表6-2 集成测试阶段对数据库设计方面的测试
6.3确认测试与分析
根据图2-1系统流程,遍历所有功能分支,验证操作是否能正确执行。
总结
(1)承担的主要工作
本系统在数据共享上,采用了C/S模式,我主要承担C/S模式中后台数据库的搭建和建立前台与后台数据流通方式的工作。
(2)仍存在的问题和缺陷
还应该有的辅助功能:
①数据更新的返回按钮应该具有提醒保存的功能;
②查询功能当查不到时,给出提示;
③给各个窗口的按钮添加热键;
④学生成绩查询应该是只输入学号,然后检索出所有科目成绩和总成绩;
⑤统计图初始化。
存在的缺陷:
①主窗口关闭后,格子窗口应该自动关闭;
②查询窗口也可以通过继承创建。
(3)心得体会
本次设计,对于软件项目开发过程中的每个阶段都走了一遍;虽然本学期已在教材中认真学了,但具体到实践中亲手做出来时总还是多少有些陌生。
从开始熟悉系统设计要求到整体设计规格说明的制定,再从概要设计、详细设计到开始编码,以及最后的调试,整个过程经历后总感觉要不是团队小组积极地合作讨论,即使是文档驱动一个人也肯定坚持不下来。在单元设计中遇到了不少困难,但通过查阅相关资料,向指导老师请教以及与同学互讨论,最终克服了不少。经过这段时间的课程设计,确实学到了不少的东西,同时也深感自己知识的欠缺。整个下来,感觉有几点对于课题设计的总体进行的效率很重要:
①分析也好,讨论也好,必须在对盖顶要求的清醒认识的前提下;
②开发小组的成员间要保持良好的沟通,团队团结很重要;
③模块划分时,对各模块的接口规范一定要清晰,否则可能会出现最后集成时,模块见无法对接。
由于课程设计时间较短和自己知识的局限性,所以该设计还有许多不尽如人意的地方,比如功能繁杂,分析模块未能实现等问题,可能在实际应用中有些功能设计的不到位。不过我会在今后的学习工作之余中,继续学习这块知识。
参考文献
[1] 郑阿奇,殷红先,张为民。Power-Builder使用教程[M]. 北京:电子工业出版社, 2009.
[2] 张海藩.软件工程导论(第五版)[M]. 北京:清华大学出版社,2009