学生考试管理系统设计报告.docx
《学生考试管理系统设计报告.docx》由会员分享,可在线阅读,更多相关《学生考试管理系统设计报告.docx(23页珍藏版)》请在冰点文库上搜索。
学生考试管理系统设计报告
课程设计报告
课程名称:
软件开发案例
设计题目:
学生考试管理系统
系别:
计算机系
专业:
计算机科学与技术
学生姓名:
学号:
起止日期:
2010年7月7日~2010年7月11日
指导教师:
第一章考试管理系统可行性分析0
1.1问题描述及开发背景0
1.2开发意义、资金消耗及应用范围分析0
第二章考试管理系统需求分析0
2.1用户需求及功能分析汇总0
2.2系统流程图及数据流图1
2.3数据字典1
2.4数据库设计2
第三章考试管理系统概要设计3
3.1系统模块划分3
3.2确定目标系统实现方案4
第四章目标系统详细设计5
4.1数据库设计5
4.2创建数据源并通过数据库操作事务对象连接5
4.3创建前台控件与数据源间数据传输的数据窗口对象和查询对象6
4.3创建数据管道7
第五章系统编码、测试8
5.1数据管道编程8
5.2定义存储过程11
5.3数据操作编程11
5.4用户自定义查询编程实现12
第六章测试13
6.1单元模块测试与分析13
6.2集成测试与分析13
6.3确认测试与分析14
总结14
参考文献16
第一章考试管理系统可行性分析
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-3E-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学生基本信息表定义
名称
数据类型
字节大小
可为空
默认值
备注
学号
char
6
否
主键
姓名
char
8
否
专业名
char
10
否
性别
bit
1
否
出生日期
datetime
8
否
总学分
float
8
可
0
备注
char
20
可
Null
表4-2课程信息表定义
名称
数据类型
字节大小
可为空
默认值
备注
课程号
Char
3
否
主键
课程名
Char
16
否
开课学期
Float
8
可
学时
Folat
8
否
学分
Float
8
否
表4-3考试安排表定义
名称
数据类型
字节大小
可为空
默认值
备注
考场号
Char
3
否
主键
课程号
Char
3
否
主键,外键
开考时间
datetime
8
可
考试时长
int
4
否
表4-4学生成绩表定义
名称
数据类型
字节大小
可为空
默认值
备注
学号
Char
6
否
主键,外键
课程号
Char
3
否
主键,外键
成绩
Float
8
可
学分
Float
8
否
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(booleanflag,transactiontrans)returnsInteger两个入口参数的作用分别为:
trans为定义的事务处理对象;flag=TRUE表示要连接localdb,否则连接serverdb。
返回参数为transaction信息代码
Environmentenv//环境变量
Stringstartupfile,start,autocommit
//获取os的type
if(getenvironment(env)<>1)then
return-20
endif
//设置相应的*.ini文件
choosecaseenv.OSType
caseWindows!
WindowsNT!
startupfile="DB.ini"
caseSol2!
AIX!
OSF1!
HPUX!
startupfile="DB.ini"
caseMacintosh!
startupfile="PowerBuilderPreferences"
caseelse
return-21
endchoose
ifflag=truethen
start="localdb"
else
start="serverdb"
endif
//根据当前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","")
ifautocommit="true"then
trans.autocommit=true
else
trans.autocommit=false
endif
//连接数据库
connectusingtrans;
iftrans.sqlcode<>0then
messagebox(string(trans.sqlcode),trans.sqlerrtext)
endif
returntrans.sqlcode
//
(2)wf_error(integerret)returns(none)其中入口参数ret,表示执行数据管道操作返回的错误代码
stringmsg
choosecaseret
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终止应用..."
endchoose
messagebox("数据管道运行出错",msg,stopsign!
ok!
)
//(3)wf_startpipe(transactionsuorcetrans,transactiondestrans,stringp_object)returns(none)其中三个入口参数:
sourcetrans表示源事务处理对象;desttrans表示目标事务处理对象;p_object表示数据库花瓣中创建的数据管道对象
intret
u_pipe.dataobject=p_object
ret=u_pipe.start(sourcetrans,desttrans,w_pipe.dw_1,"计算机")
ifret<>1then
wf_error(ret)
else
messagebox("数据库管道运行成功","操作成功")
endif
sle_written.text=string(u_pipe.rowswritten)
sle_read.text=string(u_pipe.rowsread)
sle_error.text=string(u_pipe.rowsinerror)
5.2定义存储过程
CREATEPROCEDUREstu_gradeAS
selectxs_cj.学号,xs_cj.课程号,xs_cj.成绩,xs_cj.学分
fromxs_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)末行插入一条记录
longrow
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)在当前位置插入一条记录
longrow
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用户自定义查询编程实现
//通过动态游标实现
intm,n
stringmysql,str
mysql=mle_1.text//读取查询语句
lb_1.reset()//重置文本框lb_1的内容
declaremycurdynamiccursorforsqlsa;//声明动态游标变量mycur
preparesqlsafrom:
mysqlusingsqlca;//sqlsa是PowerScript提供的一种数据类型,用来存储动态Sql语句所用的所有信息
describesqlsaintosqlda;
opendynamicmycurusingdescriptorsqlda;//打开游标
fetchmycurusingdescriptorsqlda;//读游标
m=sqlda.numoutputs
ifsqlca.sqlcode=-1then
messagebox("",sqlca.sqlerrtext,exclamation!
)
return
endif
//将游标中的记录逐条插到文本框lb_1中
dowhilesqlca.sqlcode=0
str=""
forn=1tom
choosecasesqlda.outparmtype[n]
casetypeinteger!
typedecimal!
typedouble!
str=str+string(sqlda.getdynamicnumber(n))+""
casetypestring!
str=str+string(sqlda.getdynamicstring(n))+""
casetypedate!
str=str+string(sqlda.getdynamicdate(n))+""
endchoose
next
lb_1.additem(str)
fetchmycurusingdescriptorsqlda;
loop
closemycur;//关闭游标
第六章测试
6.1单元模块测试与分析
(1)数据管道连接测试详见表6-1所示。
(2)数据操作测试:
由于该单元的录入、修改、查询、删除和更新这些操作的控制均由后台数据库系统管理,而后台数据库系统采用的是Microsoft发布的成熟系统,故可能出问题主要发生在前台向后台传送操作参数过程中,而这需要同人机交互模块联合测试。
所以该测试推迟到集成测试阶段。
表6-1管道连接测试
测试用例
预测
测试结果
分析
本地、远程数据库均运行:
先上传50条记录,然后再下载全部数据
上传结束,提示成功上传50条记录;下载结束,提示出错行数为零
上传结束,提示成功上传50条记录;下载结束,提示出错行数为零
管道运行程序正确
仅运行本地数据库服务器:
先上传50行记录,然后下载数据
仅尽可上传数据,但上传结果为:
所有记录均出现问题
上传结束后,返回了50条有问题的记录;下载数据失败
管道运行程序正确
仅运行远程本地数据库服务器:
先上传数据,然后下载50行记录
仅尽可下载数据,但下载结果为:
所有记录均出现问题
上传失败;下载数据结束后,提示全部数据下载失败
管道运行程序正确
6.2集成测试与分析
三模块集成后,对数据库设计方面的测试如表6-2所示。
表6-2集成测试阶段对数据库设计方面的测试
测试类型
测试用例
预测
测试结果
分析
数据操作测试
查询类
分别查询确定存在、确定不存在的学生、课程、考试安排、学生成绩记录各一次
存在的记录正确显示;不存在的记录,查询失败后弹出出错提示
存在的记录均准确显示;不存在的记录查询后提示:
不存在
由于查询时不需要输入,股不存在输入性错误。
更新类
对于学生信息、课程信息、考试安排、学生成绩①分别录入格式正确和错误的记录各一条,然后更新;②分别修改一条记录,然后更新;③分别删除一条,然后更新。
每次更新后,到数据库中查看结果
①录入格式不正确的记录在更新时提示格式不匹配,停止更新;②更新成功后,录入正确记录、修改、查询对数据库中记录均发生相应改动
①更新操作时失败,提示记录类型不匹配;②更新操作成功执行,数据库中数据均发生相应变动
系统用容错机制限制了输入性操作的健壮性
数
据
管
道
测试
本地、远程数据库均运行:
先上传50条记录,然后再下载全部数据
上传结束,提示成功上传50条记录;下载结束,提示出错行数为零
上传结束,提示成功上传50条记录;下载结束,提示出错行数为零
管道接口运行程序正确
6.3确认测试与分析
根据图2-1系统流程,遍历所有功能分支,验证操作是否能正确执行。
总结
(1)承担的主要工作
本系统在数据共享上,采用了C/S模式,我主要承担C/S模式中后台数据库的搭建和建立前台与后台数据流通方式的工作。
(2)仍存在的问题和缺陷
还应该有的辅助功能:
①数据更新的返回按钮应该具有提醒保存的功能;
②查询功能当查不到时,给出提示;
③给各个窗口的按钮添加热键;
④学生成绩查询应该是只输入学号,然后检索出所有科目成绩和总成绩;
⑤统计图初始化。
存在的缺陷:
①主窗口关闭后,格子窗口应该自动关闭;
②查询窗口也可以通过继承创建。
(3