教务系统数据库设计案例(学籍管理系统 数据库程序编写!!)

本文目录
学籍管理系统 数据库程序编写!!
一. 应用实例的分析与开发
---- 我们以学籍管理系统为背景,基于Windows DNA的思想,开发了一套应用系统。在该系统中,有关教务学籍的事务逻辑都是由定制COM组件来处理的,动态Web页面通过ASP脚本调用这些组件。系统在开发速度和软件质量等方面都优于不用COM组件而仅用ASP脚本的方案。为说明问题,我们通过一个定制组件和ASP脚本的主要代码简单介绍局部功能的实现过程。
---- 在displayscore.asp页面中接受、辨别用户的查询请求,做出不同的查询处理。当客户的身份为教师或教务时,可以查询所有学生的成绩;当客户的身份为学生时,只能查询该生本人的成绩。
---- 定制COM组件Score.dll进行查询处理。首先设计该组件的接口,为组件设置四个属性: Subj(课程)、Term(课程所属学期)、Class(查询的班级)和Stu_No(查询学生的学号);定义两个方法:RequeryScores和RequeryAllScores,分别对教师、教务部门和学生的请求做出相应的处理,并将查询结果集返回给用户。
---- 以下是实现该组件Score.dll的部分关键代码。从中我们可以看到组件的接口是如何实现的:
Option Explicit
Private m_StuNo As Variant
Private m_Subj As String
Private m_Term As String
Private m_Class As String
’ 设置属性为可写入的
Public Property Let StuNo(ByVal vNewValue As Variant)
m_StuNo = vNewValue
End Property
Public Property Let Subj(ByVal vNewValue As Variant)
m_Subj = vNewValue
End Property
......
’ 学生查询成绩请求处理
Public Function RequeryScores() As Object
Dim objContext As MTxAS.ObjectContext
Set objContext = GetObjectContext()
’ 建立事务性组件
Dim ObjConn As ADODB.Connection
’ 利用ADO访问数据库
Dim ObjRecordset As ADODB.Recordset
Set ObjConn = New ADODB.Connection
ObjConn.Open "xia", "sa", ""
Set ObjRecordset = New ADODB.Recordset
Dim query As String
’ 根据查询要求(查询所有课程、查询特定学期的所有课程、
查询指定课程、查询特定学期的某一课程)进行不同的查询操作
If (m_Subj = "all" And m_Term 《》 "all") Then
query="select Client_Name,Client.Client_No,Courses.subject,
stu_score.score,stu_score.term,sub_type"
query = query & " from client,stu_score,courses"
query=query&"where client.client_no=stu_score.client_no
and stu_score.subject=courses.subject
and courses.term=stu_score.term
and courses.term=’" & m_Term & "’
and Client.Client_no=’" & m_StuNo & "’"
End If
......
ObjRecordset.Open query, ObjConn
’ 进行数据库查询
ObjContext.SetComplte
’ 若事务成功完成,则提交该事务
RequeryScoresExit:
Set RequeryScores = ObjRecordset
’ 返回查询结果集
Exit Function
RequeryScoresErr:
Set RequeryScores=Nothing
’ 事务失败处理
End Function
’ 教师、教务查询成绩请求处理
Public Function RequeryAllScores() As Object
......
End Function
---- 在ASP页面displayscore.asp中引用组件,ASP代码如下(其中加粗的部分便是对该组件的调用):
《 %@ LANGUAGE="VBSCRIPT" % 》
《 HTML 》
《 HEAD 》
《 META NAME="GENERATOR" Content="Microsoft
Visual InterDev 1.0" 》
《 META HTTP-EQUIV="Content-Type"
content="text/html; charset=gb_2312-80" 》
《 TITLE 》Show To Teacher《 /TITLE 》
《 /HEAD 》
《 BODY background="images/bk.GIF" 》
《 %
dim objResult
set objResult=Server.CreateObject("Display.Score")
dim Term,Subject
Term=Cstr(Request.Form("Term"))
Subject=Cstr(Request.Form("Subject"))
objResult.term=Request.Form("term")
objResult.Subj=RequestForm("Subject")
objresult.class=Request.Form("Class")
dim Scores
set Scores=objResult.RequeryAllScores
% 》
’ 以下代码为显示处理的结果
《 div align="center" 》《 center 》
......
《 table border="0" cellpadding="0"
cellspacing="1" width="100" 》《 tr 》
《 %For I = 0 To Scores.Fields.Count - 1% 》
《 td bgcolor="#004080" 》
《 strong 》《 font color="#FFFFFF" 》 《 small 》
《 %=scores(I).Name% 》《 /font 》 《 /strong 》 《 /td 》
《 %NEXT
Do While (Not Scores.EOF)% 》
《 /tr 》《 tr 》
《 % For I = 0 To Scores.Fields.Count - 1% 》
《 td bgcolor="#ACE8F9" 》《 p align="center" 》
《 %= Scores(I).Value% 》《 /td 》
《 %Next
Scores.MoveNext% 》《 /tr 》
《 %Loop% 》
《 %Scores.close
’ 关闭数据库连接
set Scores=Nothing
set objResult=Nothing % 》
’ 释放对象
《 /table 》《 /center 》《 /div 》
《 /BODY 》
《 /HTML 》
---- 可以想象,如果仅使用ASP脚本进行业务处理就会使ASP页面中代码十分臃肿、晦涩。而使用组件的方案也较单纯的ASP脚本执行速度速度快。并且可以将整个查询处理作为一个事务,保证数据库信息的安全、完整。将该组件在MTS中注册,又可避免多用户访问该主页时可能造成的网络拥塞。实际应用中,学生和教师的使用权限是不同的。在学生查询成绩的页面中,可重用该组件,只是调用其不同的接口而已。仅使用ASP脚本进行业务处理,则需重新编写与displayscore.asp类似的、同样烦琐的代码。在开发过程中,不同的开发人员可各尽所能,同时进行组件和ASP页面的设计,缩短了软件开发周期。
---- 以下两图显示的是教师(教务)查询成绩和显示查询结果的页面:
二. 开发过程中辅助工具的使用
---- 传统的软件工程进行的需求分析、数据库设计等都是人们“纯手工”完成的,缺乏严谨性和规范性。而在以组件为中心的系统分析和软件开发过程中,应力争使用有效的计算机辅助工具,以适应快速建模和组件方法新形势的需要,提高分析的质量及精度。
---- 有很多辅助工具可以利用。由于以组件为中心的系统分析过程仍保留着传统软件工程方法的脉络痕迹,北大青鸟的CASE工具对传统的软件工程方法比较有效,我们采用了这一工具。在数据库建模方面,我们选用了SYBASE 公司的S-Designer,可将数据库概念模型自动转化为物理模型。
---- 1. 利用青鸟CASE工具编写需求分析文档
---- 长久以来,人们已习惯于“纯手工”地进行需求分析。开发人员对现有系统和用户要求进行调查后,需要设计系统的数据流图(DFD图),编写小说明,设计系统的结构图(SC图)。但这种分析方法是不严谨的,由于种种原因,可能会发生加工、数据流、文件的语法定义错误;数据流图上下各层不一致;数据流图分解后的数据不平衡,或文件等重名及文档不完备等各种问题,影响了我们对用户需求的分析和理解,防碍了今后的工作。尤其是对组件的分析失当,后果不堪设想。
---- 青鸟CASE工具提供的即是一套支持软件工程中采用传统的结构化方法进行需求分析、软件设计的工具。由工具生成的每个文件即一个项目,每个项目均包括数据流图和模块结构图两部分:
数据流图部分辅助系统分析员完成对软件系统的需求分析、建立目标系统的需求模型、生成一份正确、完整的关于目标系统的说明文档;同时,提供对需求文档的查询、列表、分片、影响范围等分析功能,辅助软件设计人员对需求分析的结果文档进行深入、细致的分析和理解,以利于软件设计工作。
模块结构图部分辅助程序设计人员在需求分析阶段完成后对软件系统进行设计,支持模块的逐层细化,建立系统的软件体系结构,最后得到一份正确、完整的软件设计文档。同时,提供对设计文档进行查询、列表、分片、影响范围等分析功能,完成对设计的结果文档进行深入、细致的分析理解,以利于软件开发及维护工作。在SC图中组件的规划方案已见端倪,继续细化将得出每个组件的概要设计方案。
---- 在教务系统的实例中,利用青鸟CASE工具生成的DFD图和SC图如下图所示:
---- 系统1层DFD图 系统0层SC图
---- 2. 利用S-Designer进行数据库设计
---- 当完成系统的详细设计后,接下来便是数据库设计。数据库设计在整个软件工程中占有举足轻重的地位。数据库设计不合理,数据得不到合理、有效的存储,数据存在潜在的不一致性、不完整性或有大量冗余,都会降低系统性能,甚至使系统崩溃。
---- 手工的数据库设计完全依赖于设计者的设计水平。设计者首先必须根据实际需要建立若干个逻辑上存在的数据库表,并使其满足第三范式;而后根据它们之间的联系建立特定数据库表将其联系起来。这是一件相当烦琐的事。数据库设计者既要进行数据库的逻辑设计,又要将逻辑模型转成物理模型,而且设计出的数据库不一定能满足第三范式。合理的库表结构决定了访库组件接口的设计质量,所以原先数据库设计方式不适用于以组件对象为中心的软工设计。
---- 在教务系统的实例中,S-Designer使数据库设计变得轻松、简单起来。设计者只须根据现实需要,设计出数据库的E-R图,S-Designer会将逻辑模型转化为物理模型,为数据库表间的联系建立新表,指明表的主码、外码,并自动对数据库表进行一致性、冗余性、完整性检查,使数据库表满足第三范式。
---- 例:可首先设计出数据库表课程(Courses)和学生(Client)的逻辑模型:
---- 接下来,为表Courses和Client间建立联系。由S-Designer自动生成的物理模型,如下图所示,它们为访库组件的接口设计提供了准确的依据。
---- 可以相信,随着软件工程学的进一步成熟,将出现更多的计算机辅助工具,帮助软件开发人员构建出更完善的应用系统。许多辅助软件工具可以完成相似的工作,到底选用何种辅助工具取决于这些工具的性能以及使用者的习惯。
---- 以组件对象为中心的动态Web方法和DNA思想并不高深莫测,开发技术也愈加规范化。应当说,这套方法更适合客观信息结构的现实,也更接近于人们的思维方式,其技术有如行云流水般自然,很适合在中小型企业环境中推广和普及。
假设某一个学校的教务处要建立一个数据库,保存老师、学生、课程和选课记录为了建立该数据库,需要先设
1、假设某一个学校的教务处要建立一个数据库,保存老师、学生、课程和选课记录。为了建立该数据库,需要先设计好概念模型,即设计E-R图,然后再将概念模型转换为关系模型。请结合实际情况设计出E-R图。
设计一个数据库,用关系模式描述,大家帮忙啊
这个是我做实验时做的,希望能帮到你。
建立数据库:
create database 教学管理
on
primary
(name=教学管理_dat,
filename=’d:\教学管理.mdf’,
size=5,
maxsize=50,
filegrowth=2
)
log on
(name=教学管理_log,
filename=’d:\教学管理.ldf’,
size=5,
maxsize=100,
filegrowth=2)
建立表:
use 教学管理
create table 学生档案表
(学号 char(8) primary key
check(学号 like(’’)),
姓名 varchar(8) not null,
性别 char(8) check(性别=’F’ or 性别=’M’),
出生日期 datetime check(出生日期》=’1970’),
籍贯 char(8),
专业 char(8),
班级 char(8)
)
create table 课程信息表
(课程ID char(6) primary key
check(课程ID like(’’)),
课程名称 varchar(40) not null,
课程类别 char(8),
学分 real check(学分 between 0.5 and 5.0),
学时 int check(学时%8=0)
)
create table 教师档案表
(任课教师ID char(8) primary key check(任课教师ID
like(’’)),
姓名 varchar(16) not null,
性别 char(1),
职称 varchar(8),
单位 varchar(20)
)
create table 教学任务表
(课程ID char(6) primary key,
任课教师ID char(8),
学期 Int check (学期=1 or 学期=2 ),
年度 char(10),
foreign key(任课教师ID) references 教师档案表(任课教师ID)
)
create table 学生选课表
(学号 char(8) primary key,
课程类别 char(8),
课程ID char(6),
foreign key (课程ID) references 课程信息表(课程ID),
foreign key (课程ID) references 教学任务表(课程ID)
)
create table 学生成绩表
(学号 char(8),
课程ID char(6),
平时成绩 real,
期末成绩 real,
总成绩 real
)
create index 姓名索引 on 学生档案表(姓名)
create unique index 学号索引 on 学生档案表(学号)
create index 多列索引 on 学生档案表(学号,姓名,籍贯 desc)
插入数据:
use 教学管理
insert into 课程信息表(课程ID,课程名称,课程类别,学分,学时)
values (’JB0001’,’马克思主义哲学原理’,’基础必修’,2,32)
insert into 课程信息表
values(’JB0002’,’毛泽东思想概论’,’基础必修’,2,32)
insert into 课程信息表
values(’JB0003’,’大学英语A’,’基础必修’,4,64)
insert into 课程信息表
values(’JB0004’,’高等数学A’,’基础必修’,4,64)
insert into 课程信息表
values(’ZB0001’,’管理运筹学’,’专业必修’,3.5,56)
insert into 课程信息表
values(’ZB0002’,’管理学’,’专业必修’,3,48)
insert into 课程信息表
values(’XX0001’,’审计学’,’限选’,2,32)
insert into 课程信息表
values(’XX0002’,’货币银行学’,’限选’,2,32)
insert into 课程信息表
values(’RX0001’,’公共关系学’,’任选’,2,32)
insert into 课程信息表
values(’RX0002’,’广告学’,’任选’,2,32)
教师档案表:
insert into 教师档案表
values(’02120001’,’曹玉树’,’M’,’教授’,’会计系’)
insert into 教师档案表
values(’02120002’,’常丹’,’F’,’副教授’,’信管系’)
insert into 教师档案表
values(’02120003’,’陈锡生’,’M’,’教授’,’工商系’)
insert into 教师档案表
values(’02120004’,’张润彤’,’M’,’教授’,’信管系’)
insert into 教师档案表
values(’02120005’,’杜晖’,’M’,’讲师’,’信管系’)
insert into 教师档案表
values(’02120006’,’姚家奕’,’M’,’副教授’,’信管系’)
insert into 教师档案表
values(’02120007’,’丁敬之’,’F’,’副教授’,’物流系’)
insert into 教师档案表
values(’02120008’,’郭春芬’,’F’,’副教授’,’信管系系’)
insert into 教师档案表
values(’02120009’,’李卫东’,’M’,’副教授’,’经济系’)
insert into 教师档案表
values(’02120010’,’林晓燕’,’F’,’教授’,’工商系’)
insert into 教师档案表
values(’02120011’,’陈书文’,’F’,’教授’,’哲学系’)
insert into 教师档案表
values(’02120012’,’王海成’,’M’,’副教授’,’政治系’)
insert into 教师档案表
values(’02120013’,’李新平’,’F’,’副教授’,’外语系’)
insert into 教师档案表
values(’02120014’,’王周洪’,’M’,’讲师’,’基础数学系’)
教学任务表:
insert into 教学任务表(课程ID,任课教师ID,学期,年度)
values (’JB0001’,’02120011’,1,’2002-2003’)
insert into 教学任务表
values (’JB0002’,’02120012’,1,’2003-2004’)
insert into 教学任务表
values (’JB0003’,’02120013’,1,’2002-2003’)
insert into 教学任务表
values (’JB0004’,’02120014’,1,’2002-2003’)
insert into 教学任务表
values (’ZB0001’,’02120007’,2,’2002-2003’)
insert into 教学任务表
values (’ZB0002’,’02120005’,1,’2003-2004’)
insert into 教学任务表
values (’XX0001’,’02120001’,2,’2003-2004’)
insert into 教学任务表
values (’XX0002’,’02120001’,1,’2003-2004’)
insert into 教学任务表
values (’RX0001’,’02120010’,1,’2002-2003’)
insert into 教学任务表
values (’RX0002’,’02120008’,2,’2002-2003’)
学生选课表:
insert into 学生选课表(学号,课程ID,课程类别)
values (’02006001’,’JB0001’,’正选’)
insert into 学生选课表(学号,课程ID,课程类别)
values (’02006002’,’JB0001’,’正选’)
insert into 学生选课表(学号,课程ID,课程类别)
values (’02006003’,’JB0001’,’正选’)
insert into 学生选课表(学号,课程ID,课程类别)
values (’02006004’,’JB0001’,’正选’)
insert into 学生选课表(学号,课程ID,课程类别)
values (’01006007’,’JB0001’,’重修’)
insert into 学生选课表(学号,课程ID,课程类别)
values (’01006008’,’JB0002’,’重修’)
insert into 学生选课表(学号,课程ID,课程类别)
values (’02006100’,’JB0001’,’旁听’)
insert into 学生选课表(学号,课程ID,课程类别)
values (’02006150’,’JB0002’,’旁听’)
insert into 学生选课表(学号,课程ID,课程类别)
values (’02006005’,’JB0003’,’正选’)
insert into 学生选课表(学号,课程ID,课程类别)
values (’02006006’,’JB0004’,’正选’)
学生成绩表:
insert into 学生成绩表(学号,课程ID,平时成绩,期末成绩)
values(’01006007’,’JB0001’,85,88)
insert into 学生成绩表(学号,课程ID,平时成绩,期末成绩)
values(’01006008’,’JB0002’,92,90)
insert into 学生成绩表(学号,课程ID,平时成绩,期末成绩)
values(’02006001’,’JB0001’,76,80)
insert into 学生成绩表(学号,课程ID,平时成绩,期末成绩)
values(’02006002’,’JB0001’,80,86)
insert into 学生成绩表(学号,课程ID,平时成绩,期末成绩)
values(’02006003’,’JB0001’,90,89)
insert into 学生成绩表(学号,课程ID,平时成绩,期末成绩)
values(’02006004’,’JB0001’,68,75)
insert into 学生成绩表(学号,课程ID,平时成绩,期末成绩)
values(’02006005’,’JB0003’,83,85)
insert into 学生成绩表(学号,课程ID,平时成绩,期末成绩)
values(’02006006’,’JB0004’,85,89)
insert into 学生成绩表(学号,课程ID,平时成绩,期末成绩)
values(’02006100’,’JB0001’,88,74)
insert into 学生成绩表(学号,课程ID,平时成绩,期末成绩)
values(’02006150’,’JB0002’,77,80)
学生档案表记录:
insert into 学生档案表(学号,姓名,性别,出生日期,籍贯,专业,班级)
values (’01006007’,’杨娟’,’F’,’1984-8-7’,’河北’,’信息管理’,4)
insert into 学生档案表
values (’01006008’,’刘枫’,’M’,’1984-12-23’,’江苏’,’物流管理’,1)
insert into 学生档案表
values (’02006001’,’李杰’,’M’,’1983-6-5’,’黑龙江’,’物流管理’,2)
insert into 学生档案表
values (’02006002’,’林云燕’,’F’,’1985-2-9’,’山东’,’工商管理’,3)
insert into 学生档案表
values (’02006003’,’刘畅’,’M’,’1984-9-8’,’湖北’,’工商管理’,2)
insert into 学生档案表
values (’02006004’,’陈曦’,’F’,’1983-4-15’,’浙江’,’会计学’,1)
insert into 学生档案表
values (’02006005’,’冯亮’,’M’,’1983-8-17’,’北京’,’信息管理’,2)
insert into 学生档案表
values (’02006006’,’孙佳’,’F’,’1985-10-16’,’湖南’,’信息管理’,2)
insert into 学生档案表
values (’02006100’,’赵敏’,’F’,’1984-5-8’,’四川’,’会计学’,1)
insert into 学生档案表
values (’02006150’,’吴晓涛’,’F’,’1982-11-1’,’湖北’,’信息管理’,3)
update 学生成绩表
set 总成绩=(平时成绩*0.3+期末成绩*(1-0.3))

本文相关文章:
全国企业信用信息公示系统浙江(2019年全国企业信用信息公示系统 浙江官网)
2026年7月17日 20:10
进程调度策略(Lnux系统中,进程调度的方式和策略是什么操作系统本科考试的大题)
2026年8月25日 08:50
怎么编写程序出现一个图形(编写一个c程序,运行时输出以下图形 ***** ***** *****)
2026年8月17日 10:00
输入一个字符串转换为数字(C语言编写程序,输入一个字符,如果是数字字符,则转换成对应的数字)
2026年8月13日 01:10
android属于什么系统(Android即是操作系统也是开发平台吗_android操作系统是基于什么系统开发的)
2026年8月3日 20:10
更多文章:
数据库管理系统和数据库系统分别侧重(数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例)
2026年9月7日 17:00
springmvc的依赖(springMVC的注入方式有哪几种,这与springMVC依赖)
2026年9月7日 14:00
display flex 自动换行(overflow-y:hidden;overflow-x:auto;无效解决方法)
2026年9月7日 11:00
timestamp without time zone(Postgresql中to_date()函数使用问题)
2026年9月7日 09:40




