资源描述
实验三 窗口与常用控件编程
一、 目的和要求
1. 掌握主窗口(main窗口)的创建和窗口属性的调整方法
2. 加深对窗口类型、各种类型窗口的特点以及应用范围的认识
3. 掌握静态文本控件(StaticText)、单行编辑器控件(SingleLineEdit)、编辑掩码控件(EditMask)、单选控件(RadioButton)、成组框(GroupBox)、命令按钮(CommandButton)的使用方法。
4. 掌握数据库的动态连接方法
二、 实验准备
1. 复习有关窗口、控件的知识
2. 启动PowerBuilder9.0
3. 建立目录(如:D:\PB),按照实验一中描述的方法,建立工作空间(Student
.pbw),目标文件(Student.pbt),应用文件(Student.pbl)。
4. 按照实验二的方法,用ODBC连接数据库(student.pb)
三、 实验内容
1.数据准备
向数据库中插入部门和专业信息
(1) 按照实验2的方法,通过ODBC连接已经建好的数据库Student.db。
(2) 单击工具栏的数据库(database)图标,进入数据库画板。
(3) 选择菜单“View”下的子菜单“Interactive SQL”,进入“ISQL Session”窗口,输入SQL语句:
//插入部门数据
Insert into department values(‘0001’,’计算机系’,’计算机软硬件’);
Insert into department values(‘0002’,’通信工程系’,’通信工程’);
Insert into department values(‘0003’,’信息科学系’,’信号处理’);
Insert into department values(‘0004’,’数学系’,’应用数学’);
Insert into department values(‘0005’,’指挥管理系’,’ ’);
Insert into department values(‘0008’,’地方生系’,’ ’);
Insert into department values(‘0009’,’联办生系’,’’);
//插入专业数据
Insert into major values(‘000101’,’计算机硬件’,’0001’,’’);
Insert into major values(‘000102’,’计算机应用’,’0001’,’’);
Insert into major values(‘000201’,’通信工程’,’0002’,’’);
Insert into major values(‘000202’,’自动化’,’0002’,’’);
Insert into major values(‘000203’,’侦测工程’,’0002’,’’);
Insert into major values(‘000301’,’信号处理’,’0003’,’’);
Insert into major values(‘000401’,’应用数学’,’0004’,’’);
输入SQL语句后,单击图标,执行SQL语句。
2. 创建窗口对象
创建新窗口对象的步骤如下。
(1) 单击工具栏上的New图标,弹出”New”对话框,选择“Pb object”,
如下图。
(2) 选中“Window”图标,单击“OK”,出现窗口画板。
(3) 单击“File”菜单下“Save As”,出现“Save Window”窗口,如下图
(4) 输入窗口名称W_student,单击“OK”保存。
注意:窗口名称最好以W_开头,以示与其他对象的区别。,在上面窗口的注释栏(Comments)可以填写针对该窗口的注释。
(5) 在窗口画板右边的“Properties”中选择“General”,在“Title”属性中输入窗口标题,如“学生信息录入”,在“Windows Type”属性中选择“main!”。
3. 向窗口中填加控件
向窗口中添加下列控件:
(1)静态文本(statictext)
控件名称
文本信息(text)
用途
St_1
学生录入
用于信息录入的提示
St_2
学号
St_3
姓名
St_4
民族
St_5
出生日期
St_6
专业
St_7
入学时间
St_8
籍贯
St_9
地址
(2)单行编辑器(SingleLineEdit)
控件名称
用途
Sle_id
输入学号
Sle_name
输入姓名
Sle_native
输入籍贯
Sle_address
输入地址
(3)编辑掩码控件(editmask)
控件名称
用途
mask属性
maskdatatype
mask
em_birthday
输入出生日期
Datamask!
Yyyy/mm/dd
em_grade
输入入学时间
Datamask!
yyyy
(4)下拉列表框(dropdownlistbox)
控件名称
用途
ddlb_nation
选择民族
Ddlb_major
选择专业
(5)成组框(groupbox)
控件名称
文本信息(text)
用途
Gb_1
性别
性别成组
Gb_2
政治面貌
政治面貌成组
(6)单选按钮(radiobutton)
控件名称
文本信息(text)
用途
对应成组框
rb_1
男
选择性别信息
Gb_1
rb_2
女
Gb_1
Rb_3
党员
选择政治面貌信息
Gb_2
Rb_4
团员
Gb_2
Rb_5
其他
Gb_2
(7)命令按钮(commandbutton)
控件名称
文本信息(text)
用途
Cb_add
新增
增加一条记录
Cb_save
保存
保存信息
添加控件后的窗口如下图:
4. 对象属性设置
(1)选中ddlb_nation控件,单击鼠标右键,选择“properties”,在属性窗口中选中“items”,在item中输入“汉族、回族、壮族、蒙古族、维吾尔族、白族、土家族”,如图
(2)选中ddlb_major控件,item中输入“计算机硬件、计算机应用、通信工程、自动化、侦测工程、信号处理、应用数学”,如下图
(3)选中em_birthday控件,编辑其掩码(mask),如下图:
(4) 选中em_grade控件,编辑其掩码(mask),如下图:
保存窗口。
5. 编写脚本
1)对student应用的Open事件进行编程
在系统树窗口中选择student.pbl,双击student应用,弹出应用画板,选择open事件,写入以(下程序:
//数据库连接
//事务对象进行属性赋值
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Connectstring='DSN=grade'"
//连接
connect using sqlca;
//数据库是否正确连接的判断
if sqlca.sqlcode= -1 then
messagebox("提示","数据库连接错误!")
return
end if
//打开窗口w_student
open(w_student)
(2) 对窗口w_student的Open事件编程
在窗口w_student的编程窗口中选择open事件,输入以下程序:
setnull(sle_id)
setnull(sle_name)
setnull(sle_native)
setnull(sle_address)
rb_1.checked=true
rb_3.checked=true
(3) 对按钮cb_add的clicked事件编程
setnull(sle_id)
setnull(sle_name)
setnull(sle_native)
setnull(sle_address)
em_birthday.text=""
em_grade.text=""
ddlb_major.SelectItem(1)
ddlb_nation.SelectItem (1)
rb_1.checked=true
rb_3.checked=true
sle_id.setfocus()
(4) 对按钮cb_save的clicked事件编程
//对表中不能为空的字段进行判断,给出提示
if sle_id.text="" then
messagebox("提示","学号不能为空!")
sle_id.setfocus()
return
end if
if sle_name.text="" then
messagebox("提示","姓名不能为空!")
sle_name.setfocus()
return
end if
if ddlb_nation.text="" then
messagebox("提示","民族不能为空!")
ddlb_nation.setfocus()
return
end if
if em_birthday.text="0000.00.00" then
messagebox("提示","出生日期不能为空!")
em_birthday.setfocus()
return
end if
if ddlb_major.text="" then
messagebox("提示","专业不能为空!")
ddlb_major.setfocus()
return
end if
if em_grade.text="0000" then
messagebox("提示","入学时间不能为空!")
em_grade.setfocus()
return
end if
//定义变量,用于从各个控件中获取输入值
string ls_id //学号变量
string ls_name //姓名变量
string ls_sex //性别
string ls_nation //民族
string ls_major1 //专业名称
string ls_major2 //专业代码
string ls_native //籍贯
string ls_address //地址
string ls_background //政治背景
string ls_grade //入学时间
date ld_birthday //生日
//变量赋值
ls_id=sle_id.text //获取ID号
ls_name=sle_name.text //取姓名
//取性别
if rb_1.checked=true then
ls_sex='1'
else
ls_sex='2'
end if
//取民族
ls_nation=ddlb_nation.text
//获取专业名称
ls_major1=ddlb_major.text
//通过SQL语句获取专业代码
select major_id into :ls_major2 from major where name=:ls_major1;
ls_native=sle_native.text //取籍贯
ls_address=sle_address.text //取地址
//获取政治面貌
if rb_3.checked=true then
ls_background="党员"
elseif rb_4.checked=true then
ls_background="团员"
else
ls_background="其他"
end if
//获取生日,需要进行数据类型转换
ld_birthday=date(em_birthday.text)
ls_grade=em_grade.text //获取入学时间
//主键判断,避免数据库中主键不唯一,数据库报错
int li_count
select count(*) into :li_count from student where student_id=:ls_id using sqlca;
if li_count>0 then
messagebox("提示","该学号的学生已存在,请更改学号!")
sle_id.setfocus()
return
end if
//应用嵌入式SQL语句向数据库中插入记录
insert into student
values (:ls_id,:ls_name,:ls_sex,:ld_birthday,:ls_grade,:ls_nation,:ls_background,:ls_major2,:ls_native,:ls_address)
using sqlca;
//判断插入是否成功
if sqlca.sqlcode=0 then
commit;
messagebox("提示","保存完毕!")
return
else
rollback;
messagebox("提示",SQLCA.SQLErrText)
return
end if
在以上步骤都完成以后,可以运行程序,输入数据进行测试。
展开阅读全文