数据库 学生选课管理系统 - 范文中心

数据库 学生选课管理系统

02/18

数 据 库

课 程 设 计

学生选课管理系统 设计题目

组长姓名

组长学号 X X X X 1132101102

专业班级 11计算机应用技术班

指导教师 X X X X

信 息 工 程 院 计算机科学与技术 系

2012 年12月24日

数据库课程设计任务及成绩

院(系):信息工程学院 教研室:软件教研室

指导老师:

2012 年12月24日

目 录

第一章 绪 论 . ................................................................................................................................ 0

1.1 课题研究的目的和意义 . .................................................................................................. 0

1.2 系统作用及范围 . .............................................................................................................. 0

1.3 系统的特点 . ...................................................................................................................... 0

1.4 学生成绩管理系统发展及现状 . ...................................................................................... 0

第二章 设计内容 . .......................................................................................................................... 2

2.1 需求分析 . ........................................................................................................................ 2

2.1.1 应用需求分析 . .......................................................................................................... 2

2.1.2 运行需求分析 . .......................................................................................................... 3

2.1.3 功能的需求分析 . ...................................................................................................... 3

2.1.4数据流程图 . ............................................................................................................... 5

2.1.5数据字典表示 . ........................................................................................................... 5

2.2 系统实现的功能 . .............................................................................................................. 7

2.3 概念设计结构 . .................................................................................................................. 7

2.4 逻辑结构设计 . .................................................................................................................. 0

第三章 物理结构设计 . .................................................................................................................... 0

3.1创建数据库 . ....................................................................................................................... 0

3.2 表的建立 . .......................................................................................................................... 1

3.3 基本表的关系图 . ............................................................................................................ 4

3.4 视图 . .................................................................................................................................. 4

3.5 存储过程 . .......................................................................................................................... 8

3.6 查询 . ................................................................................................................................ 12

3.7 触发器 . ............................................................................................................................ 16

谢 辞 .............................................................................................................................................. 25

综 述 .............................................................................................................................................. 40

摘 要

学生选课管理系统是学校一个不可缺少的重要部分,它的内容对于学校的决策者和管理者来说至关重要,所以学生选课管理系统应该为用户提供充足的信息和快捷的查询手段。当前大部分学校没有一个完善的学生选课信息管理平台,计算机使用主要基于Microsoft office,不能发挥有效地作用,而且随着我国教育的改革,学生可选择科目的多样化,使得学校对学生选课管理越趋繁琐、复杂,工作量大,这种传统的学校选课管理模式已不能满足当前的发展,随着计算机应用的完善以及深入,利用计算机能够对学生成绩进行统一管理,实现学生选课信息管理工作流程的系统化、规范化和自动化,以及全面的、相对集中的、只智能化的信息综合管理,提高办事效率,为学校的教学管理带来方便。

该学生选课管理系统特点:本系统借助于计算机的知识,能够在SQL Server 2000平台上,实现学生的基本信息查询、成绩查询、选课以及教师的基本信息查询、添加和修改学生的信息等。此外本系统还设置了重要的管理员一职,其权限可对学生的基本信息、教师的基本信息、课程信息进行管理,提高了系统的安全性,也有利于学校教务的管理。

关键词: 学生选课管理;SQL ;数据库

第一章 绪 论

1.1 课题研究的目的和意义

希望通过课本所学的理论知识和实际有机结合起来完成本课题的设计与制作,一方面锻炼自我实际分析问题和解决问题的能力,从而提高自我适应实际、实践编程的能力,是对数据库系统原理整体的掌握,也是对自己所学知识的自我检验;另一方面随着信息时代的到来,计算机的普及,建立学生选课管理系统,采用计算机对学生选课进行管理,实现学生选课信息管理工作流程的系统化、规范化和自动化,以及全面的、相对集中的、只智能化的信息综合管理,提高办事效率,为学校的教学管理带来了方便。

1.2 系统作用及范围

该系统可以提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。能够对学生成绩进行统一管理,实现学生选课信息管理工作流程的系统化、规范化和自动化。

该系统适用于各高校学生的课程网上选择,包含教师信息管理、学生信息管理、课程信息管理、选修信息管理和讲授信息管理。

1.3 系统的特点

学生选课管理系统借助于计算机的知识,能够在SQL Server 2000平台上,实现学生的基本信息查询、成绩查询、选课以及教师的基本信息查询、添加和修改学生的信息等。此外本系统还设置了重要的管理员一职,其权限可对学生的基本信息、教师的基本信息、课程信息进行管理,提高了系统的安全性,也有利于学校教务的管理。

1.4 学生成绩管理系统发展及现状

学生选课是学校教学环节开展的前提和基础,是学校工作的重要组成部分。一直以来人们使用传统人工的方式管理文件挡案,这种管理方式存在着许多缺

点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。

随着我国教育的改革,学生可选择科目的多样化,使得学校对学生选课管理越趋繁琐、复杂,工作量大,当前大部分学校没有一个完善的学生选课信息管理平台,而传统的学校选课管理模式已不能满足当前的发展。因此随着计算机应用的完善以及深入,其强大的功能已为人们深刻认识。使用计算机对选课信息进行管理,有着手工管理所无法比拟的优点,例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高人事劳资管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。 因此,建立一个学生选课系统,使选课管理工作规范化、系统化、程序化,避免选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。能够对学生成绩进行统一管理,实现学生选课信息管理工作流程的系统化、规范化和自动化,以及全面的、相对集中的、智能化的信息综合管理,提高办事效率,为学校的教学管理带来方便。

第二章 设计内容

2.1 需求分析

简单地说,需求分析就是分析用户的需求。在需求分析阶段,系统分析员将分析结果用数据流程图和数据字典表示。

需求分析的主要任务是:详细调查现实世界要处理的对象;充分了解原系统的概况和发展前景;明确用户的各种需求;收集支持系统目标的基础数据及其处理方法;确定新系统的功能和边界。

学生选课管理系统是高等院校学生管理事务中的一项重要工作,在管理过程中涉及大量的数据处理,而传统的人工统计与查询已经无法完全胜任。特别是实行高校后勤社会化、教学制度改革以后,学生信息量大幅度增加,相关数据的处理也相当的繁琐,为人工查询带来了更大的工作量,而现行的教务管理系统在这方面有欠缺。为此,提出本课题。

2.1.1 应用需求分析

本系统主要控制教师信息管理、学生信息管理、课程信息管理、选修信息管理和讲授信息管理,其中教师信息管理有教师职工号、教师姓名、性别、职称;学生信息管理有学生学号、学生姓名、性别、籍贯、出生日期,所属院系,所属班级;课程信息管理有课程号、课程名称、学时、学分;选修信息管理有学号、课程号、成绩;讲授信息管理有课程号、职工号。

(1)学生信息模块完成学生的登录,按照提示用户选择是管理员、学生还是教师身份,选择学生项,并提示输入学生学号和密码,验证后进入主控操作界面。

(2)课程信息管理包括了选修课相关的所有信息,学生可以根据这些信息进行选课。

(3)教师信息模块提供个门选修课的授课老师信息,以及老师可以查询的当前教学任务和选课的所有学生信息,学生选课的同时会自动显示出各科的授课老师信息。管理员对整个系统进行管理与控制,可以查看老师与学生的所有信息。

2.1.2 运行需求分析

硬件环境:需配备数据库服务器,本系统对个人计算机无特殊硬件要求,普通个人pc 都可以运行。

软件环境:本系统是基于windows 系统开发的,因此windows 2000 以上的个人pc 机都能较好地运行本系统。

2.1.3 功能的需求分析

用户登录:输入用户名和密码,选择用户类型(学生,教师,管理员),验证通过以后,根据不同用户类型转到不同的页面,具有不同的权限。

学生:选课功能、成绩查询功能。教师:成绩录入功能。系统管理员:课程信息管理功能。

学生选课:学生登录后,进入选课管理功能单元,如果是已经登录进入了,输入课程号,课序号,完成之后系统会在已存在的课程信息表中查询该生可选的课程,如果该门课程存在就可以看到选择的课程出现在课程列表里面,同时该记录也会出现在已选课程列表里面。

课程信息添加:管理员登录后,进入课程信息管理功能单元,输入课程号,课程名称,教师姓名,开设院系这些数据后提交数据,完成课程信息的添加操作,此时在选课表中将出现刚才添加的课程的有关信息。

课程信息修改:管理员登录后,进入课程信息管理功能单元,选择要修改的课程号,对其相应的课程号,课程名称,教师姓名,开设院系进行修改即可

课程信息删除:管理员登陆后,进入课程信息管理功能单元,选择要删除的课程号,完成后就将选定的课程删除了

用户信息添加:管理员登录后,进入用户信息管理功能单元,输入用户名,用户密码,但此时的用户必须与学生信息管理系统中的学生相对应,即用户必须是存在的。完成后就将新用户添加到用户组里面了,该用户就可以使用此系统了

用户信息修改:管理员登陆后,进入用户信息管理功能单元,选择要修改的用户名,对其进行修改

用户信息删除:管理员登录后,进入用户信息管理功能单元,选择要删除的用户名,提交之后就将该用户删除了。

成绩查询:学生登录后,进入成绩查询功能单元,如果是已经登录进入了,点击课程名称,就可以看到该门课程的成绩,同时点击全部课程就可以看到全部的课程信息及对应的课程成绩,和该学期的学分绩点。

成绩录入:教师登录后,进入成绩录入功能单元,选择相应学生的学生编号,输入该学生的成绩,提交之后就完成了成绩的录入。该成绩即可对应的出现在相应课程的成绩列表之内。

成绩修改:教师登录后,进入成绩修改功能单元,选择相应学生的学生编号,修改该学生的成绩,提交之后就完成了成绩的修改。该成绩即可对应的出现在相应课程的成绩列表之内。

成绩删除:教师登录后,进入成绩删除功能单元,选择相应学生的学生编号,删除该学生的成绩,提交之后就完成了成绩的删除。该成绩将不会出现在相应课程的成绩列表之内。

2.1.4数据流程图

图2.1 数据流程图

2.1.5数据字典表示

1. 数据项:不可再分的数据单位

1)学号,char (8),primary key 学生学号

2)姓名,char (8),not null学生姓名

3)性别,char (2),default ‘男’学生性别

4)籍贯,char (2),default ‘皖’学生籍贯

5)出生日期,datetime (8),not null,datatime>1980-1-1 学生出生日期

6)所属院系,char (20)default ‘信息工程学院’学生所属院系 7)所属班级,char (20) not null 学生所属班级 8)课程号,char (8),primary key 选修课课程号 9)课程名称,char (20)not null 选修课课程名称 10)学时,int (4)not null 选修课学时 11)学分,int(4)not null 选修课学分 12)成绩,char (8)not null 选修课成绩 13)职工号,char (10) primary key 教师职工号 14)教师姓名,char (8)教师姓名 15)职称,char (10) not null教师职称 2. 数据结构:数据之间的组合关系

1)学号,外码关联,{学生,选修} 2)课程号,外码关联,{讲授,选修} 3)职工号,外码关联,{讲授,教师}

2.2 系统实现的功能

图2.2 系统模块图

2.3 概念设计结构

通常将实体集联系的图表示称为实体(enyity )-联系(relationship )模型(E-R 图,概念模型);从分析用户项目涉及的数据对象及数据对象之间的联系出发,到获取E-R 图的这一过程称为概念结构设计。

在学生选课管理系统中学生与课程之间属于m :n 的联系,一名学生可以选修多门课程,而一门课程也可以被多名学生选修。另外,教师与课程之间也是属于m :n 的联系,一名教师可以讲授多门课程,而一门课程也可以被多名教师讲授。

1.E-R 图

图2.3 E-R图

图2.3 用例图

2. 用例图

2.4 逻辑结构设

用E-R 图描述了学生选课管理系统中实体集与实体集之间的联系,目的是以E-R 图为工具,设计关系型的数据库,即确定应用系统所使用的数据库应包含哪些表,每个表的结构是怎样的。

表2.1 生选课管理系统的关系模

第三章 物理结构设计

3.1创建数据库

在查询分析器中使用SQL 语句可以创建新的用户数据库,SQL 是一种介于关系代数与关系演算之间的结构化查询语言,本课程设计是创建学生选课管理系统,其创建代码如下:

create database 学生选课管理系统 //*先设计数据库名称*// on //*用于指定该数据库所需的数据文件*//

(name=学生选课管理系统_data,

filename='c:\DB\学生选课管理系统_data.mdf', //*定义文件在操作系统中的存放路径*//

size=1MB, //*定义操作系统文件的初始容量*//

maxsize=100MB, //* 定义操作系统文件的最大长度*//

filegrowth=10% //*定义操作系统文件长度不够时每次增长的长度*// ),

(name=学生选课管理系统_data1,

filename='c:\DB\学生选课管理系统_data1.ndf', size=10MB, maxsize=100MB, filegrowth=10% )

log on //*用于指定该数据库的事务日志文件*//

(name=学生选课管理系统_log,

filename='c:\DB\学生选课管理系统_log.ldf', size=10MB,

maxsize=unlimited, filegrowth=5% )

首先创建一个数据库,命名其为学生选课管理系统,再根据需要依次设定此系统的存储路径、初始容量、最大长度等。 3.2 表的建立

在表建立之前,我们已经对学生选课管理系统做了充分的需求分析及概念模型设计,根据这些分析,我们根据需要确定了如下的5个表的结构: 学生(学号,姓名,性别,籍贯,出生日期,所属班级,所属院系) 课程(课程号,课程名称,学时,学分) 教师(职工号,教师姓名,性别,职称) 选修(学号,课程号,成绩) 讲授(课程号,职工号)

在建立表的时候,设定好表中各个数据列的数据类型、约束、规则及默认值,确定之后我们就可以开始编写代码了。 (1) 建立“学生”表的具体代码如下: create table 学生

(学号 char(8) primary key, 姓名 char(8) not null, 性别 char(2) default '男', 籍贯 char(2) default '皖',

出生日期 datetime check (出生日期>1980-1-1), 所属班级 char(20) not null,

所属院系 char (20)default '信息工程学院') 命令运行成功,插入具体数据之后会制出下表:

表 3.2 学生表

建立“课程”表的具体代码如下:

create table 课程

(课程号 char(8) primary key, 课程名称 char(20) not null, 学时 int not null, 学分 int not null)

命令运行成功,插入具体数据之后会制出下表:

表 3.2 课程表

建立“教师”表的具体代码如下:

create table 教师

(职工号 char(6)primary key , 教师姓名 char(10),

性别 char(2) default '男', 职称 char(10))

命令运行成功,插入具体数据之后会制出下表:

(2) (3).

表 3.2 教师表

(4).建立“选修”表的具体代码如下:

create table 选修 (学号 char(8), 课程号 char(8), 成绩 char(6)

constraint fk_选修 foreign key (学号) references 学生(学号)) 命令运行成功,插入具体数据之后会制出下表:

表 3.2 选修表

(5).建立“讲授”表的具体代码如下:

create table 讲授 (课程号 char (8), 职工号 char (8),

constraint pk_讲授 foreign key (课程号) references 课程(课程号)) 命令运行成功,插入具体数据之后会制出下表:

表 3.2 讲授表

3.3 基本表的关系图

为数据库设置了不同的表之后必须告诉数据库如何将这些信息合并在一起,因此要定义表之间的联系,最后得到的关系图3.1。

图 3.3 基本表的关系图

3.4 视图

视图是保存在数据库中的选择查询,相当于从一个或多个数据表中派生出来的虚拟表,是用户用以查看数据库中数据的一种方式。通过使用视图,用户可以根据自己的需要浏览表中部分或全部的内容。视图与真实的数据表之间有很多相似之处例如视图也是由一些记录和字段组成的二维表,还可以使用视图表操作。但视图与数据之间有着本质的区别:视图是引用存储在数据库中的查询语句时动

态创建的,它本身并不存储数据, 真正的数据依然存储在数据表中。 使用视图有两个优点:

(1)简化数据查询和处理操作。大多数情况下,用户希望查询的数据存储在两个甚至更多个数据表中,在查询这些数据时,往往需要书写很长的查询语句,而且常常会用到复杂的搜索条件并涉及到表的连接。而这样复杂的查询任务还有可能多次重复执行,如果每执行一次都重新书写查询语句会产生很大的工作量。在这种情况下,通过定义视图,可以将这些数据设计到一个视图中,用户在查询时就可以把这个视图视为一个数据表,直接在SELECT 语句的FROM 子句中引用就可以了,而不必每次书写重复的查询语句。这样就大大简化了数据检索的操作过程。

(2)将用户的注意力集中到所关心的数据字段上,并实现保护数据安全的目的。大多数情况下,用户并不需要某个或某些对象的全部信息,而对他们需要的部分信息感兴趣。而视图的使用可以限制用户从数据表中检索的数据,将用户需要的数据从一个表或多个表中抽出,以视图的形式让用户进行检索。让用户通过视图检索数据,还可以控制用户多数据的访问权限,使用户只对部分数据具有修改和删除等操作的权力,实现保护数据安全的目的。

1. 例如:创建一个学生选课成绩视图,查询学号为“10001”号的学生选课成绩,代码如下: use 学生选课管理系统 go

create view 学生选课成绩视图 with encryption as

select 学生.*,选修. 课程号, 选修. 成绩 from 选修, 学生

where 学生. 学号=选修. 学号 go select *

from 学生选课成绩视图

where 性别='女'and 学号='10001'

建立视图后,执行该语句,就会出现如下结果:

表3.4 学生选课成绩视图表

2. 修改学生选课成绩视图: alter view 学生选课成绩视图 as

select 学生.*,选修. 成绩 from 选修, 学生

where 学生. 学号=选修. 学号 with check option go select *

from 学生选课成绩视图 where 性别='女'

exec sp_helptext'学生选课成绩视图'

当修改视图后,执行该语句,就会出现修改过后的结果:

表3.4修改学生选课视图表

3. 使用视图检索数据 use 学生选课管理系统

select *

from 学生选课成绩视图 where 成绩>90 go

执行该语句,会出现如下结果:

表3.4 视图检索学生成绩

3. 通过视图添加表数据

通过学生选课成绩视图,向学生表中添加一条新的记录: select 学号, 姓名, 性别, 籍贯, 出生日期, 所属班级, 所属院系 from 学生 go

insert into 学生选课成绩视图(学号, 姓名, 性别, 籍贯, 出生日期, 所属班级, 所属院系)

values('10006','张宇',' 男',' 皖','1993-9-9',' 财务(1)班',' 商学院') select * from 学生

记录添加成功后,查询学生表,表中就会出现一条新的记录,结果如下表:

表3.4 通过视图添加学生成绩

4. 更新视图中的数据

下面的语句为通过“学生选课成绩视图”,将学生表中的姓名“杨云”改为“杨韵”:

use 学生选课管理系统 update 学生选课成绩视图 set 姓名='杨韵' where 姓名='杨云' go select * from 学生

信息更改后,再查询学生表,就会出现如下结果:

表3.4 更新视图中的数据

5.删除学生选课成绩视图 drop view 学生选课成绩视图 go

可以收到系统返回信息“命令已成功完成”。 3.5 存储过程

一、存储概念

存储过程是SQL Server 服务器上一组预先编译好的Transact-SQL 语句。它以一个名称存储在数据库中,可以作为一个独立的数据库对象,也可以作为一个单元供用户在应用程序中调用。存储过程可以接受和输出参数、返回执行存储过程的状态值,还可以嵌套调用。使用存储过程有如下有点:

(1)执行速度快。存储过程创建时就已经通过语法检查和性能优化,因此在执行时无需再次编译。如此便加快了语句的执行速度。

(2)提高工作效率。存储过程在创建以后,可以被多次调用。可以将经常执行的操作制作成存储过程,在以后的操作中多次调用,而不必重新书写语句。

(3)规范程序设计。存储过程独立于调用它的应用程序,因此用户可以根据功能模块的不同,对存储过程进行必要的修改,而不必修改应用程序本身。

(4)提高系统安全性。可以将存储过程作为用户存取数据的管道。为提高数据的安全性,可以限制用户对数据表的存取权限,然后建立特定的存储过程供用户使用,完成对表数据的访问。另外,存储过程的定义文本还可以被加密,使用户不能查看存储过程的内容。

二、代码及实现

1. 建立并调用一个不带参数的存储过程:

create procedure 全部学生 as select * from 学生 go

exec 全部学生

当存储过程建立后,执行语句,就会出现如下结果:

表3.5 存储过程

2. 建立并调用一个带参数的存储过程: create procedure 学生查询 @学号 char(8) as

if exists(select *

from 学生 where 学号=@学号) begin

print '学号是'+@学号+'同学的基本信息如下:' select * from 学生 where 学号=@学号 end

else print @学号+'查无此人' go

exec 学生查询 @学号='10002'

当存储过程建立后,执行语句,就会出现如下结果:

表3.5 带参数的存储过程

3.查看存储过程 (1)查看存储过程的定义

下面的语句用来查看存储过程“全部学生”的定义本: exec sp_helptext 全部学生 该语句的执行情况如下图所示:

表3.5 查看存储过程

(2)查看存储过程的相关性

下面的语句用来查看存储过程“全部学生”的相关性: exec sp_depends 全部学生

该语句的执行情况如下图所示:

表3.5 存储过程的相关性

4. 修改存储过程

下面的语句是修改存储过程“学生查询”使这个存储过程输出字段“学号”和“成绩”。

alter procedure 学生查询 as

select 学号, 成绩 from 选修 where 成绩>90 order by 成绩 go

exec 学生查询

执行该语句,会出现如下结果:

表3.5 修改存储过程

3. 删除存储过程: drop procedure 学生查询

执行该语句后会收到系统返回信息“命令已成功完成”。

3.6 查询

SELECT 语句是SQL 语言中最基本的查询语法,它主要用来 从数据库中检索出符合条件的记录SLEECT 语句具有数据查询、统计、分组和排序的功能。SQL 的查询语句可以分为简单查询、连接查询、嵌套查询和组合查询4种类型。下面分别介绍: 一、简单查询

简单查询是指在查询过程中只涉及到一个表的查询语句。简单查询是最基本的查询语句。 (1)使用DISTINCT 关键字

DISTINCT 关键字主要用来从SELECT 语句的结果集中去掉重复的记录。 例如,查询学生表中的“籍贯”字段,代码如下: use 学生选课管理系统 select distinct 所属院系 from 学生 结果集显示如下:

图3.6

(2)使用GROUP BY 子句

GROUP BY 子句的主要作用是将数据记录一路设置的条件分成多个组,且只有使用了GROUP BY 子句,SELECT 子句中所使用的汇总函数才会起作用。

如:统计各院系成绩在93分以上的学生的人数。代码如下: select 所属院系,count(*) from 学生,选修,课程

where 学生. 学号=选修. 学号 and 课程. 课程号=选修. 课程号 and 成绩>93 group by 所属院系

结果集如下:

图3.6

二、 连接查询

包含连接操作的查询语句称为连接查询。连接查询包括等值连接、自然连接、外连接、内连接等多种。下面仅有等值连接为例进行说明。

例如,求选修了课程号为“20001”的课程且成绩在85分以上的学生的基本信息、成绩及讲授‘20001’课程的教师职工号及姓名,代码如下: select 学生.* 选修. 成绩, 讲授.*,教师. 教师姓名 from 学生, 选修, 讲授, 课程, 教师 where 学生. 学号=选修. 学号 and 讲授. 课程号=选修. 课程号 and 教师. 职工号=讲授. 职工号

and 选修. 课程号='20001'and 成绩>85 结果集如下表显示:

图3.6

三、 嵌套查询

嵌套查询是指在一个外层查询中包含有另一个内层查询,其中,外层查询称为主查询,内层查询称为子查询。通常情况下,使用嵌套查询中的子查询先挑选出部分数据,以作为主查询的数据来源或搜索条件。 包含子查询的语句通常采用以下格式: WHERE 表达式 [NOT] IN (子查询) WHERE 表达式 比较运算符

WHERE 字段 [ANY|ALL] (子查询) WHERE [NOT] EXISTS (子查询) 下面对上述几种格式分别介绍。

(1)使用IN 和NOT IN 关键字

通过IN 或NOT IN 关键字引入的子查询返回的结果是数据表中某个字段的子集,IN 或NOT IN 关键字用于确定给定的值是否包含在指定的子查询返回的结果集中。

如:求选修了“C++”课程的学生的学号、姓名、出生日期和所属院系。代码如下:

select 学号, 姓名, 出生日期, 所属院系 from 学生

where 学号 in (select 学号from 选修

where 课程号 in (select 课程号from 课程 where 课程名称=’C++’));

结果集如下:

图3.6

(2)使用比较运算符

IN 操作符用于一个值与多值比较,而比较符则用于一个值与另一个值之间的比较。当比较符后面的值需要通过嵌套才能得到时,就需要使用比较嵌套查询。

如:求信息工程学院学生的出生日期晚于外国语学院的学生的基本信息,代码如下:

select 学号,成绩from 选修

where 课程号=’20001’ and 成绩>(select 成绩 from 选修

where 课程号=’20001’ and 学号=(select 学号from 学生

where 姓名=’杨云’))

结果集显示如下:

图3.6

(3)使用ANY 或ALL 操作符的嵌套查询

例如,求其他系中比外国语系的学生年龄都小的学生的基本信息,代码如下: select * from 学生

where 出生日期>all ( select 出生日期from 学生

where 所属院系=’外国语’) and 所属院系’外国语’

结果集如下表所示:

图3.6

(4)使用EXISTS 和NOT EXISTS 关键字

使用EXISTS 和NOT EXISTS 关键字引入子查询的主要目的是进行存在测试,测试子查询是否会返回结果,如果有结果返回未True, 否则未Flase. 。因此,这时子查询所返回的结果将无需限定是单字段还是多字段,只需判断是否有结果返回即可。

如:查询未选修课程号为“20003”的课程的学生的基本信息,代码如下: select * from 学生

where not exists (select * from 选修

where 学生. 学号=学号 and 课程号='20003'); 结果集显示如下:

图3.6

3.7 触发器

一.SELECT 语句是SQL 语言中最基本的查询语法,它主要用来 从数据库中检索出符合条件的记录SLEECT 语句具有数据查询、统计、分组和排序的功能。SQL 的查询语句可以分为简单查询、连接查询、嵌套查询和组合查询4种类型。下面分别介绍: 1. 简单查询

简单查询是指在查询过程中只涉及到一个表的查询语句。简单查询是最基本的查询语句。

(1)使用DISTINCT 关键字

DISTINCT 关键字主要用来从SELECT 语句的结果集中去掉重复的记录。 例如,查询学生表中的“籍贯”字段,代码如下: use 学生选课管理系统 select distinct 所属院系 from 学生 结果集显示如下:

图3.7

(2)使用GROUP BY 子句

GROUP BY 子句的主要作用是将数据记录一路设置的条件分成多个组,且只有使用了GROUP BY 子句,SELECT 子句中所使用的汇总函数才会起作用。

如:统计各院系成绩在93分以上的学生的人数。代码如下: select 所属院系,count(*) from 学生,选修,课程

where 学生. 学号=选修. 学号 and 课程. 课程号=选修. 课程号 and 成绩>93 group by 所属院系 结果集如下:

图3.7

2. 连接查询

包含连接操作的查询语句称为连接查询。连接查询包括等值连接、自然连接、外连接、内连接等多种。下面仅有等值连接为例进行说明。

例如,求选修了课程号为“20001”的课程且成绩在85分以上的学生的基本信息、成绩及讲授‘20001’课程的教师职工号及姓名,代码如下:

select 学生.* 选修. 成绩, 讲授.*,教师. 教师姓名 from 学生, 选修, 讲授, 课程, 教师 where 学生. 学号=选修. 学号 and 讲授. 课程号=选修. 课程号 and 教师. 职工号=讲授. 职工号

and 选修. 课程号='20001'and 成绩>85 结果集如下表显示:

图3.7

3. 嵌套查询

嵌套查询是指在一个外层查询中包含有另一个内层查询,其中,外层查询称为主查询,内层查询称为子查询。通常情况下,使用嵌套查询中的子查询先挑选出部分数据,以作为主查询的数据来源或搜索条件。

包含子查询的语句通常采用以下格式: WHERE 表达式 [NOT] IN (子查询) WHERE 表达式 比较运算符 WHERE 字段 [ANY|ALL] (子查询) WHERE [NOT] EXISTS (子查询)

下面对上述几种格式分别介绍。 (1)使用IN 和NOT IN 关键字

通过IN 或NOT IN 关键字引入的子查询返回的结果是数据表中某个字段的子集,IN 或NOT IN 关键字用于确定给定的值是否包含在指定的子查询返回的结果集中。

如:求选修了“C++”课程的学生的学号、姓名、出生日期和所属院系。代码如下:

select 学号, 姓名, 出生日期, 所属院系 from 学生

where 学号 in (select 学号 from 选修

where 课程号 in (select 课程号

from 课程

where 课程名称=’C++’));

结果集如下:

图3.7

(2)使用比较运算符

IN 操作符用于一个值与多值比较,而比较符则用于一个值与另一个值之间

的比较。当比较符后面的值需要通过嵌套才能得到时,就需要使用比较嵌套查询。

如:求信息工程学院学生的出生日期晚于外国语学院的学生本信息,代码如下: select 学生.*from 学生

where 出生日期 in (select 出生日期

from 学生

where 所属院系='信息工程学院')and 出生日期> all (select 出生日from 学生

where 所属院系=’外国语’

运行结果如下所示:

图3.7

(3)使用ANY 或ALL 操作符的嵌套查询

例如,求其他系中比外国语系的学生年龄都小的学生的基本信息,代码如下: select * from 学生

where 出生日期>all ( select 出生日期from 学生

where 所属院系=’外国语’) and 所属院系’外国语’

结果集如下表所示:

图3.7

(4)使用EXISTS 和NOT EXISTS 关键字

使用EXISTS 和NOT EXISTS 关键字引入子查询的主要目的是进行存在测试,测试子查询是否会返回结果,如果有结果返回未True, 否则未Flase. 。因此,这时子查询所返回的结果将无需限定是单字段还是多字段,只需判断是否有结果返回即可。

如:查询未选修课程号为“20003”的课程的学生的基本信息,代码如下: select * from 学生

where not exists (select * from 选修

where 学生. 学号=学号 and 课程号='20003'); 结果集显示如下:

图3.7

4. 组合查询

将SELECT 语句的查询结果再进行集合运算就构成了SQL 的组合查询。SQL 的组合查询操作符有UNION(并操作)、INTERSECT (交操作)和MINUS (差查询)3种。这里仅以查询操作举例。如:求选修了课程号为‘20002’的课程但没有课程号为‘20005’课程的学生的学号,代码如下: select 学号 from 选修

where 课程号='20002' union select 学号 from 选修

where 课程号='20004'

运行结果如下:

图3.7

二.触发器是一种特殊类型的存储过程,与表格紧密相连。当用户修改表中的数

据时,触发器将自动执行。触发器可以使用Transact-SQL 语句进行复杂的逻辑处理,它基于一个表创建,但是可以对多个表进行操作,因此常用于复杂的业务规则。一般可以使用触发器完成如下功能: (1)级联修改数据库中相关的表; (2)执行比检查约束更为复杂的约束操作; (3)拒绝或回滚违反引用完整性的操作;

(4)比较表修改前后数据之间的差别,并根据差别采取相应的操作。 触发器课可分为AFTER 触发器和INSTEAD OF 触发器两种。

AFTER 触发器:这种类型的触发器将在数据变动(INSERT 、UPDATE 和DELETE 操作)完成后才被激发。对变动的数据进行检查,若发现错误,将拒绝或回滚变动的数据。

INSTEAD OF触发器:INSTEAD OF 触发器是SQL Server 2000中新增的功能这种类型的触发器将在数据变动以前被激发,并取代变动数据的操作(INSERT 、UPDATE 和DELETE 操作),转而去执行触发器定义的操作。

在建立触发器时,还必须指定触发器操作:INSERT 、UPDATE 和DELETE 操作。至少要指定一种,也可以同时指定多种。在同一个数据表中可以创建多个AFTER 触发器,但是在表或视图上,每个INSERT 、UPDATE 或DELETE 语句最多可以定义一个INSTEAD OF 触发器。 1. 创建AFTER INSERT 触发器

AFTER INSERT 触发器在对表执行INSERT 操作时被触发,使用INSERT 语句插入的记录同时被插入到inserted 临时表中。

例如,在课程表中创建一个触发器,将新学生的学分限制在5分以内,若插入的学生学分超过5,则拒绝插入该记录。代码如下:

create trigger trg2 on 课程 after insert as

if (select 学分 from inserted)>5 begin

print'新学生学分不能超过5' rollback

end go

set nocount on

insert into 课程(课程号, 课程名称, 学时, 学分) values('20007','管理学',120,7) 该语句执行情况如下图所示:

图 3.7

2. 创建AFTER UPDATE 触发器

SQL Serve 在执行UPDATE 操作时,首先从触发器中删除原来的记录,然后再插入新记录。其中被删除的记录将会存放在临时表deleted 中,而插入的新记录则同时插入到临时表inserted 中。因此可以访问这两个临时表,对插入的数据和原有的数据进行比较,然后进行相应的操作。

3. 创建AFTER DELETE 触发器

在执行DELETE 语句时,删除的触发表中的记录将被插入到deleted 表中,

而inserted 表并未被使用。可以通过查看临时表deleted 中的记录,监控

据需要进行相应操作。 4. 创建INSTEAD OF 触发器

由于AFTER 类型的触发器不能在视图中使用,所以若想在视图中创建触发器,则只能创建INSTEAD OF触发器。INSTEAD OF触发器可以用来取代激活触发

器的INSERT 、UPDATE 和DELETE 操作,转而由触发器中的程序控制数据的修改。 时,临时表inseted 和deleted 都已经存入了数据,这一点和AFTER 触发器相同。不同的是AFTER 触发器在激活之前,表中的数据已经修改完毕了,而INSTEAD OF 触发器被激活时,还没有实际修改表中的数据。因此,可以使用INSTEAD OF触发器控制数据的修改过程。

例如:从学生表中删除一条记录,自动从选修表中级联删除相应记录。代码如下:

select * from 学生 select * from 选修 delete from 学生

where 学号='10002' create trigger trigger_update on 学生

instead of update,delete as

begin declare @no char(8 select @no=学号 from deleted

if exists (select * from 选修 where 学号='10002') delete from 选修 where 学号='10002' else

print'选修表中此人未选修课' delete from 学生 where 学号='10002' end

select * from 选修 select * from 学生

该语句执行后,学生表的情况如下:

图3.7

选修表的情况如下:

图3.7

谢 辞

本课程设计是在汪红霞老师的悉心指导下完成的。是老师平时不辞辛苦的讲解,使我们为课程设计打下了坚实的基础,在宋老师的指导下,我们在各方面都有所提高,老师以严谨求实,一丝不苟的治学态度和勤勉的工作态度深深感染了我们,给我们巨大的启迪,鼓舞和鞭策,并成为我们人生路上值得学习的榜样。使我们的知识层次又有所提高。同时感谢所有教育过我们的专业老师,你们传授的专业知识是我们不断成长的源泉也是完成本课程设计的基础。也感谢我同一组的组员和班里的同学是你们在我遇到难题是帮我找到大量资料,解决难题。再次真诚感谢所有帮助过我们的老师同学。通过这次课程设计不仅提高了我们独立思考问题解决问题的能力而且培养了认真严谨,一丝不苟的学习态度。由于经验匮乏,能力有限,设计中难免有许多考虑不周全的地方,希望各位老师多加指教。

综 述

经过10课时的学习,我们组选择的课题学生选课管理系统部分功能基本完成。其功能基本符合的用户要求,能够对学生和教师的基本信息进行查询、添加、删除。

通过此次课程设计,使我们对SQL Server 2000有了更深层次的认识和理解,懂得了运用SQL Server 2000这个工具。在计算机飞速发展的今天,懂得一门计算机语言技术是非常必要的。同时,我们也清醒的认识到,只有自己肯努力,愿意去付出劳动,就能够得到属于我们自己所期望的东西。总结起来,自己主要有以下几点体会:

1、必须牢固掌握基础知识。我们对SQL Server 2000中的企业管理器和查询分析器的学习和了解,要知道如何创建数据库,设计表结构。知道利用T-SQL 语言进行操作,对数据库中的信息进行查询、添加、修改和删除等。要知道创建索引、视图、触发器、存储过程等。

2、必须培养严谨的科学态度。自己在编程时经常因为一些类似于“符号处于中文状态”、“单词打错”的小错误而导致错误,不够认真细致,这给自己带来了许多麻烦。编程是一件十分严谨的事情,容不得马虎。所以在今后自己一定要培养严谨的科学态度。我想这不仅是对于程序设计,做任何事都应如此。

3、必须团结合作。在课程设计中我们遇到了很多问题,有技术问题和非技术问题,但我们没有放弃,我们一起查资料、讨论、探究解决问题的方法,在本次课程设计中我们每个人都尽自己最大的努力去做,积极思考、充分发挥个人聪明才智,明白了个人的力量是有限的,必须团结合作,团队的力量绝不是个体力量的简单相加。

参考文献

[1]许薇,方修丰编著 《Visual Basic程序设计教程》. 清华大学出版社

[2]陈禹,方美琪编著 《软件开发工具》. 经济科学出版社

[3]孔令慧,陈涵编著《SQL Server 2000数据库应用及程序开发》. 化学工业出版社

[4]范立南,刘天慧编著《SQL Server 2000实用教程》. 清华大学出版社

[5]丁宝康编著. 《数据库实用教程》. 清华大学出版社


相关内容

  • 学生网上选课系统毕业论文
    题 目:专 业:准考证号:学生姓名:指导教师:起讫日期: 毕 业 论 文 学生网上选课系统 摘 要 随着在校大学生的不断扩增,学生选课系统也是在学校对学生管理方面中不可缺少的一部分.过去的选课方法是采用人工的方法去管理文件档案,而这种管理方 ...
  • 教务管理系统质量分析报告
    教务管理系统 质量分析报告 1. 引言(概述) 1.1 编写目的 为了便于涉及到软件开发的其他部门的工程师,以及测试结束后进行后续工作的工程师了解本软件在经过测试工程师的测试后达到了什么样的质量情况,软件测试组长编写了该文档. 1.2 背景 ...
  • 数据库原理实验指导书(Mysql)
    数据库原理实验指导书 实验项目列表 实验一:数据库的定义实验 一.实验目的: 1.理解MySQL Server 6.0 服务器的安装过程和方法: 2.要求学生熟练掌握和使用SQL .T-SQL .SQL Server Enterpriser ...
  • 真题及答案
    2008年4月全国计算机等级考试四级笔试试卷 数据库工程师 选择题 (1) 数据模型定义子数据库中数据的组织.描述.存储和操作规范,可以分为概念模型.数据结构模 型和物理模型三大类.概念模型的典型代表是 A A )实体-联系模型 B )关系 ...
  • 数据库实验报告
    数据库技术I 实验报告 系别:计算机科学与技术 班级:计11-2班 姓名:XXX 学号:[1**********] 成绩: 评语: 指导教师签字: 日期: <数据库技术I >实验报告 一. 实验题目 掌握SQL Server 2 ...
  • [精品]高中课程设置方案
    篇一:高中课程设置方案 陕西省从20XX年秋季开始全面实施普通高中新课程,根据教育部颁布的<基础教育课程改革纲要(试行)><普通高中课程方案(试验)><关于进一步加强普通高中新课程实验工作的指导意见>和陕 ...
  • 中北大学教务处
    中北大学教务处 200805 关于07/08学年第二学期全校任选课开课.选课的通知 各学院及相关单位: 根据学校教学安排,本学期全校任选课开课时间定于第7周(4月14日)正式开课,任选课选课工作从3月25日开始.现将有关事项通知如下: 一. ...
  • 法学院课程介绍
    法学教学部课程简介 课程编号:070301 课程名称:<逻辑学> 课程类型:限选课 课程学时:64学时 适用专业:法学 先修课程:马克思主义哲学 课程简介: 本课程通过对逻辑学概念.原理.原则等内容的讲述,帮助学生获得探求真理. ...
  • 毕业设计管理系统
    目录 一.系统开发的背景 ........................................................................................................... ...
  • 基于贪婪算法的自动排课表系统的研究与实现
    第29卷第18期Vol.29 No.18 计算机工程与设计 ComputerEngineeringandDesign 2008年9月Sept.2008 基于贪婪算法的自动排课表系统的研究与实现 王帮海1,2,李振坤1 (1.广东工业大学计算 ...