收藏 分销(赏)

级数据库专业课程设计安排.doc

上传人:二*** 文档编号:4518892 上传时间:2024-09-26 格式:DOC 页数:24 大小:149.04KB 下载积分:5 金币
下载 相关 举报
级数据库专业课程设计安排.doc_第1页
第1页 / 共24页
本文档共24页,全文阅读请下载到手机保存,查看更方便
资源描述
中南大学 《课程设计I》设计汇报 题 目 学生姓名 学 号 专业班级 指导老师 数学科学和计算技术学院 1月 题目 一、试验目标、内容 描述进行程序设计,采取……进行…, 要达成…内容….应包含有类和指针… 二、试验程序设计及结构 1、 需求分析 2、 设计结构(包含总体结构和数据结构) 三、设计过程 写出设计过程,试验源代码可不写出,但试验中犯错信息及处理方法及处理错误方法要写。 四、设计特点和结果 包含试验处理结果和设计心得。指出试验结果运行操作系统和平台。 参考文件 1、人名,文章名,出版机构,出版时间 2、 附录 自己做关键试验源代码 《数据库课程设计》教学纲领 课程编号:1300 课程名称:数据库课程设计 学分: 2 总课时:2周 先修课程要求:数据库原理和技术 适应专业:信息和计算科学、数学和应用数学 参考教材:1. 《数据库原理和技术》 2. 《Oracle入门和提升》 -、课程在培养方案中地位、目标和任务 本课程设计是为信科、应数专业安排关键实践步骤,数据库课程设计目标是使学生经过做一个具体设计题目,将书本上理论知识和实际有机结合起来,培养学生利用所学理论知识和技能,分析处理实际问题能力,培养学生调查研究、查阅技术文件、资料、编程开发和编写技术文件能力。提供独立编程实践机会。 二、课程设计基础要求 要求掌握Oracle数据库编程特点,掌握面向对象程序设计方法,依据所给题目,经过调查研究和上机实习,搜集和调查相关技术资料。结合软件开发技术思想,正确划分系统功效模块,进行系统具体设计,并说明各功效模块具体功效。掌握设计课题基础步骤和方法,写出系统实现具体方法,包含系统界面、功效等,附课程设计原程序。并提出系统测试方法,对所开发系统进行测试,得出测试结果。并分析结果,评价系统性能。 三、课程基础内容和关键难点 1. 课程基础内容:对数据库原理和技术教学内容、Oracle数据库编程,前后台数据库连接。 2. 难点:数据库关联、对具体问题编程和开发技术。 四、课程设计安排和选题 标准上要求每个学生基础题和综合题各选一题,具体任务由指导老师部署,提出设计内容、设计要求及实施计划。 学生熟习题目,给出解题方案和算法设计. 进行系统设计,给出系统框图和步骤图. 编码和测试,要求有说明文档及测试汇报. 完成设计汇报,不少于字 五、课程设计汇报要求 写出不少于字课程设计汇报,程序设计文档要求:对系统进行功效模块分析、控制模块分析正确,系统设计要实用,编程简练、可用、功效较全方面,说明书、步骤图要清楚。基础结构:设计分析、算法或程序步骤图源程序(附解释说明)调试汇报用户使用说明。汇报中除了在封面应有题目、班级、姓名、学号和课程设计日期以外,其正文通常有以下多个方面内容:一、课程设计目标;二、系统功效和使用说明,硬件环境:本系统适适用于那种类型计算机,内存容量为多大,应配置外部设备有哪些;软件环境:本系统设计采取是何种语言,应在什么软件环境下使用;三、需求分析;四、系统概念结构设计;五、数据库逻辑结构设计(数据库结构说明);六、系统实现过程。七、结束语。经过搞课程设计,你有何感想,学到了什么? 六、考评方法和评分方法 依据课程设计要求,利用所选题目,完成设计和开发任务,写出规范设计汇报,并依据实习到课情况、软件上机运行情况、界面是否友好、汇报是否规范等综合评定。如多人合作完成,应依据各人所负担工作情况,进行排序。指导老师负责组织检验、考勤老师分组负责(每位老师和担任班级同时上下课)帮助学生熟悉程序编写,立即查究错误。考评标准包含:程序设计可用性,实用性,通用性,可扩充性(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)    INSERT INTO STUDENT (学号,姓名,入课时间,专业,性别,年纪) VALUES (100001,’HUANGWEI’,TO_DATE(‘1999-09-10’,’YYYY-MM-DD’),’COMPUTER’,’男’,23); (2) (2)    INSERT INTO COURSE (课程号,课程名称,课时,学分) VALUES (000001,’多媒体’,32,4); (3) (3)    INSERT INTO GRADE (学号,课程号,成绩) VALUES (100001,000001,90)   第二题 练习:建立TEAMSTATS表以下: NAME POS AB HITS WALKS SINGLES DOUBLES TRIPLES HR SO   JONES 1B 145 45 34 31 8 1 5 10 DONKNOW 3B 175 65 23 50 10 1 4 15 WORLEY LF 157 49 15 5 8 3 3 16 DAVID OF 187 70 24 48 4 0 17 42 HAMHOCKER 3B 50 12 10 10 2 0 0 13 CASEY DH 1 0 0 0 0 0 0 1   在TEAMSTATS表上做以下操作: (1)查看WALKS小于20球员个数。 SQL> SELECT COUNT(*) FROM TEAMSTATS WHERE WALKS<20; (2)查看表中全部统计个数。(自己写) (3)查看队员总HITS数。 SQL>SELECT SUM(HITS) TOTAL_HITS FROM TEAMSTATS; (4)查看3B位置上队员总DOUBLES及总SO。 (5)查看漏球(SO)平均数。 SQL>SELECT AVG(SO) AVE_STRIKE_OUTS FROM TEAMSTATS; (6)查看TRIPLES为0队员HITS平均数。 (7)查看全部队员最高SIGGLES是多少。 SQL>SELECT MAX(SIGGLES) FROM TEAMSTATS; 第三题 已知企业职员表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——职员工资。整型。   请使用ORACLEsql*plus 完成下列操作 1、  创建表EMP,DEPT,WORK,并定义表主键和外键。 2、  向每个表中插入合适数据。比如:插入三条部门数据,分别为每个部门插入两条职员数据 3、  查询“研发”部门全部职员基础信息 4、  查询拥有最多职员部门基础信息(要求只取出一个部门信息),假如有多个部门人数一样,那么取出部门编号最小那个部门基础信息。 5、  显示部门人数大于5每个部门编号,名称,人数 6、  显示部门人数大于5每个部门最高工资,最低工资 7、  列出职员编号以字母P至S开头全部职员基础信息 8、  删除年纪超出60岁职员 9、  为工龄超出职员增加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, denotes beginning of block DECLARE -- optional, variable definitions BEGIN -- mandatory, denotes beginning of procedure section EXCEPTION -- optional, denotes beginning of exception section END -- mandatory, denotes ending of procedure section END -- optional, denotes ending of block   (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 语法: IF condition1 THEN statement1; ELSIF condition2 THEN(可选) statement2; ELSE(可选) statement3; END IF (2)循环语句: i.简单循环: LOOP statement1; END LOOP   ii.FOR循环: iii.WHILE循环:   5、题目:建立以下表,并用语句插入以下数据,完成所要求操作。 (1).使用表为:PAY_TABLE, 结构: Name Null? Type NAME NOT NULL VARCHAR2(20) PAY_TYPE NOT NULL VARCHAR2(8) PAY_RATE NOT NULL NUMBER(8,2) EFF_DATE NOT NULL DATE PREV_PAY NUMBER(8,2)   数据: NAME PAY_TYPE PAY_RATE EFF_DATE PREV_PAY SANDRA SAMUELS HOURLY 12.50 01-JAN-04 ROBERT BOBAY HOURLY 11.50 15-MAY-03 KEITH JONES HOURLY 10.00 31-OCT-04 SUSAN WILLIAMS HOURLY 9.75 01-MAY-04 CHRISSY ZOES SALARY 50000.00 01-JAN-04 CLODE EVANS SALARY 42150.00 01-MAR-04 JOHN SMITH SALARY 35000.00 15-JUN-03 KEVIN TROLLBERG SALARY 27500.00 15-JUN-03 (2).操作要求:要给为你工作时间超出了六个月个人增加薪金。符合条件钟点工薪金增加4% 而符合条件雇员薪金需要增加5% 。 PL/SQL 脚本: set serveroutput on BEGIN DECLARE UnknownPayType exception; cursor pay_cursor is select name, pay_type, pay_rate, eff_date, sysdate, rowid from pay_table; IndRec pay_cursor%ROWTYPE; cOldDate date; fNewPay number(8,2); BEGIN open pay_cursor; loop fetch pay_cursor into IndRec; exit when pay_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 raise UnknownPayType; end if; if (IndRec.eff_date < cOldDate) then update pay_table set pay_rate = fNewPay, prev_pay = IndRec.pay_rate, eff_date = IndRec.sysdate where rowid = IndRec.rowid; commit; end if; end loop; close pay_cursor; EXCEPTION when UnknownPayType then dbms_output.put_line('======================='); dbms_output.put_line('ERROR: Aborting program.'); dbms_output.put_line('Unknown Pay Type for Name'); when others then dbms_output.put_line('ERROR During Processing. See the DBA.'); END; END; /  6.练习: (1).对PAY_TABLE表写一个查询全部统计过程。 (2).对PAY_TABLE表写一个插入一条统计过程,要求输入参数为一条统计。 (3).写一个过程实现以下要求:对工作时间超出8个月职员,假如PAY_TYPE 是HOURLY,则改为SALARY,并将PAY_RATE改为按天天7小时工作年薪. 第五题:完成以下操作要求   某数据库有两张表:emp表和dept表,两张表结构以下: emp (emp_id number(5), emp_name varchar2(20), emp_salary number(4)); dept (dept_id number(3), dept_name varchar2(20), emp_id number(5));   要求以下:   1、根据上表结构建立对应表,为每张表写入5组正当数据。   2、操纵相关表,使得“技术部”职员薪水上涨20%。   3、建立日志,追踪薪水变动情况。   4、建立测试包。 第六题.要求1考察点为基础SQL语句; 要求2关键考察复合查询; 要求3是考察触发器应用; 要求4不仅考察了包创建,而且也考察了在PL/SQL中测试方法。   要求1:  首先依据前面表结构能够创建两张表:   ——创建职员表   create table emp (emp_id number(5), emp_name varchar2(20), emp_salary number(4));   ——部门表   create table dept (dept_id number(3), dept_name varchar2(20), emp_id number(5));   建立了表以后就能够往表里面写数据了,这里把添加表统计代码写入到对应存放过程。   /*给emp表添加统计存放过程*/   create or replace procedure ins_table_emp(p_emp_id number,p_emp_name varchar2,p_emp_salary number) as   v_emp_id number:=p_emp_id;   v_emp_name varchar2(20):=p_emp_name;   v_emp_salary number:=p_emp_salary;   begin    insert into emp values (v_emp_id,v_emp_name,v_emp_salary);   end ins_table_emp;   /*给dept表添加统计存放过程*/   create or replace procedure ins_table_dept(p_dept_id number,p_dept_name varchar2,p_emp_id number) as    v_dept_id number:=p_dept_id;    v_dept_name varchar2(20):=p_dept_name;    v_emp_id number:=p_emp_id;   begin    insert into dept values (v_dept_id,v_dept_name,v_emp_id);   end ins_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:   给指定部门职员加薪,这实际上是一个复合查询,首先需要把全部该部门职员选出来,然后对这些职员薪水进行对应改动。代码以下:   (需要注意是:将要加薪部门作为参数,这么存放过程更有灵活性。)   create or replace procedure add_salary(p_dept_name varchar2) as   v_dept_name varchar2(20):=p_dept_name;   begin    update emp set emp.EMP_SALARY=emp.EMP_SALARY*1.2 where emp.EMP_ID in (select emp.EMP_ID from emp,dept where emp.EMP_ID=dept.EMP_ID and dept.DEPT_ID='??ê?2?');   end add_salary;     要求3:   建立日志对薪水变动情况形成一个追踪,也就是说,假如对某个职员薪水进行变更就应该将其对应变更统计全部记下来。假如对emp表salary字段创建一个触发器,来监视对salary更改,把每次更改善行统计,这么就达成了要求3目标了。   create or replace trigger print_salary_change   before delete or insert or update on emp--触发事件   for each row-- 每修改一行全部需要调用此过程   declare --只有触发器申明需要declare,过程和函数全部不需要   salary_balance number;   begin   --:new 和:old分别代表该行在修改前和修改后统计   salary_balance=:new.salary=:old.salary;   dbms_output.PUT_LINE('old salary is: '|| :old.salary);   dbms_output.PUT_LINE('old salary is: '|| :new.salary);   dbms_output.PUT_LINE('old salary is: '|| to_char(salary_balance));   end print_salary_change;     要求4:和其它语言(c/c++等)相比,PL/SQL测试有其不一样之处,归纳下来有三种方法:   1、使用DBMS_OUTPUT包PUT_LINE方法来显示中间变量,以此来观察程序是否存在逻辑错误。   2、插入测试表方法。即创建一个临时中间表,然后把全部包含到中间变量结果全部作为统计插入到中间表中,这么能够查询表中结果来观察程序实施情况。   3、使用异常处理手段,对可疑程序段使用begin … end ,然后能够在exception里进行异常捕捉处理。     这里使用第二种方法插入测试表方法来建立一个测试包,PL/SQL里包概念类似于面向对象里类概念,包将一组操作和属性封装在一起,不仅增强了程序模块化,而且因为封装了更多操作和属性而提升了实施效能。建立一个PL/SQL需要两个步骤:首先要建立包头,类似于建立一个类头文件,里面关键对包中过程,函数和变量申明;第二部分关键是包体部分,实现前面申明过程和函数,另外还需要对包进行初始化等工作。   依据这一思绪,建立测试包以下:   /*包头部分*/   create or replace package debug as   procedure debug(v_description varchar2,v_valueOfvariable varchar2)    procedure reset;    v_numberOfLine number;   end debug;   /*包体部分*/   create or replace package body debug as   procedure debug(v_description varchar2,v_valueOfvariable varchar2) is   begin    insert into debugtable    values(v_numberOfLine,v_description,v_valueOfvariable);    v_numberOfLine:=v_numberOfLine+1;   end debug;   procedure reset is   begin    v_numberOfLine:=1;    delete from debugtable;   end reset;   /*初始化部分*/   begin    reset;   end debug;   三.习题 1、创建一个过程,打印出各个工资等级人数。备注:显示格式为三种情况1、工资少于人数为:****;工资在——3000人数为****;工资大于3000人数为:**** 2、创建一个表salary_change_record(empid,old_salary,new_salary,change_date),old_salary:用来纪录职员原来工资,new_salary:用来纪录更新后工资,change_date:统计更新系统时间。然后创建一个触发器,名称为 change_record,功效:每次更新职员工资以后,将更新纪录保留到表salary_change_record中。   第六题:(三人完成,每人选三题) 已知企业职员表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——职员工资。整型。 请使用ORACLEsql*plus 完成下列操作 1、 创建表EMP,DEPT,WORK,并定义表主键和外键。 2、 向每个表中插入合适数据。比如:插入三条部门数据,分别为每个部门插入两条职员数据 3、 查询“研发”部门全部职员基础信息 4、 查询拥有最多职员部门基础信息(要求只取出一个部门信息),假如有多个部门人数一样,那么取出部门编号最小那个部门基础信息。 5、 显示部门人数大于5每个部门编号,名称,人数 6、 显示部门人数大于5每个部门最高工资,最低工资 7、 列出职员编号以字母P至S开头全部职员基础信息 8、 删除年纪超出60岁职员 9、 为工龄超出职员增加10%工资 第七题:(三人完成,每人一题) ——创建职员表   create table emp (emp_id number(5), emp_name varchar2(20), emp_salary number(4),job varchar2(20), dept_id number(3));   ——部门表   create table dept (dept_id number(3), dept_name varchar2(20), loc varchar2(20)); 1、编写一个数据库触发器,当任何时候某个部门从"dept"中删除时,该触发器将从"emp"表中删除该部门全部雇员。 2、编写一个数据包,它有两个函数和两个过程以操作"emp"表。该数据包要实施任务为:插入一个新雇员;删除一个现有雇员;显示指定雇 员整体薪水;显示指定雇员所在部门名称。 3、编写一个函数以检验所指定雇员薪水是否有效范围内。不一样职位薪水范围为: Designation Raise Clerk 1500-2500 Salesman 2501-3500 Analyst 3501-4500 Others 4501 and above. 假如薪水在此范围内,则显示消息"Salary is OK",不然更新薪水为该范围内最大值。 第八题:(三人完成,12题一人,其它每人一题) 某数据库有两张表:emp表和dept表,两张表结构以下: emp (emp_id number(5), emp_name varchar2(20), emp_salary number(4)); dept (dept_id number(3), dept_name varchar2(20), emp_id number(5));   要求以下:   1、根据上表结构建立对应表,为每张表写入5组正当数据。 2、操纵相关表,使得“技术部”职员薪水上涨20%。 3、创建一个过程,打印出各个工资等级人数。备注:显示格式为三种情况1、工资少于人数为:****;工资在——3000人数为****;工资大于3000人数为:**** 4、创建一个表salary_change_record(empid,old_salary,new_salary,change_date),old_salary:用来纪录职员原来工资,new_salary:用来纪录更新后工资,change_date:统计更新系统时间。然后创建一个触发器,名称为 change_record,功效:每次更新职员工资以后,将更新纪录保留到表salary_change_record中。 第九题: 编写程序 向DEPT表中插入一条统计,从键盘输入数据,假如数据类型输入错误要有提醒无法插入统计 也要有提醒,只能输入正数,假如有负数提醒。 第十题 编写函数按YYYY-MM-DD HH24:MI:SS格式以字符串形式返回目前系统时间 第十一题 编写函数在scott.emp表查询指定编号雇员名字、工资和佣金 第十二题 编写一个子程序,当在scott.emp表删除雇员时,期望能记载是哪个用户在什么时候删除。这里面包含两件事情,一是删除指定雇员统计,二是记载是什么时候哪个用户删除。 第十三题 scott.emp表使用用触发器实现业务规则:除销售员外,雇职员资只增不减 第十四题 编写一个子程序,删除指定编号雇员,返回用户自定义错误号和错误信息。 第十五题 为雇员表emp创建一触发器,确保插入统计工资列sal大于0,同时新统计sal列值不能高于已经有统计最高工资2倍 第十六题 用游标完成将雇员表emp中编号大于200、且工资超出10000雇员统计插入到sal_history表中,将其经理编号超出200统计插入到mgr_history表中。 第十七题 按年度基础工资额用游标修改emp表中统计sal字段值,如年基础工资低于30000,sal增加20%,不然sal增加15%。 第十八题 建立名称为data_ts1数据表空间,大小为50M,区间统一为128KB大小 建立名称
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服