课程设计报告
课程名称 数据库系统原理
设计题目 学生选课系统
学生姓名
学 号
专业班级
指导教师
2102 年 9 月 18 日
目 录
第1章 系统概述 ........................................................... 1
1.1 开发背景 . ........................................................... 1
1.2 运行环境 . ........................................................... 1
第2章 需求分析 ........................................................... 2
2.1 功能性需求分析 . ..................................................... 2
2.1 非功能性需求分析 . ................................................... 2
第3章 系统详细设计 ....................................................... 4
3.1系统模块设计 ........................................................ 4
3.2. 数据库设计.......................................................... 5
3.2.1概念结构设计 .................................................. 5
3.2.2逻辑结构设计 .................................................. 6
3.2.3物理结构设计 .................................................. 7
第4章 详细设计 .......................................................... 10
4.1 界面设计 . .......................................................... 10
4.2 代码设计 . .......................................................... 11
总 结 ................................................................. 17
参考文献 ................................................................. 18
第1章 系统概述
1.1 开发背景
数据库在现实生活当中占有越来越重要的地位。在目前比较流行的数据库开发系统当中,SQL Server 2005是应用比较广的一种。本系统正是基于SQL Server 2005开发环境下开发的学生选课系统。在该系统中可实现在校学生选课、查询、评分、录入信息等各种功能。开发该系统是为了将所学的有关数据库方面的知识进行一次系统的归纳总结,并使之与实际相结合,把所学的知识转化成使用的东西,同时也是对自己的数据库系统开发能力的一个考验和提高的过程。在该系统中,通过建立各种触发器以保持系统中各表中数据的一致性。在创建的过程中掌握了创建触发器的一些基本技巧和方法。
学生选课系统是一个学校不可缺少的部分, 它的内容对于学校的决策者和管理者来说都至关重要, 所以学生选课系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点, 如:效率低、保密性差, 另外时间一长, 将产生大量的文件和数据, 这对于查找、更新和维护都带来了不少的困难。
随着科学技术的不断提高, 计算机科学日渐成熟, 其强大的功能已为人们深刻认识, 它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分, 使用计算机对选课信息进行管理, 有着手工管理所无法比拟的优点. 例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高人事劳资管理的效率, 也是企业的科学化、正规化管理, 与世界接轨的重要条件。
1.2 运行环境
本高校学籍管理系统的开发与运行环境如下:
开发环境:Windows XP
开发工具:Microsoft SQL Server 2005
数据库管理系统:SQL Server 2005
运行环境:Windows XP。
第2章 需求分析
2.1 功能性需求分析
学生选课系统作为管理管理员与用户的选课关系的主要管理系统平台,其对应的读者是教务管理用户,因此,不仅要处理管理员与用户之间的信息,还要处理用户个人信息。导致学生选课系统中的数据不论是结构、类型还是彼此间的关联都是复杂多变的;对这种数据进行的处理也是多种多样的。
因此,要实现对学生选课系统数据的及时、准确的处理和有效利用。
学生选课系统的用户包括系统管理员、教师和学生。系统管理员负责日常的选课系统的备份工作,如各种基本信息的录入、修改、删除等操作。教师使用该系统可完成教学班信息查询和成绩管理。学生使用该系统完成选课和成绩查询等操作。
本系统的主要功能包括:
教师信息管理:教师信息数据的添加、修改、删除。
学生信息管理:学生信息数据的添加、修改、删除。
课程信息管理:课程信息数据的添加、修改、删除。
选课信息管理:学生选课及成绩数据的添加、修改、删除。
系统用户管理:系统用户数据的添加、修改、删除。
2.1 非功能性需求分析
1、性能需求:
(1)整体特性需求:
系统安全、可靠,功能齐全;操作方便、界面美观;
(2)时间特性需求:
对该系统的时间特性要求如下:
响应时间:5秒内;
更新处理时间:5秒内;
数据的转换和传送时间:10秒内。
(3)灵活性需求:
该软件对一些变化的适应能力如下:
操作方式上的变化:强;
运行环境的变化:强;
同其它软件的接口的变化:中等;
精度和有效时限的变化:中等;
计划的变化或改进:中等。
第3章 系统详细设计
数据库是此类系统的核心,系统中所有的信息都存储在数据库中,在所有ASP.NET 页面中通过ADO.NET 与数据库连接,操作数据库中的数据,从而实现所有需要的功能。本系统中数据库采用Microsoft SQL Server 2005作为数据库工具。一个良好的数据库开发过程一般是先系统分析,再逻辑设计,然后物理实现。系统分析中分析数据库用户需求,并画出E-R 图直观地表示出数据库系统的需求。逻辑设计中根据系统分析设计的一个关系模型。
3.1系统模块设计
给出系统功能模块图
根据系统功能分析和学生选课系统的特点,经过模块化的分析得到如下图所示的系统功能模块结构图。如图3-1所示:
图3-1 系统功能模块结构图
3.2. 数据库设计
3.2.1概念结构设计
本系统的数据库实体主要有“学生”、“教师”、“课程”等。其中“教师”与“课程”存在“开设”联系,并且一个教师可以开设N 门课程,即“教师”与“课程”之间是一对多的关系。一个学生可以学习N 门课程,一门课程可以有M 个学生学习,即“学生”与“课程”之间是多对多的关系。以下为局部E-R 图。
1、局部
E-R 图中的学生E-R 图,如图3-2所示:
图3-2 学生E-R 图
2、局部
E-R 图中的教师E-R 图,如图3-3所示:
图3-2 教师E-R 图
3、局部
E-R 图中的课程E-R 图,如图3-4所示:
图3-4 课程E-R 图
5、整个数据库可以用一个E-R 图表示,如图3-5所示:
图3-5 学生选课系统E-R 图
3.2.2逻辑结构设计
用户的需求具体体现在各种信息的提供、保存、更新和查询,这就要求数据库结构能够满足各种信息的输入和输出。收集基本数据、数据结构及数据处理的流程,组成一份详尽的数据字典。数据库逻辑设计就是将E —R 图转换为关系模型的过程,即将所有实体和关系转换成一系列的关系模式。转换过程中常见规则有:
(1)一个实体型转换为一个关系模式;
(2)一个一对一的联系可转换成一个独立的关系模式,也可与任意一端对应的关系模式合并;
(3)一个一对多的联系可以转换成一个独立的关系模式,也可与多的那一端对应的关系模式合并;
(4)一个多对多的关系转换成一个关系模式。
根据以上四条规则,下面将E —R 图转换成关系模型,给出数据库中各表结构的定义(字段,数据类型);
学生表(学号,姓名,性别,专业,学历,班级,年级,系部);
教师表(教师号,姓名,性别,职称,系部);
课程表(课程号,课程名,教师号,学分,学时,不可选专业,上课时间,上课地点,已选人数,限选人数,课程简介);
选课表(学号,课程号,成绩);
用户表(用户名,密码,用户角色);
3.2.3物理结构设计
数据库物理设计是后半段。将一个给定逻辑结构实施到具体的环境中时,逻辑数据模型要选取一个具体的工作环境,这个工作环境提供了数据存储结构与存取方法,这个过程就是数据库的物理设计。
物理结构依赖于给定的DBMS 和和硬件系统,因此设计人员必须充分了解所用RDBMS 的内部特征、存储结构、存取方法。数据库的物理设计通常分为两步,第一,确定数据库的物理结构,第二,评价实施空间效率和时间效率。
确定数据库的物理结构包含下面四方面的内容:
(1)确定数据的存储结构
(2)设计数据的存取路径
(3)确定数据的存放位置
(4)确定系统配置
数据库物理设计过程中需要对时间效率、空间效率、维护代价和各种用户要求进行权衡,选择一个优化方案作为数据库物理结构。在数据库物理设计中,最有效的方式是集中地存储和检索对象。
经过数据库系统分析和逻辑设计后,数据库的结构已经非常清晰,剩下的就是用一种数据库软件实现这样的结构。本系统中数据库采用Microsoft SQL Server 2005作为数据库。首先我们在Microsoft SQL Server 2005的“企业管理器”创建一个数据库,根据E-R 图及数据字典,设计出学生选课系统中的各个数据表,包括系统学生表、教师表、课程表、选课表、用户表共5个数据表。
本系统数据库命名为“学生选课管理系统”,数据库中的各个数据表名称和结构分别如下所示,为便于说明,各个数据表的结构使用该表在SQL Server
企业管理器中的设计视图表示。
用户表,如图3-6所示:
图3-6 用户表结构图
河南理工大学数据库课程设计说明书
学生表,如图3-7所示:
图3-7 学生表结构图
教师表,如图3-8所示:
图3-8 教师表结构图
课程表,如图3-9所示:
图3-9 课程表结构图
选课表,如图3-10所示:
图
3-10 选课表结构图
关系图,如图3-11所示:
图3-11 关系结构图
第4章 详细设计
4.1 界面设计
下面是在线选课系统的预览,此处简单介绍本系统的部分功能。
登录界面,如图4-1所示:
图4-1 登录界面
在登录名和密码处输入用户名和密码,,单击“登录”按钮,登录选课系统。 学生选课界面,如图4-2所示:
图4-2 学生选课界面
4.2 代码设计
1、数据库文件的组成、存放位置及相关属性的设置。(创建数据库的T-SQL 语句)
数据库建立:
create database 学生选课系统
on
(name=course_dat,
filename='e:\sc\coursedat.mdf',
size=10,
maxsize=50,
filegrowth=5)
log on
(name=course_log,
filename='e:\sc\courselog.ldf',
size=5MB,
maxsize=25MB,
filegrowth=5MB)
数据表建立:
use 学生选课系统
create table 学生表(
学号 char(8) primary key not null check(len(学号)=8 and isnumeric(学号)=1 ),
姓名 char(10) not null,
性别 char(2) not null check(性别='男' or 性别='女'),
专业 char(10) not null,
学历 char(4) not null check(学历='本科' or 学历='专科'),
年级 char(6) not null check(年级='一年级' or 年级='二年级' or 年级='三年级' or 年级='四年级'),
班级 char(6) not null check(len(班级)=6 and isnumeric(班级)=1), 系部 char(10) not null)
use 学生选课系统
create table 教师表(
教师号 char(5) primary key not null check(教师号 like '[A-Z]%'), 姓名 char(10) not null,
性别 char(2) not null check(性别='男' or 性别='女'),
职称 char(10) not null,
系部 char(10) not null)
use 学生选课系统
create table 课程表(
课程号 char(5) primary key not null,
课程名 char(12) not null,
教师号 char(5) foreign key references 教师表(教师号),
学分 float not null,
学时 int not null,
上课时间 char(20) not null,
上课地点 char(15) not null,
已选人数 int not null check(已选人数>=0) default 0,
限选人数 int not null check(限选人数>=0) default 50,
不可选专业 char(12),
课程简介 char(100))
use 学生选课系统
create table 选课表(
学号 char(8) foreign key references 学生表(学号),
课程号 char(5) foreign key references 课程表(课程号),
primary key(学号, 课程号)
成绩 nchar(10)
)
2、关系图、约束、视图、索引、默认值、规则、触发器、事务、存储过程等对象定义的T-SQL 语句
默认值:创建默认值约束,实现默认输入,方便数据的编辑。
use 学生选课系统
alter table 教师表
add constraint default_sex
default '男' for 性别
规则:预防工资输入错误,健全数据的完整性。
教师号 char(5) primary key not null check(教师号 like '[A-Z]%'), 索引:提高查询速度。
create index student on 学生表(学号 asc)
create index teacher on 教师表(教师号 asc)
create index course on 课程表(课程号 asc)
create unique index course_name on 课程表(课程名)
create unique index shi_di on 课程表(上课时间, 上课地点)
create index choose on 选课表(学号 asc,课程号 asc)
视图:前期规划创建了以下视图,当后期开发过程中发现直接在C#里面输入语法更方便。
select * from 学生表
select * from 教师表
select * from 课程表
select * from 选课表
存储过程:方便查询需要的数据,输入和输出数据
create procedure 开始选课
(@学号 char(8),@课程号 char(5))
as
if not exists(select @学号 from 学生表)
begin
print '该学号不存在!'
return -1
end
else if not exists(select @课程号 from 课程表)
begin
print '该课程号不存在!'
return -2
end
else
begin
insert 选课表 values (@学号,@课程号)
end
drop procedure 开始选课
create procedure 选课查询
(@学号 char(8))
as
if not exists(select @学号 from 选课表)
begin
print '您还未选课!'
return -1
end
else
begin
select 课程名, 姓名 as 教师, 学分, 学时, 上课时间, 上课地点, 课程简介 from 选课表 join 教师表
join 课程表 on 课程表. 教师号=教师表. 教师号 on 选课表. 课程号=课程表. 课程号
where 学号=@学号
end
execute 选课查询 '06110901'
drop procedure 选课查询
create procedure 选课名单
(@课程号 char(5))
as
if not exists(select @课程号 from 选课表)
begin
print '该课程号不存在!'
return -1
end
else
begin
select 学号, 姓名, 性别, 专业, 系部 from 学生表 where 学号 in(select 学号 from 选课表 where 课程号=@课程号)
end
drop 选课名单
create procedure 删除学生
(@学号 char(8))
as
if not exists(select @学号 from 学生表)
begin
print '该学号不存在!'
return -1
end
else
begin
update 课程表 set 已选人数=已选人数-1 where 课程号 in (select 课程号 from 选课表 where
学号=@学号)
delete from 选课表 where 学号=@学号
delete from 学生表 where 学号=@学号
end
drop procedure 删除学生
触发器:
create trigger add_course
on 选课表 for insert
as
declare @最多选课数 int
declare @已选人数 int
declare @限选人数 int
select @最多选课数=count(*) from 选课表 where 学号=(select 学号 from inserted)
select @已选人数=已选人数 from 课程表 where 课程号=(select 课程号 from inserted)
select @限选人数=限选人数 from 课程表 where 课程号=(select 课程号 from inserted)
if(@已选人数>=@限选人数)
begin
raiserror('该课程人数已满!',16,1)
rollback transaction
end
else if @最多选课数=4
begin
raiserror('最多只能选3门课!',16,1)
rollback transaction
end
else if (select 不可选专业 from 课程表 where 课程号=(select 课程号 from inserted))
=(select 专业 from 学生表 where 学号=(select 学号 from inserted))
begin
raiserror('您的专业不能选该课程!',16,1)
rollback transaction
end
else
begin
update 课程表 set 已选人数=已选人数+1 where 课程号=(select 课程号 from inserted)
print '选课成功!'
end
drop trigger add_course
数据库的连接方式:
SqlConnection myConnection = new SqlConnection("Data Source=.;Initial Catalog=学生选课系统;Integrated Security=True;");
myConnection.Open();
总 结
时至今日,两个礼拜的课程设计终于可以画上一个句号了,但是现在回想起来做课程设计的整个过程,颇有心得,其中有苦也有甜,不过乐趣尽在其中呀!没有接受任务以前觉得课程设计只是对以前学过的数据库进行设计,但是通过这次做课程设计发现自己的看法有点太片面、太偏激了。课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。下面我对整个课程设计的过程做一下简单的总结。
1.接到任务以后进行选题。选题是课程设计的开端,选择恰当的、感兴趣的题目,这对于整个课程设计是否能够顺利进行关系极大。好比走路,这开始的第一步是具有决定意义的,第一步迈向何方,需要慎重考虑。否则,就可能走许多弯路、费许多周折,甚至南辕北辙,难以到达目的地。。因此,选题时一定要考虑好了。
2.题目确定后就是找资料了。查资料是做课程设计的前期准备工作,好的开端就相当于成功了一半,到图书馆、书店、资料室去虽说是比较原始的方式,但也有可取之处的。总之,不管通过哪种方式查的资料都是有利用价值的,要一一记录下来以备后用。
3.通过上面的过程,已经积累了不少资料,对所选的题目也大概有了一些了解,这一步就是在这样一个基础上,综合已有的资料来更透彻的分析题目。
4.有了研究方向,就应该动手实现了。其实以前的三步都是为这一步作的铺垫。 编写源代码的时候最好是编写一个小模块就进行调试,这样可以避免设计的最后出现太多的错误而乱成一团糟。一步步地做下去之后,你会发现要做出来并不难。
我的心得也就这么多了,总之,不管学会的还是学不会的的确觉得困难比较多,真是万事开头难,不知道如何入手。还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。
参考文献
[1] 萨师煊. 数据库系统概论. 第3版. 高等教育出版社,2000年
[2] 郑人杰. 《实用软件工程》(第二版). 清华大学出版社,1997年
[3] 王删著. 计算机导论[M].清华大学出版社出版.2007年4月
[4] 陈松桥.C#实用教程(修订)[M].清华大学出版社出版.2006年2月
[5] 陆丽娜.C#信息系统设计与开发实例(第二版)[M].机械工业出版社.2008年9月
[6] 汤 俊.C#技术教程(修订)[M].北京清华大学出版社.2006年2月
[7] 王华杰.SQLServer2005数据库实训教程[M].清华大学出版社.2006年8月
[8] 杨浩译. 数据库系统与SQL 教程[M].北京. 清华大学出版社.2007年6月
[9] 唐云深.SQL 应用系统开发教程[M].北京. 清华大学出版社.2008年10月
[10]罗运模.SQLServer2005数据仓库应用与开发[M].北京. 人民邮电出版社,2001年1月
课程设计报告
课程名称 数据库系统原理
设计题目 学生选课系统
学生姓名
学 号
专业班级
指导教师
2102 年 9 月 18 日
目 录
第1章 系统概述 ........................................................... 1
1.1 开发背景 . ........................................................... 1
1.2 运行环境 . ........................................................... 1
第2章 需求分析 ........................................................... 2
2.1 功能性需求分析 . ..................................................... 2
2.1 非功能性需求分析 . ................................................... 2
第3章 系统详细设计 ....................................................... 4
3.1系统模块设计 ........................................................ 4
3.2. 数据库设计.......................................................... 5
3.2.1概念结构设计 .................................................. 5
3.2.2逻辑结构设计 .................................................. 6
3.2.3物理结构设计 .................................................. 7
第4章 详细设计 .......................................................... 10
4.1 界面设计 . .......................................................... 10
4.2 代码设计 . .......................................................... 11
总 结 ................................................................. 17
参考文献 ................................................................. 18
第1章 系统概述
1.1 开发背景
数据库在现实生活当中占有越来越重要的地位。在目前比较流行的数据库开发系统当中,SQL Server 2005是应用比较广的一种。本系统正是基于SQL Server 2005开发环境下开发的学生选课系统。在该系统中可实现在校学生选课、查询、评分、录入信息等各种功能。开发该系统是为了将所学的有关数据库方面的知识进行一次系统的归纳总结,并使之与实际相结合,把所学的知识转化成使用的东西,同时也是对自己的数据库系统开发能力的一个考验和提高的过程。在该系统中,通过建立各种触发器以保持系统中各表中数据的一致性。在创建的过程中掌握了创建触发器的一些基本技巧和方法。
学生选课系统是一个学校不可缺少的部分, 它的内容对于学校的决策者和管理者来说都至关重要, 所以学生选课系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点, 如:效率低、保密性差, 另外时间一长, 将产生大量的文件和数据, 这对于查找、更新和维护都带来了不少的困难。
随着科学技术的不断提高, 计算机科学日渐成熟, 其强大的功能已为人们深刻认识, 它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分, 使用计算机对选课信息进行管理, 有着手工管理所无法比拟的优点. 例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高人事劳资管理的效率, 也是企业的科学化、正规化管理, 与世界接轨的重要条件。
1.2 运行环境
本高校学籍管理系统的开发与运行环境如下:
开发环境:Windows XP
开发工具:Microsoft SQL Server 2005
数据库管理系统:SQL Server 2005
运行环境:Windows XP。
第2章 需求分析
2.1 功能性需求分析
学生选课系统作为管理管理员与用户的选课关系的主要管理系统平台,其对应的读者是教务管理用户,因此,不仅要处理管理员与用户之间的信息,还要处理用户个人信息。导致学生选课系统中的数据不论是结构、类型还是彼此间的关联都是复杂多变的;对这种数据进行的处理也是多种多样的。
因此,要实现对学生选课系统数据的及时、准确的处理和有效利用。
学生选课系统的用户包括系统管理员、教师和学生。系统管理员负责日常的选课系统的备份工作,如各种基本信息的录入、修改、删除等操作。教师使用该系统可完成教学班信息查询和成绩管理。学生使用该系统完成选课和成绩查询等操作。
本系统的主要功能包括:
教师信息管理:教师信息数据的添加、修改、删除。
学生信息管理:学生信息数据的添加、修改、删除。
课程信息管理:课程信息数据的添加、修改、删除。
选课信息管理:学生选课及成绩数据的添加、修改、删除。
系统用户管理:系统用户数据的添加、修改、删除。
2.1 非功能性需求分析
1、性能需求:
(1)整体特性需求:
系统安全、可靠,功能齐全;操作方便、界面美观;
(2)时间特性需求:
对该系统的时间特性要求如下:
响应时间:5秒内;
更新处理时间:5秒内;
数据的转换和传送时间:10秒内。
(3)灵活性需求:
该软件对一些变化的适应能力如下:
操作方式上的变化:强;
运行环境的变化:强;
同其它软件的接口的变化:中等;
精度和有效时限的变化:中等;
计划的变化或改进:中等。
第3章 系统详细设计
数据库是此类系统的核心,系统中所有的信息都存储在数据库中,在所有ASP.NET 页面中通过ADO.NET 与数据库连接,操作数据库中的数据,从而实现所有需要的功能。本系统中数据库采用Microsoft SQL Server 2005作为数据库工具。一个良好的数据库开发过程一般是先系统分析,再逻辑设计,然后物理实现。系统分析中分析数据库用户需求,并画出E-R 图直观地表示出数据库系统的需求。逻辑设计中根据系统分析设计的一个关系模型。
3.1系统模块设计
给出系统功能模块图
根据系统功能分析和学生选课系统的特点,经过模块化的分析得到如下图所示的系统功能模块结构图。如图3-1所示:
图3-1 系统功能模块结构图
3.2. 数据库设计
3.2.1概念结构设计
本系统的数据库实体主要有“学生”、“教师”、“课程”等。其中“教师”与“课程”存在“开设”联系,并且一个教师可以开设N 门课程,即“教师”与“课程”之间是一对多的关系。一个学生可以学习N 门课程,一门课程可以有M 个学生学习,即“学生”与“课程”之间是多对多的关系。以下为局部E-R 图。
1、局部
E-R 图中的学生E-R 图,如图3-2所示:
图3-2 学生E-R 图
2、局部
E-R 图中的教师E-R 图,如图3-3所示:
图3-2 教师E-R 图
3、局部
E-R 图中的课程E-R 图,如图3-4所示:
图3-4 课程E-R 图
5、整个数据库可以用一个E-R 图表示,如图3-5所示:
图3-5 学生选课系统E-R 图
3.2.2逻辑结构设计
用户的需求具体体现在各种信息的提供、保存、更新和查询,这就要求数据库结构能够满足各种信息的输入和输出。收集基本数据、数据结构及数据处理的流程,组成一份详尽的数据字典。数据库逻辑设计就是将E —R 图转换为关系模型的过程,即将所有实体和关系转换成一系列的关系模式。转换过程中常见规则有:
(1)一个实体型转换为一个关系模式;
(2)一个一对一的联系可转换成一个独立的关系模式,也可与任意一端对应的关系模式合并;
(3)一个一对多的联系可以转换成一个独立的关系模式,也可与多的那一端对应的关系模式合并;
(4)一个多对多的关系转换成一个关系模式。
根据以上四条规则,下面将E —R 图转换成关系模型,给出数据库中各表结构的定义(字段,数据类型);
学生表(学号,姓名,性别,专业,学历,班级,年级,系部);
教师表(教师号,姓名,性别,职称,系部);
课程表(课程号,课程名,教师号,学分,学时,不可选专业,上课时间,上课地点,已选人数,限选人数,课程简介);
选课表(学号,课程号,成绩);
用户表(用户名,密码,用户角色);
3.2.3物理结构设计
数据库物理设计是后半段。将一个给定逻辑结构实施到具体的环境中时,逻辑数据模型要选取一个具体的工作环境,这个工作环境提供了数据存储结构与存取方法,这个过程就是数据库的物理设计。
物理结构依赖于给定的DBMS 和和硬件系统,因此设计人员必须充分了解所用RDBMS 的内部特征、存储结构、存取方法。数据库的物理设计通常分为两步,第一,确定数据库的物理结构,第二,评价实施空间效率和时间效率。
确定数据库的物理结构包含下面四方面的内容:
(1)确定数据的存储结构
(2)设计数据的存取路径
(3)确定数据的存放位置
(4)确定系统配置
数据库物理设计过程中需要对时间效率、空间效率、维护代价和各种用户要求进行权衡,选择一个优化方案作为数据库物理结构。在数据库物理设计中,最有效的方式是集中地存储和检索对象。
经过数据库系统分析和逻辑设计后,数据库的结构已经非常清晰,剩下的就是用一种数据库软件实现这样的结构。本系统中数据库采用Microsoft SQL Server 2005作为数据库。首先我们在Microsoft SQL Server 2005的“企业管理器”创建一个数据库,根据E-R 图及数据字典,设计出学生选课系统中的各个数据表,包括系统学生表、教师表、课程表、选课表、用户表共5个数据表。
本系统数据库命名为“学生选课管理系统”,数据库中的各个数据表名称和结构分别如下所示,为便于说明,各个数据表的结构使用该表在SQL Server
企业管理器中的设计视图表示。
用户表,如图3-6所示:
图3-6 用户表结构图
河南理工大学数据库课程设计说明书
学生表,如图3-7所示:
图3-7 学生表结构图
教师表,如图3-8所示:
图3-8 教师表结构图
课程表,如图3-9所示:
图3-9 课程表结构图
选课表,如图3-10所示:
图
3-10 选课表结构图
关系图,如图3-11所示:
图3-11 关系结构图
第4章 详细设计
4.1 界面设计
下面是在线选课系统的预览,此处简单介绍本系统的部分功能。
登录界面,如图4-1所示:
图4-1 登录界面
在登录名和密码处输入用户名和密码,,单击“登录”按钮,登录选课系统。 学生选课界面,如图4-2所示:
图4-2 学生选课界面
4.2 代码设计
1、数据库文件的组成、存放位置及相关属性的设置。(创建数据库的T-SQL 语句)
数据库建立:
create database 学生选课系统
on
(name=course_dat,
filename='e:\sc\coursedat.mdf',
size=10,
maxsize=50,
filegrowth=5)
log on
(name=course_log,
filename='e:\sc\courselog.ldf',
size=5MB,
maxsize=25MB,
filegrowth=5MB)
数据表建立:
use 学生选课系统
create table 学生表(
学号 char(8) primary key not null check(len(学号)=8 and isnumeric(学号)=1 ),
姓名 char(10) not null,
性别 char(2) not null check(性别='男' or 性别='女'),
专业 char(10) not null,
学历 char(4) not null check(学历='本科' or 学历='专科'),
年级 char(6) not null check(年级='一年级' or 年级='二年级' or 年级='三年级' or 年级='四年级'),
班级 char(6) not null check(len(班级)=6 and isnumeric(班级)=1), 系部 char(10) not null)
use 学生选课系统
create table 教师表(
教师号 char(5) primary key not null check(教师号 like '[A-Z]%'), 姓名 char(10) not null,
性别 char(2) not null check(性别='男' or 性别='女'),
职称 char(10) not null,
系部 char(10) not null)
use 学生选课系统
create table 课程表(
课程号 char(5) primary key not null,
课程名 char(12) not null,
教师号 char(5) foreign key references 教师表(教师号),
学分 float not null,
学时 int not null,
上课时间 char(20) not null,
上课地点 char(15) not null,
已选人数 int not null check(已选人数>=0) default 0,
限选人数 int not null check(限选人数>=0) default 50,
不可选专业 char(12),
课程简介 char(100))
use 学生选课系统
create table 选课表(
学号 char(8) foreign key references 学生表(学号),
课程号 char(5) foreign key references 课程表(课程号),
primary key(学号, 课程号)
成绩 nchar(10)
)
2、关系图、约束、视图、索引、默认值、规则、触发器、事务、存储过程等对象定义的T-SQL 语句
默认值:创建默认值约束,实现默认输入,方便数据的编辑。
use 学生选课系统
alter table 教师表
add constraint default_sex
default '男' for 性别
规则:预防工资输入错误,健全数据的完整性。
教师号 char(5) primary key not null check(教师号 like '[A-Z]%'), 索引:提高查询速度。
create index student on 学生表(学号 asc)
create index teacher on 教师表(教师号 asc)
create index course on 课程表(课程号 asc)
create unique index course_name on 课程表(课程名)
create unique index shi_di on 课程表(上课时间, 上课地点)
create index choose on 选课表(学号 asc,课程号 asc)
视图:前期规划创建了以下视图,当后期开发过程中发现直接在C#里面输入语法更方便。
select * from 学生表
select * from 教师表
select * from 课程表
select * from 选课表
存储过程:方便查询需要的数据,输入和输出数据
create procedure 开始选课
(@学号 char(8),@课程号 char(5))
as
if not exists(select @学号 from 学生表)
begin
print '该学号不存在!'
return -1
end
else if not exists(select @课程号 from 课程表)
begin
print '该课程号不存在!'
return -2
end
else
begin
insert 选课表 values (@学号,@课程号)
end
drop procedure 开始选课
create procedure 选课查询
(@学号 char(8))
as
if not exists(select @学号 from 选课表)
begin
print '您还未选课!'
return -1
end
else
begin
select 课程名, 姓名 as 教师, 学分, 学时, 上课时间, 上课地点, 课程简介 from 选课表 join 教师表
join 课程表 on 课程表. 教师号=教师表. 教师号 on 选课表. 课程号=课程表. 课程号
where 学号=@学号
end
execute 选课查询 '06110901'
drop procedure 选课查询
create procedure 选课名单
(@课程号 char(5))
as
if not exists(select @课程号 from 选课表)
begin
print '该课程号不存在!'
return -1
end
else
begin
select 学号, 姓名, 性别, 专业, 系部 from 学生表 where 学号 in(select 学号 from 选课表 where 课程号=@课程号)
end
drop 选课名单
create procedure 删除学生
(@学号 char(8))
as
if not exists(select @学号 from 学生表)
begin
print '该学号不存在!'
return -1
end
else
begin
update 课程表 set 已选人数=已选人数-1 where 课程号 in (select 课程号 from 选课表 where
学号=@学号)
delete from 选课表 where 学号=@学号
delete from 学生表 where 学号=@学号
end
drop procedure 删除学生
触发器:
create trigger add_course
on 选课表 for insert
as
declare @最多选课数 int
declare @已选人数 int
declare @限选人数 int
select @最多选课数=count(*) from 选课表 where 学号=(select 学号 from inserted)
select @已选人数=已选人数 from 课程表 where 课程号=(select 课程号 from inserted)
select @限选人数=限选人数 from 课程表 where 课程号=(select 课程号 from inserted)
if(@已选人数>=@限选人数)
begin
raiserror('该课程人数已满!',16,1)
rollback transaction
end
else if @最多选课数=4
begin
raiserror('最多只能选3门课!',16,1)
rollback transaction
end
else if (select 不可选专业 from 课程表 where 课程号=(select 课程号 from inserted))
=(select 专业 from 学生表 where 学号=(select 学号 from inserted))
begin
raiserror('您的专业不能选该课程!',16,1)
rollback transaction
end
else
begin
update 课程表 set 已选人数=已选人数+1 where 课程号=(select 课程号 from inserted)
print '选课成功!'
end
drop trigger add_course
数据库的连接方式:
SqlConnection myConnection = new SqlConnection("Data Source=.;Initial Catalog=学生选课系统;Integrated Security=True;");
myConnection.Open();
总 结
时至今日,两个礼拜的课程设计终于可以画上一个句号了,但是现在回想起来做课程设计的整个过程,颇有心得,其中有苦也有甜,不过乐趣尽在其中呀!没有接受任务以前觉得课程设计只是对以前学过的数据库进行设计,但是通过这次做课程设计发现自己的看法有点太片面、太偏激了。课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。下面我对整个课程设计的过程做一下简单的总结。
1.接到任务以后进行选题。选题是课程设计的开端,选择恰当的、感兴趣的题目,这对于整个课程设计是否能够顺利进行关系极大。好比走路,这开始的第一步是具有决定意义的,第一步迈向何方,需要慎重考虑。否则,就可能走许多弯路、费许多周折,甚至南辕北辙,难以到达目的地。。因此,选题时一定要考虑好了。
2.题目确定后就是找资料了。查资料是做课程设计的前期准备工作,好的开端就相当于成功了一半,到图书馆、书店、资料室去虽说是比较原始的方式,但也有可取之处的。总之,不管通过哪种方式查的资料都是有利用价值的,要一一记录下来以备后用。
3.通过上面的过程,已经积累了不少资料,对所选的题目也大概有了一些了解,这一步就是在这样一个基础上,综合已有的资料来更透彻的分析题目。
4.有了研究方向,就应该动手实现了。其实以前的三步都是为这一步作的铺垫。 编写源代码的时候最好是编写一个小模块就进行调试,这样可以避免设计的最后出现太多的错误而乱成一团糟。一步步地做下去之后,你会发现要做出来并不难。
我的心得也就这么多了,总之,不管学会的还是学不会的的确觉得困难比较多,真是万事开头难,不知道如何入手。还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。
参考文献
[1] 萨师煊. 数据库系统概论. 第3版. 高等教育出版社,2000年
[2] 郑人杰. 《实用软件工程》(第二版). 清华大学出版社,1997年
[3] 王删著. 计算机导论[M].清华大学出版社出版.2007年4月
[4] 陈松桥.C#实用教程(修订)[M].清华大学出版社出版.2006年2月
[5] 陆丽娜.C#信息系统设计与开发实例(第二版)[M].机械工业出版社.2008年9月
[6] 汤 俊.C#技术教程(修订)[M].北京清华大学出版社.2006年2月
[7] 王华杰.SQLServer2005数据库实训教程[M].清华大学出版社.2006年8月
[8] 杨浩译. 数据库系统与SQL 教程[M].北京. 清华大学出版社.2007年6月
[9] 唐云深.SQL 应用系统开发教程[M].北京. 清华大学出版社.2008年10月
[10]罗运模.SQLServer2005数据仓库应用与开发[M].北京. 人民邮电出版社,2001年1月