数据库系统原理实验五数据库设计.docx
- 文档编号:2146547
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:35
- 大小:919.09KB
数据库系统原理实验五数据库设计.docx
《数据库系统原理实验五数据库设计.docx》由会员分享,可在线阅读,更多相关《数据库系统原理实验五数据库设计.docx(35页珍藏版)》请在冰点文库上搜索。
数据库系统原理实验五数据库设计
临沂大学信息学院
学生上机(实验)报告
2014~2015学年度第1学期
课程名称:
数据库系统原理
指导教师:
学生姓名:
学号:
一、实验名称
数据库设计
二、实验目的
1、理解数据库设计的含义
2、通过实践,掌握所学的数据库设计方法和步骤。
3、学会在一个实际的RDBMS软件平台上创建数据库;
4、练习基于数据库支持的管理信息系统的开发方法;
三、实验环境
1、实验仪器设备。
至少具有如下配置的计算机:
计算机主频至少133MHZ;计算机内存至少32MB以上;至少85MB以上的硬盘空间;VGA或更高分辨率的显示器。
2、软件环境。
操作系统:
Windows7或WindowsXP。
DBMS:
VisualFoxPro。
四、实验内容
设计一管理信息系统:
学生选课管理信息系统。
五、实验步骤
1、需求分析。
(1)学生选课的数据流图如下所示:
课程
f3
f1f2
选课
学生
图5-1学生选课数据流
(2)数据字典
1)数据项
数据项名含义数据类型长度小数位数
XH学生学号字符10
XM学生姓名字符8
AGE学生年龄数值20
XB学生性别字符2
SDEPT学生系别字符20
CH课程号字符2
CM课程名字符20
G课程成绩数值41
XF课程学分数值10
2)数据结构
名称含义说明编号输入的数据流输出的数据流组成
S学生1无f1{XH,XM,AGE,XB,SDEPT}
COURSE课程2无f3{CH,CM,XF}
SC选课3f2无{XH,CH,G}
3)数据流
数据流名说明数据流来源数据流去向组成
f1学生数据流学生选课(处理){XH}
f2选课数据流选课(处理)选课{XH,CH,G}
f3课程数据流课程选课(处理){CH}
4)数据存储
名称含义说明编号输入的数据流输出的数据流组成
S学生1无f1{XH,XM,AGE,XB,SDEPT}
COURSE课程2无f3{CH,CM,XF}
SC选课3f2无{XH,CH,G}
5)处理过程
处理过程的名:
SC
说明:
学生的选课处理
输入的数据流:
{f1,f3}
输出的数据流:
{f2}
简要说明:
输入学生的学号,输入课程的课程号,进行选课
(3)功能分析
输入学生信息,可实现添加、删除、修改,输入课程信息,可实现添加、删除、修改,输入学生的学号,可以查询学生的详细信息和选课的详细信息;输入学生的学号和和课程号,进行选课,可以显示学生选课的详细信息;输入学生的学号和和课程号可以退课。
2、概念结构设计。
根据以上分析的结果得出概念模型如下所示
课程
学生
mn
图5-2选课E-R图
3、逻辑结构设计。
根据以上概念模型得出如下的关系模型
S(学生)(XH,XM,AGE,XB,SDEPT)
COURSE(课程)(CH,CM,XF)
SC(选课)(XH,CH,G)
4、数据库物理设计。
本数据库采用VisualFoxPro提供的物理结构,存取方法采用索引存取,本数据库的索引有:
S表:
XHINDEX(主索引),COURSE表:
CHIDEX(主索引),SC表:
SCXHINDEX(普通索引)、SCCHINDEX(普通索引)。
5、数据库实施。
(1)规划
1)在D盘上建一个子目录,为201309270122-牟军宇
2)在设置系统的默认目录,在命令窗口下执行:
SetdefaulttoD:
/201309270122-牟军宇
(2)创建项目
在D:
\201309270122-牟军宇目录下建立一项目文件xuanke.pjx,
1)打开VFP,单击“文件”菜单中的“新建”选项出现如图5-3所示。
2)在“新建”对话框中选中“项目”后,单击“新建文件”出现如图5-4所示的对话框。
3)在“项目创建对话框”中选择“D:
”,在项目文件文本框中输入xuanke.pjx后,单击“保存”。
出现图5-5所示界面。
(3)创建数据库
在图5-5中选择“数据”选项卡,选中“数据库”,如图5-6所示,单击“新建”出现如图5-7所示的对话框,单击“新建数据库”出现图5-8所示对话框,选择“D:
\学号-姓名”,在数据库名对话框中输入”student.dbc”,单击“保存”,出现图5-9所示的界面。
4)创建数据表
在图5-9中右键单击,单击“新建表“出现图5-10对话框,单击”新建表“,出现图5-11所示对话框,选择D:
\学号-姓名”,输入表名文本框中输入:
s.dbf后,单击“保存“后,出现如图5-12所示的界面,输入S表的相应字段的参数。
在图5-12中单击“索引“选项卡,输入索引名:
xhindex,类型:
主索引,表达式:
xh,排序升序,如图5-13所示。
输入完毕后单击”确定“出现如图5-14所示界面。
和前面的步骤类似,依次建立SC表、COURSE表,在SC表中建立两个索引,索引名为SCXHINDEX,类型为:
普通索引,表达式为:
XH,排序:
升序;索引名为SCCHINDEX,类型为:
普通索引,表达式为:
CH,排序:
升序。
在Ccourse表中建立一个索引,索引名为CHINDEX,类型为:
主索引,表达式为:
CH,排序:
升序。
设置完毕后,在图5-9中右键单击,选择“添加表“,把S、SC、COURSE表添加到当前数据库中,出现如图5-15所示的界面。
COURSE和SC表的结构如下:
course表:
表5.1course表
属性名
类型
宽度
小数位
CH
字符型
2
CM
字符型
20
XF
数值型
1
0
CH:
课程号,CM:
课程名,XF:
学分,CH为主键
sc表:
表5.2sc表
属性名
类型
宽度
小数位
XH
字符型
10
CH
字符型
2
G
数值型
4
1
XH:
学号,CH:
课程号,G:
成绩,
分别在三个表中输入如图5-16、图5-17、图5-18数据所示数据
图5-16S表数据
图5-17SC表数据
图5-18COURSE数据
(3)建立表单
1)建立选课表单(xk.scx)
打开xuanke.pjx,单击“文挡“选项卡,选中表单,单击”新建“,在弹出的对话框中单击”新建表单“,出现图5-19所示的界面。
以下表单的建立方法类似。
设置数据环境:
在图5-19中右键单击,单击“数据环境”,弹出图5-20所示对话框,依次选中S、SC、COURSE表添加到当前数据环境中,如图5-21所示。
然后关闭“数据环境”。
图5-20添加表
图5-21数据环境
①选课表单的属性:
CAPTION:
学生选课信息表-学号-姓名
AUTOCENTER:
.T.
CLOSABLE:
.F.
MAXBUTTON:
.F.
MINBUTTON:
.F.
②选课表单的过程Activateevent()的代码如下所示。
thisform.grid3.linkmaster=""
thisform.grid3.recordsource=""
thisform.grid3.recordsourcetype=1
thisform.grid3.relationalexpr=""
thisform.grid3.childorder=""
thisform.refresh
在表单xk.scx上添加如下图5-22所示的控件:
③表格控件GRID1:
此表格显示学生的详细信息。
表格控件GRID1属性:
grid1.recordsource=s
grid1.readonly=.t.
表格控件GRID1的事件thisform.grid1.column1.header1.click()代码如下所示:
thisform.text1.value=thisform.grid1.column1.text1.value
④表格控件GRID2:
显示课程的详细信息
表格控件GRID2属性:
grid2.recordsource=course
grid2.readonly=.t.
表格控件GRID2的事件thisform.grid2.column1.header1.click()代码如下所示:
thisform.text1.value=thisform.grid2.column1.text1.value
⑤表格控件GRID3:
显示选课的详细信息
表格控件GRID3属性:
grid3.recordsource=sc
grid3.readonly=.t.
⑥文本框TEXT1控件:
用来输入学号或单击学生信息表中某一个学号来完成输入;文本框TEXT2控件:
用来输入学生的课程号或单击课程表中某一个课程号来完成输入。
⑦命令按钮控件
有五个命令按钮:
查询、选课、退课、关闭、清除按钮。
查询按钮:
用户在文本框TEXT1输入学号,或在文本框在TEXT2输入课程号,可查询相关选课信息,查询结果在GRID3中显示。
其click()代码如下所示:
num1=alltrim(thisform.text1.value)
num2=alltrim(thisform.text2.value)
ifnum1=="".and.num2==""
messagebox("请输入查询条件")
else
ifnum2=="".and..not.num1<>""
thisform.grid3.linkmaster='s'
thisform.grid3.recordsource="sc"
thisform.grid3.relationalexpr="xh"
thisform.grid3.childorder="scxhindex"
selects
locatefors.xh=num1
if.not.found()
messagebox("无此学生")
else
thisform.refresh
thisform.grid1.setfocus
endif
endif
ifnum1=="".and..not.num2<>""
thisform.grid3.linkmaster='course'
thisform.grid3.recordsource="sc"
thisform.grid3.relationalexpr="ch"
thisform.grid3.childorder="scchindex"
selectcourse
locateforch=num2
if.not.found()
messagebox("没有此课程")
else
thisform.refresh
thisform.grid2.setfocus
endif
endif
endif
选课按钮:
用户输入学号和课程号,单击选课,在选课信息表中显示该学生选课的详细信息。
其CLICK()代码如下所示:
num1=alltrim(thisform.text1.value)
num2=alltrim(thisform.text2.value)
ifnum1=="".and.num2==""
messagebox("请输入选课的学号和课程号")
else
selects
locatefors.xh=num1
if.not.found()
messagebox("此学号不存在请重新输入学号")
else
num1=alltrim(thisform.text1.value)
selectcourse
locateforcourse.ch=num2
if.not.found()
messagebox("此课程号不存在请重新输入课程号")
else
num2=alltrim(thisform.text2.value)
thisform.grid3.linkmaster=""
thisform.grid3.recordsource=""
thisform.grid3.recordsourcetype=1
thisform.grid3.relationalexpr=""
thisform.grid3.childorder=""
thisform.refresh
selectsc
locateforsc.xh=num1andsc.ch=num2
iffound()
messagebox("此选课记录已存在")
else
insertintosc(xh,ch)values(num1,num2)
thisform.grid3.linkmaster=""
thisform.grid3.recordsource="sc"
thisform.grid3.recordsourcetype=1
thisform.grid3.relationalexpr=""
thisform.grid3.childorder=""
thisform.refresh
thisform.grid3.setfocus
endif
endif
endif
endif
退课按钮:
用户输入相应的学号和课程号,单击退课,可实现学生的退课。
其CLICK()代码如下所示:
num1=alltrim(thisform.text1.value)
num2=alltrim(thisform.text2.value)
ifnum1=="".and.num2==""
messagebox("请输入退课的学号和课程号")
else
num1=alltrim(thisform.text1.value)
num2=alltrim(thisform.text2.value)
thisform.grid3.linkmaster=""
thisform.grid3.recordsource=""
thisform.grid3.recordsourcetype=1
thisform.grid3.relationalexpr=""
thisform.grid3.childorder=""
thisform.refresh
selectsc
locateforsc.xh=num1andsc.ch=num2
if.not.found()
messagebox("此选课记录不存在")
else
deletefromscwheresc.xh=num1andsc.ch=num2
messagebox("退课完成")
usescexclusive
pack
thisform.grid3.linkmaster=""
thisform.grid3.recordsource=""
thisform.grid3.recordsourcetype=1
thisform.grid3.relationalexpr=""
thisform.grid3.childorder=""
thisform.refresh
thisform.grid3.setfocus
endif
endif
关闭按钮:
单击关闭,可关闭选课表单。
其CLICK()代码如下所示:
y=.f.
z=.f.
thisform.release
清楚按钮:
单击清楚,可清楚TEXT1、TEXT2和选课信息表格的内容。
其CLICK()代码如下所示:
thisform.text1.value=""
thisform.text2.value=""
thisform.grid3.linkmaster=""
thisform.grid3.recordsource=""
thisform.grid3.recordsourcetype=1
thisform.grid3.relationalexpr=""
thisform.grid3.childorder=""
thisform.refresh
thisform.grid3.setfocus
2)建立学生表单(xs.scx)
建立一个学生表单,在学生表单中添加如图5-23所示的控件:
图5-23学生信息表单
①学生表单的属性:
CAPTION:
学生基本信息
AUTOCENTER:
.T.
CLOSABLE:
.F.
MAXBUTTON:
.F.
MINBUTTON:
.F.
②学生表单的Activateevent()事件代码如下所示:
thisform.grid1.readonly=.t.
③学生表单的loadevent()事件代码如下所示:
usesexclusive
④在学生表单上添加如下控件:
表格控件grid1:
显示学生基本信息
属性:
recordsource:
s
表格控件grid1的VALID()事件代码如下所示:
thisform.grid1.readonly=.t.
⑤命令按钮:
新增、删除、修改、关闭
新增按钮:
单击“新增“,用户在表格中新增一个学生记录,其CLICK()代码如下所示:
thisform.grid1.readonly=.f.
appendblank
thisform.grid1.setfocus
删除按钮:
用户选中表格一记录,单击“删除“可删除此记录,其CLICK()代码如下所示:
thisform.grid1.linkmaster=""
thisform.grid1.recordsource=""
thisform.grid1.recordsourcetype=1
thisform.grid1.relationalexpr=""
thisform.grid1.childorder=""
thisform.refresh
delete
pack
thisform.grid1.linkmaster=""
thisform.grid1.recordsource="s"
thisform.grid1.recordsourcetype=1
thisform.grid1.relationalexpr=""
thisform.grid1.childorder=""
thisform.refresh
thisform.grid1.setfocus
thisform.grid1.readonly=.t.
修改按钮:
单击“修改“,用户可修改表格中的任一记录,其CLICK()代码如下所示:
thisform.grid1.readonly=.f.
关闭按钮:
单击“关闭“,用户可关闭学生表单,其CLICK()代码如下所示:
x=.f.
thisform.release
3)建立课程表单(kc.scx)
建立一个课程表单,在课程表单中添加如图5-24所示的控件:
图5-24课程信息表单
①课程表单的属性:
CAPTION:
课程基本信息表
AUTOCENTER:
.T.
CLOSABLE:
.F.
MAXBUTTON:
.F.
MINBUTTON:
.F.
②选课表单的Activateevent()事件代码如下所示:
thisform.grid1.readonly=.t.
③选课表单的loadevent()事件代码如下所示:
usecourseexclusive
④在学生表单上添加如下控件:
表格控件grid1:
显示学生基本信息
属性:
recordsource:
course
表格控件grid1的VALID()事件代码如下所示:
thisform.grid1.readonly=.t.
⑤命令按钮:
新增、删除、修改、关闭
新增按钮:
单击“新增“,用户在表格中新增一个学生记录,其CLICK()代码如下所示:
thisform.grid1.readonly=.f.
appendblank
thisform.grid1.setfocus
删除按钮:
用户选中表格一记录,单击“删除“可删除此记录,其CLICK()代码如下所示:
thisform.grid1.linkmaster=""
thisform.grid1.recordsource=""
thisform.grid1.recordsourcetype=1
thisform.grid1.relationalexpr=""
thisform.grid1.childorder=""
thisform.refresh
delete
pack
thisform.grid1.linkmaster=""
thisform.grid1.recordsource="COURSE"
thisform.grid1.recordsourcetype=1
thisform.grid1.relationalexpr=""
thisform.grid1.childorder=""
thisform.refresh
thisform.grid1.setfocus
thisform.grid1.readonly=.t.
修改按钮:
单击“修改“,用户可修改表格中的任一记录,其CLICK()代码如下所示:
thisform.grid1.readonly=.f.
关闭按钮:
单击“关闭“,用户可关闭学生表单,其CLICK()代码如下所示:
x=.f.
thisform.release
4)建立主表单(main.scx)
新建一主表单,该主表单的作用是用来向其添加菜单,如图5-25所示。
主表单的主要属性为:
CAPTION:
学生选课信息管理系统
CLOSABLE:
.F.
MAXBUTTON:
.F.
MINBUTTON:
.F.
Showwindow:
2
Windowstate:
2
图5-25学生选课信息
主表单的init()事件代码如下所示:
publicx,y,z*x,y,z用来定义菜单中的三个选项是否可用。
x=.f.
y=.f.
z=.f.
domainmenu.mprwiththis,.t.
主表单的unload()事件代码如下所示:
clearevents
(4)建立菜单(mainmenu.mnx)
在图5-5中单击“其他“选项卡,选中菜单选项,单击新建,出现如图5-26所示界面。
图5-26菜单设计器
在菜单设计
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 系统 原理 实验 设计