数据库原理实验报告综合实验华东理工大学课程设计Word格式文档下载.docx
- 文档编号:19636840
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:27
- 大小:460.44KB
数据库原理实验报告综合实验华东理工大学课程设计Word格式文档下载.docx
《数据库原理实验报告综合实验华东理工大学课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据库原理实验报告综合实验华东理工大学课程设计Word格式文档下载.docx(27页珍藏版)》请在冰豆网上搜索。
显示球员自身的一些信息以及与球队的关联,具有对球员信息的增删改查的功能。
3)赛程信息管理:
显示本赛季安排的比赛信息,具有增删改查的功能。
4)比赛结果信息管理:
显示比赛结果的相关统计信息,包括比赛客队和主队的比赛结果和球员的进球统计等,具有增删改查的功能。
5)比赛积分信息管理:
根据比赛结果中相关数据计算每个球队的胜场数和负场数,可以选择所在的小组,然后按照结果显示相关排名,导出积分表格,显示比赛结果的排名信息,具有增删改查的功能。
6)球迷投票信息管理:
主要记录每个登陆的球迷的基本信息和其所喜爱的球队和球员,对所得票数进行统计,得出最后的TOP排行榜,具有查询功能。
7)竞猜管理信息系统:
主要是先从赛程表中选择出并未出结果的比赛场次及其时间,然后选择用户需要竞猜的场次,填入用户名和密码以及其竞猜的比分,最后可以查询竞猜是否成功,以及查看获奖情况。
2需求分析(DFD+DD)
(1)数据流图(DFD)
(2)数据字典
数据项是数据库的关系中不可再分的数据单位。
下表分别列出了数据的名称、数据的类型、长度、取值能否为空。
利用SQLServer2008建立“Soccer”数据库,其基本表清单及结构描述如下:
数据库中用到的表:
数据库表名
关系模式名称
备注
Course
赛程
赛程基本信息表
Player
球员
球员基本信息表
Score
积分
比赛积分信息表
Team
球队
球队基本信息表
Goal
进球
进球基本信息表
GoalScore
射手
球员进球排行表
Fans
球迷
球迷投票信息表
Prediction
竞猜
用户竞猜信息表
Award
获奖
用户获奖信息表
Course基本情况数据表,结构如下:
字段名
字段类型
允许Null值
说明
Host
varchar(20)
NotNull
主队
Guest
客队
Groupno
小组号
Gametime
datetime
比赛时间
Hscore
int
主队得分
Gscore
客队得分
Player基本情况数据表,结构如下:
Pname
姓名
Tname
球队名称
Number
球衣号码
Position
varchar(6)
位置
Birth
生日
Team基本情况信息表,结构如下:
Home
varchar(30)
主场地
Coach
varcar(20)
教练
varchar
(2)
Captain
队长
Score基本情况信息表,结构如下:
Won
胜场
Even
平场
Beaten
负场
Goalno
总进球数
Lostno
总失球数
Point
Goal基本情况信息表,结构如下:
NotNull
Turn
比赛轮次
Goaltime
进球时间
GoalScore基本情况信息表,结构如下:
Place
排名
Goals
in
进球总数
Fans基本情况信息表,结构如下:
Sno
球迷编号
Sname
varchar(20)
球迷姓名
Ssex
varca(20)
球迷性别
Fteam
球迷最喜爱球队
Fplayer
球迷最喜爱队员
Prediction基本情况信息表,结构如下:
Users
用户名
Password
密码
主队名称
客队名称
Phscore
int
竞猜主队比分
Pgscore
竞猜客队比分
Award基本情况信息表,结构如下:
Name
获奖者姓名
ID
身份证号
电子邮箱
Telephone
电话号码
3概念结构(E-R图)
由需求分析的结果,画出基本E-R如下:
对基本E-R图进行合并和消除数据冗余后得到E-R图如下:
由E-R图可知,本系统设计的实体包括:
(1)球员基本信息:
球员姓名、所在球队名称、球衣号码、所在球队位置、生日;
(2)球队基本信息:
球队名称、主场地、教练、小组号、队长;
(3)赛程基本信息:
主客队名、小组号、比赛日期、主客队比分;
(4)进球表基本信息:
球队名称、球衣号码、比赛轮次、进球时间;
(5)积分榜基本信息:
球队名称、胜场、平场、负场、总进球、总失球、积分;
(6)射手榜基本信息:
名次、球员姓名、球队名称、球衣号码、进球数;
(7)球迷投票基本信息:
编号、姓名、最喜爱的球队、最喜爱的球员;
(8)比赛竞猜基本信息:
用户名、密码、主队名、客队名、竞猜主队进球数、竞猜客队进球数;
(9)获奖基本信息:
姓名、身份证号、电子邮箱、电话号码
4逻辑结构(关系模式集+视图)
1)有E-R图转化而得到的关系模式如下:
(1)Team(Tname,Home,Coach,Groupno,Captain)其主键为Tname
F={Tname->
Home,Tname->
Coach,Tname->
Groupno,Tname->
Captain}
为BC范式;
(2)Player(Pname,Tname,Number,Position,Birth)其主键为(Tname,Number)
F={(Tname,Number)->
Pname,(Tname,Number)->
Positioin,(Tname,Number)->
Brith}
(3)Course(Host,Guest,Groupno,Gametime,Hscore,Gscore)其主键为(Host,Guest)
F={(Host,Guest)->
Groupno,(Host,Guest)->
Gametime,(Host,Guest)->
Hscore,(Host,Guest)->
Gscore}
(4)Goal(Tname,Number,Turn,Goaltime)其主键为(Tname,Number,Turn,Goaltime)
F={(Tname,Number,Turn,Goaltime)}
为BC范式
(5)Score(Tname,Won,Even,Beaten,Goalno,Lostno,Point)其主键为Tname
Won,Tname->
Even,Tname->
Beaten,Tname->
Goalno,Tname->
Lostno,Tname->
Point}
(6)GoalScore(Place,Pname,Tname,Number,Goals)其主键为(Tname,Number)
Place,(Tname,Number)->
Goals}
(7)Fans(Sno,Sname,Ssex,Fteam,Fplayer)其主键为Sno
F={Sno->
Sname,Sno->
Ssex,Sno->
Fteam,Sno->
Fplayer}
(8)Prediction(Users,Password,Host,Guest,Phscore,Pgscore)其主键为(User,Password,Host,Guest)
F={(User,Password,Host,Guest)->
Phscore,(User,Password,Host,Guest)->
Pgscore}
(9)Award(Name,ID,Mail,Telephone)其主键为ID
F={ID->
Name,ID->
Mail,ID->
Telephome}
为BC范式。
2)确定关系模型的存取方法
在将概念模型转换成物理模型之后,我们可以对物理模型进行设计,双击物理模型的关系,可以对该关系的名称、注释等信息进行查询。
可对该关系的属性列进行设计,可分别设置其名称、码、数据类型以及主码、是否为空等。
在实际设计中最常用的存取方法是索引,使用索引可以大大减少数据的查询时间,在建立索引时应遵循:
在经常需要搜索的列上建立索引;
在主关键字上建立索引;
在经常用于连接的列上建立索引,即在外键上建立索引;
在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的等规则。
才能充分利用索引的作用避免因索引引起的负面作用。
3)本系统用到的视图
(1)基于Fans表,创建一个选出Fteam及其所得票数的视图s_fteam1
Createviews_fteam1As
SELECTDISTINCTFteam,COUNT(Fteam)ASnumber
FROMFans
GROUPBYFteam
(2)创建基于视图s_fteam1的视图s_fteam,选出Fteam排名前三的数据
Createviews_fteamAs
SELECTTOP3Fteam,number
FROMs_fteam1
ORDERBYnumberDESC
(3)基于Fans表,创建一个选出Fplayer及其所得票数的视图s_fplayer1
Createviews_fplayer1As
SELECTDISTINCTFplayer,COUNT(Fplayer)ASnumber
GROUPBYFplayer
(4)创建基于视图s_fplayer1的视图s_fplayer,选出Fplayer排名前三的数据
Createviews_fplayerAs
SELECTTOP3Fplayer,number
FROMs_fplayer1
(5)创建基于Course表的视图s_prediction,选出还没有比分的比赛赛程基本信息
Createviews_predictionAs
SELECTGametime,Host,Guest
FromCourse
WHEREHscoreisnullandGscoreisnull
(6)创建基于Prediction表的视图s_quizquery,选出其中的除密码以外的所有信息,密码要用户自己输入,判断正确后才能进行下面的操作
Createviews_quizquery
SelectUsers,Host,Guest,Phscore,Pgscore
FormPrediction
4)本系统用到的存储过程
(1)根据传入参数是Tname还是Groupno来从Team表中查询其他的信息
CreateProcedurep_soccerStock@columnvarchar(30),@valuevarchar(50)
AS
IF@column='
Tname'
SELECTTname,Home,Coach,Groupno,Captain
FROMTeam
WHERETnameLIKE'
%'
+@value+'
ELSE
SELECTTname,Home,Coach,Groupno,Captain
WHEREGroupnoLIKE'
(2)根据传入参数Groupno来从Team表和Score做连接,查询其每组的球队和积分
CreateProcedurep_scoreStock@valueNVarChar
(2)
SELECTScore.Tname,Won,Even,Beaten,Goalno,Lostno,Point
FROMTeam,Score
WHERETeam.Tname=Score.TnameandGroupnoLIKE'
(3)根据传入参数Tname,从Player表中查询属于某球队的所有球员的信息
CreateProcedurep_playerStock@columnvarchar(20),@valuevarchar(50)
SELECTPname,Number,Position,Birth
FROMPlayer
(4)根据传入参数Turn,从Goal表中查询某轮比赛的所有球员进球信息
CreateProcedurep_bookStock]@columnvarchar(30),@valuevarchar(50)
SELECTTname,Number,GoalTime
FROMGoal
WHERETurnLIKE'
5物理设计(存储结构及索引)
确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置。
索引设计:
各表都有自己的主键,主键为聚集索引,而且每个表只能建立一个聚集索引,所以只能创建非聚集索引。
(1)创建Course信息表代码:
CREATETABLECourse(
Hostvarchar(20)NOTNULL,
Guestvarchar(20)NOTNULL,
Groupnovarchar
(2)NOTNULL,
GametimedatetimeNOTNULL,
HscoreintNULL,
GscoreintNULL,
CONSTRAINTPK_CoursePRIMARYKEY(Host,Guest)
)
(2)创建球队Team信息表、球员Player信息表、Goal信息表、Score信息表、GoalScore信息表、Fans信息表、Prediction信息表、Award信息表代码,在此不再赘述。
6系统实现(代码见附录)
1)主界面
功能:
主界面的主要功能是对用户选择相应操作的触发,如球队管理功能、球员管理功能等。
界面设计:
2)球队管理模块
添加、删除、修改和查询球队的信息
3)球员管理模块
功能设计:
添加、删除、修改和查询球员的信息
4)赛程管理模块
分别对赛程表和进球表进行查询等操作。
5)TOP榜管理模块
主要是对小组积分和球员射手榜的查询等功能
6)球迷投票管理模块
主要是记录球迷的基本信息和对投票的记录与管理
7)用户竞猜管理模块
主要是记录用户的基本信息和对比赛结果的竞猜情况,
三、出现的问题和解决方案
1)关于界面:
(1)刚开始编程的时候对按钮的操作却没有任何反应,很纠结,后来发现是按钮的Name属性与函数编程中的按钮的名称弄混了,比如有个按钮的Name为button1,则必须该按钮的Click函数为privatevoidbutton1_Click(objectsender,EventArgse),否则用户单击的时候将不会产生任何响应。
(2)对界面的安排和设置不合理,导致界面很乱,许多静态文本和按钮等混淆在一起,最终导致功能完善的不合理。
最后查阅资料,了解到可以在Form中插入多个Panel面板或者是GroupBox分组框,将每个不同功能的控件,包括Label、TextBox、Button、RadioButton
ComboBox等放在相同的Panel或者GroupBox中,这样界面分配合理且有条理,不仅美观,对功能的实现也起到了一点帮助的作用。
(3)对ComboBox内的选项进行初始化的时候遇到了一些问题,因为我把Form的Load函数初始化Combox和在Combox中的Item初始化的时候都做了一遍,不仅浪费了代码和时间,有时还会导致冲突错误。
解决方法很简单,两种方法取其一种就可以了,这里推荐直接在Item中添加选项,因为简单和全可视化操作,但是如果其中的选项要在数据库的表中查询,则必须使用Load方法的初始化其选项。
(4)实验完成后发现窗口的背景和所有控件的大小都不随窗口的大小改变而改变,即每当最大化窗口或者拉伸窗口的时候,控件并不随着改变其大小,这样就会导致界面不美观。
查了一下资料,有两种解决方案:
第一,更改控件的Dock或Anchor的属性,使其可以随着窗口的变换而变换,即将Anchor设置为Top,Left,Bottom,Right或者将Dock设置为靠近上下左右四个方向停靠,试验了一下,果真可以,但是当窗口中控件很多的情况下,不仅一个一个设置很麻烦,而且当Anchor和Dock属性用多了以后,窗口拉伸的时候会出现不停的闪烁的现象,而且无法避免;
第二,直接设置完成控件的大小后,设置其大小不可改变,这样只需要更改窗口的MaximizeBox为False,并将FormBorderStyle设置为FixedSingle即可,这样既方便又有效限制了用户的操作规范,不至于发生什么界面混乱的状况,但是不能随意修改大小某些时候也会有些限制;
所以,这里我们仅采用第二种做法。
2)关于数据库:
(1)往表中插入数据,只能每次插入一条记录吗?
最终答案:
是的,在SQLServer中,用INSERT…VALUES…每次只能插入一条记录。
(2)对定义了外键的表插入数据时,例如对Reports表插入元组时,总是说插入错误。
最终解决:
在表中定义了外键之后,对表进行插入时,要注意数据与被引用表中的一致性。
要插入的元组中,属于外键的数据必须是在被引用表中存在的。
例如:
在Reports中定义Sno为外键,参照表Students中的Sno。
那么在Reports表中要插入(‘S88’,’T02’,’C01’,88)时,如果Students表中没有“S88”这条记录,那么插入失败。
另外,如果这些规定都符合了,但插入语句VALUES()括号里的各字段值顺序跟表中的顺序不一致,也会出现同样的错误提示。
(3)在SQL语句的末尾都可以加分号“;
”,但是为什么在创建视图的语句后面加了分号会报错?
在SQLServer2000中,查询分析器中的语句规则是,各条语句后面不用加任何标点符号。
但鉴于人们的使用习惯,基本上允许在每条语句的后面加上“;
”。
个别语句可能会有影响。
另外也可以用“GO”来隔开各条语句。
它的意义在于告诉系统,在两个“GO”之间的语句作为一批去处理。
(4)为何建了新的用户,却登录不了?
建立管理员账号(如sa)时,若定义为以WINDOWS验证登录。
而建立其它用户,如USER1时,定义为WINDOWS+SQL验证登录。
这样USER1无法登录。
只有将sa登录方式改为以WINDOWS+SQL验证登录之后,方可以USER1登录。
若不改S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库原理实验报告综合实验 华东理工大学课程设计 数据库 原理 实验 报告 综合 华东理工大学 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)