运动会管理系统(总28--本页仅作为文档封面,使用时请直接删除即可-- --内页可以根据需求调整合适字体及大小--
页)
南京师范大学 2015-2016学年 第一学期
《数据库系统课程设
计》
课程设计报告
姓 名: 学 号: 班 级: 专 业: 学 院: 指导教师: 题 目: 提交日期:
表单设计及数据提取
访问数据库
22
目录
一、设计目的 ............................................................. - 1 - 二、设计平台 ............................................................. - 1 - 三、试题内容 ............................................................. - 1 - 四、实验设计 ............................................................. - 1 -
需求分析 ............................................................ - 1 - 实验内容 ............................................................ - 2 -
概念结构设计 ................................................... - 2 - 逻辑结构设计 ................................................... - 5 - 数据库物理设计与实施 ........................................... - 5 - 访问数据库 .................................................... - 20 - 数据库维护 .................................................... - 28 -
五、参考文献 ............................................................ - 29 - 六、实验心得 ............................................................ - 30 -
33
一、设计目的
数据库课程设计是在系统地学习了《数据库系统原理》课程后,按照关系型数据库的基本原理,综合运用所学的知识,完成一个数据库应用系统的设计全过程,包括需求分析、数据库设计、数据库建立、数据输入、应用系统的设计和开发、用户界面的设计和实现、系统安装和调试。
通过对一个实际问题的分析、设计与实现,将原理与应用相结合,学会如何把所学的知识用于解决实际问题。
二、设计平台
SQL 2005 WPS
三、试题内容
根据给定的“运动会管理系统”的需求分析,完成概念结构设计、逻辑结构设计、数据库的物理设计、数据库的访问和数据库维护等内容,并提交完整的课程设计报告。
四、实验设计
需求分析
引入计算机管理运动会,运动可以在运动会管理系统中查询自己的比赛项目及比赛结果,裁判员或工作人员可以通过系统记录运动员各个比赛项目的成绩、进行成绩统计等。运动会管理系统保存运动员、比赛项目以及不同类型的比赛的参数数据。
- 1 -- 1 -
对于运动员来说:可以查看运动员所在代表队的名称、领队、本代表队的总积分、总名次;查看运动员参加比赛的项目、每个项目的成绩、积分等。
对于管理员来说:可以记录并查看运动员参加比赛项目的成绩、积分、名次;查看各代表队的总积分、总名次等。
运动会管理系统同主要管理对象有代表队、运动员、比赛项目等。对于代表队,需要有代表队号、代表队的名称、领队、本代表队的总积分、总名次等属性;对于运动员需要有运动员号、姓名、年龄、性别等属性;对于比赛项目,需要有项目号、项目类别、项目名称、成绩单位等属性。
在运动会管理系统中,基本规定为:一个代表队包含多个运动员,一个运动员只能属于一个代表队;一个运动员可以参加多个比赛项目,一个比赛项目也可以被多个运动员参加;假设各个比赛项目结束后,按照成绩由高到低排出名次,并对前3名运动员给予相应的积分,如第1、2、3名分别积分为3分、2分、1分,而获得其他名次的运动员积分为0分,将代表队中所有成员的积分累加,得到各代表队总积分,将总积分由高到低排序,得到各个代表队的排名情况。
为简化系统需求,本系统只考虑代表队、运动员、比赛项目的关系,其他关系不考虑。
实验内容 概念结构设计
抽象出实体,并画出各实体的E-R图;
- 2 -- 2 -
- 3 -- 3 -
②
分析各实体之间的联系及类型,设计运动会管理系统总体E-R图;
- 4 -- 4 -
逻辑结构设计
根据E-R 图,设计运动会管理数据库的关系模式。
(1)运动员(运动员号、姓名、年龄、性别);
(2)代表队(代表队号、代表队的名称、领队、本代表队的总 分、总名次);
(3)比赛项目(项目号,项目类别,项目名称,成绩单位); (4)参加(运动员号, 项目号,成绩,积分,名次)
积
数据库物理设计与实施 (1)建立数据库
建立“运动会管理系统”数据库,其初始大小为100MB,增长率为10%,数据文件和日志文件名分别为:“运动会管理系统_data”和“运动会管理系统_log”,存储路径为“D:\\\\MSSQL\\Data”文件夹下。 创建运动会数据库SQL代码如下:
CREATE DATABASE 运动会管理系统 on(
NAME=运动会管理系统_data,
FILENAME=’D:\\\\MSSQL\\Data\\运动会管理系统.mdf', SIZE=100MB,
MAXSIZE=200MB, FILEGROWTH=10% )
LOG ON(
NAME=运动会管理系统_log,
- 5 -- 5 -
FILENAME='D:\\\\MSSQL\\Data\\运动会管理系统.ldf', SIZE=1MB,
MAXSIZE=20MB, FILEGROWTH=10% ) GO
(2)建立基本表
①创建代表队表 SQL代码:
CREATE TABLE 代表队表 (
代表队号 CHAR(10) NOT NULL PRIMARY KEY, 队名称 CHAR(20) NOT NULL, 领队 CHAR(10) NOT NULL,
总积分 INT NOT NULL CHECK(总积分>=0),
- 6 -- 6 -
总名次 INT NOT NULL CHECK(总名次>=0), )
② 创建运动员表 SQL代码:
CREATE TABLE 运动员表 (
运动员号CHAR(6) NOT NULL PRIMARY KEY, 姓名CHAR(10) NOT NULL,
性别CHAR(10) NOT NULL CHECK(性别='男' or 性别='女'), 年龄Tinyint NOT NULL CHECK(年龄>1 and 年龄<100), 代表队号CHAR(10) NOT NULL,
- 7 -- 7 -
)
③ 创建比赛项目表 SQL代码:
CREATE TABLE 比赛项目 (
项目号CHAR(6) NOT NULL PRIMARY KEY, 项目类别CHAR(10) NOT NULL, 项目名称CHAR(20) NOT NULL, 成绩单位CHAR(20) NOT NULL, )
- 8 -- 8 -
④ 创建比赛详情表 SQL代码:
CREATE TABLE 比赛详情 (
运动员号CHAR(6) NOT NULL , 项目号CHAR(6) NOT NULL , 成绩Float,
积分Tinyint CHECK (积分>= 0 ), 名次Tinyint CHECK (名次>= 0 ),
CONSTRAINT 运动会管理系统_比赛详情_运动员号FOREIGN KEY (运动员号) REFERENCES 运动员表(运动员号),
- 9 -- 9 -
CONSTRAINT 运动会管理系统_比赛详情_项目号FOREIGN KEY (项目号) REFERENCES 比赛项目(项目号), )
(3)管理基本表
(3-1) 向运动员表中增加“身高”列,其数据类型为整型。
alter table 运动员表
add 身高INT NULL
- 10 -- 10 -
(3-2) 将运动员表中的“身高”的数据类型改为浮点型。 alter table 运动员表alter column 身高float
(3-3) 为运动员表中的“身高”属性增加取值必须大于0的约束条件。
- 11 -- 11 -
alter table 运动员表add constraint 运动会管理系统_运动员表_身高 check(身高>0)
(3-4) 删除运动员表中的“身高”列。
alter table 运动员表drop constraint 运动会管理系统_运动员表_身高
alter table 运动员表drop column 身高
- 12 -- 12 -
(4)使用Insert语句插入数据,各表中的数据如下:
(4-1) 代表队表数据:
insert into 代表队表values ('GLXY','管理学院','吴道福','7','2') insert into 代表队表 values ('JSJXY','计算机学院','张鹏','6','3') insert into 代表队表values ('SXXY','数学学院','宋威','3','4') insert into 代表队表values ('WYXY','外语学院','王光明','8','1')
(4-2) 运动员表数据:
insert into 运动员values ('G11001','钱翔' ,'男','14','GLXY')
insert into 运动员values ('G11002','吴帆' ,'男','16','GLXY')
insert into 运动员values ('G11003','石乔乔','女','16','GLXY') insert into 运动员values ('G11004','张桂芳','女','19','GLXY')
- 13 -- 13 -
insert into 运动员values ('G11005','洪雪' ,'女','18','GLXY')
insert into 运动员values ('J11001','张月' ,'女','19','JSJXY')
insert into 运动员values ('J11002','田楠' ,'男','18','JSJXY')
insert into 运动员values ('J11003','赵恒博','男','18','JSJXY')
insert into 运动员values ('J11004','徐铜铃','男','15','JSJXY')
insert into 运动员values ('J11005','李明' ,'男','16','JSJXY')
insert into 运动员values ('S11001','崔天齐','男','18','SXXY') insert into 运动员values ('S11002','王尹' ,'女','16','SXXY')
insert into 运动员values ('S11003','刘冰洁','女','18','SXXY') insert into 运动员values ('S11004','杨中华','男','15','SXXY') insert into 运动员values ('S11005','李雪平','女','15','SXXY') insert into 运动员values ('W11001','叶星' ,'男','18','WYXY')
insert into 运动员values ('W11002','顾羽翔','男','16','WYXY') insert into 运动员values ('W11003','袁建明','男','15','WYXY') insert into 运动员values ('W11004','刘琼' ,'女','17','WYXY')
insert into 运动员values ('W11005','孟储强','男','19','WYXY')
- 14 -- 14 -
(4-3) 比赛项目表数据:
insert into 比赛项目values ('JS001M','径赛' ,'男子米' ,'秒')
insert into 比赛项目values ('JS002W','径赛' ,'女子米' ,'分钟')
insert into 比赛项目values ('TS001M','田赛' ,'男子三级跳远','米')
insert into 比赛项目values ('TS002W','田赛' ,'女子铅球' ,'米')
- 15 -- 15 -
(4-4) 比赛详情表数据
insert into 比赛详情values ('S11001','JS001M' ,'','3','1') insert into 比赛详情values ('J11005','JS001M' ,'','2','2') insert into 比赛详情values ('J11002','JS001M' ,'','1','3') insert into 比赛详情values ('S11004','JS001M' ,'','0','4') insert into 比赛详情values ('W11004','JS002W' ,'' ,'3','1') insert into 比赛详情values ('J11001','JS002W' ,'' ,'2','2') insert into 比赛详情values ('G11004','JS002W' ,'' ,'1','3') insert into 比赛详情values ('G11003','JS002W' ,'' ,'0','4') insert into 比赛详情values ('W11005','TS001M' ,'' ,'3','1') insert into 比赛详情values ('W11002','TS001M' ,'' ,'2','2') insert into 比赛详情values ('J11003','TS001M' ,'' ,'1','3') insert into 比赛详情values ('S11004','TS001M' ,'' ,'0','4')
- 16 -- 16 -
insert into 比赛详情values ('G11004','TS002W' ,'' ,'3','1') insert into 比赛详情values ('G11003','TS002W' ,'' ,'2','2') insert into 比赛详情values ('G11005','TS002W' ,'' ,'1','3') insert into 比赛详情values
('W11004','TS002W' ,'' ,'0','4')
(5)建立和管理视图
(5-1) 生成一张“项目类别”为“田赛”的视图,并将该视图命名为“田赛项目”。 create view 田赛项目as select * from 比赛项目where 项目类别='田赛'
- 17 -- 17 -
(5-2) 生成一张“项目类别”为“径赛”的视图,并将该视图命名为“径赛项目”。 create view 径赛项目as select * from 比赛项目 where 项目类别= '径赛'
(6)建立和管理索引
- 18 -- 18 -
(6-1) 为运动员表中的“姓名”建立次索引。
create index sportname on 运动员表(姓名)
(6-2) 为项目表中的“项目类别”建立次索引。
create index classification on 比赛项目(项目类别)
- 19 -- 19 -
访问数据库 1.数据查询
(1) 查询姓名为“杨中华”的运动员的运动员号和所在的代表队号。 select 运动员表.运动员号,运动员表.代表队号 from 运动员表 where 姓名= '杨中华'
- 20 -- 20 -
(2) 查询代表队号为“JSJXY”的所有成员姓名。 select 姓名from 运动员表where 代表队号= 'JSJXY'
- 21 -- 21 -
(3) 统计项目名称为“男子100米”比赛的参赛运动员名称、年龄、项目号、项目名称、成绩,并按成绩由高到低排列。
select 运动员表.姓名,运动员表.年龄,比赛详情.项目号,比赛项目.项目名称,比赛详情.成绩
from 运动员表,比赛详情,比赛项目
where 比赛详情.项目号= 比赛项目.项目号and 运动员表.运动员号= 比赛详情.运动员号and 项目名称= '男子米'
order by 比赛详情.成绩desc
(4) 查询“杨中华”参加的比赛项目的情况。
select 运动员表.姓名,比赛详情.运动员号,比赛详情.项目号,比赛项目.项目名称,比赛详情.成绩,比赛详情.积分,比赛详情.名次 from 运动员表,比赛项目,比赛详情
where 比赛详情.项目号= 比赛项目.项目号and 运动员表.运动员号= 比赛详情.运动员号and 姓名= '杨中华'
- 22 -- 22 -
(5) 列出运动员号为“G1104”的运动员的所有的个人信息及比赛信息。 select 比赛详情.运动员号,运动员表.姓名,运动员表.性别,运动员表.年龄,运动员表.代表队号,比赛详情.项目号,比赛项目.项目类别,
比赛项目.项目名称,比赛详情.成绩,比赛详情.积分,比赛详情.名次from 运动员表,比赛项目,比赛详情
where 比赛详情.项目号= 比赛项目.项目号and 运动员表.运动员号= 比赛详情.运动员号and 运动员表.运动员号= 'G11004'
(6) 统计代表队号为“JSJXY”的参加比赛的各个运动员的积分情况,并且按积分由大到小的顺序排序。
- 23 -- 23 -
select 比赛详情.运动员号,运动员表.姓名,比赛详情.积分 from 运动员表,比赛详情
where 运动员表.运动员号= 比赛详情.运动员号and 运动员表.代表队号='JSJXY' order by 比赛详情.积分 desc
(7) 统计所有比赛项目中,同一个运动员号的运动员的积分情况。 Select 运动员表.运动员号,运动员表.姓名,比赛项目.项目号,比赛详情.积分 from 运动员表,比赛详情,比赛项目
where 比赛项目.项目号= 比赛详情.项目号and 比赛详情.运动员号= 运动员表.运动员号
- 24 -- 24 -
(8) 查询个人总积分大于等于3的运动员的情况。
Select 运动员表.运动员号,运动员表.姓名,运动员表.性别,运动员表.年龄,运动员表.代表队号
from 运动员表,比赛详情
where 运动员表.运动员号=比赛详情.运动员号 and 比赛详情.积分>=3
2.数据更新
- 25 -- 25 -
(1) 增加一名新的运动员,要求运动员号:S11006;姓名:王林;性别:
男;年龄:17;代表队号:SXXY。
insert into 运动员表(运动员号,姓名,性别,年龄,代表队号) values('S11006','王林','男','17','SXXY')
(2) 将“王林”的年龄更新为16。
update 运动员表set 年龄='16' where 姓名='王林'
(3) 将运动员号为“S11006”的运动员的代表队号更新为“GLXY”。 update 运动员表set 代表队号='GLXY' where 运动员号='S11006'
- 26 -- 26 -
(4) 将所有运动员的年龄加1。 update 运动员表set 年龄=年龄+1
(5) 由于测算问题,需要将项目号为“TS001M”的比赛成绩全部减少米。 update 比赛详情set 成绩=成绩 where 项目号='TS001M'
- 27 -- 27 -
(6) 删除运动员号为“S1106”的运动员信息。 Delete from 运动员表where 运动员号='S11006'
数据库维护
(1) 使用SQL语句备份数据库 (1-1) 创建备份设备
EXEC sp_addumpdevice 'DISK','mybackup1', 'D:\\\\MSSQL\\Backup'
- 28 -- 28 -
(1-2) 备份数据库
Backup Database 运动会管理系统
To DISK='D:\\\\MSSQL\\Backup\\运动会管理系统.BAK'
五、参考文献
《软件工程及实践》,电子工业出版社,窦万峰,郑阿奇。 《数据库技术与应用》,清华大学出版社,顾斌。 《数据库系统原理教程》,清华大学出版社,王珊、陈虹;
- 29 -- 29 -
六、实验心得
这次设计中不断的出现问题,我则自己努力,不断的改正错误,改进自己的 程序,有些自己实在是无法解决的问题,则会与其他同学讨论,或上网查询、搜寻资料……在不断的改进过程中,深刻的认识到自己程序的漏洞和不健全性,而且一些pb的语法和函数自己不是很了解,以致有很多错误改了很长时间才能调试正确。通过这次设计,不但让我进一步加深了对知识的巩固,而且很好的锻炼了我的独立思考能力,以及分析问题解决问题的能力。今后凡事都不要着急,要冷静的分析思考,越是急越是无法解决,只有沉着冷静深入思考才能真正的解决问题。只要自己努力凡事都能解决。而且深刻感受到了知识的重要性。平时如果不多积累知识,在编写自己的程序时会手忙脚乱无所适从,相反如果平时自己扎实学习,知识掌握的都很牢固,到写程序的时候会得心应手,很熟练很快的写出程序,虽然有些毛病,但是如果仔细检查,也会在很短的时间内解决。由此我更加认识到课堂知识的重要性,以及自己多积累,多查资料的重要性。 最重要的一点经验就是老师提供了设计提纲,跟着老师的设计思路慢慢完善 很重要,总是先建表,再找关系,这是很不正确的,以后设计也要按照老师给的这个思路,要先进行目标明确,任务分析,然后是系统边界,再是需求分析,之后是ER图,然后才是数据库设计,最后是程序的编写与完善。这样就避免了我们平时写程序的时候边写边修改数据库,数据库应该是比较完善的时候才进行程序的编写。 以后做程序要先理清思路,不要急于完成,先把各角色的任务权限分清,各模块划分好,联系好,要先从整体把握,再从细节抓起
- 30 -- 30 -
课程设计感触颇深,首先是深刻感受到程序的实际应用性,这学期的课程设计的题目都是贴近实际生活的问题,我们就能够很清楚的明白自己写的程序要解决什么样的实际问题,应该解决什么样的实际问题,觉得自己的程序更有实用价值。
- 31 -- 31 -
因篇幅问题不能全部显示,请点此查看更多更全内容