云南大学软件学院
实验报告
课程:数据库原理与实用技术任课教师:蔡莉实验指导教师(签名):
姓名:学号:专业:日期:成绩:
实验3. 创建对象
该实验的内容
本实验是一个在数据库中创建对象的联机实验室。命令中心可以被用来创建对象,只要指令提供文件被用作命令中心的输入。
实验说明
第1 节- 创建表
在本节中您将创建您的CLINICDB 数据库所需要的表。
您应该已经登录为您的“slab1”用户名。如果没有,现在如此做。
1. 通过控制中心,创建doctors表,该表具有下列特征:
name of doctors
regular data to go in table space dms01
indexes to go in table space dms02
long data to go in table space dms03
the column d-ido should be defined as a primary key
columns defined like the following:
( d_id int not null primary key,
d_d_name varchar(8) ,
position varchar(8) not null,
introduction clob(50k) logged compact,
d_pictrue blob(500k) not logged compact)
2. 切换到您将创建实验中所需表的命令中心会话。这些表将被一个脚本命令文件创建,该文件的名称为CRTABLES。该文件位于您的cf23 目录。在命令中心装入此文件,但不要执行它。表situation的索引和数据应在哪个表空间?是doctors?是
D_SCHEDULE?还是REGISTER?
3. 设置您的命令中心选项,在名为X:\cf23\crtable.log 的文件中记录您的命令,并将您的输出管道连到报告文件X:\cf23\crtable.out。然后执行文件CRTABLES 创建表。
4. 检查您的结果以确定所有表都已成功创建。
5. 要再次在您的控制中心会话列出所有表,用鼠标右键单击对象树中的表,在弹出的菜单中选择“刷新”。向下滚动内容屏面直到您看到了您创建的新表。一旦您发现了它们,向右滚动以确认所有的内容都是正确的。
6. 您可以通过用您的鼠标右键选择在内容显示窗口上的表名,然后在弹出菜单中选择“修改”来看到关于每个表的详细信息。试一试catalog表。
7. 在SYSCAT.COLUMNS 视图同样可以发现关于表中每个列的信息。使用命令中心,输入一条交互式命令,从SYSCAT.COLUMNS 选择SLAB1 的TABSCHEMA 的所有表格的TABNAME、COLNAME 和TYPENAME列。命令?
8. 要授予用户slab1 所拥有的表的SELECT 特权为public,执行GRANTS 命令文件,该文件在cf23 目录。在命令中心中照这样做。当命令文件执行完成,检查您的结果以确认您的授予成功。
第2 节- 创建索引、视图和别名
在本节中您将创建几个表所需要的索引、视图和别名。
1. 现在您的表已经创建好了,您可以开始创建索引。使用控制中心在situation表中的specialty列上建索引sort。
2. 在控制中心中再创建一个索引。在catalog s表中的specialty列上建唯一索引specialty。
3. 列出通过控制中心的所有索引。您的两个新建索引是否显示出来了?注意就在您刚建的两条索引前,有列出以SQL... 开头的索引。您有创建过这条索引吗?如果没有,它是怎么被创建的?
4. 关于索引的信息也可以在SYSCAT.INDEXES 视图中发现。使用命令中心,输入一条交互式命令,从SYSCAT.INDEXES 中选择SLAB1 的TABSCHEMA 的所有表格的列TABNAME、UNIQUERULE 和INDNAME。
如果UNIQUERULE = "U",只允许唯一的值。
如果UNIQUERULE = "D",允许相同的值。
如果UNIQUERULE = "P",则它是一个主关键字。
5. 从控制中心创建一个叫clinic的视图,SQL语句为
select disease, position, d_name from SLAB1.catalog, SLAB1.doctors whereSLAB1.doctors.d_id= SLAB1.catalog.d_id ;
6. 通过执行脚本文件在命令中心中创建另一个视图inventory,该文件CRVIEM在
cf23目录中。
7. 通过控制中心列出所有视图。您的两个新建视图是否显示出来了?
8. 关于视图的信息可以在SYSCAT.VIEWS 和SYSCAT.TABLES 目录视图中找到。命令中心的以下命令可以显示当前用户的所有表和视图:
list tables for user
观察TYPE 字段。TYPE 为V 表示这是一个视图。您的视图被列出了吗?从SYSCAT.TABLES 视图中选择SLAB1 的TABSCHEMA 的列TABSCHEMA、TABNAME和TYPE。从SYSCAT.VIEWS 中选择SLAB1 的一个DEFINER 的列VIEWSCHEMA、VIEWNAME。
9. 使用控制中心,分别为表doctors,register创建别名physician和emptysituation。
10. 通过控制中心列出所有别名。您的两个新建别名是否显示出来了?
11. 关于别名的信息可以在SYSCAT.TABLES 视图中找到。命令中心的以下命令可以显示当前用户的所有表、视图和别名:
list tables for user
观察TYPE 字段。TYPE 为A 这是一个别名。您的别名被列出了吗?从SLAB1 的TABSCHEMA 的“SYSCAT.TABLES”视图中选择列TABNAME 和TYPE。
第3 节- 添加RI,检查约束和触发器。
在本节中,您可以在表格上添加引用完整性检查约束和触发器。
1. 从控制中心中更改catalog表,并且定义和它相关的其他表的引用完整性。
add a primary key on the specialty column
add a foreign key called "fkd_id" on the d-id column which references
a primary key in the doctors table
the business rule between doctors and catalog should be on delete cascade
2. 现在改变situation表的引用完整性,通过在命令中心中执行脚本命令文件CRRI,它位于cf23目录。
3. 在SYSCAT.REFERENCES 视图可以发现关于引用完整性的信息。在SYSCAT.TABLES 视图可以发现关于表相关性的信息。
使用命令中心,输入一条交互式命令,从SYSCAT.REFERENCES 视图中选择SLAB1的TABSCHEMA 的列CONSTNAME、TABNAME、REFTABSCHEMA、REFTABNAME 和DELETERULE 列。您也可能希望在您的SQL 命令中使用SUBSTR 函数来选择FK_COLNAMES 和
PK_COLNAMES 的前14 字节。CONSTNAME 是在创建时间定义的RI约束的名称。本名称将被用来改变或删除约束。DELETERULE 表示如果一个父行将被删除而相关行也存在的情况下采取的动作。
如果DELETERULE =“N,”表示设为空。
如果DELETERULE =“C,”表示设为级联。
如果DELETERULE =“R,”表示设为限制。
从SLAB1 的TABSCHEMA 的SYSCAT.TABLES 视图中选择列TABNAME、PARENTS 和CHILDREN。PARENTS 是在本相关表中的参考约束的数量。CHILDREN 是在本父表中的参考约束的数量。
4. 使用控制中心为situation表添加检查约束。检查约束有下列特性:
it should be named "cctype"
the business rule it should enforce is to only allow the values
of’Monday’,’Tuesday’,’Wednesday’,’Thursday’,’Firday’ in the type column
5. 在SYSCAT.CHECKS、SYSCAT.COLCHECKS、SYSCAT.TABCONST 和SYSCAT.TABLES 目录视图中可以找到关于检查约束的信息。在命令中心,发出命令到:
从SYSCAT.COLCHECKS 视图中选择CONSTNAME、TABNAME 和COLNAME列。
从SYSCAT.TABCONST 视图中选择CONSTNAME、TABNAME 和TYPE 列。
如果TYPE =“K,”表示它为检查约束。
如果TYPE =“P,”表示它为主关键字。
如果TYPE =“F,”表示它为外键。
6. 使用控制中心创建一个触发器,您的触发器应该具有下列特性:
it should be named "register"
it should fire after an update of the vd_total column on the stock table, if the new value of vd_total=0
new should be referenced as n
the triggered action should insert the values n.specialty n.time_weekday and “stuff”) into the register table
for each row mode db2sql
7. 通过“控制中心”列出所有触发器。您的两个新建触发器是否显示出来了?
8. 关于触发器的信息也可以在SYSCAT.TRIGGERS 和SYSCAT.TRIGDEP 目录视图中发现。在命令中心,发出交互式命令到:
从SYSCAT.TRIGGERS 视图选择TRIGNAME、TABNAME 和TRIGEVENT 列。TRIGEVENT 描述了触发触发器的有关事件,如:I 表示插入、D 表示删除或U 表示刷新。
从SYSCAT.TRIGDEP 视图中选择TRIGNAME、BTYPE、BSCHEMA 和BNAME 列。BNAME 和BSCHEMA 给出了与触发器相关的对象的名称。BTYPE 描述了基对象的类型,如:A 表示别名,F 表示函数实例,T 表示表,还有V 表示视图。
实验三类、对象基础知识 一、实验目的 1、熟练掌握类、对象的的概念以及对事物的抽象。 2、熟练掌握成员、方法的概念以及构造方法的概念。 3、熟练掌握封装性,多态性的概念 4、理解面向对象的程序设计方法。 二、实验内容与要求 1运行下面的程序,理解面向对象的程序设计方法的基本概念。 class value { public int x,y; public value(int a,int b) { x=a; y=b; } } public class Ch31 { public static void main(String args[]) { int total; value num=new value(24,65); total=num.x+num.y; System.out.println("add="+total); } } 2、定义一个类实现银行帐户的概念,包括的变量有"帐号"和"存款余额",包括的方法有"存款"、"取款"、"查询余额"和”显示帐号”,。定义主类,创建帐户类的对象,并完成相应操作。提示:关键代码如下: public int getleftmoney(){ return leftmoney; } public void savemoney(double money){ leftmoney+=money; } public void getmoney(double money){ if(money<=leftmoney) leftmoney-=money; else System.out.println("只能取:"+leftmoney); } …
实验3 类和对象的创建与使用 一、实验目的 1、掌握类的定义和对象的创建; 2、掌握构造方法的作用、格式及重载; 3、掌握修饰词对成员存取权限的限制。 4、掌握实例成员、类成员的定义和使用方法。 二、实验内容 1、定义储蓄账户类,并创建对象模拟银行基本操作。 2、两游戏角色决斗。给定二个不同的角色,判定交手的胜负关系。(选做) 3、设计学生类、学校类、录取类,根据学生成绩和学校分数线,判断是否录取。 三、实验步骤 说明:请将第1,3题代码写入实验报告实验步骤处。 1、模拟银行账户功能。 编写程序,模拟银行账户功能。要求如下: 属性:账号、姓名、地址、存款余额、最小余额。 方法:存款、取款、查询。 根据用户操作显示储户相关信息。 如存款操作后,显示储户原有余额、今日存款数额及最终存款余额。 取款时,若取款成功,显示信息提示;若最后余额小于最小余额,拒绝取款,并显示信息提示。具体显示信息可据方便性原则自拟。 public class AccountOperation { public static void main(String [] args) { Account account1=new Account("650101","柳眉","天河学院",800.00); Account account2=new Account("650102","郑杰","天河学院",200.00); account1.transfer(account1,account2,300.0); account1.deposit(300.5); account1.withdraw(200); account1.withdraw(300); account1.query(); System.out.println(account1.toString()); //System.out.println(https://www.wendangku.net/doc/bf7474498.html,); error!! } } class Account { private String account; private String name; private String address; private double balance;
实验04 类与对象(6学时) (第4章类与对象) 一、实验目的 二、实验任务 4_1 声明一个CPU类。 包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中,rank为枚举类型CPU_Rank,声明为enum CPU_Rank{ P1=1, P2, P3, P4, P5, P6, P7 }; frequency为单位是MHz的整型数,voltage为浮点型的电压值。观察构造函数和析构函数的调用顺序。 4_2 声明一个简单的Computer类。 有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等,有两个公有成员函数run和stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,声明并实现这个类。 4_3 声明一个表示时间的结构体。 可以精确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来。
4_4(习题4-10)设计一个用于人事管理的People(人员)类。 考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号),sex(性别)、birthday(出生日期)、id(身份证号)等。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现人员信息的录入和显示。要求包括:构造函数和析构函数、内联成员函数、组合。 三、实验步骤 1.(验证)声明一个CPU类,观察构造函数和析构函数的调用顺序。 首先声明枚举类型CPU_Rank,例如enum CPU_Rank{ P1=1, P2, P3, P4, P5, P6, P7 },再声明CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,声明成员函数run和stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示顺序。在主程序中声明一个CPU的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。程序名:。(程序见步骤2) ★程序的运行结果: 2.(示例)调试程序文件。 使用调试功能观察程序的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。参考程序如下: 操作)调试操作步骤如下: (1)单击“调试 | 逐语句”命令,系统进行单步执行状态,程序开始运行,一个DOS 窗口出现,此时Visual Studio中光标停在main()函数的入口处。
实验报告_实验3 类的定义、对象的建立与使用(学 生学号_姓名) 实验目的: 1、理解C++中class与struct的区别; 2、掌握类的定义以及成员函数的定义方法; 3、掌握对象的定义和对象成员的访问方式; 4、熟悉this指针的基本用法。 实验内容 二、((基础题)请按照下列要求定义一个Clock时钟类,并创建对象,再调用相应方法: 程序代码: //日期类的应用 #include
int second; }; // 类定义体的结束 //类实现部分 void Clock::setTime(int h, int m, int s) { hour = h; minute = m; second = s; } void Clock::showTime() { cout << "设置时间为" << hour <<":"<< minute <<":"<< second << endl; } int main() { Clock now; now.setTime(8,30, 0); now.showTime(); return 0; } 三、(基础题)请按要求,编写程序(请将类的定义、成员函数的实现、类的使用分开): rect.h代码: #include