1、第第1313章章 数据库应用系统开发数据库应用系统开发 知识技能目标知识技能目标:1理解数据库应用系统开发过程。理解数据库应用系统开发过程。2掌握实际工程中使用各种数据库对象的方法。掌握实际工程中使用各种数据库对象的方法。3掌握数据库应用系统的开发。掌握数据库应用系统的开发。第第1313章章 数据库应用系统开发数据库应用系统开发 引导案例:引导案例:第第1 1章演示了数据库应用系统实例章演示了数据库应用系统实例“教务管理系统教务管理系统”随后各章围绕这一实例按照系统开发的工作过程介绍随后各章围绕这一实例按照系统开发的工作过程介绍了数据库应用开发技术了数据库应用开发技术 这一章综合运用前面所学的
2、技术,完整地给出这一数这一章综合运用前面所学的技术,完整地给出这一数据库应用系统实例的开发过程据库应用系统实例的开发过程第第1313章章 数据库应用系统开发数据库应用系统开发13.1 13.1 数据库应用系统的开发过程数据库应用系统的开发过程13.2 13.2 系统需求分析系统需求分析13.3 13.3 系统设计系统设计13.4 13.4 系统实现系统实现小结小结13.1 13.1 数据库应用系统的开发过程数据库应用系统的开发过程数据库应用系统的开发过程包括:数据库应用系统的开发过程包括:系统需求分析、系统设计、系统实现系统需求分析、系统设计、系统实现 三个阶段三个阶段 如图所示如图所示返回目
3、录13.1 13.1 数据库应用系统的开发过程数据库应用系统的开发过程返回目录系统需求分析系统需求分析包括:数据需求分析、功能需求分析在这一阶段,详细调查、充分熟悉用户的业务工作,仔细分析用户的业务活动,在此基础上充分理解和明确用户的各种需求,包括用户对数据的需求、对数据处理的需求、安全性需求和完整性需求,进而确定系统应具有哪些功能,完成哪些任务,确定系统采用哪种体系结构(如C/S结构或B/S结构)。13.1 13.1 数据库应用系统的开发过程数据库应用系统的开发过程返回目录系统设计系统设计包括:数据库设计、功能设计在这一阶段,依据系统需求分析阶段数据需求分析的结果进行数据库的设计,依据功能需
4、求分析的结果进行系统功能设计。这两方面的设计应结合进行。13.1 13.1 数据库应用系统的开发过程数据库应用系统的开发过程返回目录系统实现系统实现在具体DBMS的支持下按照系统设计阶段做出的数据库设计,在计算机上建立起数据库;按照系统设计阶段做出的功能设计,编写实现每一项功能的应用程序;加载小批量数据进行调试和试运行满意后再加载数据投入运行13.2 13.2 系统需求分析系统需求分析返回目录步骤:步骤:(1)调查分析用户的业务活动(2)明确用户的各种需求(3)确定系统的边界 确定哪些活动由计算机完成,哪些活动由人工完成(4)确定系统的确定功能需求 系统应具有哪些功能,完成哪些任务(5)确定系
5、统的数据需求 系统对哪些数据完成什么样的处理,有什么样的安全性要求和完整性要求13.2 13.2 系统需求分析系统需求分析返回目录 按上述步骤,首先明确某院校教务管理用户需求用户需求(1)学生能在其专业所设课程和公共课程的范围内进行选课,能 查询自己所选的课程,能查询自己所学的各门课程的成绩。(2)教务人员能根据每门课程的选课人数或开设学期确定该课程 是否开设,能取消某个学生对某门课程的选修。(3)教师和教务人员能查询哪些学生选修了某门课程,某个学生 选修了哪些课程。(4)教师能为学习某门课程的每个学生录入考试成绩。(5)教务人员能修改学生成绩。(6)教师和教务人员能查询学生的成绩,能对某门课
6、程的成绩进 行各种统计,如统计各个分数段的人数、均分、最高分、最 低分等。13.2 13.2 系统需求分析系统需求分析返回目录仔细分析用户需求,确定系统的功能需求功能需求和数据需求数据需求l 功能需求功能需求 选课管理选课管理提供选课界面,列出有关课程信息供学生查询选课。记录存储学生选课信息,随时查询学生选课信息,同时允许退课,根据选课情况决定开设课程。成绩管理成绩管理对学生所选课程的成绩进行管理,包括成绩登记、成绩查询、统计汇总以及成绩的修改和删除。基本信息的存储、检索和维护基本信息的存储、检索和维护 基本信息包括学生信息、课程信息、班级信息、专业信息、系部信息和用户信息等。要能输入存储这些
7、基本信息,需要时可以按多种方式进行检索,并能对这些信息进行修改和删除。13.2 13.2 系统需求分析系统需求分析返回目录仔细分析用户需求,确定系统的功能需求和数据需求l 数据需求数据需求有关学生、课程、成绩、班级、专业、系部的数据对这些数据的处理包括:选课管理,成绩管理,对学生、课程、班级、专业、系部以及用户等进行管理完整性要求:每门课程分别属于公共课、专业基础课和专业课三个类型,每门课程可以分别是必修课、选修课或限选课,每门课程可以分别以考试或考查的方式进行考核,课程分别设置在第一至第八学期,每门课程的考试成绩取百分制成绩安全性要求:学生、教师、教务人员三类不同用户分别具有不同的使用权限
8、13.3 13.3 系统设计系统设计返回目录系统设计包括:数据库设计、系统功能设计系统设计包括:数据库设计、系统功能设计两方面的设计应结合进行两方面的设计应结合进行 13.3 13.3 系统设计系统设计返回目录13.3.1 13.3.1 数据库设计数据库设计如第2章所述,得到教务管理数据库的逻辑结构 13.3 13.3 系统设计系统设计返回目录13.3.1 13.3.1 数据库设计数据库设计字段名字段名数据类型数据类型约束约束学号学号char(11)主键主键姓名姓名nchar(5)非空非空性别性别nchar(1)值为值为 男男 或或 女女出生日期出生日期datetime政治面貌政治面貌varc
9、har(10)默认为默认为 共青团员共青团员入学时间入学时间datetime联系电话联系电话char(20)班级班级char(5)外键(参照班级表的班号),非空外键(参照班级表的班号),非空备注备注varchar(200)学生表学生表13.3 13.3 系统设计系统设计返回目录13.3.1 13.3.1 数据库设计数据库设计课程表课程表字段名字段名数据类型数据类型约束约束课程号课程号char(6)主键主键课程名课程名varchar(20)非空,唯一非空,唯一学时学时tinyint学分学分tinyint课程类型课程类型nchar(5)非空非空值为值为 公共课公共课、专业基础课专业基础课或或 专业
10、专业课课课程性质课程性质nchar(2)值为值为 必修必修、选修选修或或限选限选考核方式考核方式nchar(20)值为值为考试考试或或考查考查,默认为默认为考试考试学期学期char(1)值为值为1,2,3,4,5,6,7,8备注备注varchar(200)13.3 13.3 系统设计系统设计返回目录13.3.1 13.3.1 数据库设计数据库设计选课表选课表字段名字段名数据类型数据类型约束约束学号学号char(11)主键(学号主键(学号 课程号)课程号)外键(参照学生表的学号)外键(参照学生表的学号)课程号课程号char(6)主键(学号主键(学号 课程号)课程号)外键(参照课程表的课程号)外键
11、(参照课程表的课程号)成绩成绩numeric(5,1)取值范围取值范围010013.3 13.3 系统设计系统设计返回目录13.3.1 13.3.1 数据库设计数据库设计班级表班级表字段名字段名数据类型数据类型约束约束班号班号char(5)主键主键班名班名varchar(20)非空非空班主任班主任nchar(5)学生人数学生人数smallint默认为默认为0 专业专业char(6)外键(参照专业表的专业号),非空外键(参照专业表的专业号),非空13.3 13.3 系统设计系统设计返回目录13.3.1 13.3.1 数据库设计数据库设计专业表专业表字段名字段名数据类型数据类型约束约束专业号专业号
12、char(6)主键主键专业名专业名varchar(20)非空非空系部系部char(4)外键(参照系部表的系部号),非空外键(参照系部表的系部号),非空13.3 13.3 系统设计系统设计返回目录13.3.1 13.3.1 数据库设计数据库设计系部表系部表字段名字段名数据类型数据类型约束约束系部号系部号char(4)主键主键系部名系部名varchar(20)唯一,非空唯一,非空系主任系主任nchar(5)教师人数教师人数smallint13.3 13.3 系统设计系统设计返回目录13.3.1 13.3.1 数据库设计数据库设计用户表用户表字段名字段名数据类型数据类型约束约束idint标识列标识列
13、用户名用户名varchar(11)主键主键密码密码varchar(10)非空非空用户类型用户类型varchar(20)varchar(20)值为值为学生学生,教师教师,教务人员教务人员13.3 13.3 系统设计系统设计返回目录13.3.1 13.3.1 数据库设计数据库设计另外,由上面需求分析可知,许多应用涉及到选课信另外,由上面需求分析可知,许多应用涉及到选课信息、成绩信息以及各种基本信息的查询。息、成绩信息以及各种基本信息的查询。针对这些应用,设计相应的视图:针对这些应用,设计相应的视图:包含学生学号、姓名、所选课程、所得成绩、所在班级等的视图;包含学生学号、姓名、所选课程、所得成绩、所
14、在班级等的视图;包含学生基本信息和所在班级、专业、所在系的视图;包含学生基本信息和所在班级、专业、所在系的视图;包含班级基本信息和所属专业、所在系的视图;包含班级基本信息和所属专业、所在系的视图;包含专业基本信息和所在系的视图。包含专业基本信息和所在系的视图。13.3 13.3 系统设计系统设计返回目录13.3.2 13.3.2 系统功能设计系统功能设计13.3 13.3 系统设计系统设计返回目录13.3.2 13.3.2 系统功能设计系统功能设计(1)登录)登录根据用户输入的用户名和密码检查是否合法用户,密码是否正确,属于哪类用户,再根据用户类型允许用户进行不同的操作。(2)基本信息管理)基
15、本信息管理实现对学生、课程、班级、专业、系部等基本信息的添加、删除、修改和查询功能。在学生表中添加或删除一条纪录,班级表中相应班级的学生人数就要加1或减1;在学生表中修改某个学生的班级,班级表中相应班级的学生人数也要作相应改变。(3)学生选课)学生选课按学生专业为其提供可供选择的课程信息,学生参考提供的课程信息进行选课,选了不合适的课可以退选。(4)选课查询)选课查询包括学生查询自己所选的课程,教师和教务人员查询选修某门课程的学生和某个学生选修的课程。13.3 13.3 系统设计系统设计返回目录13.3.2 13.3.2 系统功能设计系统功能设计(5)审核课程)审核课程根据选课情况审核开设课程
16、,选课人数小于30人的课程不开,课程设置学期不符合的课不开。(6)审核学生)审核学生 取消不符合条件的学生或申请退课的学生的选课。(7)开启)开启/关闭选课关闭选课由教务人员开启学生选课功能,同时清除成绩60分的选课记录。学生在一定时间段内可进行选课,到期教务人员关闭学生选课功能。(8)成绩录入)成绩录入 教师为学习某门课程的每个学生录入考试成绩。(9)成绩查询)成绩查询学生查询自己所学的各门课程的成绩,教师和教务人员以多种方式查询学生各门课程成绩。13.3 13.3 系统设计系统设计返回目录13.3.2 13.3.2 系统功能设计系统功能设计(10)成绩修改)成绩修改 教务人员修改学生考试成
17、绩(11)成绩汇总)成绩汇总 教务人员和教师对成绩进行统计汇总,统计各班各门课程的均分、最高分和最低分,统计某班某门课程各个分数段的人数(12)用户管理)用户管理 教务人员对用户进行添加、删除和修改等管理,用户可以修改自己的密码(13)帮助)帮助 为用户提供有关系统使用方面的帮助信息(14)退出系统)退出系统 结束程序,退出系统,释放全部资源 13.4 13.4 系统实现系统实现返回目录在数据库管理系统在数据库管理系统SQL Server 2005支持下支持下建立数据库,实现前面的数据库设计建立数据库,实现前面的数据库设计开发应用程序,实现前面的系统功能设计开发应用程序,实现前面的系统功能设计
18、13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现1建立数据库建立数据库 LOG ON(NAME=教务管理数据库_log,FILENAME=E:sql教务管理数据库 _log.ldf,SIZE=1MB,MAXSIZE=UNLIMITED,FILEGROWTH=10%)GO CREATE DATABASE 教务管理数据库ON PRIMARY(NAME=教务管理数据库,FILENAME=E:sql教务管理数据库.mdf,SIZE=3MB,MAXSIZE=UNLIMITED,FILEGROWTH=1MB)13.4 13.4 系统实现系统实现返回目录13.4.
19、1 13.4.1 数据库实现数据库实现2建立表建立表 按照前面的设计,依次建立:系部表系部表专业表专业表班级表班级表学生表学生表课程表课程表选课表选课表用户表用户表13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现建立系部表:建立系部表:USE 教务管理数据库GOCREATE TABLE 系部表(系部号 char(4)PRIMARY KEY,系部名 varchar(20)NOT NULL UNIQUE,系主任 nchar(5)NULL,教师人数 smallint NULL)13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实
20、现数据库实现建立专业表:建立专业表:CREATE TABLE 专业表(专业号 char(6)PRIMARY KEY,专业名 varchar(20)NOT NULL,系部 char(4)NOT NULL REFERENCES 系部表(系部号)ON UPDATE CASCADE)13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现建立班级表:建立班级表:CREATE TABLE 班级表(班号 char(5)PRIMARY KEY,班名 varchar(20)NOT NULL,班主任 nchar(5),学生人数 smallint DEFAULT(0),专业 c
21、har(6)NOT NULL REFERENCES 专业表(专业号)ON UPDATE CASCADE)13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现建立学生表:建立学生表:CREATE TABLE 学生表(学号 char(11)PRIMARY KEY,姓名 nchar(5)NOT NULL,性别 nchar(1)CHECK(性别=男 OR 性别=女),出生日期 datetime,政治面貌 varchar(10)DEFAULT(共青团员),入学时间 datetime,联系电话 char(20),班级 char(5)REFERENCES 班级表(班号
22、)ON UPDATE CASCADE,备注 varchar(200)13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现建立课程表:建立课程表:CREATE TABLE 课程表(课程号 char(6)PRIMARY KEY,课程名 varchar(20)NOT NULL UNIQUE,学时 tinyint,学分 tinyint,课程类型 nchar(5)NOT NULL CHECK(课程类型 in(专业课,专业基础课,公共课),课程性质 nchar(2)CHECK(课程性质 in(限选,选修,必修),考核方式 nchar(2)DEFAULT(考试)CHE
23、CK(考核方式 in(考查,考试),学期 char(1)CHECK(学期 in(8,7,6,5,4,3,2,1),备注 varchar(200)13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现建立选课表:建立选课表:CREATE TABLE 选课表(学号 char(11)REFERENCES 学生表(学号)ON UPDATE CASCADE,课程号 char(6)REFERENCES 课程表(课程号)ON UPDATE CASCADE,成绩 numeric(5,1),CONSTRAINT PK_选课表 PRIMARY KEY(学号,课程号)13.4
24、13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现建立用户表:建立用户表:CREATE TABLE 用户表(id int IDENTITY(1,1),用户名 varchar(11)PRIMARY KEY,密码 varchar(10)NOT NULL,用户类型 varchar(20)CHECK(用户类型 in(教务人员,教师,学生),)13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现3实现完整性设计实现完整性设计 在前面建表时,按照完整性设计,在每个表上定义了主键约束主键约束,在每个表的相应字段上定义了非空、唯非空、唯一
25、、默认、检查、外键等约束一、默认、检查、外键等约束。13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现3实现完整性设计实现完整性设计 在选课表上创建了触发器T插入修改成绩插入修改成绩以保证成绩的值在0-100之间 13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现3实现完整性设计实现完整性设计 CREATE TRIGGER T插入修改成绩 ON 选课表 for INSERT,UPDATEAS BEGIN SET NOCOUNT ON;declare cj numeric(6,1)select cj=成绩 fro
26、m inserted if cj100 begin raiserror(成绩不正确,必须在-100之间!,16,10)rollback transaction end END13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现3实现完整性设计实现完整性设计 在系部表上创建了触发器在系部表上创建了触发器T插入修改系部号插入修改系部号、T删除系部删除系部;在专业表上建立了触发器在专业表上建立了触发器T插入修改专业号插入修改专业号、T删除专业删除专业;在学生表上建立触发器在学生表上建立触发器T插入修改学号插入修改学号;在课程表上建立了触发器在课程表上建立了触发
27、器T插入修改课程号插入修改课程号。这些触发器分别在插入和修改系部号、专业号、学号、课程号时触发执行,以保证了系部号、专业号、学号、课程号的正确有效,实现用户定义完整性设计。CREATE TRIGGER T插入修改系部号 ON 系部表 AFTER INSERT,UPDATEAS if update(系部号)BEGIN SET NOCOUNT ON declare xbh1 char(4),xbh2 char(4)select xbh2=系部号 from inserted if xbh2 not like 000-90-9 beginraiserror(系部号不正确!,16,10)rollback
28、 transaction end if exists(select*from deleted)beginselect xbh1=系部号 from deletedupdate 专业表 set 专业号=xbh2+right(专业号,2)where left(专业号,4)=xbh1update 课程表 set 课程号=right(xbh2,2)+right(课程号,4)where left(课程号,2)=right(xbh1,2)update 学生表 set 学号=left(学号,4)+right(xbh2,2)+right(学号,5)where substring(学号,5,2)=right(xb
29、h1,2)endEND 创建触发器创建触发器T插入修改系部号:插入修改系部号:CREATE TRIGGER T删除系部 ON 系部表 AFTER deleteAS BEGINSET NOCOUNT ON;declare xbh char(4)select xbh=系部号 from deletedif exists(select*from 专业表 where left(专业号,4)=xbh)begin raiserror(系部号在使用,不可删除!,16,10)rollback transactionendEND创建触发器创建触发器T删除系部删除系部:CREATE TRIGGER T插入修改专业号
30、 ON 专业表 AFTER INSERT,UPDATEAS if update(专业号)BEGIN SET NOCOUNT ON;declare zyh1 char(6),zyh2 char(6)select zyh2=专业号 from inserted if (zyh2 not like 000-90-90-90-9)or not exists(select 系部号 from 系部表 where left(zyh2,4)=系部号)begin raiserror(专业号不正确!,16,10)rollback transaction end if exists(select*from delet
31、ed)begin select zyh1=专业号 from deleted update 课程表 set 课程号=right(zyh2,4)+right(课程号,2)where left(课程号,4)=right(zyh1,4)update 学生表 set 学号=left(学号,4)+right(zyh2,4)+right(学号,3)where substring(学号,5,4)=right(zyh1,4)endEND 创建触发器创建触发器T插入修改专业号插入修改专业号:CREATE TRIGGER T删除专业 ON 专业表 AFTER DELETEAS BEGIN SET NOCOUNT O
32、N;declare zyh char(6)select zyh=专业号 from deleted if exists(select*from 课程表 where left(课程号,4)=right(zyh,4)or exists(select*from 学生表 where substring(学号,5,4)=right(zyh,4)begin raiserror(专业号在使用,不可删除!,16,10)rollback transaction endEND 创建触发器创建触发器T删除专业删除专业:CREATE TRIGGER T插入修改学号 ON 学生表 AFTER INSERT,UPDATEA
33、S if update(学号)BEGIN SET NOCOUNT ON;declare xh char(11)select xh=学号 from inserted if (xh not like 0-90-90-90-90-90-90-90-90-90-90-9)or not exists(select 专业号 from 专业表 where substring(xh,5,4)=right(专业号,4)begin raiserror(学号不正确!,16,10)rollback transaction endEND 创建触发器创建触发器T插入修改学号插入修改学号:CREATE TRIGGER T插
34、入修改课程号 ON 课程表 AFTER INSERT,UPDATEAS if update(课程号)BEGIN SET NOCOUNT ON;declare kch char(6),kclx nchar(5)select kch=课程号 from inserted select kclx=课程类型 from inserted if kclx=公共课 if kch not like 00000-90-9 begin raiserror(课程号不正确!,16,10)rollback transaction end if kclx公共课 if(kch not like 0-90-90-90-90-9
35、0-9)or not exists(select 专业号 from 专业表 where left(kch,4)=right(专业号,4)begin raiserror(课程号不正确!,16,10)rollback transaction endEND 创建触发器创建触发器T插入修改课程号插入修改课程号:13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现4建立视图建立视图 按照前面的设计建立视图:按照前面的设计建立视图:V学生成绩学生成绩:包含学生学号、姓名、所选课程、所得成绩、所在班级等包含学生学号、姓名、所选课程、所得成绩、所在班级等V学生信息学生信
36、息:包含学生基本信息和所在班级、专业、所在系包含学生基本信息和所在班级、专业、所在系V班级信息班级信息:包含班级基本信息和所属专业、所在系包含班级基本信息和所属专业、所在系V专业信息专业信息:包含专业基本信息和所在系包含专业基本信息和所在系CREATE VIEW V学生成绩ASSELECT dbo.班级表.班名,dbo.学生表.学号,dbo.学生表.姓名,dbo.课程表.课程号,dbo.课程表.课程名,dbo.选课表.成绩FROM dbo.学生表 INNER JOIN dbo.选课表 ON dbo.学生表.学号=dbo.选课表.学号 INNER JOIN dbo.课程表 ON dbo.选课表.
37、课程号=dbo.课程表.课程号 INNER JOIN dbo.班级表 ON dbo.学生表.班级=dbo.班级表.班号 建立视图建立视图V学生成绩学生成绩:CREATE VIEW V学生信息ASSELECT dbo.学生表.学号,dbo.学生表.姓名,dbo.学生表.性别,dbo.学生表.出生日期,dbo.学生表.政治面貌,dbo.学生表.入学时间,dbo.学生表.联系电话,dbo.学生表.班级,dbo.班级表.班名,dbo.班级表.专业,dbo.专业表.专业名,dbo.专业表.系部,dbo.系部表.系部名FROM dbo.学生表 LEFT JOIN dbo.班级表 ON dbo.学生表.班级
38、=dbo.班级表.班号 LEFT JOIN dbo.专业表 ON dbo.班级表.专业=dbo.专业表.专业号 LEFT JOIN dbo.系部表 ON dbo.专业表.系部=dbo.系部表.系部号 建立视图建立视图V学生信息学生信息:CREATE VIEW V班级信息ASSELECT dbo.班级表.班号,dbo.班级表.班名,dbo.班级表.班主任,dbo.班级表.学生人数,dbo.班级表.专业,dbo.专业表.专业名,dbo.专业表.系部,dbo.系部表.系部名FROM dbo.班级表 INNER JOIN dbo.专业表 ON dbo.班级表.专业=dbo.专业表.专业号 INNER
39、JOIN dbo.系部表 ON dbo.专业表.系部=dbo.系部表.系部号 建立视图建立视图V班级信息班级信息:CREATE VIEW V专业信息ASSELECT dbo.专业表.专业号,dbo.专业表.专业名,dbo.专业表.系部,dbo.系部表.系部名FROM dbo.专业表 INNER JOIN dbo.系部表 ON dbo.专业表.系部=dbo.系部表.系部号 建立视图建立视图V专业信息专业信息:13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现5建立存储过程和触发器建立存储过程和触发器 分析前面的系统功能设计,有些功能可以在后台由SQL S
40、erver来实现,有些则需要在前台由应用程序来实现。确定哪些功能由SQL Server来实现,哪些功能由应用程序来实现。对于由SQL Server来实现的功能,可以通过存储过程、触发器等来实现。13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现5建立存储过程和触发器建立存储过程和触发器 根据前面的功能设计,当在学生表中添加或删除一条记录后,班级表中相应班级的学生人数就要加1或减1,当在学生表中修改某个学生的班级后,班级表中相应班级的学生人数也要作相应改变这些功能在SQL Server端实现,为此建立触发器:T添加学生添加学生T删除学生删除学生T更改学生
41、班级更改学生班级 T插入修改人数插入修改人数 create TRIGGER T添加学生 ON 学生表 AFTER INSERTAS BEGIN SET NOCOUNT ON declare xh char(11)select xh=学号from inserted update 班级表 set 学生人数=学生人数+1 from inserted where 班号=inserted.班级 insert 用户表(用户名,密码,用户类型)values(xh,1,学生)END 建立触发器建立触发器T添加学生添加学生:CREATE TRIGGER T删除学生 ON 学生表 AFTER DELETEAS B
42、EGIN SET NOCOUNT ON UPDATE 班级表 SET 学生人数=学生人数-1 FROM deleted WHERE 班级表.班号=deleted.班级 DELETE 用户表 FROM deleted WHERE 用户名=deleted.学号END 建立触发器建立触发器T删除学生删除学生:CREATE TRIGGER T更改学生班级 ON 学生表 AFTER UPDATEAS IF UPDATE(班级)BEGIN SET NOCOUNT ON UPDATE 班级表 SET 学生人数=学生人数-1 FROM deleted WHERE 班级表.班号=deleted.班级 UPDAT
43、E 班级表 SET 学生人数=学生人数+1 FROM inserted WHERE 班级表.班号=inserted.班级END 建立触发器建立触发器T更改学生班级更改学生班级:CREATE TRIGGER T插入修改人数 ON 班级表 AFTER INSERT,UPDATEAS if update(学生人数)BEGIN SET NOCOUNT ON declare n1 int,n2 int,bh char(5)select bh=班号 from inserted select n1=学生人数 from inserted select n2=count(班级)from 学生表 where 班级
44、=bh if n1!=n2begin raiserror(学生人数自动生成,不必输入!,16,1)rollback transactionendEND 建立触发器建立触发器T插入修改人数插入修改人数:13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现5建立存储过程和触发器建立存储过程和触发器 根据前面的功能设计,学生选课时,系统需按学生专业为其提供可供选择的课程信息,包括公共课的课程信息。这一功能也在后台实现,为此建立存储过程P选课信息选课信息。USE 教务管理数据库GOCREATE PROCEDURE P选课信息 xh char(11)ASBEGIN
45、 SET NOCOUNT ON;SELECT distinct*from 课程表 where left(课程号,4)=substring(xh,5,4)or left(课程号,4)=0000END 建立存储过程建立存储过程P选课信息选课信息:13.4 13.4 系统实现系统实现返回目录13.4.1 13.4.1 数据库实现数据库实现5建立存储过程和触发器建立存储过程和触发器 在前面还设计了成绩汇总功能,统计各班各门课的均分、最高分、最低分,统计某个班某门课程各个分数段人数、最高分、最低分和均分。这些功能在后台实现,为此建立存储过程P各班各科成绩汇总各班各科成绩汇总 P某班某科成绩汇总某班某科成
46、绩汇总 USE 教务管理数据库GOCREATE PROCEDURE P各班各科成绩汇总 ASBEGIN SET NOCOUNT ON SELECT 班名,课程名,max(成绩)最高分,min(成绩)最低分,avg(成绩)均分 from V学生成绩 group by 班名,课程名END 建立存储过程建立存储过程P各班各科成绩汇总各班各科成绩汇总:CREATE PROCEDURE P某班某科成绩汇总 bm varchar(20),kcm varchar(20)ASBEGIN SET NOCOUNT ON declare n1 int,n2 int,n3 int,n4 int,n5 int decl
47、are s1 int,s2 int,s3 int select n1=count(学号+课程号)from V学生成绩 where 班名=bm and 课程名=kcm and 成绩=90 and 成绩=80 and 成绩=70 and 成绩=60 and 成绩=69select n5=count(学号+课程号)from V学生成绩 where 班名=bm and 课程名=kcm and 成绩60select s1=max(成绩),s2=min(成绩),s3=avg(成绩)from V学生成绩 where 班名=bm and 课程名=kcmselect n1 分数90以上,n2 分数80_89,n
48、3 分数70_79,n4 分数60_69,n5 分数60以下,s1,s2,s3END 建立存储过程建立存储过程P某班某科成绩汇总某班某科成绩汇总:13.4 13.4 系统实现系统实现返回目录13.4.2 13.4.2 系统功能实现系统功能实现后台数据库设计实现后,接下来按照前面系统功能设计,使用Visual Basic开发应用程序,为用户提供友好的人机交互界面,实现前面所作的功能设计。13.4 13.4 系统实现系统实现返回目录13.4.2 13.4.2 系统功能实现系统功能实现1建立工程项目建立工程项目(1)启动VB,选择“文件新建工程”菜单命令,从弹出的“工程模板”对话框中选择“标准EXE
49、”项,单击“确定”按钮。(2)选择“工程工程属性”菜单命令,弹出“工程属性”对话框,在“通用”选项卡中的“启动对象”下拉列表中选择Sub Main项,在工程名称文本框中输入:教务管理系统。单击“确定”按钮。这一步设置启动对象为Sub Main,当应用程序启动时,先调用名为Main的子过程,子过程Main将包含在工程的模块文件中。(3)选择“文件保存工程”菜单命令,保存工程,工程文件命名为jwgl.vbp。13.4 13.4 系统实现系统实现返回目录13.4.2 13.4.2 系统功能实现系统功能实现2建立工程模块建立工程模块工程模块是公用模块,在这个模块中可以定义整个工程项目公用的全局变量、函
50、数等。整个工程项目中的任何地方都可以调用公用模块中的变量、函数。这一模块也可用来启动程序。13.4 13.4 系统实现系统实现返回目录13.4.2 13.4.2 系统功能实现系统功能实现2建立工程模块建立工程模块(1)选择“工程添加模块”菜单命令。(2)在“属性”栏中指定模块名称,如modulel。(3)选择“工程引用”菜单命令,在弹出的“引用”对话框中选中“Microsot ActiveX Data Objects 2.5 Library”项,然后单击“确定”按钮。(4)在“工程浏览器”中双击modulel模块,打开代码设计窗口,在该窗口中可以定义全局变量、函数等。教务管理系统工程模块:教务