第8章 数据库应用系统设计实例习题解答.docx
- 文档编号:16302373
- 上传时间:2023-07-12
- 格式:DOCX
- 页数:22
- 大小:73.31KB
第8章 数据库应用系统设计实例习题解答.docx
《第8章 数据库应用系统设计实例习题解答.docx》由会员分享,可在线阅读,更多相关《第8章 数据库应用系统设计实例习题解答.docx(22页珍藏版)》请在冰点文库上搜索。
第8章数据库应用系统设计实例习题解答
第8章数据库应用系统设计实例
习题解答
一.简答题
1、试述瀑布模型和原型模型的优缺点?
瀑布模型(WaterfallModel)
1970年WinSTonRoyce提出了著名的"瀑布模型",直到80年代早期,它一直是唯一被广泛采用的软件开发模型。
瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
在瀑布模型中,软件开发的各项活动严格按照线性方式进行,当前活动接受上一项活动的工作结果,实施完成所需的工作内容。
当前活动的工作结果需要进行验证,如果验证通过,则该结果作为下一项活动的输入,继续进行下一项活动,否则返回修改。
瀑布模型强调文档的作用,并要求每个阶段都要仔细验证。
但是,这种模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于:
(1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;
(2)由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;
(3)早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。
快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。
通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。
显然,快速原型方法可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果。
快速原型的关键在于尽可能快速地建造出软件原型,一旦确定了客户的真正需求,所建造的原型将被丢弃。
因此,原型系统的内部结构并不重要,重要的是必须迅速建立原型,随之迅速修改原型,以反映客户的需求。
瀑布模型采用文档驱动,系统可能不满足客户的需求。
快速原型模型关注满足客户需求,可能导致系统设计差、效率低,难于维护。
2、简述客户/服务器应用系统的开发过程?
1)对应用系统进行分析,完成客户和服务器的功能划分
2)架设服务器
3)选择客户端开发工具和客户服务器连接中间件
4)开发应用系统
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)前提和假设相同
试给出最正确的组合结论选择
(A)
(1)、
(2)(B)(4)、(3)
(C)(4)、
(2)(D)
(1)、(3)
三.应用题
1、参考本章宾馆信息管理系统的分析和设计过程,分析并设计一个高校人事管理系统,具备人员入校(毕业分配、调入等)、出校(调出、退体等)、基本情况查询和报表打印等功能。
职工号
char(10)
notnull
primarykey
姓名
varchar(20)
notnull
性别
char
(2)
民族
varchar(20)
出生日期
datetime
身份证号
char(18)
notnull
籍贯
varchar(20)
政治面貌
varchar(20)
毕业院校
varchar(50)
所学专业
varchar(50)
毕业时间
datetime
最高学历
varchar(20)
最高学位
varchar(20)
调入时间
datetime
调离时间
datetime
退休时间
datetime
2、
参考本章图书网上销售系统的分析和设计过程,分析并设计一个全校选修课报名管理系统。
1n
Mn
Nm
1)管理员(admin):
在admin表中存放管理员信息。
2)课程信息表(class):
在class表中存放与课程内容相关的信息。
3)选课记录表(grade):
在grade表中存储每一名学生选课记录。
4)学生信息表(student):
在student表中存放学生个人信息。
5)教师表(teacher):
在teacher表中存放教师个人信息。
公共函数
创建数据库连接(Connection):
本系统先建立一个连接数据库的函数文件,然后再调用此文件,以方便在各个页面中的实现对数据库的访问。
链接用以保持一些关于正在访问的数据的一些状态信息,以及链接者信息。
ASP文件中如果要访问数据,必须首先创建与数据库的链接的函数,其语法如下:
FunctionGetSQLServerConnection(Computer,UserID,Password,Db)
DimParams,conn
SetGetSQLServerConnection=Nothing
Params="Provider=SQLOLEDB.1"
Params=Params&";DataSource="&Computer
Params=Params&";UserID="&UserID
Params=Params&";Password="&Password
Params=Params&";InitialCatalog="&Db
Setconn=Server.CreateObject("ADODB.Connection")
conn.OpenParams
SetGetSQLServerConnection=conn
EndFunction
此函数创建了链接对象Conn,打开链接,为“Params”。
创建数据对象(RecordSet)
ADO中的数据对象通常保存的是查询结果。
RecordSet是ADO中最复杂的对象,有许多属性和方法。
RecordSet保存的是一行行的记录,并标有一个当前记录。
以下是创建函数:
FunctionGetSQLServerRecordset(conn,source)
Dimrs
Setrs=Server.CreateObject("ADODB.Recordset")
rs.Opensource,conn,2,2
SetGetSQLServerRecordset=rs
EndFunction
FunctionGetSQLServerStaticRecordset(conn,source)
Dimrs
Setrs=Server.CreateObject("ADODB.Recordset")
rs.Opensource,conn,3,2
SetGetSQLServerStaticRecordset=rs
EndFunction
其中setrs=server.CreateObject("adodb.recordset")这条语句创建了对象RecordSet,rs是一个字串,代表一条标准的SQL语句。
例如:
setrs=conn.Execute("select*fromgrade")其中Conn是先前创建的链接对象,这条语句执行后,对象RecordSet中就保存了表grade中的所有记录。
操作数据库
通过调用链接对象的Execute方法来将查询结果返回给一个数据对象或进行添加、删除等操作。
例如:
sql="insertintostudent(“学号”)values('"&request.form("学号")&"')"
conn.execute(sql)********/执行添加操作
sql="deletefromstudentwhere“学号”="&request.querystring("学号")
conn.execute(sql)********/执行删除操作
关闭数据对象和链接对象
在使用了ADO对象之后要关闭它,因为它使用了一定的服务器资源。
通过调用函数文件实现关闭,然后再释放它。
FunctionGetSQLServerRs(Computer,UserID,Password,Db,source,Cursor)
Dimconn,rs
OnErrorResumeNext
SetGetSQLServerRs=Nothing
Setconn=GetSQLServerConnection(Computer,UserID,Password,Db)
IfconnIsNothingThenExitFunction
Setrs=Server.CreateObject("ADODB.Recordset")
IfErr.Number<>0ThenExitFunction
rs.Opensource,conn,Cursor,2
IfErr.Number<>0ThenExitFunction
SetGetSQLServerRs=rs
EndFunction**********/关闭创建的数据对象及链接对象/*********
模块详解
登录分析:
<%if(Request("submit")<>Emptyand(request("id")=""orrequest("password")=""))then
response.write"
elseIfRequest("submit")<>EmptyThen
Setconn=GetSQLServerConnection("(local)","sa","sa","netclass")
Setrs=GetSQLServerStaticRecordset(conn,"student")%>
***/如果当学生用户输入相关登录身份时,连接数据库,并打开student表/***
<%i=0
whilenot(rs.eofori=1)***/如果该身份在记录中存在,将获得的“id”传递给打开的记录集rs
(2),
ifrs
(2)=request("id")then并且与该记录集中的“password”字段对应的内容做比较/***
ifrequest("password")=rs
(1)theni=1
endif
rs.movenext
wend
ifi=1then
rs.moveprevious***/如果用户名与密码相匹配,那么显示“id欢迎你的到来”/***
response.Writerequest("id")
response.write"欢迎你的到来
"session("id")=rs
(2)***/并且把rs
(2)中对应的内容传递给对象(session(“id”)),在下面页面跳转中该变量不会改变。
/***
Elseresponse.write"
endif%>
开课情况与选课内容分析:
<%ifrs2.eof<>truethen
sql="select*fromgradewhere学号='"&session("id")&"'"
setrs5=server.CreateObject("adodb.recordset")
rs5.opensql,conn,1,1***/根据学生登录身份,打开该学生的选课记录表/***
i=rs5.recordcount
ifi>=5then%>***/判断记录集是否超过5条/***
MsgBox"你已修满课程,不能再修了!
"
history.back()
<%elseifrs3.eof=truethen***/否则,有权行选课操作。
但需要有以下几个约束条件。
当前所选的课程号不能与记录集中的相同。
/***
ifdate>=rs
(2)then***/当前选课时间要符合开课时间和结束选课时间的要求。
/***
ifrs(0) (1)then ***/选择的课程中不能选报已被报满的课程。 /*** ifdate 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"选课成功 response.write"你已选了" 课记录。 /*** response.Write""&i+1&"" response.write"门课 response.write" else%> MsgBox"你来迟哦,已错过选课时间! " history.back() <%endif else%> ***/否则一一提示没能成功选课的理由,让用户容易明白失败的原因,这在 scriptlanguage="vbscript"> 代码中能直接反应,这里不做解释/*** MsgBox"对不起,该课程已报满! " history.back() <%endif Else%> MsgBox"你早到啦,还没开始选课呢! " history.back() <%endif Else response.write" endif endif endif%> 选课记录: <%Fori=0tors3.Fields.Count-1 Response.Write" Next whilenotrs3.eof ***/根据session("id")的传递,在学生选课记录表中找出对应的 response.Write" response.Writers3(0)学生名,课程名,课程号,班级,系别等/*** …………………. …………………. …………………. response.Write" response.Writers3(4) response.Write" rs3.movenext wend%> 学生报名管理: <% dimstu stu="SELECTstudent.学生名,class.课程名,student.班级,student.系别FROMstudentINNERJOINgradeONstudent.学号=grade.学号INNERJOINclassONgrade.课程号=class.课程号WHEREclass.任课老师='"&session("teacher")&"'" Setconn=GetSQLServerConnection("(local)","sa","sa","netclass") Setrs=GetSQLServerStaticRecordset(conn,stu) ifrs.eofthen response.write" response.Write"对不起暂时还没有学生选你的课程如有意见请跟管理员联系" response.write" else session("class")=rs (1) %> ***/通过student表中的学号与grade表中的学号连接使得student表与grade表相连,同时grade表中的课程号与class表中的课程号连接使得grade表与class表相连。 然后,又通过session的变量“teacher”传递登录教师名。 打开符合上述几个条件的记录集,如果找不到与上述几条相符的记录集,那么显示“对不起暂时还没有学生选你的课程如有意见请跟管理员联系”/*** <% Fori=0tors.Fields.Count-1 Response.Write" Next Response.Write" whilenotrs.eof response.Write" response.Writers(0) 每一条记录后增加【删除此学生】与【打印】的链接/*** ……………… ……………… response.Writers(3) response.Write" %> rs.movenext wend %> 【打印】 此功能本系统中巧妙的运用了ASP中调用word打印语句实现打印功能。 这一设计简单又有效。 <% dimstu stu="SELECTstudent.学生名,class.课程名,student.班级,student.系别FROMstudentINNERJOINgradeONstudent.学号=grade.学号INNERJOINclassONgrade.课程号=class.课程号WHEREclass.任课老师='"&session("teacher")&"'" Setconn=GetSQLServerConnection("(local)","sa","sa","netclass") Setrs=GetSQLServerStaticRecordset(conn,stu) %> <% Response.ContentType="application/msword" response.AddHeader"content-disposition","inline: filename=report.doc" %> ***/通过用SQL内联语句找出符合打印的的记录集,然后调用ASP中通过连接word打印的语句准备打印。 /*** <% Fori=0tors.Fields.Count-1 Response.Write" Next whilenotrs.eof response.Write" response.Writers(0) …………………..***/在WORD页面中,通过用循环打印的方式,将符合条件的记录 …………………..集打印出来/*** ………………….. response.Write" %> <% rs.movenext wend %> 【删除】 主要用到request对象的session数据集合来获取searchuser与class的值。 这里涉及到三张表: student,class,grade。 通过rs.delete,rs.update达到实现效果。 主要代码与解释: <% dimstu stu="SELECTgrade.*FROMgradeINNERJOINstudentONstudent.学号=grade.学号INNERJOINclassONgrade.课程号=class.课程号WHEREstudent.学生名='"&request("searchuser")&"'ANDclass.课程名='"&session("class")&"'" Setconn=GetSQLServerConnection("(local)","sa","sa","netclass") Setrs=GetSQLServerStaticRecordset(conn,stu) ifnotrs.eofthen rs.delete rs.update %> ***/通过对象session中的变量searchuser与class传递,找到合乎该条件的记录,如果存在 如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
" ***/然后,显示“选课成功”,并提示你已有几条选
"" 记录集,并通过循环的方式在页面中显示数据库的内容: " "%>"***/用循环的方式将对应的记集在页面中显示出来,并且在 "" "