第8章 数据库应用系统设计实例习题解答

更新时间:2023-12-16 00:29:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第8章 数据库应用系统设计实例

习题解答

一. 简答题

1、 试述瀑布模型和原型模型的优缺点? 瀑布模型(Waterfall Model)

1970年WinSTon Royce提出了著名的\瀑布模型\,直到80年代早期,它一直是唯一被广泛采用的软件开发模型。

瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。

在瀑布模型中,软件开发的各项活动严格按照线性方式进行,当前活动接受上一项活动的工作结果,实施完成所需的工作内容。当前活动的工作结果需要进行验证,如果验证通过,则该结果作为下一项活动的输入,继续进行下一项活动,否则返回修改。

瀑布模型强调文档的作用,并要求每个阶段都要仔细验证。但是,这种模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于:

(1) 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;

(2) 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;

(3) 早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。

快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。

显然,快速原型方法可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果。

快速原型的关键在于尽可能快速地建造出软件原型,一旦确定了客户的真正需求,所建造的原型将被丢弃。因此,原型系统的内部结构并不重要,重要的是必须迅速建立原型,随之迅速修改原型,以反映客户的需求。

瀑布模型采用文档驱动,系统可能不满足客户的需求。

快速原型模型关注满足客户需求,可能导致系统设计差、效率低,难于维护。

2、 简述客户/服务器应用系统的开发过程?

1) 对应用系统进行分析,完成客户和服务器的功能划分 2) 架设服务器

3) 选择客户端开发工具和客户服务器连接中间件 4) 开发应用系统

164

3、 简述浏览器/服务器应用系统的开发过程? 1) 规划Web站点 2) 安装Web服务器 3) 构建或虚拟网络环境 4) 开发Web站点 5) 发布Web站点 二.选择题

1、软件工程的出现主要是由于 C 。

(A)程序方法学的影响 (B)其他工程科学影响 (C)软件危机的出现 (D)计算机的发展

2、需求分析系统分析员和用户共同确定软件的功能和限制,提出 A 、 B 、 C 。 (A)可行性研究报告 (B)数据字典 (C)系统功能说明书 (D)实施方案

3、瀑布模型是一种 B 。

(A)软件维护模型 (B)软件生命期模型 (C)软件生命周期 (D)程序设计方法学

4、软件测试的目的是 B 。

(A)改正错误 (B)发现错误 (C)推断错误原因 (D)修改程序

5、数据流图是用于 C 阶段的工具? (A)可行性分析 (B)详细设计 (C)需求分析 (D)程序编码

6、软件生命周期中,用户参与主要在 A 。 (A)软件定义期 (B)软件开发期

(C)软件维护期 (D)整个软件生命周期过程中

7、在软件工程方法中,常使用的两种软件开发模型是瀑布模型和原型模型,这两者的差别和联系有: A 。

(1)前提和假设不同 (2)方法相互补充 (3)方法相互排斥 (4)前提和假设相同

试给出最正确的组合结论选择

165

(A) (1)、(2) (B) (4)、(3) (C) (4)、(2) (D) (1)、(3)

三.应用题

1、 参考本章宾馆信息管理系统的分析和设计过程,分析并设计一个高校人事管理系统,具备人员入校

(毕业分配、调入等)、出校(调出、退体等)、基本情况查询和报表打印等功能。

毕业生 信息录入 审核 调入人员 查询 人事处 打印 退休处理 人事档案 退休人员 调离 调离人员

职工号 姓名 性别 民族 出生日期 身份证号 籍贯 政治面貌 毕业院校 所学专业 毕业时间 最高学历 最高学位 调入时间 调离时间 退休时间

char(10) varchar(20) char(2) varchar(20) datetime char(18) varchar(20) varchar(20) varchar(50) varchar(50) datetime varchar(20) varchar(20) datetime datetime datetime 166

not null primary key not null not null 2、 参考本章图书网上销售系统的分析和设计过程,分析并设计一个全校选修课报名管理系统。

教师号 任课老师 password 1 n 教 师 指 导 学生 所属系 M n 讲 授 联系方式 选 修 N m 课程号 选修课 课程名 教师号 已招人数 课程介绍 课时 任课老师 学分 所属系 限招人数

1) 管理员(admin):在admin表中存放管理员信息。

2)课程信息表(class):在class表中存放与课程内容相关的信息。 3)选课记录表(grade):在grade表中存储每一名学生选课记录。 4)学生信息表(student):在student表中存放学生个人信息。 5)教师表(teacher):在teacher表中存放教师个人信息。

学号 学生名 password 班级 系别 结束时间 开课时间 公共函数

创建数据库连接(Connection):

本系统先建立一个连接数据库的函数文件,然后再调用此文件,以方便在各个页面中的实现对数据库的访问。

链接用以保持一些关于正在访问的数据的一些状态信息,以及链接者信息。ASP文件中如果要访问数据,必须首先创建与数据库的链接的函数,其语法如下:

167

Function GetSQLServerConnection( Computer, UserID, Password, Db ) Dim Params, conn

Set GetSQLServerConnection = Nothing Params = \

Params = Params & \ Params = Params & \ Params = Params & \ Params = Params & \

Set conn = Server.CreateObject(\ conn.Open Params

Set GetSQLServerConnection = conn End Function

此函数创建了链接对象Conn,打开链接,为“Params”。

创建数据对象(RecordSet)

ADO中的数据对象通常保存的是查询结果。RecordSet是ADO中最复杂的对象,有许多属性和方法。RecordSet保存的是一行行的记录,并标有一个当前记录。以下是创建函数: Function GetSQLServerRecordset( conn, source ) Dim rs

Set rs = Server.CreateObject(\ rs.Open source, conn, 2, 2

Set GetSQLServerRecordset = rs End Function

Function GetSQLServerStaticRecordset( conn, source ) Dim rs

Set rs = Server.CreateObject(\ rs.Open source, conn, 3, 2

Set GetSQLServerStaticRecordset = rs End Function 其中 set rs=server.CreateObject(\这条语句创建了对象RecordSet, rs是一个字串,代表一条标准的SQL语句。例如:set rs=conn.Execute(\其中Conn是先前创建的链接对象,这条语句执行后,对象RecordSet中就保存了表 grade中的所有记录。

操作数据库

通过调用链接对象的Execute方法来将查询结果返回给一个数据对象或进行添加、删除等操作。例如:

sql=\(“学号”) values('\\学号\

168

conn.execute(sql) ********/执行添加操作

sql=\“学号”=\学号\conn.execute(sql) ********/执行删除操作

关闭数据对象和链接对象

在使用了ADO对象之后要关闭它,因为它使用了一定的服务器资源。通过调用函数文件实现关闭,然后再释放它。

Function GetSQLServerRs( Computer, UserID, Password, Db, source, Cursor ) Dim conn, rs

On Error Resume Next Set GetSQLServerRs = Nothing

Set conn = GetSQLServerConnection( Computer, UserID, Password, Db ) If conn Is Nothing Then Exit Function

Set rs = Server.CreateObject(\ If Err.Number <> 0 Then Exit Function rs.Open source, conn, Cursor, 2 If Err.Number <> 0 Then Exit Function Set GetSQLServerRs = rs

End Function **********/关闭创建的数据对象及链接对象/*********

模块详解

登录分析:

<% if (Request(\ (request(\ response.write\请输入密码或用户名\else If Request(\

Set conn = GetSQLServerConnection( \

Set rs = GetSQLServerStaticRecordset(conn, \ ***/如果当学生用户输入相关登录身份时,连接数据库,并打开student表 /*** <% i=0

while not (rs.eof or i=1) ***/如果该身份在记录中存在,将获得的“id”传递给打开的记录集rs(2),

if rs(2)=request(\ 并且与该记录集中的“password”字段对应的内容做比较/*** if request(\ end if

rs.movenext

169

wend

if i=1 then

rs.moveprevious ***/如果用户名与密码相匹配,那么显示“id欢迎你的到来”/*** response.Write request(\

response.write \欢迎你的到来

\

session(\ ***/并且把rs(2)中对应的内容传递给对象(session(“id”)),

在下面页面跳转中该变量不会改变。/***

Else response.write\用户名错误或密码错误\ ***/否则登录失败/***

end if %>

开课情况与选课内容分析:

<% if rs2.eof<>true then

sql=\学号='\ set rs5 =server.CreateObject(\

rs5.open sql,conn,1,1 ***/根据学生登录身份,打开该学生的选课记录表/*** i=rs5.recordcount

if i>=5 then %> ***/判断记录集是否超过5条/***

<% else if rs3.eof=true then ***/否则,有权行选课操作。但需要有以下几个约束条件。

当前所选的课程号不能与记录集中的相同。/***

if date>=rs(2) then ***/当前选课时间要符合开课时间和结束选课时间的要求。

/***

if rs(0)

rs3.addnew ***/若满足以上几个约束条件,那么从rs(选课表)中获取相关课程 rs3(2)=rs2(0) 内容添加到rs3记录集中(学生选课记录表)。/*** rs3(1)=request(\课程号\ ……………. ……………. rs3(4)=rs2(4) rs3.update rs(0)=rs(0)+1 ***/在学生选课成功后,对于选课表中的“实招人数”一栏要做相 rs.update 应的修改。/*** response.write \选课成功
\ ***/然后,显示“选课成功”,并提示你已有几条选

170

response.write \你已选了\ 课记录。/*** response.Write\ response.write \门课
\ response.write \返回\ else %> <% end if else %> ***/否则一一提示没能成功选课的理由,让用户容易明白失败的原因,这在 script language=\ 代码中能直接反应,这里不做解释/*** MsgBox \对不起,该课程已报满!\ history.back() <% end if

Else %> <% end if Else

response.write \你已经选了这门课返\ end if end if end if %>

选课记录:

<% For i=0 to rs3.Fields.Count-1

Response.Write \ Next

while not rs3.eof ***/根据session(\的传递,在学生选课记录表中找出对应的

response.Write \ 记录集,并通过循环的方式在页面中显示数据库的内容:

response.Write rs3(0) 学生名,课程名,课程号,班级,系别等/*** …………………. …………………. ………………….

171

response.Write \ response.Write rs3(4)

response.Write \ %> rs3.movenext wend %>

学生报名管理: <%

dim stu stu=\student.学生名, class.课程名, student.班级,student.系别 FROM student

INNER JOIN grade ON student.学号 = grade.学号 INNER JOIN class ON grade.课程号 = class.课程号 WHERE class.任课老师='\ Set conn = GetSQLServerConnection( \ Set rs = GetSQLServerStaticRecordset(conn, stu) if rs.eof then response.write \华文行楷>\ response.Write \对不起暂时还没有学生选你的课程如有意见请跟管理员联系\ response.write \ else session(\%>

***/通过student表中的学号与grade表中的学号连接使得student表与grade表相连,同时grade表中的课程号与class表中的课程号连接使得grade表与class表相连。然后,又通过session的变量“teacher”传递登录教师名。打开符合上述几个条件的记录集,如果找不到与上述几条相符的记录集,那么显示“对不起暂时还没有学生选你的课程如有意见请跟管理员联系”/*** <%

For i=0 to rs.Fields.Count-1

Response.Write \ Next

Response.Write \【删除此学生】【打印】\ while not rs.eof response.Write \ ***/ 用循环的方式将对应的记集在页面中显示出来,并且在 response.Write rs(0) 每一条记录后增加【删除此学生】与【打印】的链接/*** ……………… ………………

172

response.Write rs(3) response.Write \ %> rs.movenext wend %>

【打印】

此功能本系统中巧妙的运用了ASP中调用word打印语句实现打印功能。这一设计简单又有效。 <%

dim stu

stu=\学生名, class.课程名, student.班级,student.系别 FROM student INNER JOIN grade ON student.学号 = grade.学号 INNER JOIN class ON grade.课程号 = class.课程号 WHERE class.任课老师='\

Set conn = GetSQLServerConnection( \Set rs = GetSQLServerStaticRecordset(conn, stu) %> <%

Response.ContentType =\

response.AddHeader \%>

***/通过用SQL内联语句找出符合打印的的记录集,然后调用ASP中通过连接word打印的语句准备打印。/*** <%

For i=0 to rs.Fields.Count-1

Response.Write \ Next while not rs.eof response.Write \ response.Write rs(0) ………………….. ***/在WORD页面中,通过用循环打印的方式,将符合条件的记录

………………….. 集打印出来/*** ………………….. response.Write \ %> <% rs.movenext wend

173

%>

【删除】

主要用到request对象的session数据集合来获取searchuser与class的值。这里涉及到三张表:student,class,grade。通过rs.delete,rs.update达到实现效果。 主要代码与解释: <% dim stu

stu=\grade.* FROM grade INNER JOIN student ON student.学号 = grade.学号

INNER JOIN class ON grade.课程号= class.课程号 WHERE student.学生名= '\课程名 = '\ Set conn = GetSQLServerConnection( \ Set rs = GetSQLServerStaticRecordset(conn, stu) if not rs.eof then rs.delete rs.update %>

***/通过对象session中的变量searchuser与class传递,找到合乎该条件的记录,如果存在,那么就用rs.delete删除,接着用rs.update刷新数据库中的记录集。完成该项删除工作。/***

课程管理:

本系统合理安排选修课课程是学生能选好选课的前期。这一操作由管理员来担任。管理员能动态开设选修课,根据学生选课意向可以增设受学生青睐的课程,对一些学生感兴趣的课程,由于报名人数众多,可以适当的调整上课地点,以满足广大学生的需要。而对于那些在学生中没多大“市场”的课程,为节省教学设备资源,可以换用小教室开设,如此一来既放弃小数有热情学习该课程的学生,又能将大场地给予对其它课程有热情的更多的学生。 课程管理首页中部分主要代码: <%

dim stu

stu=\

Set conn = GetSQLServerConnection( \Set rs = GetSQLServerStaticRecordset(conn, stu) %>

***/打开class表,下面所有操作需要在这表中进行/***

174

***/该页面上提供了直接【增加课程】功能,只要在上面点击,就连接到【增加课程】的操作页面上,操作十分直观。/*** <%

For i=0 to rs.Fields.Count-1

Response.Write \ Next

Response.Write \【删除】【删除】\while not rs.eof

response.Write \ For i=0 to rs.Fields.Count-1 response.Write \response.Write rs(i) response.Write \next %>

***/如果打开的class表中有记录,那么先循环打印该表中所有的字段作为表头,按行从左到右打印。表中的字段打印完必后,再在添加上【删除】与【修改】完善表头。/***

<%

rs.movenext wend %>

***/然后,在按数据库表中的对应内容同样通过循环的方式打印,并且在每一行中添加【删除】【修改】,对此【删除】【修改】使用链接,使用户操作极其容易。/*** 【增加】

本页面在设计时对于添加的像“任课老师”、“教师号”均是动态的。可以通过下拉菜单来选择可选的任课老师和对应的教师号,这样既提高操作速度,又不会造成数据错误。 <% dim stu,stu2 Set conn = GetSQLServerConnection( \ stu=\任课老师 FROM teacher\ Set rs = GetSQLServerStaticRecordset(conn, stu) stu2=\教师号 FROM teacher\ Set rs2 = GetSQLServerStaticRecordset(conn, stu2) %>

***/打开含有存储任课老师和教师号的表:teacher, 以便在下拉菜单中做选择。/***

175

<%

while not rs2.eof

response.write \response.write rs2(0)

response.write \rs2.movenext wend %>

***/将teacher表中的字段为“教师号”所对应的值传递给

***/将要增加的内容输入完毕后,发送表单到\实现对增加的效果。/*** 处理增加页面主要代码: <%

Set conn = GetSQLServerConnection( \Set rs = GetSQLServerStaticRecordset(conn, \if request(\rs.addnew

rs(0)=request(\课程号\ ………………………. ………………………. ……………………….

rs(11)=request(\课程介绍\rs.update end if %>

***/此程式通过用request对象中的form数据集合来从用户端获取用户输入的内容如课程号,课程名,任课老师……等等在表class中有的字段,然后用rs.addnew将上个页面所增设内容

176

添加到表class中/*** 【修改】

课程修改功能主要用到request对象的querystring数据集合来获取“课程号”,来进行值传递。“课程号”是唯一的,因此用它来索引记录集,在del_setgrade.asp页面上实现对表class中值的修改。

主要代码及部分解释: <%

dim str str=\课程号 = '\课程号\ Set conn = GetSQLServerConnection( \ Set rs = GetSQLServerStaticRecordset(conn, str)

***/通过request(“课程号”)传递值,打开对应的记录集。/*** if rs.eof then response.write \华文行楷>修改失败\***/如果该记录集为空,显示“修改失败”。/***

else rs(0)=request(\课程号\ ………………………..

……………………….. ……………………….. rs(11)=request(\课程介绍\ rs.update response.write \华文行楷>修改成功\ response.redirect(\ end if %>

***/如果有记录集,那么通过request将“课程号”、“课程名”、\教师号\、\任课老师\、\所属系\、\开课时间\、\开课时间\、\结束时间\、\课时\、\学分\、\限招人数\、\已招人数\、\课程介绍\等都传递给class表中相对应的值。并且用rs.update做一下刷新,数据库中的数据被更新。/*** 【删除】

主要用到request对象传递classnum的值。通过rs.delete,rs.update使表class实现删除效果。 主要代码与解释: <% dim str str=\课程号 = '\ Set conn = GetSQLServerConnection( \ Set rs = GetSQLServerStaticRecordset(conn, str) if rs.eof then

177

response.Write(\删除不成功\ else rs.delete rs.update %>


<% end if %>

***/通过对象request中的变量classnum(指课程号)传递值,找到合乎该条件的记录,如果存在,那么就用rs.delete对该记录做删除,接着用rs.update刷新数据库中的记录集,并在页面上显示:删除成功,完成该项删除工作。如果不存在,那么显示:删除不成功。/***

178

本文来源:https://www.bwwdw.com/article/awi5.html

Top