数据库实验报告Word下载.docx
《数据库实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《数据库实验报告Word下载.docx(5页珍藏版)》请在冰豆网上搜索。
构造一个自己设计的MIS系统:
1、这个小系统开发项目的正确建立
2、这个小系统数据库的建立及完整性规则的应用
3、这个小系统的数据库数据管理方法应用
4、这个小系统的查询和应用表单的设计和使用
总之这个小系统能比较完善地为数据库应用人员提供方便快捷的信息管理功能…
实验步骤:
一、用VFPDBMS系统建立一个数据库系统项目(项目名为自己的学号)
二、在自己的项目下建立一个数据库(库名为XSCJGL)
1.在数据库中建立如下表:
学生(学号,姓名,性别,出生日期,助学金)key(学号)
教师(教师号,教师名,奖金)key(教师号)
课程(课号,课名,学时数,教师号)key(课号)
学习(学号,课号,成绩)key(学号,课号)
2.建立有关数据库的完整性规则(自身完整、引用完整、用户自定义完整)
3.在每个表中输入至少3条符合客观现实世界的模拟记录
三、编写能完成如下查询功能的查询代码程序
1.查询每个学生的姓名、年龄、助学金额
2.查询每位教师的姓名、奖金金额
3.查询学时数超过50的课名及任课教师的姓名
4.查询获得奖金超过500元的教师的姓名和所教的课程名称
5.查询所学课程平均成绩超过60分的学生名单
6.查询课程班平均成绩(学习了同一门课程的所有学生的学习成绩的平均)超过60分的课程名称和任课教师姓名
7.查询某教师(用户输入教师姓名)担任的所有课程教学的课程名称(要用表单做用户对话界面)
8.查询某学生(用户输入学生姓名)所学的课程的课程名称及成绩(要用表单做用户对话界面)
9.查询每个学生所学的课程名称、学时数、成绩、任课教师名
10.查询每个教师所教的课程名称、学时数、学习该课程的学生人数
11.若所教的课程的学生平均成绩在60分以下就将该教师的奖金修改为50元
若所教的课程的学生平均成绩在60分以上就将该教师的奖金再加100元
若所教的课程的学生平均成绩在70分以上就将该教师的奖金再加150元
若所教的课程的学生平均成绩在80分以上就将该教师的奖金再加300元
若所教的课程的学生平均成绩在90分以上就将该教师的奖金再加500元
12.若所学的课程的平均成绩在60分以下就将该同学的助学金修改为200元
若所学的课程的平均成绩在60分以上就将该同学的助学金再加500元
若所学的课程的平均成绩在70分以上就将该同学的助学金再加1000元
若所学的课程的平均成绩在80分以上就将该同学的助学金再加1500元
若所学的课程的平均成绩在90分以上就将该同学的助学金再加2000元
13.统计各门课程学生及格人数
14.统计各学生学习后且获得及格成绩的课程门数
四、更改系统菜单使其成为全汉字提示菜单,并能直接点击获得查询结果
五、对主程序进行连编产生能脱离VFP系统而直接在Windows平台下运行的应用系统程序
六、将你设计的系统应用程序做一个桌面快捷启动方式图标以便用户使用!
实验的源代码(主程序):
founded语句:
parabiao,biao_key,zdz//调用形式参数(表,表的属性,查找的字段)
if!
empt(biao).and.!
empt(zdz)//判断表或字段是否为空
dimefounded
(1)//定义founded变量
founded
(1)=0//给变量赋值为0
selecount(*)from&
biaowhere&
biao_key==zdzintoarrayfounded//找到字段则计数并赋给founded
iffounded
(1)>
return.t.
else
return.f.
endif//判断字段是否存在,若不存在就报错
endif//结束if语句
return//返回值
在表格中输入数据以检验表格的完整性。
查找语句:
1.selexmas姓名,int((date()-csrq)/365)as年龄,zxjas助学金fromxs//date()是调用系统时间,运用公式计算年龄
2.selejsmas教师的姓名,jjas奖金fromjs
3.selekmas课名,jsmas教师名fromkc,jswherekc.jsh=js.jsh.and.kc.xss>
50//运用自然连接,减少查找时间
4.selejsmas教师名,kmas课名fromjs,kcwherejs.jsh=kc.jsh.and.js.jj>
500
5.selexmas姓名fromxs,xxwherexs.xh=xx.xhgroupbyxx.xhhavingavg(xx.cj)>
=60
6.selekmas课程名,jsmas教师名fromkc,xx,jswherekc.kh=xx.kh.and.js.jsh=kc.jshgroupbyxx.khhavingavg(xx.cj)>
7.xx=allt(thisform.text1.value)//将text1的内容赋给xx
selekmas课程名fromkcwherejshin(selejshfromjswherejsm=xx)
8.xx=allt(thisform.text1.value)
selekmas课程名,cjas成绩fromkc,xxwherekc.kh=xx.kh.and.xx.xhin(selexhfromxswherexm=xx)
9.selexmas姓名,kmas课程名,xssas学时数,cjas成绩,jsmas教师名fromxs,kc,xx,jswherexs.xh=xx.xh.and.kc.kh=xx.kh.and.kc.jsh=js.jsh
10.selejsmas教师名,kmas课程名,xssas学时数,count(xx.xh)as学习该课程的学生人数fromjs,kc,xxwherejs.jsh=kc.jsh.and.kc.kh=xx.khgroupbyxx.kh
11.updatejssetjj=50wherejs.jshin(selejshfromkc,xxwherekc.kh=xx.khgroupbyxx.khhavingavg(cj)<
60)
updatejssetjj=jj+100wherejs.jshin(selejshfromkc,xxwherekc.kh=xx.khgroupbyxx.khhavingavg(cj)>
updatejssetjj=jj+150wherejs.jshin(selejshfromkc,xxwherekc.kh=xx.khgroupbyxx.khhavingavg(cj)>
70)
updatejssetjj=jj+300wherejs.jshin(selejshfromkc,xxwherekc.kh=xx.khgroupbyxx.khhavingavg(cj)>
80)
updatejssetjj=jj+500wherejs.jshin(selejshfromkc,xxwherekc.kh=xx.khgroupbyxx.khhavingavg(cj)>
90)
12.updatexssetzxj=200wherexs.xhin(selexhfromxxgroupbyxhhavingavg(cj)<
updatexssetzxj=zxj+500wherexs.xhin(selexhfromxxgroupbyxhhavingavg(cj)>
updatexssetzxj=zxj+1000wherexs.xhin(selexhfromxxgroupbyxhhavingavg(cj)>
updatexssetzxj=zxj+1500wherexs.xhin(selexhfromxxgroupbyxhhavingavg(cj)>
updatexssetzxj=zxj+2000wherexs.xhin(selexhfromxxgroupbyxhhavingavg(cj)>
13.selekc.khas课号,kmas课名,count(xx.xh)as各门课程学生及格人数fromkc,xxwherekc.kh=xx.khandcj>
=60groupbyxx.kh
14.selexmas姓名,count(kc.kh)as及格的课程门数fromxs,xxwherexs.xh=xx.xh.and.xx.cj>
60groupbyxx.xh
实验中注意的问题:
自身完整性:
在每个表中至少有一个属性(或属性组)K是主码(如:
表中的key),且所有元组K的取值唯一并不能取空。
而对于某些属性(如:
学生表格中“性别”的取值只能为“男”或“女”;
为了保证数据库的长期有效,学生表格中的“出生日期”不能用“年龄”替代;
学习表格中的“成绩”不得低于零分,一般不超过100分等)。
引用完整性:
(即参照完整性)现实世界的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系描述的。
于是,我们在代码中新建程序,编写founded语句,用以判断表中输入数据是否满足条件(如:
课程表格中的“教师号”应该和教师表格中的“教师号”相对应;
学习表格中的“学号”和“课号”都应该相应与学生表格中的“学号”,课程表格中的“课号”)。
用户自定义完整性:
针对某一具体应用的关系数据库所制定的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。
实验中发现的问题和遇到的困难:
1.在数据库建立后更改其路径或者任意复制、粘贴数据库,则无法找到数据库的位置;
2.表格建立后更改结构易报错;
3.中文命名的,更改名字比较困难;
4.在建立查询语句(如:
where与select不在一行时)经常报错;
5.连编生成可执行程序,无结果。
问题及困难的解决:
1.将数据库建立在移动硬盘或者U盘中,在使用时定位文件,避免数据库结构被破坏,无法打开;
2.在表格完整性完全建立前不宜输入数据,导致表格结构无法更改;
3.数据库、表格、表格的属性、表单、代码的命名最好使用英文,可以更改也方便调用;
4.对于select语句的运用不熟练,编写时出现逻辑问题;
5.对菜单的内容,根据自己编写的数据库内容及生成的可执行程序的需求进行修改后再连编。
总结:
数据库系统的处理对象是信息或表示信息的数据,数据库是用来保存现实世界虚拟化后的数据。
对于数据所承载的信息,我们可以通过建立数据库将其存放在有组织的数据集合中,用一个大型系统软件DBMS进行管理,方便用户的使用。
现在使用较多的是关系型数据库,因为存在缺陷,会逐渐被淘汰。
数据库技术的应用不仅需要有数据库原理知识作为基础与保障,而且在建立数据库的过程中要求我们有足够的耐心、细心以及缜密的逻辑思维。
在设计数据库时,除了考虑用户当前的需求外,还应根据数据的特点增加设计,保证数据库的长期有效。
对于主程序进行连编,生成的可执行程序可以脱离VFP在Windows平台下运行使用,保障了数据库的安全稳定。