学籍管理系统的数据库编程!!

一.应用实例的分析和开发

详细说明:我们基于Windows DNA的思想,以学籍管理系统为背景,开发了一个应用系统。在该系统中,有关教务状态的事务逻辑由定制的COM组件处理,这些组件由动态网页通过ASP脚本调用。该系统在开发速度和软件质量上都优于用ASP脚本代替COM组件的方案。为了说明问题,我们通过一个定制的组件和ASP脚本的主要代码简单介绍一下本地功能的实现过程。

-在displayscore.asp页面中接受并识别用户的查询请求,并做出不同的查询处理。当客户的身份是教师或教务时,可以查询所有学生的成绩;当客户是学生时,只能查询学生自己的成绩。

-为查询处理自定义COM组件Score.dll。首先设计了组件的接口,为组件设置了四个属性:Subj(课程)、$ Term(课程的学期)、Class(查询班级)和Stu_No(查询学号);定义两个方法:RequeryScores和RequeryAllScores,分别处理教师、教务部门和学生的请求,并将查询结果集返回给用户。

-下面是实现组件Score.dll的一些关键代码。由此我们可以看到组件的接口是如何实现的:

选项显式

Private m_StuNo作为变体

Private m_Subj作为字符串

字符串形式的私有m_Term

字符串形式的私有m_Class

将属性设置为可写。

公共属性Let StuNo(ByVal vNewValue作为变量)

m_StuNo = vNewValue

结束属性

公共属性Let Subj(ByVal vNewValue作为变量)

m_Subj = vNewValue

结束属性

......

学生查询结果请求处理

公共函数RequeryScores()作为对象

Dim objContext作为MTxAS。对象上下文

Set objContext = GetObjectContext()

创建事务性程序集

Dim ObjConn As ADODB。关系

使用ADO访问数据库

Dim ObjRecordset As ADODB。记录集

Set ObjConn = New ADODB。关系

ObjConn。开“夏”、“仨”,”

Set ObjRecordset = New ADODB。记录集

将查询Dim为字符串

根据查询要求(查询所有课程,查询特定学期的所有课程、

查询指定课程,查询特定学期的某门课程)进行不同的查询操作。

If (m_Subj = "all "和m _ Term & lt& gt“所有”)然后

query="select客户端名称,客户端。客户端_否,课程.主题,

stu_score.score,stu_score.term,sub_type "

查询=查询& amp"来自客户,stu_score,课程"

查询=查询& amp“其中,客户端客户端编号=斯图客户端编号

而stu _ score . subject = courses . subject

和课程。term=stu_score.term

和课程。= ' " & ampm _ Term & amp'

和客户。Client _ no = ' " & ampm _ StuNo & amp"

如果…就会结束

......

ObjRecordset。打开查询,ObjConn

进行数据库查询

ObjContext。setcomplete

如果事务成功完成,提交事务。

RequeryScoresExit:

Set RequeryScores = ObjRecordset

返回查询结果集

退出功能

RequeryScoresErr:

设置RequeryScores =无

事务处理失败。

结束功能

教师教务查询结果请求处理

公共函数RequeryAllScores()作为对象

......

结束功能

-引用ASP页面的displayscore.asp中的组件。ASP代码如下(粗体部分是对组件的调用):

& lt% @ LANGUAGE = " VBSCRIPT " % & gt

& ltHTML & gt

& ltHEAD & gt

& ltMETA NAME = " GENERATOR " Content = " Microsoft

Visual InterDev 1.0 " >

& ltMETA HTTP-EQUIV="Content-Type "

content = " text/html;charset=gb_2312-80 " >

& ltTITLE & gt给老师看& lt/TITLE & gt;

& lt/HEAD & gt;

& ltBODY background="images/bk。GIF " & gt

& lt%

dim对象结果

set objResult=Server。CreateObject("显示。分数”)

模糊术语、主题

Term=Cstr(请求。形式(“期限”))

Subject=Cstr(请求。表单(“主题”))

objResult.term =请求。形式(“期限”)

objResult。Subj =请求表单("主题")

objresult.class =请求。表单(“类”)

模糊分数

设置分数=objResult。RequeryAllScores

% & gt

以下代码是显示处理的结果。

& ltdiv align="center " >& lt中心& gt

......

& lt表格border="0" cellpadding="0 "

cellspacing = " 1 " width = " 100 " >& lttr & gt

& lt%为I = 0到分数。fields . Count-1% & gt;

& lttd bgcolor="#004080 " >。

& ltstrong & gt& ltfont color = " # FFFFFF " & gt& ltsmall & gt

& lt% =分数(I)。Name % & gt& lt/font & gt;& lt/strong & gt;?& lt/TD & gt;

& lt%下一个

Do While(不是分数。EOF)% & gt;

& lt/tr & gt;& lttr & gt

& lt%为I = 0到分数。fields . Count-1% & gt;

& lttd bgcolor="#ACE8F9 " >。& ltp align="center " >

& lt%=分数(I)。Value % & gt& lt/TD & gt;

& lt%下一个

分数。MoveNext % & gt& lt/tr & gt;

& lt% Loop % & gt

& lt%分数。关闭

关闭数据库连接

设定分数=无

set objResult = Nothing % & gt

释放对象

& lt/table & gt;& lt/center & gt;& lt/div & gt;

& lt/BODY & gt;

& lt/HTML & gt;

可以想象,如果只使用ASP脚本进行业务处理,ASP页面中的代码会非常臃肿晦涩。使用组件的方案也比简单的ASP脚本更快。并且整个查询处理可以看作一个事务,以保证数据库信息的安全性和完整性。在MTS中注册该组件还可以避免多个用户访问该主页时可能导致的网络拥塞。在实际应用中,学生和教师具有不同的访问权限。在学生查询成绩的页面中,这个组件是可以重用的,只需要调用它不同的接口就可以了。只使用ASP脚本进行业务处理,需要重新编写类似displayscore.asp的代码,也比较繁琐。在开发过程中,不同的开发人员可以尽最大努力同时设计组件和ASP页面,缩短了软件开发周期。

-下面两张图是老师(教务)查询结果和显示查询结果的页面:

第二,开发过程中辅助工具的使用

-传统的软件工程需求分析和数据库设计都是由人“手工”完成,缺乏严谨性和标准化。在以构件为中心的系统分析和软件开发过程中,应努力使用有效的计算机辅助工具来满足快速建模和构件方法的需要,提高分析的质量和准确性。

-有许多辅助工具可用。因为以组件为中心的系统分析过程还保留着传统软件工程方法的痕迹,北大青鸟的CASE工具对于传统软件工程方法更有效,所以我们采用了这个工具。在数据库建模方面,我们选择了SYBASE公司的S-Designer,它可以自动将数据库的概念模型转化为物理模型。

-1.使用青鸟案例工具编写需求分析文档。

-长期以来,人们已经习惯于“人工”进行需求分析。在对现有系统和用户需求进行调查后,开发人员需要设计系统的数据流图(DFD图),编写小指令,设计系统的结构图(SC图)。但这种分析方法并不严谨,由于各种原因,在处理、数据流、文件中可能存在语法定义错误;数据流图的上下层不一致;数据流图分解后数据不平衡、文件名重复、文档不完整等各种问题,影响了我们对用户需求的分析和理解,阻碍了我们今后的工作。尤其是组件分析不当,后果不堪设想。

青鸟案例工具提供了一套工具来支持软件工程中需求分析和软件设计的传统结构化方法。工具生成的每个文件都是一个项目,每个项目包括两部分:数据流图和模块结构图:

数据流图部分协助系统分析师完成软件系统的需求分析,建立目标系统的需求模型,生成正确完整的目标系统描述文档;同时提供需求文档的查询、列表、分割、影响范围等分析功能,辅助软件设计人员深入、详细地分析和理解需求分析的结果,有利于软件设计。

模块结构图在需求分析阶段完成后,帮助程序员设计软件系统,支持模块的逐层细化,建立系统的软件架构,最终得到正确完整的软件设计文档。同时提供设计文档的查询、列表、切片、影响范围等分析功能,完成对设计成果文档深入细致的分析和理解,有利于软件开发和维护。在SC图中,已经看到了组件的规划方案,进一步细化会得到各组件的总体设计方案。

-以教务系统为例,青鸟案例工具生成的DFD图和SC图如下图所示:

-系统1层DFD图系统0层SC图

-2.使用S-Designer设计数据库。

-当系统的详细设计完成后,下一步是数据库设计。数据库设计在整个软件工程中起着重要的作用。不合理的数据库设计,不合理的数据有效存储,潜在的数据不一致、不完整或大量冗余,都会降低系统性能,甚至导致系统崩溃。

手工数据库设计完全取决于设计者的设计水平。设计者首先要根据实际需要建立几个逻辑上已经存在的数据库表,并使其满足第三范式;然后根据它们之间的关系,建立一个特定的数据库表来链接它们。这是一件相当繁琐的事情。数据库设计者不仅要设计数据库的逻辑,还要将逻辑模型转化为物理模型,设计出来的数据库不一定满足第三范式。合理的数据库表结构决定了访问数据库组件接口的设计质量,因此原有的数据库设计方法不适合以组件对象为中心的软件设计。

-以教务管理系统为例,S-Designer让数据库设计变得简单易行。设计人员只需根据实际需要设计数据库的E-R图即可。S-Designer会将逻辑模型转化为物理模型,为数据库表之间的关系创建一个新表,指明表的主代码和外部代码,并自动检查数据库表的一致性、冗余性和完整性,使数据库表满足第三范式。

-例子:首先可以设计数据库表课程和学生的逻辑模型:

-接下来,在课程和客户之间建立联系。S-Designer自动生成的物理模型,如下图所示,为访问库组件的界面设计提供了准确的依据。

相信随着软件工程的进一步成熟,将会有更多的计算机辅助工具来帮助软件开发者构建更加完善的应用系统。很多辅助软件工具都可以完成类似的任务,选择哪种辅助工具取决于这些工具的性能和用户的习惯。

以组件对象为中心的动态Web方法和DNA思想并非深不可测,开发技术也越来越规范。应该说,这种方法更适合客观信息结构的实际,更贴近人们的思维方式,其技术如行云流水般自然,非常适合在中小企业的环境中推广普及。