程序的入口点是PowerBuilder9.0的应用程序对象。每个PowerBuilder应用程序都必须有一个、而且只能有一个应用程序对象,在该应用程序对象中写入与数据库连接的程序代码,从而使得应用程序一开始变实现与数据库的连接。
在"DatabaseProfile"对话框完成设置后,单击"Preview"标签页,在该标签页中列出了配置的语句。将连接数据库的代码复制到应用程序对象中,即可完成代码的编写。
第四章关键模块页面和代码设计
4.1应用程序对象设计
PowerBuilder9.0开发的应用程序的入口点是PowerBuilder9.0的应用程序对象,运行是程序从这个入口点启动,所以应用程序对象的设计是应用程序设计的开始。
应用程序对象的事件不多,一共只有6个,分别是Open、Close、Idle、SystemError、ConnectionBegin、ConnectionEnd事件。
本应用程序对象中只用到Open事件,输入如下程序代码:
//Profilevoc
SQLCA.DBMS="ODBC"
SQLCA.AutoCommit=False
SQLCA.DBParm="ConnectString='DSN=voc;UID=dba;PWD=sql'"
connect;
open(w_open)//打开启动窗口;
4.2软件封面设计
现在,一般的软件在启动都会出现软件封面,这样的做法不是没有必要的,因为,软件封面可以使用户更加放心,让他们知道程序还在继续着,并没有死掉。
如果有的程序在开始的时候需要执行连接数据库的请求,那么,软件启动界面就非常有必要了,它可以使用户在软件启动的时候会更耐心一点的等待软件启动完毕。所以,在这个软件里,我设计了一个封面。如下图所示:
图4-1软件启动界面
在软件启动的时候需要对单词库进行分配,整理。所以代码如下:
在open事件里,主要代码如下:
timer(2)
intn,i=0,m=0,a
a=0
DECLAREc5CURSORFOR
SELECT"voc"."id"
FROM"voc"wherecet4=1;
openc5;
dowhiletrue
fetchc5
into:n;
a=a+1;
ifsqlca.sqlcode<>0then
exit
endif
loop
closec5;
DECLAREc1CURSORFOR
SELECT"voc"."id"
FROM"voc"wherecet4=1;
openc1;
dowhilem<>a-1
fetchc1
into:n;
UPDATE"voc"
SET"cet4group"=:m/3+1whereid=:n;
m=m+1
loop
closec1;
m=0
a=0
DECLAREc6CURSORFOR
SELECT"voc"."id"
FROM"voc"wherecet6=1;
openc6;
dowhiletrue
fetchc6
into:n;
a=a+1;
ifsqlca.sqlcode<>0then
exit
endif
loop
closec6;
DECLAREc2CURSORFOR
SELECT"voc"."id"
FROM"voc"wherecet6=1;
openc2;
dowhilem<>a-1
fetchc2
into:n;
UPDATE"voc"
SET"cet6group"=:m/3+1whereid=:n;
m=m+1
loop
closec2;
m=0
a=0
DECLAREc7CURSORFOR
SELECT"voc"."id"
FROM"voc"wheretofel=1;
openc7;
dowhiletrue
fetchc7
into:n;
a=a+1;
ifsqlca.sqlcode<>0then
exit
endif
loop
closec7;
DECLAREc3CURSORFOR
SELECT"voc"."id"
FROM"voc"wheretofel=1;
openc3;
dowhilem<>a-1
fetchc3
into:n;
UPDATE"voc"
SET"tofelgroup"=:m/3+1whereid=:n;
m=m+1
loop
closec3;
m=0
a=0
DECLAREc8CURSORFOR
SELECT"voc"."id"
FROM"voc"wheregre=1;
openc8;
dowhiletrue
fetchc8
into:n;
a=a+1;
ifsqlca.sqlcode<>0then
exit
endif
loop
closec8;
DECLAREc4CURSORFOR
SELECT"voc"."id"
FROM"voc"wheregre=1;
openc4;
dowhilem<>a-1
fetchc4
into:n;
UPDATE"voc"
SET"gregroup"=:m/3+1whereid=:n;
m=m+1
loop
closec4;
Timer(2)//两秒钟后关闭
另外,还要实现timer事件:
close(parent)
4.3软件主界面设计
本应用程序的主要功能都是在主窗口w_main及在其下打开的众多窗口中完成的。采用的是多文档界面。另外还加入了背景图片和背景音乐,使面目焕然一新,让用户使用起来不会觉得太枯燥。如下图所示:
图4-2软件主要界面
在w_main中的设计里面open()事件里的代码:
opensheet(w_layout,w_main,4,Layered!)
booleansnd
snd=sndPlaySoundA("PY.WAV",1)
其中,sndPlaySoundA(),是一个自定义的外部函数,用来播放声音文件的。
还有一点需要说明的是对于菜单的设计。由于采用了多文档。所以每一个按钮都用来打开一个窗口。
⑴查询功能:
1)汉译英:
Clicked事件程序代码:opensheet(w_c_to_e,w_main,4)
2)英译汉:
Clicked事件程序代码:opensheet(w_e_to_c,w_main,4)
(2)轻松背单词功能:
1)新用户注册:
Clicked事件程序代码:opensheet(w_register,w_main,4)
2)用户登陆:
Clicked事件程序代码:opensheet(w_login,w_main,4)
(1)词库管理:
1)添加单词:
Clicked事件程序代码:opensheet(w_addword,w_main,4)
2)修改单词:
Clicked事件程序代码:opensheet(w_alterword,w_main,4)
4.4查询功能模块设计
用户在查询单词的时候总是想用自己手中最少的信息,去查一个完全陌生的单词。那么,电子词典就必须包含一切用户所能掌握单词信息的可能性。有可能这个用户只知道这个单词的前两个字母。那么,他仍旧能找到这个单词并且获得他所想要的东西。
因此,单词查询模块中,最重点的还是尽可能多的给出有用的单词信息来。添加了一个发音功能。使用户更加快速的了解到自己需要的单词信息。
当用户单击查询功能汉译英时界面如下:
图4-3查询单词图
如果用户没有输入字符的时候,按下查询按钮时会报警:"填如字符不能为空"假如用户输入的第一个字母的时候,在单词树中就会显示以该字母为首的所有单词。用户可以通过双击该单词来直接获得在右边窗口的单词信息。(代码见附录程序5)
4.5轻松背单词模块设计
轻松背单词主要是用于提供给用户一个背诵单词的新方法,它可以使用户更方便的去记忆单词其中包括了5个子模块,分别为:
1.用户管理模块:这个模块的意义并不在于限制非法用户的登陆问题。
只是当不同的用户来使用不同的单词测验的时候,会产生不同的历史记录。使用用户管理功能模块以后。会使个人对自己的情况有非常深刻的了解。(程序代码见附录1)登录界面如下图所示:
图4-4轻松背单词登录窗口
2.新用户注册模块:可以注册新的用户,条件是不能用已经存在的用户名来注册,另外,这里加入了用户密码验证体系,假如注册用户两次密码的输入不一致,也不能通过合法性验证,如下图所表示:
图4-5用户注册框
3.用户登陆模块:这里就是用户的验证界面了。假如正确的用户登陆了,进入功能选择窗口。而且历史记录这个数据窗口里就会显示相应的历史记录。假如用户不能正确的登陆的话。则关闭窗口。增加恶意用户猜测密码的难度。
4.单词浏览功能:当用户执行这个功能的时候,会跳出一个向导框出来。会提示用户浏览单词的速度。假如用户选择手动的话。那么用户只要单击下一条就可以了。当用户背完他所选组的所有单词以后,结束这次背诵。返回功能选择界面。
5.单词测试功能:在这个功能模块里,可以对用户所选择的组进行测试,如果用户是刚浏览过的一组单词,那么,在单词测试的词库设置会默认为刚才浏览的一组单词。假如用户正确了或者错误了,那么将会弹出提示。假如用户背诵的单词错误的总数高于总单词数量的10%的时候,那么这组单词就不会通过。无论通过于否,都会存进历史记录里。供用户查看。(代码见附录程序4)
6.历史记录:在这个模块里,用户可以很轻松的看见自己背诵单词的情况。用户可以看见自己没有通过的组号,以及单词背诵的日期。双击未通过的组可以进入
上一篇:
PB理工学院考试成绩分析PB+SQL(论文和程序)
下一篇:
台湾海峡台风浪的数值模拟