视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
考试管理系统设计报告
2025-10-02 13:59:19 责编:小OO
文档
长治学院

课程设计报告

课程名称: 软件工程导论 

设计题目:     学生考试管理系统            

      系    别:         计算机系                

专    业:      计算机科学与技术           

组    别:          第五组                 

学生姓名:    栗丽兵     学  号:  ********  

起止日期:  2010年7月7日 ~2010年7月11日

*****             ***               

第一章 考试管理系统可行性分析

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学生基本信息表定义

名称数据类型字节大小可为空默认值备注
学号char6主键
姓名char8
专业名char10
性别bit1
出生日期datetime8
总学分float80
备注char20Null
表4-2课程信息表定义

名称数据类型字节大小可为空默认值备注
课程号Char3主键
课程名Char16
开课学期Float8
学时Folat  8
学分Float8
表4-3考试安排表定义

名称数据类型字节大小可为空默认值备注
考场号Char3主键
课程号Char3主键,外键
开考时间datetime8
考试时长int  4
表4-4学生成绩表定义

名称数据类型字节大小可为空默认值备注
学号Char6主键,外键
课程号Char3主键,外键
成绩Float8
学分Float8
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管道连接测试

测试用例预测测试结果分析
本地、远程数据库均运行:先上传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)心得体会

本次设计,对于软件项目开发过程中的每个阶段都走了一遍;虽然本学期已在教材中认真学了,但具体到实践中亲手做出来时总还是多少有些陌生。

从开始熟悉系统设计要求到整体设计规格说明的制定,再从概要设计、详细设计到开始编码,以及最后的调试,整个过程经历后总感觉要不是团队小组积极地合作讨论,即使是文档驱动一个人也肯定坚持不下来。在单元设计中遇到了不少困难,但通过查阅相关资料,向指导老师请教以及与同学互讨论,最终克服了不少。经过这段时间的课程设计,确实学到了不少的东西,同时也深感自己知识的欠缺。整个下来,感觉有几点对于课题设计的总体进行的效率很重要:

①分析也好,讨论也好,必须在对盖顶要求的清醒认识的前提下;

②开发小组的成员间要保持良好的沟通,团队团结很重要;

③模块划分时,对各模块的接口规范一定要清晰,否则可能会出现最后集成时,模块见无法对接。

由于课程设计时间较短和自己知识的局限性,所以该设计还有许多不尽如人意的地方,比如功能繁杂,分析模块未能实现等问题,可能在实际应用中有些功能设计的不到位。不过我会在今后的学习工作之余中,继续学习这块知识。

参考文献

[1]郑阿奇,殷红先,张为民。Power-Builder使用教程[M]. 北京:电子工业出版社, 2009.

[2]张海藩.软件工程导论(第五版)[M]. 北京:清华大学出版社,2009 

指导教师评语:

          指导教师签名:                 年     月     日

成绩评定

项       目

权重成绩
1、设计过程中出勤、学习态度等方面

0.1

2、设计技术水平

0.4
3、编程风格

0.2
4、设计报告书写及图纸规范程度

0.3

总  成  绩

   

下载本文
显示全文
专题