级数据库课程设计安排.docx
- 文档编号:4093980
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:23
- 大小:78KB
级数据库课程设计安排.docx
《级数据库课程设计安排.docx》由会员分享,可在线阅读,更多相关《级数据库课程设计安排.docx(23页珍藏版)》请在冰豆网上搜索。
级数据库课程设计安排
中南大学
《课程设计I》设计报告
题目
学生姓名
学号
专业班级
指导老师
数学科学与计算技术学院
2011年1月
题目
一、实验目的、内容
描述进行的程序设计,采用……进行…,要达到…内容….应包含有类和指针…
二、实验程序设计及结构
1、需求分析
2、设计结构(包括总体结构和数据结构)
三、设计过程
写出设计过程,实验源代码可不写出,但实验中出错信息及处理方法及解决错误的方法要写。
四、设计的特点和结果
包括实验处理结果和设计心得。
指出实验结果运行的操作系统和平台。
参考文献
1、人名,文章名,出版机构,出版时间
2、
附录
自己做的主要实验源代码
《数据库课程设计》教案大纲
课程编号:
13020000
课程名称:
数据库课程设计
学分:
2总学时:
2周
先修课程要求:
数据库原理与技术
适应专业:
信息与计算科学、数学与应用数学
参考教材:
1.《数据库原理与技术》
2.《Oracle入门与提高》
-、课程在培养方案中的地位、目的和任务
本课程设计是为信科、应数专业安排的重要的实践环节,数据库课程设计目的是使学生通过做一个具体的设计题目,将课本上的理论知识和实际有机的结合起来,培养学生运用所学的理论知识和技能,分析解决实际问题的能力,培养学生调查研究、查阅技术文献、资料、编程开发以及编写技术文献的能力。
提供独立编程的实践机会。
二、课程设计的基本要求
要求掌握Oracle数据库编程的特点,掌握面向对象程序设计的方法,根据所给题目,通过调查研究和上机实习,收集和调查有关技术资料。
结合软件开发技术的思想,正确划分系统功能模块,进行系统的详细设计,并说明各功能模块的具体功能。
掌握设计课题的基本步骤和方法,写出系统实现的具体方法,包括系统界面、功能等,附课程设计原程序。
并提出系统测试方法,对所开发的系统进行测试,得出测试结果。
并分析结果,评价系统的性能。
三、课程的基本内容以及重点难点
1.课程的基本内容:
对数据库原理与技术的教案内容、Oracle数据库编程,前后台数据库的连接。
2.难点:
数据库的关联、对具体问题的编程和开发技术。
四、课程设计的安排和选题
原则上要求每个学生基础题和综合题各选一题,具体任务由指导老师布置,提出设计内容、设计要求及实施计划。
学生熟习题目,给出解题方案和算法设计.
进行系统设计,给出系统框图和流程图.
编码与测试,要求有说明文档及测试报告.
完成设计报告,不少于2000字
五、课程设计报告要求
写出不少于2000字的课程设计报告,程序设计文档要求:
对系统进行功能模块分析、控制模块分析正确,系统设计要实用,编程简练、可用、功能较全面,说明书、流程图要清楚。
基本结构:
设计分析、算法或程序流程图源程序(附解释说明)调试报告用户使用说明。
报告中除了在封面应有题目、班级、姓名、学号和课程设计日期以外,其正文一般有如下几个方面的内容:
一、课程设计目的;二、系统功能和使用说明,硬件环境:
本系统适用于那种类型的计算机,内存容量为多大,应配备的外部设备有哪些;软件环境:
本系统的设计采用的是何种语言,应在什么软件环境下使用;三、需求分析;四、系统概念结构设计;五、数据库逻辑结构设计(数据库结构说明);六、系统的实现过程。
七、结束语。
通过搞课程设计,你有何感想,学到了什么?
六、考核方式与评分方法
根据课程设计要求,利用所选题目,完成设计和开发任务,写出规范的设计报告,并根据实习到课情况、软件上机运行情况、界面是否友好、报告是否规范等综合评定。
如多人合作完成,应根据各人所承担的工作情况,进行排序。
指导教师负责组织检查、考勤教师分组负责(每位教师与担任的班级同时上下课)帮助学生熟悉程序编写,及时查究错误。
考核规范包括:
程序设计的可用性,实用性,通用性,可扩充性(40%)学生的动手能力,创新精神(20%)总结报告(20%)学习态度(20%)。
七、参考题目与具体要求举例
参考题目:
第一部分:
基础题
第一题进入自己创建的用户下进行以下操作。
1、创建表STUDENT、COURSE、GRADE,各个表的结构如下:
(1)STUDENT
学号NUMBER(6),
姓名VARCHAR2(12)
入学时间DATE,
专业VARCHAR2(20),
性别CHAR
(2),
年龄INTEGER
(2)COURSE
课程号NUMBER(6),
课程名称VARCHAR2(20),
学时INTEGER,
学分INTEGER
(3)GRADE
学号NUMBER(6),
课程号NUMBER(6),
成绩NUMBER
(2)
2、向上面的三个表中分别插入5条纪录。
示例:
(1)
(1) INSERTINTOSTUDENT(学号,姓名,入学时间,专业,性别,年龄)
VALUES(100001,’HUANGWEI’,TO_DATE(‘1999-09-10’,’YYYY-MM-DD’),’COMPUTER’,’男’,23)。
(2)
(2) INSERTINTOCOURSE(课程号,课程名称,学时,学分)
VALUES(000001,’多媒体’,32,4)。
(3)(3) INSERTINTOGRADE(学号,课程号,成绩)
VALUES(100001,000001,90)
第二题练习:
建立TEAMSTATS表如下:
NAMEPOSABHITSWALKSSINGLESDOUBLESTRIPLESHRSO
JONES1B14545343181510
DONKNOW3B175652350101415
WORLEYLF1574915583316
DAVIDOF187702448401742
HAMHOCKER3B5012101020013
CASEYDH10000001
在TEAMSTATS表上做如下操作:
(1)查看WALKS小于20的球员的个数。
SQL>SELECTCOUNT(*)FROMTEAMSTATSWHEREWALKS<20。
(2)查看表中所有记录的个数。
(自己写)
(3)查看队员总的HITS数。
SQL>SELECTSUM(HITS)TOTAL_HITSFROMTEAMSTATS。
(4)查看3B位置上的队员总的DOUBLES及总的SO。
(5)查看漏球(SO)的平均数。
SQL>SELECTAVG(SO)AVE_STRIKE_OUTSFROMTEAMSTATS。
(6)查看TRIPLES为0的队员的HITS的平均数。
(7)查看所有队员的最高SIGGLES是多少。
SQL>SELECTMAX(SIGGLES)FROMTEAMSTATS。
第三题已知公司的员工表EMP(EID,ENAME,BDATE,SEX,CITY),
部门表DEPT(DID,DNAME,DCITY),
工作表WORK(EID,DID,STARTDATE,SALARY)。
各个字段说明如下:
EID——员工编号,最多6个字符。
例如A00001(主键)
ENAME——员工姓名,最多10个字符。
例如SMITH
BDATE——出生日期,日期型
SEX——员工性别,单个字符。
F或者M
CITY——员工居住的城市,最多20个字符。
例如:
上海
DID——部门编号,最多3个字符。
例如A01(主键)
DNAME——部门名称,最多20个字符。
例如:
研发部门
DCITY——部门所在的城市,最多20个字符。
例如:
上海
STARTDATE——员工到部门上班的日期,日期型
SALARY——员工的工资。
整型。
请使用ORACLE的sql*plus完成下列的操作
1、 创建表EMP,DEPT,WORK,并定义表的主键和外键。
2、 向每个表中插入适当的数据。
例如:
插入三条部门的数据,分别为每个部门插入两条员工数据
3、 查询“研发”部门的所有员工的基本信息
4、 查询拥有最多的员工的部门的基本信息(要求只取出一个部门的信息),如果有多个部门人数一样,那么取出部门编号最小的那个部门的基本信息。
5、 显示部门人数大于5的每个部门的编号,名称,人数
6、 显示部门人数大于5的每个部门的最高工资,最低工资
7、 列出员工编号以字母P至S开头的所有员工的基本信息
8、 删除年龄超过60岁的员工
9、 为工龄超过10年的职工增加10%的工资
第四题PL/SQL快速学习:
1、PL/SQL是一项ORACLE的技术,是ORACLE的过程型语言,它由规范的SQL语句和一系列可以让你在不同的情况下对SQL语句的执行进行控制的命令组成。
2、PL/SQL块的结构:
PL/SQL是一种块结构语言,也就是说PL/SQL的程序可以分成逻辑块来写。
块是PL/SQL代码的逻辑单元,包括至少一个BEGIN部分和可以选择的DECLARE以及EXCEPTION部分。
PL/SQL块的基本结构:
SYNTAX:
BEGIN--optional,denotesbeginningofblock
DECLARE--optional,variabledefinitions
BEGIN--mandatory,denotesbeginningofproceduresection
EXCEPTION--optional,denotesbeginningofexceptionsection
END--mandatory,denotesendingofproceduresection
END--optional,denotesendingofblock
(1)在PL/SQL的DECLARE部分包括了变量、常量、指针和特殊数据类型的定义。
(2)BEGIN部分是PL/SQL语句块中的必须部分,在这一部分将会使用变量和用户指针来操作数据库中的数据。
(3)EXCEPTION部分在PL/SQL语句块中是可以选择的,如果在这一部分被省略而遇到异常的时候该块就会终止了。
3、由基本的PL/SQL块所组成的PL/SQL程序,可组成不同的程序形式,它们的用途和适用性各不相同。
程序形式大致有以下几种:
(1)无名块:
也就是没有命名的PL/SQL块,它可以是嵌入某一个应用之中的一个PL/SQL块。
无名块在所有PL/SQL环境中都适用。
(2)存储过程/函数(Procedure/Function):
命名的PL/SQL块,它可以接受参数,并且可以重复的被调用。
(3)包(Package):
命名的PL/SQL块,由一组相关的过程、函数和标识符组成。
(4)数据库触发器(Triggers):
是与一个具体数据库表相关联的PL/SQL存储程序。
每当一个SQL操作影响到该数据库表时,系统就自动执行相应的数据库触发器。
4、PL/SQL中的控制语句:
(1)条件语句:
IF...THEN
语法:
IFcondition1THEN
statement1;
ELSIFcondition2THEN(可选)
statement2;
ELSE(可选)
statement3;
ENDIF
(2)循环语句:
i.简单循环:
LOOP
statement1;
ENDLOOP
ii.FOR循环:
iii.WHILE循环:
5、题目:
建立如下表,并用语句插入如下数据,完成所要求的操作。
(1).使用的表为:
PAY_TABLE,结构:
NameNull?
Type
NAMENOTNULLVARCHAR2(20)
PAY_TYPENOTNULLVARCHAR2(8)
PAY_RATENOTNULLNUMBER(8,2)
EFF_DATENOTNULLDATE
PREV_PAYNUMBER(8,2)
数据:
NAMEPAY_TYPEPAY_RATEEFF_DATEPREV_PAY
SANDRASAMUELSHOURLY12.5001-JAN-04
ROBERTBOBAYHOURLY11.5015-MAY-03
KEITHJONESHOURLY10.0031-OCT-04
SUSANWILLIAMSHOURLY9.7501-MAY-04
CHRISSYZOESSALARY50000.0001-JAN-04
CLODEEVANSSALARY42150.0001-MAR-04
JOHNSMITHSALARY35000.0015-JUN-03
KEVINTROLLBERGSALARY27500.0015-JUN-03
(2).操作要求:
要给为你工作的时间超过了六个月的个人增加薪金。
符合条件的钟点工的薪金增加4%而符合条件的雇员的薪金需要增加5%。
PL/SQL的脚本:
setserveroutputon
BEGIN
DECLARE
UnknownPayTypeexception。
cursorpay_cursoris
selectname,pay_type,pay_rate,eff_date,
sysdate,rowid
frompay_table。
IndRecpay_cursor%ROWTYPE。
cOldDatedate。
fNewPaynumber(8,2)。
BEGIN
openpay_cursor。
loop
fetchpay_cursorintoIndRec。
exitwhenpay_cursor%NOTFOUND。
cOldDate:
=sysdate-180。
if(IndRec.pay_type='SALARY')then
fNewPay:
=IndRec.pay_rate*1.05。
elsif(IndRec.pay_type='HOURLY')then
fNewPay:
=IndRec.pay_rate*1.04。
else
raiseUnknownPayType。
endif。
if(IndRec.eff_date updatepay_table setpay_rate=fNewPay, prev_pay=IndRec.pay_rate, eff_date=IndRec.sysdate whererowid=IndRec.rowid。 commit。 endif。 endloop。 closepay_cursor。 EXCEPTION whenUnknownPayTypethen dbms_output.put_line('=======================')。 dbms_output.put_line('ERROR: Abortingprogram.')。 dbms_output.put_line('UnknownPayTypeforName')。 whenothersthen dbms_output.put_line('ERRORDuringProcessing.SeetheDBA.')。 END。 END。 / 6.练习: (1).对PAY_TABLE表写一个查询所有记录的过程。 (2).对PAY_TABLE表写一个插入一条记录的过程,要求输入参数为一条记录。 (3).写一个过程实现如下要求: 对工作时间超过8个月的职员,如果PAY_TYPE 是HOURLY,则改为SALARY,并将PAY_RATE改为按每天7小时工作的年薪. 第五题: 完成如下操作要求 某数据库有两张表: emp表和dept表,两张表的结构如下: emp(emp_idnumber(5),emp_namevarchar2(20),emp_salarynumber(4)); dept(dept_idnumber(3),dept_namevarchar2(20),emp_idnumber(5))。 要求如下: 1、按照上表结构建立相应的表,为每张表写入5组合法数据。 2、操纵相关表,使得“技术部”的员工的薪水上涨20%。 3、建立日志,追踪薪水变动情况。 4、建立测试包。 第六题.要求1考察点为基本SQL语句; 要求2主要考察复合查询; 要求3是考察触发器的应用; 要求4不仅考察了包的创建,而且也考察了在PL/SQL中的测试方法。 要求1: 首先根据前面表的结构可以创建两张表: ——创建员工表 createtableemp(emp_idnumber(5),emp_namevarchar2(20),emp_salarynumber(4))。 ——部门表 createtabledept(dept_idnumber(3),dept_namevarchar2(20),emp_idnumber(5))。 建立了表之后就可以往表里面写数据了,这里把添加表记录的代码写入到相应的存储过程。 /*给emp表添加记录的存储过程*/ createorreplaceprocedureins_table_emp(p_emp_idnumber,p_emp_namevarchar2,p_emp_salarynumber)as v_emp_idnumber: =p_emp_id。 v_emp_namevarchar2(20): =p_emp_name。 v_emp_salarynumber: =p_emp_salary。 begin insertintoempvalues(v_emp_id,v_emp_name,v_emp_salary)。 endins_table_emp。 /*给dept表添加记录的存储过程*/ createorreplaceprocedureins_table_dept(p_dept_idnumber,p_dept_namevarchar2,p_emp_idnumber)as v_dept_idnumber: =p_dept_id。 v_dept_namevarchar2(20): =p_dept_name。 v_emp_idnumber: =p_emp_id。 begin insertintodeptvalues(v_dept_id,v_dept_name,v_emp_id)。 endins_table_emp。 /*调用相应的存储过程实现记录添加*/ begin ins_table_emp(10000,'',4000)。 ins_table_emp(10001,'? ? èy',2300)。 ins_table_emp(10002,'3? t',3500)。 ins_table_emp(10003,'à',3500)。 ins_table_emp(10004,'á? ò? ',3500)。 ins_table_dept(111,'DD? t2? ',10000)。 ins_table_dept(111,'DD? t2? ',10001)。 ins_table_dept(111,'DD? t2? ',10002)。 ins_table_dept(112,'? ? ê? 2? ',10003)。 ins_table_dept(113,'êD3? 2? ',10004)。 end。 要求2: 给指定部门的员工加薪,这实际上是一个复合查询,首先需要把所有该部门的员工选出来,然后对这些员工的薪水进行相应的改动。 代码如下: (需要注意的是: 将要加薪的部门作为参数,这样的存储过程更有灵活性。 ) createorreplaceprocedureadd_salary(p_dept_namevarchar2)as v_dept_namevarchar2(20): =p_dept_name。 begin updateempsetemp.EMP_SALARY=emp.EMP_SALARY*1.2whereemp.EMP_IDin(selectemp.EMP_IDfromemp,deptwhereemp.EMP_ID=dept.EMP_IDanddept.DEPT_ID='? ? ê? 2? ')。 endadd_salary。 要求3: 建立日志对薪水的变动情况形成一个追踪,也就是说,如果对某个职员的薪水进行变更就应该将其相应的变更记录全部记下来。 如果对emp表的salary字段创建一个触发器,来监视对salary的更改,把每次更改进行记录,这样就达到了要求3的目的了。 createorreplacetriggerprint_salary_change beforedeleteorinsertorupdateonemp--触发事件 foreachrow--每修改一行都需要调用此过程 declare--只有触发器的声明需要declare,过程和函数都不需要 salary_balancenumber。 begin --: new与: old分别代表该行在修改前和修改后的记录 salary_balance=: new.salary=: old.salary。 dbms_output.PUT_LINE('oldsalaryis: '||: old.salary)。 dbms_output.PUT_LINE('oldsalaryis: '||: new.salary)。 dbms_output.PUT_LINE('oldsalaryis: '||to_char(salary_balance))。 endprint_salary_change。 要求4: 与其他语言(c/c++等)相比,PL/SQL的测试有其不同之处,归纳下来有三种方法: 1、使用DBMS_OUTPUT包的PUT_LINE方法来显示中间变量,以此来观察程序是否存在逻辑错误。 2、插入测试表的方法。 即创建一个临时的中间表,然后把所有涉及到的中间变量的结果都作为记录插入到中间表中,这样可以查询表中的结果来观察程序的执行情况。 3、使用异常处理手段,对可疑的程序段使用begin…end,然后可以在exception里进行异常捕获处理。 这里使用第二种方法插入测试表的方法来建立一个测试包,PL/SQL里包的概念类似于面向对象里的类的概念,包将一组操作和属性封装在一起,不仅增强了程序的模块化,而且由于封装了更多的操作和属性而提高了执行效能。 建立一个PL/SQL需要两个步骤: 首先要建立包头,类似于建立一个类的头文件,里面主要对包中的过程,函数和变量的声明;第二部分主要是包体部分,实现前面声明的过程和函数,另外还需要对包进行初始化等工作。 根据这一思路
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 级数 课程设计 安排