.
低、质量高、功能强的特点。
4.2 Powerbuilder 9应用程序开发的基本步骤
我们要开发应用程序时,首先要对它进行分析。无论哪种、哪方面的应用程序,都要先建立一个应用对象。下面我们介绍以下PowerBuilder 9应用程序开发的基本步骤:
(1)首先要建立应用对象。
(2)创建窗口。在窗口里放置各种控件和编写事件响应的脚本。
(3)创建菜单。窗口里的菜单可包括菜单条,下拉式菜单,级联菜单和弹出式菜单为菜单编写事件响应的脚本。
(4)创建用户对象。如果想要重复使用某个控件的功能,可以把窗口上经常放置的控件定义为用户对象。
(5)创建数据窗口。数据窗口可以检索数据库中的数据,可以建立各种报或统计表,可以修改数据库。
(6)创建函数、结构、事件。为了能够更好地支持脚本,编写自定义的函数,定义结构类型变量,也可以为对象和控件定义自己的事件。
(7)运行与调试。可以在开发环境中随时运行应用程序,发现错误后,可以用调试工具进行调试。
(8)当应用程序开发完毕后,可以把它编译成可执行的文件,让用户比较容易地建立应用系统的运行环境。
4.3 编码规范
为了减少在软件开发过程中的错误,在软件开发过程中应该遵守一定的标准。 给对象命名要有一定的规范,部件名称可以达到40个字符,窗口的命名:W_功能代码_功能描述。数据窗口的命名:DW_功能代码_功能描述。菜单命名:M_功能代码_功能描述。
标识符命名时,应该使标识符有一定的字面含义,有助于程序的调试和脚本的可读性的提高。本系统中使用的命名规范为:变量作用域+变量类型+”_”+具有一定字面含义的名称。例如:li_selectrow反映出的含义:”l”代表是本地变量,是local的缩写,”i”代表是integer类型的变量,selectrow表示该变量是用来记录一个行号的计数器。
4.4 应用程序对象 App_mapbex
功能介绍:PB程序由一个应用程序开始,即每个PB程序在开始运行时,先执行应用程序
对象的Open事件。在Open事件中连接数据库,并打开登陆窗口win11。
代码分析: // Profile xxb_sql
SQLCA.DBMS = \ SQLCA.Database = \ SQLCA.LogPass = <***> SQLCA.ServerName = \ SQLCA.LogId = \
SQLCA.AutoCommit = False SQLCA.DBParm = \ connect using sqlca; open(win11)
可编辑文本
.
4.5具体窗口的实现
(1)登录窗口 win11
功能介绍:本窗口主要是检查操作员输入的用户名及密码是否正确,如果正确,允许登录。
如果错误,显示出错误提示。
操作方法:填写“用户名”与“密码”后,按钮进行验证,点击“退出”退出。 代码分析:
string s1,s2
select b2.yhm,b2.mm into:s1,:s2 from b2
where b2.yhm=:sle_1.text; if sqlca.sqlcode=100 then messagebox(\提示信息\用户不存在,请重新登录!\ sle_1.text=\ sle_2.text=\
elseif s2<>sle_2.text then messagebox(\提示信息\密码不正确,请重新登录!\ sle_2.text=\ else open(win1)
可编辑文本
.
close(win11) end if
(2) 主窗口w_main
功能介绍:本窗口作为菜单及其他子窗口的父窗口。
窗口设置;本窗口为父窗口,它的WindowType为main!, WindowState为maximized!,表示窗口在运行时是最大化的风格。
(3) 菜单dwin1
功能介绍:打开各功能窗口
操作方法:点击菜单项相应的菜单,状态栏可显示帮助信息。 代码分析:每个相应的菜单项的clicked事件都使用opens方法来打开相应的功能窗口,如“学
生添加”的菜单项下的 clicked事件的处理代码为:
open(w_stu)
具体的功能由相应的窗口内功能按钮的clicked()方法实现。
(4)学生添加窗口 w_stu
功能介绍:增加学生基本信息。
操作方法:添加学生基本信息:点击“确定”按钮,添加学生信息。
可编辑文本
.
代码分析:
long ll_id,ll_i date ld_birthday
string ls_name,ls_nation,ls_sex,ls_home,ls_tel,ls_party //数据格式检验
if sle_id.text=\ OR isNull(sle_id.text) then messagebox(\缺少数据\请输入学号\ sle_id.setfocus() return
elseif sle_name.text=\ OR isNull(sle_name.text) then
messagebox(\缺少数据\请输入学生姓名\ sle_name.setfocus() return end if
if sle_birthday.text<>\ AND not isNull(sle_birthday) then if isDate(sle_birthday.text) then
ld_birthday=date(sle_birthday.text) else
messagebox(\输入数据错误\请使用“年-月-日”的日期格式\ sle_birthday.setfocus() return end if end if
ll_id=long(sle_id.text)
可编辑文本
.
//取出党团员选择 if rb_1.checked=true then
ls_party=rb_1.text
elseif rb_2.checked=true then ls_party=rb_2.text else
ls_party=rb_3.text end if
//取出性别选择
if rb_man.checked=true then
ls_sex=rb_man.text
elseif rb_woman.checked=true then ls_sex=rb_woman.text end if
//由民族ddlb,取出民族选择 if ddlb_nation.text=\ ls_nation=\ else
ls_nation=trim(ddlb_nation.text) end if
//检查学号有无重号
SELECT student.stud_id INTO :ll_i FROM student
WHERE student.stud_id=:ll_id; if ll_i<>0 then
messagebox(\错误信息\学号第\号重号!请改正。\ sle_id.setfocus() return end if
ls_name=trim(sle_name.text) ls_home=trim(sle_home.text) ls_tel=trim(sle_tel.text) //向数据库写入数据 INSERT INTO \ (\ \ \ \ \ \ \ \ \ VALUES(:ll_id, :ls_name, :ld_birthday, :ls_sex, :ls_nation, :ls_home,
可编辑文本