1、数据库系统原理实验讲义数据库系统原理上机实验讲义数学与计算机科学学院编写:颜清 实验一 创建数据表一、实验目的1、熟悉PowerBuilder运行环境;2、掌握数据表的创建及SQL语言的应用。二、实验内容1、有一个教学管理数据库,包含以下基本表:(表略)用交互式SQL完成:(1) 建立学生表,主码为学号,性别为男或女。Create table 学生(学号# char(8) not null, 姓名 char(8) not null, 性别 char(2), 年龄 smallint, 年级 char(8), 系编号 integer, primary key (学号#), check (性别=男或
2、女),)(2) 建立教师表,主码为教师编号,外码为系编号。Create table 教师(教师编号# char(8) not null, 姓名 char(8) not null, 年龄 smallint, 职称 char(4), 系编号 integer, primary key (教师编号#), foreign key (系编号) references 院系 (系编号#),)(3) 建立选课表,主码为学号和课程编号,外码为学号,课程编号。Create table 选课(学号# char(8), 课程编号# char(4), 成绩 smallint, primary key (学号#, 课程编号
3、#), foreign key (学号#) references 学生(学号#), foreign key (课程编号#) references 课程(课程编号#), check (成绩 is null ) or (成绩 between 0 and 100 ),)(4) 将学生张三从编号为001的系转到编号为002的系。Updata 学生Set 系编号# = 002Where 姓名=“张三”and 系编号#=001(5) 统计学生总人数。Select count (学号#)From 学生(6) 显示计算机系的学生的信息。Select *From 教师,任课,课程Wher 课程名=”数据库原理”
4、 and 课程.课程编号# = 任课.课程编号# and 任课.教师编号# = 教师.教师编号#(7) 查找法律系的系办电话。Select 系办电话From 院系Where 系名= “法律系”(8) 删除2000级的学生记录。Delete from 学生Where 年级= “2000级”(9) 将计算机系教师张明的职称升为教授。Updata 教师Set 职称= “教授”Where 姓名= ”张明” and 教师编号# = ( select 教师编号#From 院系Where 系名= “计算机系”)(10) 统计计算机系教师张明的任课门数。Select count (课程编号#)From 院系,
5、教师,任课Where 院系.系名= “计算机系” and 院系.系编号# = 教师.系编号# and 教师.教师编号# = 任课.教师编号#(11) 统计每个系的教师的人数。Select 系编号#, count (教师编号#)From 教师Group by 系编号#(12) 查找教授数据库原理的教师的姓名。Select 教师.姓名From 教师,任课,课程Where 课程名= “数据库原理” and 课程.课程编号# = 任课.课程编号# and 任课.教师编号# = 教师.教师编号#(13) 删除1020号教师的任课记录。Delete from 任课Where 教师编号# = “1020”(
6、14) 将课程数据库原理的学分设为4.Updata 课程Set 学分 = 4Where 课程名= 数据库原理(15) 学生王明每选一个学分交费100元,统计它的选课总费用。Select sum (学分)* 100From 学生,课程,选课Where 学生.学号# = 选课.学号# and 选课.课程编号 = 课程.课程编号#(16) 统计20岁的学生总人数。Select count (age)From 学生Where 学生.年龄 = 20(17) 选修数据库原理的学生名单secect 学生.姓名from 学生,课程,选课where 课程.课程名 = “ 数据库原理” and 课程.课程编号#
7、= 选课.课程编号# and 选课.学号# = 学生.学号#(18) 删除20030号学生的选课记录delete from 选课where 学号# = “200030”(19) 建立一个存储过程,通过输入学号,显示学生的姓名,选课课程名,成绩,并统计出选课门数。Create procedure report id char(8) asSelect 学生.姓名,课程.课程名,选课.成绩,count (课程.课程编号#)From 学生,课程,选课Where 学生.学号# = id and 选课.学号# = 学生.学号# and 选课.课程编号# = 课程.课程编号#(20) 建立一个存储过程,通过
8、输入教师编号,显示教师的姓名,任课课程名,教师院系。Create procedure report id char(8) as Select 教师.姓名,课程.课程名,院系.系名From 院系,课程,教师,任课Where 教师.教师编号# = id and 任课.教师编号# = 教师.教师编号# and 课程.课程编号# = 任课.课程编号 and 教师.系编号 = 院系.系编号(21) 建立一个存储过程,输入系编号显示学生的学号,姓名。Create procedure report id char (8) asSelect 学号#,姓名From 学生Where 系编号# = id 2、有一数
9、据库,包含以下基本表:(表略)(1) 建立销售明细表,销售编号为主码,外码为商品编号,会员号。Create table 销售明细(销售编号# char(4), 商品编号# char(4), 会员号# char(4), 数量 integer, 时间 time, primary key (销售编号#), foreign key (商品编号#) references 商品(商品编号#), foreign key (会员号#) references 会员(会员号#),)(2) 添加一条商品记录(00697,雕牌肥皂,浙江,2.00,日化)insert into 商品 values(00697,”雕牌肥
10、皂”,”浙江”,2.00,”日化”)(3) 产生00695号产品的销售细帐。Select *From 销售明细Where 商品编号# = 00695(4) 根据商品编号00695查找该商品的销售总量。Select sum (数量)From 销售明细Where 商品编号# = 00695(5) 根据会员号104095删除其会员记录。Delete from 会员Where 会员号# = 104095(6)建立一个黄金会员视图。(消费总金额高于5000的会员为黄金会员)create view 黄金会员as (select *from 会员where 消费总金额 5000 )(7)建立一个触发器,实现
11、当输入一条销售记录时,将消费金额自动累加到会员的消费总金额。Create trigger trinameOn 销售明细For insert as Updata 会员Set 消费总金额 = 消费总金额 + sum (销售明细.数量*商品.单价)Where 销售明细.会员号# = 会员.会员号# and 商品.商品编号# = 销售明细.商品编号#实验二 PowerBuilder编程基础一、实验目的1、熟悉PowerBuilder运行环境;2、掌握PowerBuilder语法及函数的使用。二、实验内容1、对w_data的open事件编程,使w_data一打开dw_1中就显示数据。(1)显示数据Dw_
12、1. settransobjict (splca)Dw_1. retrieve( ) (2)添加int II= dw_1. insertrow (0)Dw_1. scrolltorow (i)Dw_1. setfocus ( ) 删除 dw_1 . deleterow (0) 保存 int jj= dw_1 . updata ( )if I= -1 then messagebox (“information” , “数据无法保存”)end if关闭 close (parent ) (3)对w_data 的closequery事件编程,使dw_1中的数据发生改变而又未保存就退出窗口时给用户一个消
13、息框提示。Integer mIf dw_1.modifiedcount ( ) + deletedcount ( )0 thenM = messagebox (“信息”“数据已改变,是否保存”,question!YesNoCance!)If m=1 then If dw_1.updata ( )= -1 thenMessagebox (“information”,”无法保存数据”) Else Messagebox (“information”,”已保存数据”) End if Return 0Elseif m=2 then Return 0Elseif m=3 then Return 12、dd
14、lb_1中为各系名称,当选择了一个系后tv_1显示该系学生姓名,对ddlb_1的selectionchanged事件编程。Int I String outnameDeclare namecur cursor forSelect distinct departmentFrom 学生Where department = :ddlb_1.textOpen namecur ;If sqlca.sqlcode = -1 then Messagebox ( “sql error “, sqlca ,sqlerrtext )Else Fetch namecur into :outname ;Do where
15、 sqlca .sqlcode = 0 Frtch namecur into :outname ; I=tv_1 .insertitemlast ( ) ,outname,2)L00p while sqlca .sqlcode = 0Tv_1 :deleteitem (i)End if Close namecur ;3、 ddlb_1为下拉列表框,st_1,st_2为静态文本框。该窗口打开时,ddlb_1从数据库中的院系表中读出了所有系名,当选择了某系时st_1,st_2分别显示该系系领导和系办电话。(1) 在w_1的open事件下编程。String outnameDeclare namecu
16、r cursor forSelect distinct departmentFrom 院系Where department = :ddlb_1.textOpen namecur ;If sqlca.sqlcode = -1 then Messagebox ( “sql error “, sqlca ,sqlerrtext )Else Fetch namecur into :outname ;Do where sqlca .sqlcode = 0 Ddlb_1.additem (outname) Fetch namecur into :outname ;L00p End if Close nam
17、ecur ;(2) 在ddlb_1的selectionchanged事件下编程。Select 系领导,系办电话From 院系Where 系名= :ddlb_1.text:st_1.text = 系领导:st_2.text = 系办电话4、w_query上有控件ddlb_1和dw_1,在ddlb_1中选择系名后dw_1中显示该系的学生。(1) 如果通过带参数的数据窗口对象来完成,请问dw_1中的数据窗口对象的数据源为quick select 还是sql select。答:sql select。(2) 为ddlb_1的selectionchanged事件编程。Dw_1.settransobject
18、 (sqlca)Dw_1.retricve (ddlb_1.text)5、当选择了某单选框并输入选择条件,按回车后,dw_1中显示满足条件的记录。请对以下控件编程。(1) rb_1sle_1.enabled= true (2) sle_1dw-1.setfilter (“姓名= ”+ sle_1.text +” ”)dw_1.filter ( )cb_1.visible = true (3)cb_1rb_1.checked = falserb_2.checked = falserb_3.checked = falserb_4.checked = falsesle_1.text = “”sle_
19、2.text = “”sle_3.text = “”sle_4.text = “”sle_1.enable = falsesle_2.enable = falsesle_3.enable = falsesle_4.enable = false6、lv_1为列表视图,报表风格,当w_list打开时lv_list中显示数据库中学生表的所有学生的信息。请为w_1的open事件编程。Integer I, j , outageString outname , outsex , soutageLv_1.addcolumn (“姓名”,left! , 800)Lv_1.addcolumn (“性别”,lef
20、t! , 500)Lv_1.addcolumn (“年龄”,left! , 200)Declare namecur cursor forSelect 姓名,性别,年龄From 学生;Open namecur ;If sqlca.sqlcode = 1 then Messagebox (“sql.error” , sqlca.sqlerrtext )Else I=1 Do Fetch namecur into :outname, :outsex, :outage ; J=I Lv_1.setitem(I, 2, outname ) Lv_1.setitem(I, 2, outsex ) Sout
21、age = string (outage) Lv_1.setitem (I, 3, soutage) I+ Loop while sqlca.sqlcode=0 Lv_1.deleteitem ( j)End ifClose namecur ;实验三 计算器设计一、实验目的1、熟悉PowerBuilder运行环境;2、掌握PowerBuilder数据窗口的创建及使用。二、实验内容 1、 用PowerBuilder实现如下计算器(图1):(图1)(CTRL+C:复制按钮及按钮中的代码;CTRL+T:复制按钮但不复制按钮中相应的代码)(1)声明变量decimal data /保存中间结果char
22、str /保存按下的运算符int flag /flag=1表示按下的数字是前面数字的一部分,flag=0表示按下的数字是一个新的数字的开始(2)十个数字按钮和小数点按钮代码if flag=0 then sle_1.text= flag=1end ifsle_1.text=sle_1.text+this.text(3)+、-、*、/运算按钮代码choose case str case * sle_1.text=string(dec(sle_1.text)*data) case / sle_1.text=string(data/dec(sle_1.text) case + sle_1.text=s
23、tring(dec(sle_1.text)+data) case - sle_1.text=string(data - dec(sle_1.text)end choosedata=dec(sle_1.text)str=this.textflag=0(4)“清除”按钮代码sle_1.text=data=0str=flag=0(5)“=”按钮代码choose case str case * sle_1.text=string(dec(sle_1.text)*data) case / sle_1.text=string(data/dec(sle_1.text) case + sle_1.text=s
24、tring(dec(sle_1.text)+data) case - sle_1.text=string(data - dec(sle_1.text)end chooseflag=0str=(6)“应用程序”open事件代码open(w_calculator)2、求一元二次方程的实根:ax2+bx+c=0(如图2)建六个静态文本框(st_1、st_2、st_3、st_4、st_5),五个单行编辑框(sle_1、sle_2、sle_3、sle_4、sle_5),三个命令按钮( cb_1、cb_2、cb_3)(图2)(1)“求解”按钮代码dec a,b,c,d,x1,x2a=dec(sle_1.t
25、ext)b=dec(sle_2.text)c=dec(sle_3.text)d=b*b - 4*a*cif d = 0 thenx1=(-b + sqrt(d)/(2*a)x2=(-b - sqrt(d)/(2*a)sle_4.text=string(round(x1,6)sle_5.text=string(round(x2,6)else messagebox(提示,方程无实根)end if(2)“清除”按钮代码sle_1.text=sle_2.text=sle_3.text=sle_4.text=sle_5.text=(3)“退出”按钮代码close(w_aa)(4)应用程序open事件代码
26、open(w_aa)实验四 数据窗口设计一、实验目的1、熟悉PowerBuilder运行环境;2、掌握PowerBuilder数据窗口的创建及使用。二、实验内容1、建立数据库有数据表(1)建立学生信息表s:表1snosnamesexagesedept9801李铭男19计算机软件9802刘晓鸣男20计算机应用9806刘成刚男21计算机软件9807王铭男22计算机应用9808宣明尼女18计算机应用9809柳红利女19计算机软件9803李明男22计算机应用9804张鹰女21计算机软件9805刘竟静女22计算机软件创建S表的SQL命令如下:create table S( sno char(4),sna
27、me char(8),sex char(2),age char(2),sdept char(10);insert into S values(9801,李铭,男,19,计算机软件);insert into S values(9802,刘晓鸣,男,20,计算机应用);insert into S values(9806,刘成刚,男,21,计算机软件);insert into S values(9807,王铭,男,22,计算机应用);insert into S values(9808,宣明尼,女,18,计算机应用);insert into S values(9809,柳红利,女,19,计算机软件);
28、insert into S values(9803,李明,男,22,计算机应用);insert into S values(9804,张鹰,女,21,计算机软件);insert into S values(9805,刘竟静,女,22,计算机软件);select * from S;(2)建立学生课程信息表c:表2cnocnamecdepttnameC1PASCAL计算机应用王晓名C2数据结构计算机应用刘红C6WINDOW技术计算机软件吴志刚C3离散数学计算机应用李严劲C4计算机原理计算机软件王晓名C5数据库原理计算机应用吴志刚C9系统结构计算机软件刘红C8编译原理计算机应用蒋莹岳创建C表的SQL
29、命令如下:create table c(cno char(4),cname char(10),cdept char(10),tname char(8);insert into c values(c1,PASCAL,计算机应用,王晓名);insert into c values(c2,数据结构,计算机应用,刘红);insert into c values(c6,WINDOW技术,计算机软件,吴志刚);insert into c values(c3,离散数学,计算机应用,李严劲);insert into c values(c4,计算机原理,计算机软件,王晓名);insert into c values(c5,数据库原理,计算机应用,吴志刚);insert into c values (c9,系统结构,计算
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1