文档库 最新最全的文档下载
当前位置:文档库 › 实验16 游标、存储过程和函数参考答案

实验16 游标、存储过程和函数参考答案

实验16  游标、存储过程和函数参考答案
实验16  游标、存储过程和函数参考答案

实验十六游标、存储过程和函数

一、目的与要求

1.了解游标的概念和工作原理;

2.了解存储过程的分类和使用方法;

3.了解触发器的概念;

4.学习编写和执行自定义过程;

5.学习编写和执行自定义函数;

6.学习创建和使用触发器。

二、实验准备

1.首先要了解游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了。将游标放置到某行后,即可对该行数据进行操作,最常见的操作是提取当前行数据。

2.使用显式游标的步骤:

(1)说明游标。

(2)打开游标。

(3)读取数据。

(4)关闭游标。

3.了解PL/SQL包括3种存储过程,即过程、函数和程序包。

4.了解触发器是一种特殊的存储过程,当指定表中的数据发生变化时自动运行。

三、实验内容

1.练习书上的例子10.1—10.24。

2.以上机实验经常用到的数据库LIB为例,编写过程P_ResetPrice,此过程的功能是将表图书中指定书号的单价更改为10.0,调用该过程将书号为’TP311.13/CM3’的单价更改为10.0,将程序写在实验报告中。

create or replace procedure P_ResetPrice

(vBno in varchar2)

as

begin

update 图书 set 单价=10.0 where 图书号=vBno;

end;

execute P_ResetPrice(‘TP311.13/CM3’);

3.编写一函数F_GetBName,该函数的功能是在图书中根据指定的书号,返回该书的书名,并在匿名块中调用函数F_GetBName找出编号为“TP311.132/ZG1”的书名,将程序写在实验报告中。

create function F_GetName

(vtno IN 图书.图书号%Type)

return 图书.书名%Type

as

outname 图书.书名%Type;

begin

select 书名 into outname

from 图书

where 图书号=vtno;

return outname;

end;

set ServerOutPut on;

declare

varName 图书.书名%Type;

begin

varName:=F_GetName('TP311.132/ZG1');

dbms_output.put_line(varName);

end;

4.创建一程序包MyPack,包含以上的过程P_ResetPrice和函数F_GetBName,并在匿名块中调用Mypack包中的过程和函数进行测试,将程序写在实验报告中。

CREATE PACKAGE MyPack

IS

PROCEDURE P_ResetPrice

(vBno in varchar2);

FUNCTION F_GetName

(vtno IN 图书.图书号%Type)

return 图书.图书号%Type;

END MyPack;

CREATE PACKAGE BODY MyPack

IS

PROCEDURE P_ResetPrice

(vBno in varchar2)

AS

begin

update 图书 set 单价=10.0 where 图书号=’’||vBno||’’;

end;

function F_GetName

(vtno IN 图书.图书号%Type)

return 图书.图书号%Type

as

outname 图书.图书号%Type;

begin

select 书名 into outname

from 图书

where 图书号=’’||vtno||’’;

return outname;

end;

END MyPack;

SET ServerOutput ON;

declare

varName 图书.图书号%Type;

begin

/* 测试包中的过程*/

MyPack.P_ResetPrice(‘TP311.13/CM3’);

/* 测试包中的函数*/

varName:=MyPack.F_GetName('TP311.132/ZG1');

dbms_output.put_line(varName);

end;

5.编写一数据库触发器,当任何时候读者书表中的某个读者号更新时,该触发器将借阅表中相应的读者号进行级联更新,将程序写在实验报告中。

CREATE OR REPLACE TRIGGER MyTrigger

AFTER UPDATE ON 读者

FOR EACH ROW

BEGIN

UPDATE 借阅 SET 读者号 = :new.读者号

WHERE 读者号 = :old.读者号;

END;

6.编写程序根据常用的Enrollment表中所有记录的分数,给出相应的等级,要求用游标实现,程序运行的结果如下:

学号:20010101,课程号: C1,成绩:90,等级:: 优

学号:20010102,课程号: C1,成绩:88,等级:: 良

学号:20010102,课程号: C2,成绩:94,等级:: 优

学号:20010102,课程号: C3,成绩:54,等级:: 不及格

将程序写在实验报告中。

set serveroutput on;

declare

v_grade number;

v_dj varchar2(20);

v_sno enrollment.sno%TYPE;

v_cno https://www.wendangku.net/doc/0f15100205.html,o%TYPE;

cursor mycur is select sno,cno,grade from enrollment;

begin

if mycur%ISOPEN=FALSE then

open mycur;

end if;

LOOP

FETCH mycur into v_sno,v_cno,v_grade;

exit when mycur%NOTFOUND;

case

when v_grade>=90 then

dbms_output.put_line('学号:' || v_sno ||',课程号: '|| v_cno ||',成绩:' || v_grade|| ',等级:' || ': 优');

when v_grade>=80 AND v_grade<90 then

dbms_output.put_line('学号:' || v_sno ||',课程号: '|| v_cno ||',成绩:' || v_grade ||',等级:' || ': 良');

when v_grade>=70 AND v_grade<80 then

dbms_output.put_line('学号:' || v_sno ||',课程号: '|| v_cno ||',成绩:' || v_grade ||',等级:' || ': 中');

when v_grade>=60 AND v_grade<70 then

dbms_output.put_line('学号:' || v_sno ||',课程号: '|| v_cno ||',成绩:' || v_grade ||',等级:' || ': 及格');

else

dbms_output.put_line('学号:' || v_sno ||',课程号: '|| v_cno ||',成绩:' || v_grade|| ',等级:' || ': 不及格');

end case;

end loop;

close mycur;

end;

结果如下所示:

学号:20010101,课程号: C1,成绩:90,等级:: 优

学号:20010102,课程号: C1,成绩:88,等级:: 良

学号:20010102,课程号: C2,成绩:94,等级:: 优

学号:20010102,课程号: C3,成绩:54,等级:: 不及格

游标与存储过程

实验5 游标与存储过程 1、实验目的 1. 学习实践游标与存储过程 2. 学习实践PL/SQL编程 2、实验原理 1. PL/SQL编程 2. 游标与存储过程 3、实验器材 1. 安装了Oracle,或者MySQL的计算机 4、实验内容 3. 创建表 Code Name Amt 01服装900 0101男装300 010101西装100 010102休闲装200 0102女装390 010201套装120 010202职业装130 010203休闲装140 0103童装210 02电器290 0201进口140 0202国产150 03日用品300 2.编写Oracle的存储过程,实现层次结构的逐级求和。

3.应用sql*plus,编写PL/SQL调用步骤2编写的存储过程。 五、实验报告要求 请将相应SQL语句写在实验报告上 1、 create table example(code number(10),name varchar2(20),amt number(10)); 2、 insert into example values(01,'服装',900); 3、 insert into example values(0101,'男装',300); 4、 insert into example values(010101,'西装',100); 5、 insert into example values(010102,'休闲装',200); 6、 insert into example values(0102,'女装',390); 7、 insert into example values(010201,'套装',120); 8、 insert into example values(010202,'职业装',130); 9、 insert into example values(010203,'休闲装',140); 10、 insert into example values(0103,'童装',210); 11、 insert into example values(02,'电器',290);、 12、 insert into example values(0201,'进口',140); select * from example; CODE NAME AMT --------- -------------------- ---------- 1 服装 900 101 男装 300 10101 西装 100 10102 休闲装 200 102 女装 390 10201 套装 120 10202 职业装 130 10203 休闲装 140

在Sql Server存储过程中使用Cursor(游标)操作记录

1.为何使用游标: 使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。 2.如何使用游标: 一般地,使用游标都遵循下列的常规步骤: (1) 声明游标。把游标与T-SQL语句的结果集联系起来。 (2)打开游标。 (3)使用游标操作数据。 (4)关闭游标。 2.1.声明游标 DECLARE CURSOR语句SQL-92标准语法格式: DECLARE游标名[ INSENSITIVE ] [ SCROLL ] CURSOR FOR sql-statement Eg: Declare MycrsrVar Cursor FOR Select * FROM tbMyData 2.2打开游标 OPEN MycrsrVar 当游标被打开时,行指针将指向该游标集第1行之前,如果要读取游标集中的第1行数据,必须移动行指针使其指向第1行。就本例而言,可以使用下列操作读取第1行数据: FETCH FIRST from E1cursor 或FETCH NEXT from E1cursor 2.3 使用游标操作数据 下面的示例用@@FETCH_STATUS控制在一个WHILE循环中的游标活动 DECLARE E1cursor cursor FOR SELECT * FROM c_example OPEN E1cursor FETCH NEXT from E1cursor WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT from E1cursor END CLOSE E1cursor DEALLOCATE E1cursor 2.4 关闭游标 使用CLOSE语句关闭游标 CLOSE { { [ GLOBAL ]游标名} |游标变量名} 使用DEALLOCATE语句删除游标,其语法格式如下: DEALLOCATE { { [ GLOBAL ]游标名} | @游标变量名

ex11游标与存储过程答案

实验十一游标与存储过程 (1)创建游标,逐行显示表Customer.的记录,并用WHILE结构来测试@@Fetch_Status的返回值。输出格式如下: '客户编号'+'-----'+'客户名称'+'----'+'客户地址'+'-----'+'客户电话 '+'------'+'客户邮编'+'------' DECLARE cur_cust SCROLL cursor FOR SELECT* FROM customer DECLARE @p_CustId char(5) DECLARE @p_CustName char(20) DECLARE @p_address char(40) DECLARE @p_Tel char(10) DECLARE @p_Zip char(6) DECLARE @p_All char(100) SELECT @p_All='客户编号'+'------'+'客户名称'+'------'+'客户地址 '+'-------------------------------------'+'客户电话'+'-------'+'客户邮 编'+'------' PRINT @p_All OPEN cur_cust FETCH cur_cust into @p_CustId,@p_CustName,@p_address,@p_Tel,@p_Zip WHILE(@@fetch_status<>-1) BEGIN SELECT @p_All=@p_CustId+' '+@p_CustName+@p_address+@p_Tel+' '+@p_Zip print @p_All FETCH cur_cust into @p_CustId,@p_CustName,@p_address,@p_Tel,@p_Zip END PRINT'客户数目: '+CONVERT(char(5),@@CURSOR_ROWS) CLOSE cur_cust DEALLOCATE cur_cust

实验16 游标、存储过程和函数参考答案

实验十六游标、存储过程和函数 一、目的与要求 1.了解游标的概念和工作原理; 2.了解存储过程的分类和使用方法; 3.了解触发器的概念; 4.学习编写和执行自定义过程; 5.学习编写和执行自定义函数; 6.学习创建和使用触发器。 二、实验准备 1.首先要了解游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了。将游标放置到某行后,即可对该行数据进行操作,最常见的操作是提取当前行数据。 2.使用显式游标的步骤: (1)说明游标。 (2)打开游标。 (3)读取数据。 (4)关闭游标。 3.了解PL/SQL包括3种存储过程,即过程、函数和程序包。 4.了解触发器是一种特殊的存储过程,当指定表中的数据发生变化时自动运行。 三、实验内容 1.练习书上的例子10.1—10.24。 2.以上机实验经常用到的数据库LIB为例,编写过程P_ResetPrice,此过程的功能是将表图书中指定书号的单价更改为10.0,调用该过程将书号为’TP311.13/CM3’的单价更改为10.0,将程序写在实验报告中。 create or replace procedure P_ResetPrice (vBno in varchar2) as begin update 图书 set 单价=10.0 where 图书号=vBno; end; execute P_ResetPrice(‘TP311.13/CM3’); 3.编写一函数F_GetBName,该函数的功能是在图书中根据指定的书号,返回该书的书名,并在匿名块中调用函数F_GetBName找出编号为“TP311.132/ZG1”的书名,将程序写在实验报告中。 create function F_GetName (vtno IN 图书.图书号%Type) return 图书.书名%Type

实验8 多态性与虚函数

实验八多态性与虚函数 一、实验目的和要求 1.了解多态的概念; 2.了解虚函数的作用及使用方法; 3.了解静态关联和动态关联的概念和用法; 4.了解纯虚函数和抽象类的概念和用法 二、实验内容和结果 1.阅读下面的程序 1.1请写出程序的执行结果,并在上机时对照理解 class Vehicle {public: void run() const { cout << "run a vehicle. "<

airplane.run(); cout<<"(b) 用指向基类的指针访问成员函数: "<run(); vp=&airplane; vp‐>run(); } 1.2 如果将Vehicle 类的定义修改为虚函数,其余不变,请写出程序的执行结果,并在上机时对照理解 class Vehicle {public: virtual void run() const { cout << "run a vehicle. "<

实验九 游标与存储过程

实验九游标与存储过程 1 实验目的与要求 (1) 掌握游标的定义和使用方法。 (2) 掌握存储过程的定义、执行和调用方法。 (3) 掌握游标和存储过程的综合应用方法。 2 实验内容 请完成以下实验内容: (1)创建游标,逐行显示Customer表的记录,并用WHILE结构来测试 @@Fetch_Status的返回值。输出格式如下: declare @C_no char(9),@C_name char(18),@C_phone char(10), @C_addchar(8),@C_zip char(6) declare @text char(100) declarecus_cur scroll cursor for select* from Customer select @text='=========================Customer 表的记录 =========================' print @text select @text='客户编号'+'-----'+'客户名称'+'----'+'客户住址'+'-----'+'客户电话'+'------'+'邮政编码' print @text select @text='============================================================ ============================' print @text opencus_cur fetchcus_cur into @C_no,@C_name,@C_phone,@C_add,@C_zip while(@@fetch_status=0) begin select @text=@cust_No+' '+@cust_name+' '+@addr+' '+@tel_no+' '+@zip print @text fetchcus_cur into @C_no,@C_name,@C_phone,@C_add,@C_zip end closecus_cur deallocatecus_cur '客户编号'+'-----'+'客户名称'+'----'+'客户住址'+'-----'+'客户电话'+'------'+'邮政编码'

多态性和虚函数

多态性和虚函数

Problem A: C++习题抽象基类Description 编写一个程序,声明抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积(结果保留两位小数),3个图形的数据在定义对象时给定。 Input 圆的半径 矩形的边长 三角形的底与高 Output 圆的面积 矩形的面积 三角形的面积 Sample Input 12.6 4.5 8.4 4.5 8.4 Sample Output area of circle = 498.76 area of rectangle = 37.80 area of triangle = 18.90 #include #include using namespace std; class Shape { public:

virtual double area()const=0; }; class Circle:public Shape { public: Circle(double r):radius(r) {} virtual double area() const { return 3.14159*radius*radius; }; protected: double radius; }; class Rectangle:public Shape { public: Rectangle(double w,double h):width(w),height(h) {} virtual double area() const { return width*height; }

SQL游标嵌套存储过程

--测试数据 create table tmp1 ( ID int not null, val varchar(10), constraint PK_tmp1 primary key (ID) ); create table tmp2 ( ID int not null, vals varchar(100), constraint PK_tmp2 primary key (ID) ); insert into tmp1(id, val) values (1, 'test'); insert into tmp1(id, val) values (2, 'test2'); insert into tmp1(id, val) values (3, 'test3'); insert into tmp1(id, val) values (4, 'test4'); insert into tmp1(id, val) values (5, 'test5'); insert into tmp2(id, vals) values (1, '1,2'); insert into tmp2(id, vals) values (2, '1,3'); insert into tmp2(id, vals) values (3, '2,5'); insert into tmp2(id, vals) values (4, '1,2,3,4,5'); --存储过程 drop procedure proc_tmp_1 go CREATE PROCEDURE proc_tmp_1 AS begin declare @vals varchar(500) declare @id int declare @vals2 varchar(1000) declare @command varchar(1000) declare @vals3 varchar(1000) declare @cmd varchar(1000) declare cursor_tmp_1 cursor for SELECT id, vals FROM tmp2 open cursor_tmp_1 fetch next from cursor_tmp_1 into @id, @vals while @@fetch_status = 0 begin set @vals3 = '' set@cmd = 'declare cursor_tmp_2 cursor for select val from tmp1 where id in (' + @vals + ')' EXEC (@cmd) open cursor_tmp_2 fetch next from cursor_tmp_2 into @vals2 while @@fetch_status = 0 begin if (@vals3 <> '') begin set @vals3 = @vals3 + ',' end SET @vals3 = @vals3 + @vals2

c++多态性与虚函数习题

作业题 一、写出下列程序运行结果 1.#include using namespace std; class A { public: virtual void func( ) {cout<<”func in class A”< using namespace std; class A{ public: virtual ~A( ){ cout<<”A::~A( ) called “<

}; void fun(A *a) { delete a; } int main( ) { A *a=new B(10); fun(a); } 二、程序设计题 1有一个交通工具类vehicle,将它作为基类派生小车类car、卡车类truck和轮船类boat,定义这些类并定义一个虚函数用来显示各类信息。 5.2定义一个shape抽象类,派生出Rectangle类和Circle类,计算各派生类对象的面积Area( )。 5.5某学校对教师每月工资的计算公式如下:固定工资+课时补贴。教授的固定工资为5000元,每个课时补贴50元;副教授的固定工资为3000元,每个课时补贴30元;讲师的固定工资为2000元,每个课时补贴20元。给出教师抽象类及主函数,补充编写程序求若干教师的月工资。 #include using namespace std; class Teacher{ protected: double salary; int workhours; public: Teacher(int wh=0){workhours=wh;} virtual void cal_salary()=0; void print(){cout<cal_salary(); prof.print(); Vice_Prof vice_prof(250); pt=&vice_prof; pt->cal_salary(); vice_prof.print(); Lecture lecture(100); pt=&lecture; pt->cal_salary(); lecture.print (); return 0; }

sql server存储过程详细代码(超赞!)

use jxgl --首先判断有没有已经建立up_getallstudents存储过程,有则先删除 if exists (select name from sysobjects where name='up_getallstudents'and type ='p') drop procedure up_getallstudents --编写存储过程up_getallstudents,用于获取学生表students的所有记录 create procedure up_getallstudents as select*from students --使用execute执行存储过程up_getallstudents exec up_getallstudents --也可写成 execute up_getallstudents --编写一个存储过程up_insertstudent,完成学生表students数据的插入 --1、不带默认值的参数 create procedure up_insertstudent @sid varchar(15),@sname varchar(30),@ssex char(10), @sbirth datetime,@sbirthplace varchar(300) as begin insert into students (stu_id,stu_name,stu_sex,stu_birth,stu_birthplace) values (@sid,@sname,@ssex,@sbirth,@sbirthplace) end exec up_insertstudent'200712110111','肖玉峰','男','1975-02-05','山东省滕州市木石镇' --等同于 exec up_insertstudent @sname='肖玉峰',@sid='200712110111',@ssex='男',@sbirth= '1975-02-05',@sbirthplace='山东省滕州市木石镇' drop procedure up_insertstudent delete students where stu_name='肖玉峰'

实验6多态性与虚函数

[实验目的] 1、了解多态性的概念; 2、了解虚函数的用途及使用方法; 3、了解纯虚函数和抽象类的概念和用法。 [实验要求] 给出以下各实验内容的源程序代码,并把编译、运行过程中出现的问题以及解决方法填入实验报告中,按时上交。 [实验学时] 2学时。 [实验内容] 1、写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)。利用指针、虚函数printArea()分别输出以上三者的面积,3个图形的数据在定义对象时给定。 [源程序] #include using namespace std; class Shape { public: virtual float area()const=0; virtual void display()const=0; }; class Circle:public Shape { public: Circle(double a):r(a){} virtual float area()const{return 3.14*r*r;} virtual void display()const { cout<<"圆面积"<

class Rectangle:public Shape { public: Rectangle(double a,double b):l(a),w(b){} virtual float area()const{return l*w;} virtual void display()const { cout<<"矩形面积"<display(); m=m+p[i]->area(); }

存储过程和游标

我们在进行pl/sql编程时打交道最多的就是存储过程了。存储过程的结构是非常的简单的,我们在这里除了学习存储过程的基本结构外,还会学习编写存储过程时相关的一些实用的知识。如:游标的处理,异常的处理,集合的选择等等 1.存储过程结构 1.1 第一个存储过程 Java代码 1.create or replace procedure proc1( 2. p_para1 varchar2, 3. p_para2 out varchar2, 4. p_para3 in out varchar2 5.)as 6. v_name varchar2(20); 7.begin 8. v_name := '三丰'; 9. p_para3 := v_name; 10. dbms_output.put_line('p_para3:'||p_para3); 11.end; 上面就是一个最简单的存储过程。一个存储过程大体分为这么几个部分: 创建语句:create or replace procedure 存储过程名 如果没有or replace语句,则仅仅是新建一个存储过程。如果系统存在该存储过程,则会报错。Create or replace procedure 如果系统中没有此存储过程就新建一个,如果系统中有此存储过程则把原来删除掉,重新创建一个存储过程。 存储过程名定义:包括存储过程名和参数列表。参数名和参数类型。参数名不能重复,参数传递方式:IN, OUT, IN OUT IN 表示输入参数,按值传递方式。 OUT 表示输出参数,可以理解为按引用传递方式。可以作为存储过程的输出结果,供外部调用者使用。 IN OUT 即可作输入参数,也可作输出参数。 参数的数据类型只需要指明类型名即可,不需要指定宽度。 参数的宽度由外部调用者决定。 过程可以有参数,也可以没有参数 变量声明块:紧跟着的as (is )关键字,可以理解为pl/sql的declare关键字,用于声明变量。 变量声明块用于声明该存储过程需要用到的变量,它的作用域为该存储过程。另外这里声明的变量必须指定宽度。遵循PL/SQL的变量声明规。 过程语句块:从begin 关键字开始为过程的语句块。存储过程的具体逻辑在这里来实现。 异常处理块:关键字为exception ,为处理语句产生的异常。该部分为可选 结束块:由end关键字结果。 1.2 存储过程的参数传递方式 存储过程的参数传递有三种方式:IN,OUT,IN OUT . IN 按值传递,并且它不允许在存储过程中被重新赋值。如果存储过程的参数没有指定存参数传递类型,默认为IN

Oracle存储过程学习_游标CURSOR使用

游标CURSOR的使用学习 游标的类型: 1,隐式游标:在 PL/SQL 程序中执行DML SQL 语句时自动创建隐 式游标,名字固定叫sql。 2,显式游标:显式游标用于处理返回多行的查询。 3,REF 游标:REF 游标用于处理运行时才能确定的动态 SQL 查询 的结果 一、隐式游标 在PL/SQL中使用DML语句时自动创建隐式游标 q隐式游标自动声明、打开和关闭,其名为 SQL q通过检查隐式游标的属性可以获得最近执行的DML 语句的信息q隐式游标的属性有: q%FOUND – SQL 语句影响了一行或多行时为 TRUE q%NOTFOUND – SQL 语句没有影响任何行时为TRUE q%ROWCOUNT – SQL 语句影响的行数 q%ISOPEN - 游标是否打开,始终为FALSE begin update student s set s.sage = s.sage + 10; if sql %FOUND then dbms_output.put_line('这次更新了' || sql% rowcount); else dbms_output.put_line('一行也没有更新'); end if; end; 在select中有两个中比较常见的异常: 1. NO_DATA_FOUND 2. TOO_MANY_ROWS declare sname1 student.sname%TYPE; begin

select sname into sname1 from student; if sql%found then dbms_output.put_line(sql%rowcount); else dbms_output.put_line('没有找到数据'); end if; exception when too_many_rows then dbms_output.put_line('查找的行记录多于1行'); when no_data_found then dbms_output.put_line('未找到匹配的行'); end; 显式游标: sqlserver与oracle的不同之处在于:最后sqlserver会deallocate 丢弃游标,而oracle只有前面四步:声明游标、打开游标、使用游标读取记录、关闭

实验六 多态性和虚函数

实验六多态性和虚函数 一、实验目的 1、了解多态性的概念。 2、了解虚函数的作用及其使用方法。 3、了解静态关联和动态关联的概念和用法。 4、了解纯虚函数和抽象类的概念和用法。 二、实验要求 1、分析程序运行结果,掌握虚函数的使用。 程序一: #include class ONE { public: virtual void f(){cout<<"l"<f(); } 程序二: #include class Base { public: virtual void fn() { cout <<"In Base Class\n";} }; class SubClass :public Base { public: virtual void fn(){ cout <<"In Sub Class\n"; } }; void main()

{ Base bc,*p; SubClass sc; p=&bc; p->fn(); p=≻ p->fn(); } 2、实现一个类A,在A中有两个私有的整型变量a和b,定义构造函数对a和b进行初始化,并实现成员函数geta()取得a的值和getb()取b的值。实现类B从A继承,覆盖geta(),使其返回a的2倍。主函数中声明类B对象,调用类B中的geta()并将结果输出。 3、声明抽象基类Shape,由它派生出3个派生类:Cirle(圆形)、Rectangle(矩形)、Triangle (三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象是给定。

C++实验多态性实验报告

贵州大学实验报告 学院:电子信息学院专业:通信工程班级: 姓名学号实验组5实验时间指导教师成绩 实验项目名称多态性 实 验通过让学生进行实验,使其对于动态多态性有一个较为深入的了解和熟悉。最终可以目熟练使用。 的 实 1.编写 4 个重载函数 Double( x),返回值为输入参数的两倍;参数类型分别为int 、验long 、float 、 double ,返回值类型与参数类型一样。 2.请编写一个抽象类Shape,在此基础上派生出类Rectangle和Circle,二者都有 要 计算对象面积的函数GetArea ()和计算周长函数GetPerim ()。 求3.对类 Point 重载 ++(自增)、 -- (自减)运算符。 实 验Visual C++的编译环境下,独立完成实验要求的内容,独立完成编写、编译以及运行 原的过程 理 实 验 安装了 Visual C++ 的 PC机器 仪 器 实 验 按照实验要求的内容逐一完成实验的要求。顺序是编写、编译、运行。 步 骤

实 1. 编写 4 个重载函数 Double(x),返回值为输入参数的两倍;参数类型分别为int、 验 long 、 float 、 double ,返回值类型与参数类型一样。 2. 请编写一个抽象类Shape,在此基础上派生出类Rectangle 和 Circle,二者都有计 内算对象面积的函数GetArea ()和计算周长函数GetPerim ()。容 3. 对类 Point 重载 ++(自增)、 -- (自减)运算符。 1、代码如下: #include using namespace std; int Double(int x); long Double(long x); float Double(float x); double Double(double x); int main() { int myInt = 6500; cout< #define PI 3.1415926; using namespace std; class Shape // 抽象类的定义 { public: virtual double GetArea()= 0; //纯虚函数

实验五 虚函数与多态性

实验三继承与多态性 一、实验目的与要求 1、掌握继承、基类和派生类的概念。 2、掌握初始化基类成员的方法。 3、掌握派生类对基类的继承。 4、学习虚函数和纯虚函数的定义与使用方式。 5、理解抽象类的概念,学习如何用指针指向其他的派生类,实现多态性。 6、掌握抽象类的定义与使用方式,并注意指针的用法。 7、学习如何使用虚函数、纯虚函数、抽象类和实现类的多态性。 二、实验设备与平台 实验设备要求每个学生一台电脑,其中运行环境为VC++ 6.0系统或新版。 三、实验内容与步骤 实验:编写一个人员信息管理系统。这个系统的功能是:交互式地实现校园人员信息的录入与显示。 分析: 学校里,主要有四类人员:大学本科学生、教师、研究生和助教。 大学本科生每周有固定的学时数。教师除了固定的学时数外,还有每周的教学时数。研究生除了固定的学时数外,每周还可以自由做一定的研究。助教除了上课外,还要做研究和一定的教学工作。 人员的基本信息包括姓名、编号、性别、身份证号、总学时数、以及每周固定学时数。各个人员之间的关系:people类派生出student类和teacher类,student类派生出graduate 类,graduate类和teacher类派生出TA类。 以下给出部分程序: #include using namespace std; class people { public: //添加程序 private: }; class student: virtual public people {

public: //添加程序 private: }; class teacher: virtual public people { public: //添加程序 private: }; class graduate: virtual public student { public: //添加程序 private: }; class TA: public graduate, public teacher { public: //添加程序 private: }; void main() { //添加程序 }

实验三虚函数与多态纯虚函数(完全版)

实验三虚函数与多态、纯虚函数 一.实验目的 1. 在掌握继承与派生关系的基础上,进一步理解虚函数与多态性的关系,实现运行时的多态。 2. 学会定义和使用纯虚函数 二、实验内容 1.范例:了解"单接口,多方法"的概念。现有称为figure的基类,存放了各二维对象(三角形、矩形和圆形三个类)的各维数据,set_dim()设置数据,是标准成员函数。 show_area()为虚函数,因为计算各对象的面积的方法是不同的。 【程序】 #include < iostream > using namespace std; class figure{ protected: double x,y;

public: void set_dim(double i,double j=0) { x=i; y=j; } virtual void show_area() { cout<<"No area computation defined for this class.\n"; } }; class triangle:public figure{ public: void show_area() { cout<<"Triangle with height "<< x<<" and base "<< y<<" has an area of "<< x*0.5*y<< endl; } }; class square:public figure{ public:

void show_area() { cout<<"Square with dimensions "<< x<<" and "<< y<<" has an area of "<< x*y<< endl; } }; class circle:public figure{ public: void show_area() { cout<<"Circle with radius "<< x<<" has an area of "<<3.14159*x*x<< endl; } }; int main(){ figure *p; triangle t; square s;

多态性和虚函数 实验报告

淮海工学院计算机科学系实验报告书 课程名:《 C++程序设计(二)》 题目:多态性和虚函数 班级: 学号: 姓名:

1、实验内容或题目 (1)声明二维坐标类作为基类派生圆的类,把派生类圆作为基类,派生圆柱体类。其中,基类二维坐标类有成员数据:x、y坐标值;有成员函数:构造函数实现对基类成员数据的初始化、输出的成员函数,要求输出坐标位置。派生类圆类有新增成员数据:半径(R);有成员函数:构造函数实现对成员数据的初始化、计算圆面积的成员函数、输出半径的成员函数。派生圆柱体类新增数据有高(H);新增成员函数有:构造函数、计算圆柱体体积的函数和输出所有成员的函数。请完成程序代码的编写、调试。 (2)教材393页7-8题。 (3)教材416页1、4、5题。 2、实验目的与要求 (1)理解继承与派生的概念 (2)掌握通过继承派生出一个新的类的方法 (3)了解多态性的概念 (4)了解虚函数的作用与使用方法 3、实验步骤与源程序 ⑴实验步骤 先定义一个基类point,及其成员函数,然后以public的继承方式定义子类circle,再定义一个派生类cylinder,最后在main主函数中定义类对象,调用函数实现其功能。 先定义一个基类A及其重载的构造函数,然后以Public派生出子类B,再定义其构造函数,最后在main主函数中定义类对象,调用成员函数实现其功能。 ⑵源代码 1.#include class Point { public: Point(float=0,float=0); void setPoint(float,float); float getX() const {return x;}

存储过程与游标练习

创建三个表:学生(学号,姓名)、课程(课程号,课程名)、成绩(学号、课程号、分数),然后在三个表中分别添加记录。按照输入的课程名称打印此门课程的成绩报表(如不给定课程名称则打印SQL课程的成绩),输出结果按照分数降序排列: 例如: 《SQL》成绩表 **************************************************** 名次学号姓名成绩 1 0508044126 李军95 2 0508044124 李明85 3 0508044125 王刚75 **************************************************** */ use pubs IF EXISTS (SELECT NAME FROM sysobjects WHERE NAME = '学生') DROP table 学生 GO IF EXISTS (SELECT NAME FROM sysobjects WHERE NAME = '课程') DROP table 课程 GO IF EXISTS (SELECT NAME FROM sysobjects WHERE NAME = '成绩') DROP table 成绩 GO create table 学生(学号char(10) primary key constraint xh_chk check (学号like '0508044[1-4][0-3][0-9]'),姓名nvarchar(10) not null) create table 课程(课程号char(6) primary key,课程名称nvarchar(40)) create table 成绩(学号char(10) not null,课程号char(6) not null,分数numeric(4,1)) insert 学生values('0508044124','李明') insert 学生values('0508044125','王刚') insert 学生values('0508044126','李军') insert 课程values('080101','SQL') insert 课程values('080204','D S') insert 成绩values('0508044124','080101',85) insert 成绩values('0508044124','080204',95) insert 成绩values('0508044125','080101',75) insert 成绩values('0508044125','080204',86) insert 成绩values('0508044126','080101',95) go if exists(select * from sysobjects where name='cj_proc' and xtype='p') drop proc cj_proc

相关文档
相关文档 最新文档