配色: 字号:
《SQL Server数据库应用开发技术》第13章 数据库应用系统开发
2023-05-25 | 阅:  转:  |  分享 
  
第13章 数据库应用系统开发 知识技能目标:1.理解数据库应用系统开发过程。2.掌握实际工程中使用各种数据库对象的方法。3.掌握数据库应用系
统的开发。第13章 数据库应用系统开发 引导案例: 第1章演示了数据库应用系统实例“教务管理系统” 随后各章围绕这一实例按
照系统开发的工作过程介绍了数据库应用开发技术 这一章综合运用前面所学的技术,完整地给出这一数据库应用系统实例的开发过程第13章
数据库应用系统开发 13.1 数据库应用系统的开发过程 13.2 系统需求分析 13.3 系统设计 13.4 系统实现 小结13
.1 数据库应用系统的开发过程数据库应用系统的开发过程包括: 系统需求分析、系统设计、系统实现 三个阶段 如图所示返回目录13.1
数据库应用系统的开发过程返回目录系统需求分析 包括: 数据需求分析、功能需求分析 在这一阶段,详细调查、充分熟悉用户的业务工作,
仔细分析用户的业务活动,在此基础上充分理解和明确用户的各种需求,包括用户对数据的需求、对数据处理的需求、安全性需求和完整性需求,进
而确定系统应具有哪些功能,完成哪些任务,确定系统采用哪种体系结构(如C/S结构或B/S结构)。 13.1 数据库应用系统的开发过程
返回目录系统设计 包括:数据库设计、功能设计 在这一阶段,依据系统需求分析阶段数据需求分析的结果进行数据库的设计,依据功能需求分析
的结果进行系统功能设计。这两方面的设计应结合进行。13.1 数据库应用系统的开发过程返回目录系统实现 在具体DBMS的支持下 按照
系统设计阶段做出的数据库设计,在计算机上建立起数据库; 按照系统设计阶段做出的功能设计,编写实现每一项功能的应用程序; 加载小批量
数据进行调试和试运行 满意后再加载数据投入运行13.2 系统需求分析返回目录 步骤:(1)调查分析用户的业务活动(2)明确用户的各
种需求(3)确定系统的边界 确定哪些活动由计算机完成,哪些活动由人工完成(4)确定系统的确定功能需求 系统
应具有哪些功能,完成哪些任务(5)确定系统的数据需求 系统对哪些数据完成什么样的处理,有什么样的安全性要求和完整性要求
13.2 系统需求分析返回目录 按上述步骤,首先明确某院校教务管理用户需求(1)学生能在其专业所设课程和公共课程的范围内进行选课
,能 查询自己所选的课程,能查询自己所学的各门课程的成绩。(2)教务人员能根据每门课程的选课人数或开设学期确定该课程
是否开设,能取消某个学生对某门课程的选修。(3)教师和教务人员能查询哪些学生选修了某门课程,某个学生
选修了哪些课程。(4)教师能为学习某门课程的每个学生录入考试成绩。(5)教务人员能修改学生成绩。(6)教师和教务人员能查询学生的
成绩,能对某门课程的成绩进 行各种统计,如统计各个分数段的人数、均分、最高分、最 低分等。 13.2
系统需求分析返回目录仔细分析用户需求,确定系统的功能需求和数据需求功能需求选课管理 提供选课界面,列出有关课程信息供学生查询选
课。记录存储学生选课信息,随时查询学生选课信息,同时允许退课,根据选课情况决定开设课程。成绩管理 对学生所选课程的成绩进行管理,
包括成绩登记、成绩查询、统计汇总以及成绩的修改和删除。基本信息的存储、检索和维护 基本信息包括学生信息、课程信息、班级信息、专
业信息、系部信息和用户信息等。要能输入存储这些基本信息,需要时可以按多种方式进行检索,并能对这些信息进行修改和删除。 13.2 系
统需求分析返回目录仔细分析用户需求,确定系统的功能需求和数据需求数据需求有关学生、课程、成绩、班级、专业、系部的数据对这些数据的处
理包括:选课管理,成绩管理,对学生、课程、班级、专业、系部以及用户等进行管理完整性要求:每门课程分别属于公共课、专业基础课和专业课
三个类型,每门课程可以分别是必修课、选修课或限选课,每门课程可以分别以考试或考查的方式进行考核,课程分别设置在第一至第八学期,每门
课程的考试成绩取百分制成绩安全性要求:学生、教师、教务人员三类不同用户分别具有不同的使用权限 13.3 系统设计返回目录 系统设计
包括:数据库设计、系统功能设计 两方面的设计应结合进行 13.3 系统设计返回目录13.3.1 数据库设计 如第2章所述,得到教务
管理数据库的逻辑结构 13.3 系统设计返回目录13.3.1 数据库设计学生表13.3 系统设计返回目录13.3.1 数据库设计课
程表13.3 系统设计返回目录13.3.1 数据库设计选课表13.3 系统设计返回目录13.3.1 数据库设计班级表13.3 系统
设计返回目录13.3.1 数据库设计专业表13.3 系统设计返回目录13.3.1 数据库设计系部表13.3 系统设计返回目录13.
3.1 数据库设计用户表13.3 系统设计返回目录13.3.1 数据库设计 另外,由上面需求分析可知,许多应用涉及到选课信息、成绩
信息以及各种基本信息的查询。 针对这些应用,设计相应的视图:包含学生学号、姓名、所选课程、所得成绩、所在班级等的视图;包含学生基本
信息和所在班级、专业、所在系的视图;包含班级基本信息和所属专业、所在系的视图;包含专业基本信息和所在系的视图。 13.3 系统设计
返回目录13.3.2 系统功能设计 13.3 系统设计返回目录13.3.2 系统功能设计(1)登录 根据用户输入的用户名和密码检查
是否合法用户,密码是否正确,属于哪类用户,再根据用户类型允许用户进行不同的操作。(2)基本信息管理 实现对学生、课程、班级、专业、
系部等基本信息的添加、删除、修改和查询功能。在学生表中添加或删除一条纪录,班级表中相应班级的学生人数就要加1或减1;在学生表中修改
某个学生的班级,班级表中相应班级的学生人数也要作相应改变。(3)学生选课 按学生专业为其提供可供选择的课程信息,学生参考提供的课程
信息进行选课,选了不合适的课可以退选。(4)选课查询 包括学生查询自己所选的课程,教师和教务人员查询选修某门课程的学生和某个学生选
修的课程。 13.3 系统设计返回目录13.3.2 系统功能设计(5)审核课程 根据选课情况审核开设课程,选课人数小于30人的课
程不开,课程设置学期不符合的课不开。(6)审核学生 取消不符合条件的学生或申请退课的学生的选课。(7)开启/关闭选课 由教务
人员开启学生选课功能,同时清除成绩<60分的选课记录。学生在一定时间段内可进行选课,到期教务人员关闭学生选课功能。(8)成绩录入
教师为学习某门课程的每个学生录入考试成绩。 (9)成绩查询 学生查询自己所学的各门课程的成绩,教师和教务人员以多种方式查询学生
各门课程成绩。 13.3 系统设计返回目录13.3.2 系统功能设计(10)成绩修改 教务人员修改学生考试成绩(11
)成绩汇总 教务人员和教师对成绩进行统计汇总,统计各班各门课程的均分、最高分和最低分,统计某班某门课程各个分数段的人数(1
2)用户管理 教务人员对用户进行添加、删除和修改等管理,用户可以修改自己的密码(13)帮助 为用户提供有关系
统使用方面的帮助信息(14)退出系统 结束程序,退出系统,释放全部资源 13.4 系统实现返回目录 在数据库管理
系统SQL Server 2005支持下 建立数据库,实现前面的数据库设计 开发应用程序,实现前面的系统功能设计13.4 系统实现
返回目录13.4.1 数据库实现1.建立数据库 LOG ON ( NAME = ''教务管理数据库_log'',FILENAME =
‘E:\sql\教务管理数据库 _log.ldf'', SIZE = 1M
B , MAXSIZE = UNLIMITED , FILEGROWTH = 10%)GO CREATE DATABASE 教务管
理数据库ON PRIMARY ( NAME = ''教务管理数据库'', FILENAME = ''E:\sql\教务管理数据库.md
f'' ,SIZE = 3MB ,MAXSIZE = UNLIMITED,FILEGROWTH = 1MB )13.4 系统实现返回
目录13.4.1 数据库实现2.建立表 按照前面的设计,依次建立: 系部表 专业表 班级表 学生表
课程表 选课表 用户表13.4 系统实现返回目录13.4.1 数据库实现 建立系部表: USE 教
务管理数据库GOCREATE TABLE 系部表(系部号 char(4) PRIMARY KEY,系部名 varchar(20)
NOT NULL UNIQUE,系主任 nchar(5) NULL,教师人数 smallint NULL ) 13.4 系统实现返
回目录13.4.1 数据库实现 建立专业表: CREATE TABLE 专业表(专业号 char(6) PRIMARY KEY,专
业名 varchar(20) NOT NULL,系部 char(4) NOT NULL REFERENCES 系部表 (系部号)O
N UPDATE CA
SCADE) 13.4 系统实现返回目录13.4.1 数据库实现 建立班级表: CREATE TABLE 班级表(班号 char(
5) PRIMARY KEY,班名 varchar(20) NOT NULL,班主任 nchar(5),学生人数 smallint
DEFAULT(0),专业 char(6) NOT NULL REFERENCES 专业表(专业号)ON
UPDATE CASCADE ) 13.4 系统
实现返回目录13.4.1 数据库实现 建立学生表: CREATE TABLE 学生表( 学号 char(11) PRIMARY K
EY, 姓名 nchar(5) NOT NULL, 性别 nchar(1) CHECK(性别=''男'' OR 性别=''女''), 出生
日期 datetime, 政治面貌 varchar(10) DEFAULT (''共青团员''), 入学时间 datetime, 联系
电话 char(20), 班级 char(5) REFERENCES 班级表 (班号) ON
UPDATE CASCADE, 备注 varc
har(200)) 13.4 系统实现返回目录13.4.1 数据库实现 建立课程表: CREATE TABLE 课程表(课程号 c
har(6) PRIMARY KEY,课程名 varchar(20) NOT NULL UNIQUE,学时 tinyint,学分
tinyint,课程类型 nchar(5) NOT NULL CHECK(课程类型 in(''专业课'',''专
业基础课'',''公共课'')),课程性质 nchar(2) CHECK(课程性质 in(''限选'' ,''选修'' ,''必修'')),考核方式
nchar(2) DEFAULT (''考试'') CHECK(考核方式 in(''考查'',''考试'')),学期
char(1) CHECK(学期 in(''8'',''7'',''6'',''5'',''4'',''3'',''2'',''1'')),备注 varchar(
200)) 13.4 系统实现返回目录13.4.1 数据库实现 建立选课表: CREATE TABLE 选课表(学号 char(1
1) REFERENCES 学生表(学号) ON UPDATE
CASCADE,课程号 char(6) REFERENCES 课程表(课程
号) ON UPDATE
CASCADE,成绩 numeric(5, 1),CONSTRAINT PK_选课表 PRIMARY KE
Y (学号,课程号)) 13.4 系统实现返回目录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.1 数据库实现3.实现完整性设计 在前面建表时,按照完整性设计,在每个表
上定义了主键约束,在每个表的相应字段上定义了非空、唯一、默认、检查、外键等约束 。 13.4 系统实现返回目录13.4.1 数据库
实现3.实现完整性设计 在选课表上创建了触发器T插入修改成绩 以保证成绩的值在0-100之间 13.4 系统实现返回目录13.
4.1 数据库实现3.实现完整性设计 CREATE TRIGGER T插入修改成绩 ON 选课表 for INSERT,UPDA
TEAS BEGIN SET NOCOUNT ON; declare @cj numeric(6,1) select @cj
=成绩 from inserted if @cj<0 or @cj>100 begin raiserr
or(''成绩不正确,必须在-100之间!'',16,10) rollback transaction en
d END13.4 系统实现返回目录13.4.1 数据库实现3.实现完整性设计 在系部表上创建了触发器T插入修改系部号、T删除系
部; 在专业表上建立了触发器T插入修改专业号、T删除专业; 在学生表上建立触发器T插入修改学号; 在课程表上建立了触发器T插入修改
课程号。 这些触发器分别在插入和修改系部号、专业号、学号、课程号时触发执行,以保证了系部号、专业号、学号、课程号的正确有效,实现用
户定义完整性设计。 CREATE TRIGGER T插入修改系部号 ON 系部表 AFTER INSERT,UPDATEAS i
f update(系部号)BEGIN SET NOCOUNT ON declare @xbh1 char(4),@
xbh2 char(4) select @xbh2=系部号 from inserted if @xbh2 not
like ''00[0-9][0-9]'' begin raiserror(''系部号不正确!'',16,10) roll
back transaction end if exists (select from deleted)
begin select @xbh1=系部号 from deleted update 专业表 set 专业号=@xb
h2+right(专业号,2)
where left(专业号,4)=@xbh1 update 课程表 set 课程号=right(@xbh2
,2)+right(课程号,4) w
here left(课程号,2)=right(@xbh1,2) update 学生表 set 学号=left(学号,4)+righ
t(@xbh2,2)+right(学号,5)
where substring(学号,5,2)=right(@xbh1,2) endEND 创建触发器T插入修改系
部号:CREATE TRIGGER T删除系部 ON 系部表 AFTER deleteAS BEGIN SET NOCOUNT
ON; declare @xbh char(4) select @xbh=系部号 from deleted if exists(
select from 专业表 where left(专业号,4)=@xbh) begin raiserror(''系部号
在使用,不可删除!'',16,10) rollback transaction endEND创建触发器T删除系部:CREATE
TRIGGER T插入修改专业号 ON 专业表 AFTER INSERT,UPDATEAS if update(专业号)BEG
IN SET NOCOUNT ON; declare @zyh1 char(6),@zyh2 char(6) select
@zyh2=专业号 from inserted if (@zyh2 not like ''00[0-9][0-9][0-9][0
-9]'') or not exists (select 系部号 from 系部表 where l
eft(@zyh2,4)= 系部号) begin raiserror(''专业号不正确!'',16,10)
rollback transaction end if exists (select from deleted)
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 ON; declare @zyh ch
ar(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,UPDATEAS if update
(学号)BEGIN SET NOCOUNT ON; declare @xh char(11) select @xh=学号 f
rom inserted if (@xh not like ''[0-9][0-9][0-9][0-9][0-9][0-9][0
-9][0-9][0-9][0-9][0-9]'') or not exists (select 专业号 from 专业
表 where substring(@xh,5,4)=
right(专业
号,4)) begin raiserror(''学号不正确!'',16,10) rollback transaction
endEND 创建触发器T插入修改学号 :CREATE TRIGGER T插入修改课程号 ON 课程表 AFTER INSER
T,UPDATEAS if update(课程号)BEGIN SET NOCOUNT ON; declare @kch cha
r(6),@kclx nchar(5) select @kch=课程号 from inserted select @kclx=
课程类型 from inserted if @kclx=''公共课'' if @kch not like ''0000[0-9]
[0-9]'' begin raiserror(''课程号不正确!'',16,10) rollb
ack transaction end if @kclx<>''公共课'' if (@kch not like ''
[0-9][0-9][0-9][0-9][0-9][0-9]'') or not exists (select 专业号 f
rom 专业表 where left(@kch,4)= right(专业号,4)) begin raise
rror(''课程号不正确!'',16,10) rollback transaction endEND 创建触
发器T插入修改课程号:13.4 系统实现返回目录13.4.1 数据库实现4.建立视图 按照前面的设计建立视图: V学生成绩:包含学
生学号、姓名、所选课程、所得成绩、所在班级等V学生信息:包含学生基本信息和所在班级、专业、所在系V班级信息:包含班级基本信息和所属
专业、所在系V专业信息:包含专业基本信息和所在系 CREATE VIEW V学生成绩ASSELECT dbo.班级表.班名, d
bo.学生表.学号, dbo.学生表.姓名, dbo.课程表.课程号,
dbo.课程表.课程名, dbo.选课表.成绩FROM dbo.学生表 INNER JOIN dbo.选课
表 ON dbo.学生表.学号= dbo.选课表.学号 INNER JOIN dbo.课程表 ON dbo.
选课表.课程号= 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.学生表.班级= dbo.班级表.班号
LEFT JOIN dbo.专业表 ON dbo.班级表.专业= dbo.专业表.专业号 LEF
T JOIN dbo.系部表 ON dbo.专业表.系部= dbo.系部表.系部号 建立视图V学生信息 :CREATE VIEW
V班级信息ASSELECT dbo.班级表.班号, dbo.班级表.班名, dbo.班级表.班主任, db
o.班级表.学生人数, dbo.班级表.专业, dbo.专业表.专业名, dbo.专业表.系部, dbo.
系部表.系部名FROM dbo.班级表 INNER JOIN dbo.专业表 ON dbo.班级表.专业= db
o.专业表.专业号 INNER JOIN dbo.系部表 ON dbo.专业表.系部= dbo.系部表.系部号
建立视图V班级信息 :CREATE VIEW V专业信息ASSELECT dbo.专业表.专业号, dbo.专业表.专业名,
dbo.专业表.系部, dbo.系部表.系部名FROM dbo.专业表 INNER J
OIN dbo.系部表 ON dbo.专业表.系部= dbo.系部表.系部号 建立视图V专业信息 :13.4 系统实现返回目录13
.4.1 数据库实现5.建立存储过程和触发器 分析前面的系统功能设计,有些功能可以在后台由SQL Server来实现,有些则需
要在前台由应用程序来实现。 确定哪些功能由SQL Server来实现,哪些功能由应用程序来实现。 对于由SQL Server来
实现的功能,可以通过存储过程、触发器等来实现。 13.4 系统实现返回目录13.4.1 数据库实现5.建立存储过程和触发器 根据
前面的功能设计,当在学生表中添加或删除一条记录后,班级表中相应班级的学生人数就要加1或减1,当在学生表中修改某个学生的班级后,班级
表中相应班级的学生人数也要作相应改变 这些功能在SQL Server端实现,为此建立触发器: T添加学生
T删除学生 T更改学生班级
T插入修改人数 create TRIGGER T添加学生 ON 学生表 AFTER INSERTAS BEGIN SE
T NOCOUNT ON declare @xh char(11) select @xh=学号from inserted u
pdate 班级表 set 学生人数=学生人数+1 from inserted where 班号=inserted.班级
insert 用户表(用户名,密码,用户类型) values (@xh,''1'',''学生'')END 建立触发器T添加学生 :CRE
ATE TRIGGER T删除学生 ON 学生表 AFTER DELETEAS BEGIN SET NOCOUNT
ON UPDATE 班级表 SET 学生人数=学生人数-1 FROM deleted WH
ERE 班级表.班号=deleted.班级 DELETE 用户表 FROM deleted WHER
E 用户名=deleted.学号END 建立触发器T删除学生 :CREATE TRIGGER T更改学生班级 ON 学生表
AFTER UPDATEAS IF UPDATE(班级) BEGIN SET NOCOUNT ON UPD
ATE 班级表 SET 学生人数=学生人数-1 FROM deleted WHERE
班级表.班号= deleted .班级 UPDATE 班级表 SET 学生人数=学生人数+1
FROM inserted WHERE 班级表.班号=inserted.班级END 建立触发器T更改学生班级 :C
REATE 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 班级=@bh if @n1!=@n2 begin
raiserror(''学生人数自动生成,不必输入!'',16,1) rollback transaction endEND
建立触发器T插入修改人数 :13.4 系统实现返回目录13.4.1 数据库实现5.建立存储过程和触发器 根据前面的功能设计,学生
选课时,系统需按学生专业为其提供可供选择的课程信息,包括公共课的课程信息。 这一功能也在后台实现,为此建立存储过程P选课信息。US
E 教务管理数据库GOCREATE PROCEDURE P选课信息 @xh char(11) ASBEGIN SET NOCO
UNT ON; SELECT distinct from 课程表 where left(课程号,4)=substring(
@xh,5,4) or left(课程号,4)=''0000''END 建立存储过程P选课信息 :13.4 系统实现返回目录13.4.
1 数据库实现5.建立存储过程和触发器 在前面还设计了成绩汇总功能,统计各班各门课的均分、最高分、最低分,统计某个班某门课程各
个分数段人数、最高分、最低分和均分。 这些功能在后台实现,为此建立存储过程 P各班各科成绩汇总 P某班某
科成绩汇总 USE 教务管理数据库GOCREATE PROCEDURE P各班各科成绩汇总 ASBEGIN SET NOCOUN
T 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 declare @s1
int,@s2 int,@s3 int select @n1 = count(学号+课程号) from V学生成绩
where 班名= @bm and 课程名= @kcm and 成绩>=90 and 成绩<=100 s
elect @n2 = count(学号+课程号) from V学生成绩 where 班名= @
bm and 课程名= @kcm and 成绩>=80 and 成绩<=89 select @n3 = count(学号+课程号
) from V学生成绩 where 班名= @bm and 课程名= @kcm and 成绩>
=70 and 成绩<=79 select @n4 = count(学号+课程号) from V学生成绩
where 班名= @bm and 课程名= @kcm 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,@n3 分数70_79,@n4 分数60_69,
@n5 分数60以下,@s1,@s2,@s3END 建立存储过程P某班某科成
绩汇总 :13.4 系统实现返回目录13.4.2 系统功能实现 后台数据库设计实现后,接下来按照前面系统功能设计,使用Visua
l Basic开发应用程序,为用户提供友好的人机交互界面,实现前面所作的功能设计。 13.4 系统实现返回目录13.4.2 系统功
能实现1.建立工程项目(1)启动VB,选择“文件→新建工程”菜单命令,从弹出的“工程模板”对话框中选择“标准EXE”项,单击“确定
”按钮。(2)选择“工程→工程属性”菜单命令,弹出“工程属性”对话框,在“通用”选项卡中的“启动对象”下拉列表中选择Sub Mai
n项,在工程名称文本框中输入:教务管理系统。单击“确定”按钮。 这一步设置启动对象为Sub Main,当应用程序启动时,先调用名为
Main的子过程,子过程Main将包含在工程的模块文件中。(3)选择“文件→保存工程”菜单命令,保存工程,工程文件命名为jwgl.
vbp。 13.4 系统实现返回目录13.4.2 系统功能实现2.建立工程模块 工程模块是公用模块,在这个模块中可以定义整个工程
项目公用的全局变量、函数等。 整个工程项目中的任何地方都可以调用公用模块中的变量、函数。 这一模块也可用来启动程序。 13.4
系统实现返回目录13.4.2 系统功能实现2.建立工程模块(1)选择“工程→添加模块”菜单命令。(2)在“属性”栏中指定模块名称
,如modulel。(3)选择“工程→引用”菜单命令,在弹出的“引用”对话框中选中“Microsot ActiveX Data O
bjects 2.5 Library”项,然后单击“确定”按钮。(4)在“工程浏览器”中双击modulel模块,打开代码设计窗口,
在该窗口中可以定义全局变量、函数等。 教务管理系统工程模块:'' 定义全局变量Option Explicit '' 强制声明变量
Public strSrvName As String '' 用于放服务器名Public strUserName As Strin
g '' 用于放用户名Public strUserType As String '' 用于放用户类型Public strCnUs
erName As String '' 用于放连接用户名Public strCnPassword As String ‘ 用于
放连接口令'' main子过程 Sub Main() frmMain.Show frmDl.Show frmDl.
txt用户名.SetFocusEnd Sub'' 定义数据库连接字符串函数Public Function ConnectString
() As String ConnectString = "Provider=SQLOLEDB.1;Persist Secur
ity Info=False; Password=" & strCnPas
sword & "; User ID=" & strCnUserName
& "; Initial Catalog=教务管理数据库;
Data Source=" & strSrvNameEnd Function 教务管理系
统工程模块:'' 定义数据库操作函数Public Function ExecSQL(ByVal sql As String) As
ADODB.Recordset On Error GoTo ErrHandler: Dim cn As ADODB.C
onnection '' 定义连接对象 Dim rs As ADODB.Recordset '' 定义记录集对象
Dim strArray() As String Set cn = New ADODB.Connection '' 创建连接
对象cn Set rs = New ADODB.Recordset '' 创建记录集对象rs strArray =
Split(sql) cn.Open ConnectString '' 与数据库建立连接 If
StrComp(UCase(strArray(0)), "select", vbTextCompare) = 0 Then
rs.Open Trim(sql), cn, adOpenKeyset, adLockOptimistic
Set ExecSQL = rs '' 返回查询结果集 Else cn.Execute sql
End IfExecSQl_Exit: Set rs = Nothing Set cn = Nothing
Exit Function教务管理系统工程模块:ErrHandler: '' 显示错误信息 MsgBox "错误号:
" & Err.Number & "错误信息:" & Err.Description, vbExclamation Resu
me ExecSQl_ExitEnd Function 函数ConnectString(),用于设置数据库连接字符串
函数ExecSQL(),用于执行查询、添加、更新和删除等操作 在教务管理系统中,基本上每个功能的实现都要涉及到访问数据库,而
对数据的访问操作不外是select、insert、update、delete等,因此,我们把这些操作定义为一个函数,放在公用模块中
,可以被任何模块调用,以实现对数据库的访问操作。 13.4 系统实现返回目录13.4.2 系统功能实现3.建立主窗体(1)添加窗体
。 选择“工程→添加MDI窗体”菜单命令,添加一个多文档窗体。(2)设置主窗体属性 在“属性”栏中将窗体名称设置为
frmMain,标题Caption设置为“教务管理系统”,WindowState设置为2-Maximized。Picture设置为
用作界面背景的图片。(3)创建菜单 单击工具栏中的“菜单编辑器”,在打开的“菜单编辑器”对话框中编辑菜单项。创建主窗体的菜
单。 13.4 系统实现返回目录13.4.2 系统功能实现3.建立主窗体(4)创建工具栏 使用Toolbar控件和Imag
eList控件创建工具栏,Toolbar控件作为按钮的容器,ImageList控件为Toolbar控件的按钮提供图片。注意,Too
lbar控件和ImageList控件需先添加到工具箱才能使用。通过选择“工程→部件”菜单命令,选择其对话框中的“Microsoft
Windows Common Controls 6.0”项,可将它们添加到工具箱。(5)创建状态栏 使用StatusBa
r控件创建状态栏。StatusBar控件也需通过选择“工程→部件”菜单命令,选择“Microsoft Windows Common
Controls 6.0”项,将它们添加到工具箱。 教务管理系统的主窗体界面 返回目录教务管理系统菜单 返回目录教务管理系统菜单
返回目录13.4 系统实现返回目录13.4.2 系统功能实现4.实现登录功能 登录窗体设计 :一个框架(Frame)两个文本框(
TextBox)两个命令按钮(CommandButton)两个标签(Label) Private Sub cmdQr_Click(
) '' 实现数据库连接和用户登录功能 Dim sql As String Dim rs As ADODB.Recordse
t If Trim(txt用户名.Text) = "" Then MsgBox "请输入用户名!", vbExclama
tion txt用户名.SetFocus Exit Sub End If strCnUserName = "s
a" strCnPassword = "sa" sql = "select from 用户表 where 用户名=''" &
txt用户名.Text & "''" Set rs = ExecSQL(sql) '' 从用户表中提取输入的用户名信息 I
f rs.EOF = True Then MsgBox "没有此用户,请重新输入用户名!", vbExclamation
txt用户名.SetFocus Else If Trim(rs!密码) = Trim(txt密码.Text) T
hen strUserType = rs!用户类型 strUserName = rs!用户名
rs.Close Unload frmMain Load frmMain frmM
ain.Show Unload Me“确认”按钮的Click事件代码 : Else MsgBox
"密码不正确,请重新输入密码!", vbExclamation txt密码.SetFocus txt
密码.Text = "" End If End If'' 状态栏显示用户 frmMain.StatusBar1.Pan
els(1).Text = "用户:" & Trim(strUserName) sql = "select from 用户
表 where 用户名=''z''" Set rs = ExecSQL(sql) '' 提取用户表中特殊记录,用作启动选课标志
Select Case Trim(strUserType) Case "学生" If rs.Fiel
ds(2) = "1" Then frmMain.mnuXsxk.Enabled = True
End If '' 判断是否启动了选课,若已启动,则学生选课可用 frmMai
n.mnuXkcx.Enabled = True frmMain.mnuGrcx.Enabled = Tru
e frmMain.mnuXkcx1.Enabled = False frmMain.
mnuCjcx.Enabled = True frmMain.mnuXgmm.Enabled = True
strCnUserName = "学生" strCnPassword = "1"“确认
”按钮的Click事件代码 : Case "教师" frmMain.mnuXscx.Enabled =
True frmMain.mnuKccx.Enabled = True frmMai
n.mnuBjcx.Enabled = True frmMain.mnuZycx.Enabled = Tru
e frmMain.mnuXbcx.Enabled = True frmMain.mn
uXkcx.Enabled = True frmMain.mnuXkcx1.Enabled = True
frmMain.mnuCjlr.Enabled = True frmMain.mnuCj
cx.Enabled = True frmMain.mnuCjhz.Enabled = True
frmMain.mnuXgmm.Enabled = True strCnUserName = "
教师" strCnPassword = "1" Case "教务人员" frm
Main.mnuXsgl.Enabled = True frmMain.mnuKcgl.Enabled =
True … … If rs.Fields(2) = "1" Then
frmMain.mnuQdxk.Caption = "终止选课" '' End If
strCnUserName = "教务人员" strCnPassword = "1" En
d Select End Sub “确认”按钮的Click事件代码 :13.4 系统实现返回目录13.4.2 系统功能实现5.实现
基本信息管理功能 基本信息管理包括: 学生管理、课程管理、班级管理、专业管理、系部管理 这些管理包括对相应信息的添加、修改、删除
、查询等 不同管理模块的实现方法相类似 这里给出学生管理中添加学生信息的实现方法 13.4 系统实现返回目录13.4.2 系统功能
实现5.实现基本信息管理功能 添加学生信息窗体设计 :九个标签六个文本框四个命令按钮一个组合框(ComboBox) 名为cmb
性别,用于以选择方式输入性别两个DTPicker 名为DTP出生日期和DTP入学时间,用于以下拉式日历方式快速输入日期时间
Private Sub cmdTj_Click() On Error GoTo ErrHandler: '' 判断是否输入了学
号 If Trim(txt学号.Text) = "" Then MsgBox "请输入学号", vbOKOnly, "提示
" txt学号.SetFocus Exit Sub End If '' 判断学号是否正确 If Not IsNum
eric(Trim(txt学号.Text)) Or Len(Trim(txt学号.Text)) <> 11 Then Msg
Box "学号应为11位数字,请重新输入!", vbOKOnly, "提示" txt学号.SetFocus Exit
Sub End If '' 判断是否输入了姓名 If Trim(txt姓名.Text) = "" Then MsgBox
"请输入姓名", vbOKOnly, "提示" txt姓名.SetFocus Exit Sub End If “
添加”按钮的Click事件代码 :'' 判断是否输入了性别 If cmb性别.Text = "" Then MsgBox "
请输入性别", vbOKOnly, "提示" cmb性别.SetFocus Exit Sub End If '' 判
断是否输入了班级 If Trim(txt班级.Text) = "" Then MsgBox "请输入班号", vbOKOn
ly, "提示" Exit Sub End If If Len(Trim(txt姓名.Text)) > 5 Then
txt姓名.Text = Left(Trim(txt姓名.Text), 5) End If If Len(Trim(txt
政治面貌.Text)) > 10 Then txt政治面貌.Text = Left(Trim(txt政治面貌.Text),
10) End If If Len(Trim(txt联系电话.Text)) > 20 Then txt联系电话.Text
= Left(Trim(txt联系电话.Text), 20) End If If Len(Trim(txt备注.Text))
> 200 Then txt备注.Text = Left(Trim(txt备注.Text), 200) End If “添加
”按钮的Click事件代码 :'' 根据学号判断数据库中是否有重复的记录 sql = "select from 学生表 whe
re 学号=''" _ & Trim(txt学号.Text) & "''" Set rs = ExecSQL
(sql) If rs.EOF = False Then MsgBox "学号已存在,请重新输入!", vbOKOnly,
"提示" rs.Close txt学号.SetFocus Exit Sub End If '' 添加一条记录
进入数据库中 rs.AddNew rs.Fields("学号") = Trim(txt学号.Text) rs.Fields(
"姓名") = Trim(txt姓名.Text) rs.Fields("性别") = cmb性别.Text rs.Fields
("出生日期") = DTP出生日期.Value If Trim(txt政治面貌.Text) <> "" Then rs.
Fields("政治面貌") = Trim(txt政治面貌.Text) End If “添加”按钮的Click事件代码 :
rs.Fields("入学时间") = DTP入学时间.Value rs.Fields("联系电话") = Trim(txt联系
电话.Text) rs.Fields("班级") = Trim(txt班级.Text) rs.Fields("备注") = T
rim(txt备注.Text) rs.Update MsgBox "添加数据成功", vbOKOnly, "提示" rs.C
lose txt学号.Text = "" txt姓名.Text = "" DTP出生日期.Value = "1989-1-1
" txt政治面貌.Text = "" DTP入学时间.Value = "2007-9-1" txt联系电话.Text =
"" txt班级.Text = "" txt备注.Text = "" Exit SubErrHandler: MsgBox
"错误:" & Err.Description, vbOKOnly, "提示"End Sub “添加”按钮的Click事件代码
:13.4 系统实现返回目录13.4.2 系统功能实现6.实现选课管理功能 选课管理功能包括: 学生选课、选课查询、个人选课查询
、审核开设课程、审核选课学生、启动或终止选课功能 这里给出学生选课功能的实现 13.4 系统实现返回目录13.4.2 系统功能实现
6.实现选课管理功能 学生选课窗体设计 :一个DataGrid控件 需通过选择菜单“工程→部件”,在部件对话框中选择“Micr
oSoft DataGrid Controls 6.0 (OLEDB)”组件,将其加入工具箱,才能使用。 一个Adodc控件 需
通过选择菜单“工程→部件”,在部件对话框中选择“MicroSoft ADO Data Controls 6.0 (OLEDB)”组
件,将其加入工具箱,才能使用。 学生选课窗体的控件及主要属性设置 '' 窗体加载事件Private Sub Form_Load()A
dodc1.ConnectionString = ConnectStringDim str As String If strUs
erType = "学生" Then lblQxk.Caption = "您的学号为:" & strUserName & "
,请开始选课:" str = "Exec p选课信息 ''" & strUserName & "''" Adodc1.Rec
ordSource = str Adodc1.Refresh For i = 0 To 8 dtgrdKcx
x.Columns(i).Locked = True Next cmdQc.Enabled = False End
IffrmMain.Enabled = FalseEnd Sub'' 加入按钮单击事件Private Sub cmdJr_Click
() For i = 0 To List1.ListCount - 1 If List1.List(i) = dtgrdK
cxx.Columns(1) Then MsgBox "该课程已选,不能重复选择!", vbOKOnly, "警告"
Exit Sub End If Next List1.AddItem dtgrdKcxx.Columns(1).
TextEnd Sub 学生选课窗体模块代码 :'' 去除按钮单击事件Private Sub cmdQc_Click() intI
ndex = List1.ListIndex '' 获取选定项的索引 If intIndex >= 0 Then List
1.RemoveItem intIndex cmdQc.Enabled = False End IfEnd Sub'' 列表
框单击事件Private Sub List1_Click() cmdQc.Enabled = List1.ListIndex <
> -1End Sub''提交按钮单击事件Private Sub cmdTj_Click() Dim kcm, kch, sql
As String Dim rs1, rs As ADODB.Recordset If List1.ListCount = 0
Then MsgBox "请选择课程!", vbOKOnly, "提示" Exit Sub End If For
i = 0 To List1.ListCount - 1 kcm = Trim(List1.List(i)) sql
= "select 课程号 from 课程表 where 课程名 = ''" & kcm & "''" Set rs1 = E
xecSQL(sql) kch = rs1.Fields(0).Value学生选课窗体模块代码 : sql = "se
lect from 选课表 where 课程号 = ''" _ & kch & "'' and 学号 =
''" & strUserName & "''" Set rs = ExecSQL(sql) If rs.EOF = Fa
lse Then List1.ListIndex = i MsgBox "该课程已选过,不再提交!", vbO
KOnly, "提示" List1.List(i) = "" List1.ListIndex = -1
List1.Refresh cmdQc.Enabled = False rs.Close Else
rs.AddNew rs.Fields(0).Value = strUserName rs.Fiel
ds(1).Value = kch rs.Fields(2).Value = Null rs.Update
rs.Close flag = 1 End If Next If List1.ListCount <>
0 And flag = 1 Then MsgBox "所选课程提交成功!", vbOKOnly, "提示" End I
f List1.ClearEnd Sub 学生选课窗体模块代码 :'' 浏览按钮单击事件Private Sub cmdLl_Cli
ck() frmLlgg.ShowEnd Sub'' 返回按钮单击事件Private Sub mdFh_Click() Unlo
ad MeEnd Sub'' 窗体卸载事件Private Sub Form_Unload(Cancel As Integer) f
rmMain.Enabled = TrueEnd Sub学生选课窗体模块代码 :13.4 系统实现返回目录13.4.2 系统功能实
现7.实现成绩管理功能 成绩管理功能包括: 成绩录入、成绩查询、成绩修改、成绩汇总 这里给出成绩汇总功能的实现 13.4 系统实
现返回目录13.4.2 系统功能实现7.实现成绩管理功能 成绩汇总窗体设计 :六个标签两个文本框两个命令按钮一个DataGrid
一个Adodc '' 窗体加载事件Private Sub Form_Load() Adodc1.ConnectionString
= ConnectStringfrmMain.Enabled = FalseEnd Sub'' 确定按钮单击事件Private Su
b cmdQd_Click() If Trim(txtBm) = "" Or Trim(txtKcm) = "" Then
Adodc1.RecordSource = "execute P各班各科成绩汇总" Adodc1.Refresh l
bl3.Caption = "各班各科成绩汇总:" lbl4.Caption = "" lbl5.Caption =
"" lbl6.Caption = "" Else Adodc1.RecordSource = "execute P
某班某科成绩汇总 ''" & Trim(txtBm) & "'',''" & Trim(txtKcm) & "''" Adodc1.
Refresh lbl3.Caption = Trim(txtBm.Text) & Trim(txtKcm.Text) &
"课程各分数段人数:" lbl4.Caption = "最高分: " & Trim(dtgrdHz.Columns(5).T
ext) lbl5.Caption = "最低分: " & Trim(dtgrdHz.Columns(6).Text)
lbl6.Caption = "均 分: " & Trim(dtgrdHz.Columns(7).Text) For i
= 5 To 7 dtgrdHz.Columns(i).Visible = False Next End If
End Sub成绩汇总窗体模块代码 :'' 返回按钮单击事件Private Sub cmdFh_Click() Unload MeEnd Sub'' 窗体卸载事件Private Sub Form_Unload(Cancel As Integer) frmMain.Enabled = TrueEnd Sub 成绩汇总窗体模块代码 :13.4 系统实现返回目录13.4.2 系统功能实现8.实现用户管理功能 用户管理功能包括: 修改密码、添加用户、删除用户、修改用户信息。 修改密码的功能是用户修改自己的密码 这里给出修改密码的实现方法 13.4 系统实现返回目录13.4.2 系统功能实现8.实现用户管理功能 修改密码窗体设计 :一个框架两个标签两个文本框两个命令按钮 '' 窗体加载事件Private Sub Form_Load() frmMain.Enabled = FalseEnd Sub'' 返回按钮单击事件Private Sub cmdFh_Click() Unload MeEnd Sub'' 窗体卸载事件Private Sub Form_Unload(Cancel As Integer) frmMain.Enabled = True 修改密码窗体模块代码 :'' 确定按钮单击事件Private Sub cmdQr_Click() Dim sql As String Dim rs As ADODB.Recordset If Trim(txt密码1.Text) = "" Then MsgBox "请输入新密码!", vbOKOnly, "提示" Exit Sub End If If strUserName = "z" Then MsgBox "特殊用户不允许更改密码!", vbOKOnly, "提示" Exit Sub End If ''判断密码输入是否一致 If Trim(txt密码1.Text) <> Trim(txt密码2.Text) Then MsgBox "密码确认不一致!", vbOKOnly, "提示" Else ''对当前用户的密码进行修改 sql = "select from 用户表 where 用户名=''" & strUserName & "''" Set rs = ExecSQL(sql) rs.Fields(2) = Trim(txt密码1.Text) rs.Update rs.Close MsgBox "密码修改成功!", vbOKOnly, "提示" Unload Me End IfEnd Sub修改密码窗体模块代码 :13.4 系统实现返回目录13.4.2 系统功能实现9.实现帮助单击“帮助→内容”菜单项,调用帮助文件help.chm实现这一功能的程序代码如下:Private Sub mnuNr_Click() Shell "hh.exe " & App.Path & "\help.chm", vbNormalFocusEnd Sub帮助文件使用Visual CHM制作13.4 系统实现返回目录13.4.2 系统功能实现10.实现退出 单击“退出”菜单项,结束程序,退出系统 实现这一功能的程序代码如下:Private Sub mnuTc_Click() EndEnd Sub 13.4 系统实现返回目录13.4.2 系统功能实现 系统实现后,应整理、编写系统的技术文档,对各环节的技术资料进行归纳整理,给出设计全过程所采用的技术手段和实现措施。包括系统需求描述,数据库设计的E-R模型、关系模型,系统功能设计的功能模块总体结构,应用程序清单等。另外,还应编写使用说明书,给出该系统详细的使用操作步骤,以及使用和维护工作中的注意事项。这些文档资料在系统投入运行后一并交给用户。小结返回目录 数据库应用系统的开发,包括系统分析、系统设计和系统实现。 系统需求分析是系统开发的基础。 系统设计包括数据库设计和系统功能设计,两方面设计结合进行。其中数据库设计是关键,直接影响系统功能的实现和性能的优劣。 系统实现是系统开发的目的,包括两个步骤:(1)在服务器端建立数据库、表、完整性约束、视图、触发器、存储过程等,实现数据库设计,也可实现部分功能设计。(2)在客户端使用应用程序开发工具编写应用程序,提供用户界面,实现系统功能设计。
献花(0)
+1
(本文系大高老师原创)