配色: 字号:
第12章 关系型数据库应用系统案例分析
2022-12-24 | 阅:  转:  |  分享 
  
第12章 关系型数据库应用系统案例分析12.1 系统设计12.1.1 需求分析通过对高校教材管理流程的调研,分析现有工作流程,查阅相关
教材管理资料,并根据用户需求确定教材征订管理的功能。1.信息需求(1) 教师信息:使用本系统的教师的信息,包括教师号、用户名、密码
、联系方式、提交状态等。(2) 教材信息:教材的基本信息,包括教材名称、教材作者、教材ISBN、教材定价、出版社、版次等信息。(3
) 教材征订信息:根据学期教学计划,教师需要订购课程相关教材,包括教材相关信息、教材使用班级信息等。(4) 统计报表信息:对教师教
材征订信息进行汇总、统计。2.功能需求用户对系统的功能需求可以用如图12.1所示的功能结构图表示。图12.1 系统功能结构图(1
) 教材库管理① 对教材信息进行维护,包括增加、删除、修改现有教材信息。② 可根据教材名、ISBN、出版社等字段查询现有教材及库存
信息。(2) 出版社管理① 对出版社信息进行维护,包括增加、删除、修改现有出版社信息。② 查询现有出版社信息。 (3) 教材征订管
理① 实现各个学院独立申请购买教材的功能。② 方便教材科对教材订购的信息进行管理统计。③ 查询现有教材订购信息。(4) 系统管理①
对教材征订周期、征订状态进行管理。② 添加、修改、删除系统管理员。③ 增加、删除、修改教师用户。④ 对教师账户,进行可用和禁用状
态审核。⑤ 通知公告管理,维护系统通知。3.系统结构分析 为了满足需求,将系统分为教师订书管理和教材系统后台管理两部分。 教师
订书管理具体功能是完成学期订书。教师根据年度教学任务进行订书,教师添加本年度的订单,然后添加订单中的教材,一个订单可以添加多本教材
;教师可以对教材库没有的教材进行添加,通过添加将需要的教材加入教材库,然后完善自己的订单。教材系统后台管理的功能是进行管理员维护、
教师信息维护、公告信息维护、出版社信息维护、教材订购信息汇总查看。12.1.2 概念结构设计1.实体及其属性管理员实体图教师实体
图教材实体图订单实体图订单详情实体图 管理员实体图教师实体图教材实体图订单实体图订单详情实体图 2.实体间的联系12.1.3 数
据库设计1.逻辑结构设计通知公告表(编号,教师订书端公告,管理员端公告) 管理员表(管理员编号,管理员姓名,电话号码,所在办公室,
登录名,密码) 教师表 (教师编号,教师姓名,电话号码,所在办公室,用户名,密码,是否开启) 出版社表(出版社编号,出版社名称,
缩写,地址, 电话,ISBN代码,省市,备注) 教材表(教材编号,名称,缩写,ISBN,作者,单价,版次,出版社编号,出版日期,简
介) 教材订单表 (定单号,教师姓名,教师编号,订单时间,订单备注,开课课程名,开课系所名) 教材订单详情表 (订书明细号,定单流
水号,教师编号,图书编号,开课课程名,教材名称,ISBN,版次,作者,出版社,定价,订购册数,备注) 2.物理结构设计
本系统的数据库物理结构设计基于SQL Server 2012,数据库名称为BookOrder。通知公告表 (Notice) 管理员
表(Admin) 教师表(Teacher)出版社表 (Press)教材表(Book) 教材订单表(BookOrder) 教材订单
详情表 (OrderDetail) 12.2 功能模块设计12.2.1 系统功能模块系统主要包括教材库管理、出版社管理、教材征
订管理、系统管理四个功能模块。 (1) 系统管理:该模块中的教师管理模块完成教师账号的增加、删除、修改;通知公告管理可以发布系统公
告,分为管理端及教师端公告;完成增加、修改、删除管理员账号;完成对教师状态的管理,设定教师账号是否可用。12.2.1 系统功能模
块(2) 出版社管理:对出版社信息进行维护,包括增加、删除、修改现有出版社信息;查询现有出版社信息;设置出版社简称,在图书查找及教
师订书时可以帮助快速查找到所需订购图书。12.2.1 系统功能模块(3) 教材库管理:对教材信息进行维护,包括增加、删除、修改现
有教材信息;可根据教材名、ISBN、出版社等字段查询现有教材及库存信息。教材库允许教师在教师订书端添加教材,当用户再订书查询时,如
果没有查找到自己需要订购的图书,可以利用此功能增加新教材到教材库。12.2.1 系统功能模块(4) 教材征订管理:提供各学院各系
所单独订书;教材科对教师提交订书信息进行汇总并完成图书征订工作;查询图书订购情况,可以修改教师订书过程中出现的错误情况。12.2.
2 界面设计界面评价标准使用简便 一致性 启发性 减少人脑记忆的负担 减少重复的输入 容错性 及时反馈 其他 12.3 功能实
现步骤12.3.1 数据库创建首先为系统配置数据库,在SQL Server 2012中创建一个数据库,命名为BookOrder,
并在该数据库添加12.1.3节数据库设计中的所有表。数据库建好后,打开Visual Studio应用程序,创建项目名称为BookO
rder。 12.3.2 公用模块设计选择BookOder解决方案,单击鼠标右键,在其右键菜单中,选择“添加”→“新建项目”,弹
出“添加新项目”对话框,在左栏“项目类型”中选择“Windows项目”,在右栏中选择“类库”,在下面的“名称”文本框中输入“DBU
tility”,单击“确定”按钮,完成建立DBUtility类库。用鼠标右键单击“DBUtility”,在右键菜单中选择“添加”,
在窗口中选择“类”,输入类名称“DbHelperSQL”,建立DbHelperSQL类。12.3.3 添加app.config文
件用鼠标右键单击项目名称BookOrder,在弹出菜单中选择“添加”→“新建项”,在弹出的“添加新项”对话框左栏中选择“Workf
low”,然后选择Web配置文件,在名称文本框中输入“app”,单击“确定”按钮,系统将自动生成一个app.config文件。选择
app.config,删除其中的信息,输入对应信息,单击保存。12.4 管理员端程序设计步骤12.4.1 用户管理界面在新建好
的项目中,选择Form1向其中拖入TabControl控件,选中生成的“tabControl1”,单击鼠标右键在其右键菜单中选择“
添加选项卡”,并添加相应选项卡,如图12.8所示。图12.8 管理端窗口设计在图12.8中,左侧为一组按钮。右侧为TabCont
rol控件,选中其中一个选项卡,修改其Name属性为“tabSystem”、Text属性为“用户管理”。同时命名窗体左侧按钮Nam
e为“btnSys”的名称为“用户管理”。同时按照上述步骤操作其他窗体控件属性。管理端窗体设计(1) 选择“用户管理”选项卡,向其
中加入DataGridView控件并修改其属性 。(2) 修改DataGridView,向其中加入列值 。(3) 向“用户管理”选
项卡中加入三个按钮,修改其属性 。 (4) 上述步骤属性值添加设置完毕后,需要给控件加上操作事件。双击窗体左侧的“用户管理”
,打开代码编辑器,在此btnSys_Click事件中输入如下代码,显示“用户管理”选项卡。 private void btn
Sys_Click(object sender, EventArgs e) //进入用户管理界面 { tabCont
rol1.SelectedTab = tabSystem; //选项卡选中 tabSystem //作用:单击左侧按钮
时,TabControl选项卡选中“用户管理” }(5) 进入“用户管理”选项卡后,grdAdmin表格中已经加载了数据库中
的数据,在DataSysBind函数中输入如下代码,显示用户管理信息。 private void DataSysBind()
//显示用户管理信息 { string strSQL = "Select from Admin"; gr
dAdmin.DataSource = DbHelperSQL.GetDataTable(strSQL); }(6) 双击“添
加”按钮,在btnSysAdd_Click函数中输入如下代码,实现用户信息添加功能。 private void btnSy
sAdd_Click(object sender, EventArgs e) //添加用户管理 { fr
mSystem frmSys = new frmSystem("Insert", "0"); //调用我们新建的frm
System窗体类,生成一个窗体对象。输入初始化参数“Insert”和 “0” frmSys.ShowDialog()
; //以模态窗体形式显示frmSys窗体 if(frmSys.DialogResult == DialogResu
lt.OK) //若窗体返回值DialogResult.OK { DataSysBind(); /
/重新加载表格中的数据(刷新表格) } frmSys.Dispose(); //调用窗体完毕后,释放fr
mSys窗体 } (7) 表格中行选定。选定表格中的某行,在程序中实际是将选中表格的ID号码存储到全局变量中。以便在修改或
删除操作中使用。具体操作步骤:选中表格,在其属性编辑器中选择事件,双击CellClick事件,在grdAdmin_CellClic
k函数中输入如下代码,完成表格选定功能。 private void grdAdmin_CellClick(object s
ender, DataGridViewCellEventArgs e) { int rowindex = e.
RowIndex; if (rowindex != -1) { strSysEditID=grdAdmin
.Rows[rowindex].Cells["adminID"].Value.ToString(); } }
(8) 双击“修改”按钮,在btnSysEdit_Click函数中输入如下代码。 private void btnSys
Edit_Click(object sender, EventArgs e) { if (strSysE
ditID == "") //strSysEditID 为全局变量,记录当前选中的记录ID值 {
MessageBox.Show("请选择您要修改的记录!"); return; } f
rmSystem frmSys = new frmSystem("Edit", strSysEditID); frm
Sys.ShowDialog(); if (frmSys.DialogResult == DialogResult.
OK) { DataSysBind(); } frmSys.Dispo
se(); } (9) 删除功能,双击“删除”按钮,在btnSysDel_Click函数中输入如下代码。 pr
ivate void btnSysDel_Click(object sender, EventArgs e) {
if (strSysEditID == "") { MessageBox.Show("请选择要
删除的记录!"); return; string strSQL = "delete Admin whe
re adminID=" + strSysEditID; int intCount = DbHelperSQL.Ex
ecuteNonQuery(strSQL); if (intCount > 0) {
MessageBox.Show("数据删除成功"); DataSysBind(); //界面显示数据刷新
} else { MessageBox.Show("数据删除失败!");
} }12.4.2 用户管理信息编辑界面设计数据编辑界面中对用户数据的添加、修改,如图12.9所示。图12
.9 数据编辑界面12.4.3 登录窗体的设计登录窗体是根据用户输入的用户名和密码,从数据库中判断是否含有此密码的用户,若含有
则登录成功,否则登录失败。如图12.10所示为用户登录界面。 图12.10 用户登录界面12.5 系统运行与调试12.5.1
调试方法系统调试主要采用动态测试,即通过有控制地运行程序,从多种角度观察程序运行时的行为,发现其中存在的错误。动态测试是为了发
现错误而执行程序,因此动态测试的关键是如何设计测试用例,通过有限的测试数据,尽可能多地发现程序中的错误。测试用例 测试用例由输入数
据与预期输出结果两部分组成。运行程序并输入测试数据,然后将得到的结果与预期数据比较,如果符合说明程序正确,否则程序有误。常用调试方
法白盒测试,也称结构测试,将软件看成是一个透明的盒子,按照程序的内部结构和处理逻辑来选定测试用例,对软件的逻辑路径及过程进行测试,
检查它与设计是否相符。黑盒测试,也称功能测试,将软件看成是黑盒子,在完全不考虑程序的内部结构和特性的情况下,测试软件的外部特性。1
2.5.2 调试过程单元测试联合测试确认测试系统测试 1.单元测试单元测试是对一个模块进行测试,根据模块的功能说明,检验模块是否
有错误,也称模块测试。这种测试在各模块编程后进行,一般由编程人员自己进行 。单元测试项目(1) 模块界面:调用时参数(流入数据)的
顺序和类型。(2) 内部数据结构:如初始值对不对,变量名称是否一致,共用数据是否有误。(3) 独立路径:是否存在不正确的计算、不正
确的循环及判断控制。(4) 错误处理:预测错误产生的条件通过实际运行检查预设错误处理是否正确。(5) 边界条件:对数据大小的界限和
判断条件的边界进行跟踪运行。2.联合测试各个模块单独执行可能无误,但组合起来相互产生影响,可能会出现意想不到的错误。因此要将整个系
统作为一个整体进行联调,这就是联合测试。 联合测试方法(1) 由上到下:设置下层模块为假模块,检查控制流,可较早发现错误,而不致于
影响到下层模块。但这种方法要制作的假模块太多,而且不能送回真实数据,可能发现不了内在的错误。(2) 由下到上:先设置上层模块为假模
块,测试下层模块执行的正确性,然后逐步向上推移。这种方法方便,设计简单,但要到测试的最后才能窥得全貌,有一定的风险。(3) 混合测
试:较好的方法是两者结合,高层由上到下,低层由下到上,到中层进行会合。由于自上而下和自下而上的方法各有优、缺点,混合式测试对上层模
块采用自上而下测试,较早显现程序总体轮廓;而对某些具有输入/输出功能或含有重要功能或复杂算法的关键分支,采用自下而上测试。3.确认
测试确认测试是检验系统说明书的各项功能与性能是否能实现,是否满足要求,因此又称为合格性测试或验收测试。验收测试的方法一般是列出一张
清单,左边是需求的功能,右边是发现的错误或缺陷。常见的验收测试有所谓的α测试和β测试,这两种测试都是由用户进行的,但前者是使用者在
应用系统开发所在地,有开发者参与,一同进行观察记录;后者是在使用环境中由用户独立进行。 4.系统测试系统测试是对整个系统的测试,将
硬件、软件、操作人员看做一个整体,检验它是否有不符合系统说明书的地方。这种测试可以发现系统分析和设计中的错误。系统测试要在系统的实
际运行环境中,在用户的直接参与下进行。 系统测试内容(1) 集成功能测试:设计测试用例,对整个系统的组合功能进行测试,要把重点放在
数据的输入、信息的存储和读写、数据通信、数据输出等几个方面,并应使若干功能并行工作,以验证集成后的功能是否协调。(2) 可靠性与适
应性测试:这是系统在现实环境中按实际设定的方式(周期、时间长度、最终用户操作等)运行,检验容错能力及其他可靠性与适应性程度。(3)
安全性测试:通过设计一些试图突破系统安全措施的测试用例,检验其安全保密措施的严密性。(4) 强度测试:这是使系统在资源的异常数量
、异常频率和异常批量的条件下运行,对系统的超负荷运行的测试。12.5.3 排错测试是为了发现程序存在的错误,排错是确定错误的位置
和性质,并改正错误。 (1) 试探法 (2) 跟踪法 (3) 对分查找法 (4) 归纳法 (5) 演绎法试探法分析错误的外在表
现形式,猜想程序故障的大概位置,采用一些简单的纠错技术,获得可疑区域的有关信息,判断猜想是否正确。经过多次试探,找到错误的根源。这
种方法与个人经验有很大关系。跟踪法对于小型程序,可采用跟踪法。跟踪法分正向跟踪和反向跟踪。正向跟踪是沿着程序的控制流,从头开始跟踪,逐步检查中间结果,找到最先出错的地方。反向跟踪是从发现错误症状的地方开始回溯,人工沿着控制流追踪程序代码,直到确定错误根源。对分查找法若已知程序中的变量在中间某点的预期正确值,则可以用赋值语句把变量置成正确值,运行程序看输出结果是否正确。若输出结果没有问题,说明程序错误在前半部分,否则在后半部分。然后对有错误的部分再用这种方法,逐步缩小查错的范围。归纳法从错误征兆的线索出发,分析这些线索之间的关系,确定错误的位置。首先要收集、整理程序运行的有关数据,分析出错的规律,在此基础上提出关于错误的假设,若假设能解释原始测试结果,说明假设得到证实;否则重新分析,提出新的假设,直到最终发现错误原因。演绎法分析已有的测试结果,设想所有可能的错误原因,排除不可能的、互相矛盾的原因。对余下的原因,按可能性的大小,逐个作为假设解释测试结果,直至找到错误原因。必要时,对列出的原因加以补充修正。12.6 小结应用程序设计过程需求分析概念结构设计数据库设计 功能模块设计 界面设计程序开发 系统调试与排错
献花(0)
+1
(本文系籽油荃面原创)