软件开发工具与环境(修改)
doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
《信息系统开发工具》实验指导
实验一: 实验一:熟悉 PowerBuilder 9.0 的开发环境 实验目的:掌握 PowerBuilder 9.0 的开发环境的基本操作 实验目的: 实验要求: 实验要求:上机熟悉 pb 的环境和完成一个 简单的例子 实验内容: 实验内容:一个简单的应用程序 实验步骤: 实验步骤: 1) 启动 PowerBuilder 9.0 应用程序 步骤: 开始菜单→程序→Sybase→PowerBuilder 9.0→PowerBuilder 9.0。 启动后如图 1-1 所示:
2) 一个具体的例子 首先在 D 盘创建文件夹,名称为: “应用程序” 。 1) 新建一个工作空间对象 单击“file”菜单,选择“New” ,
1
《信息系统开发工具》实验指导
然后在出现的“New Workspace”对话框中选择保存路径和确定工作空间名称。如下图所 示:
单击保存。 2) 新建一个应用程序对象 单击“file”菜单,选择“New” ,在“New”对话框中选择“Target” 。如下图所示。
2
《信息系统开发工具》实验指导
单击 “OK” 在出现的 , “Specify New Application and Library” 对话框中的 “application name” 中输入应用程序名(如,A_main,注意:应用程序的名称不能与工作区的名称同名) ,在 下面的“Library”采用默认的即可。如
3
《信息系统开发工具》实验指导
单击“Finish” ,结果如下:
3) 新建窗体 单击“file”菜单,选择“New” ,在“New”对话框中选择“PB Object” 。如下图所 示。
单击“OK” ,结果如下:
4
《信息系统开发工具》实验指导
4) 应用程序界面设计 (1)选择控件,方法单击工具栏上的 按钮,如下图所示:
然后选择某一控件,最后在窗体上单击,控件便画在窗体上了。如图所示:
5
《信息系统开发工具》实验指导
在窗体上画出下图所示的控件。
(2)编写代码 双击确定按钮,在确定按钮的 click 事件下编写如下代码:如下图所示:
同理,双击重置按钮,编写如下代码 Sle_1.text=”” Sle_2.text=””
6
《信息系统开发工具》实验指导
Sle_3.text=”” 在退出按钮下编写,如下代码: Close(parent) (3)保存窗体 5)编写应用程序对象的代码 双击系统树中的 ,为应用程序编写代码,如下图所示:最后保存
6)运行 单击“ ”运行,就可以看到你的制作成果。 试验二: 试验二:Power Script 编程语言 实验目的: 实验目的:掌握 PowerBuilder 9.0 的 Power Script 编程语言 实验要求: 实验要求:上机熟悉 Power Script 编程语言并完成一个简单的应用程序 实验内容: 实验内容:一个简单的
应用程序 试验步骤: 试验步骤: 1.建立一个工作空间,命名为“jedxxzh_workspace” ,并保存在“d:\金额大小写转换”目 录下,然后建立一个应用程序对象,命名为“jedxxzh_app” ,保存在“d:\金额大小写转 换”目录下。 2.新建一个窗口,命名为“jedxxzh_win” ,在窗口上添加 3 个静态文本框,2 个单行编辑 框和两个命令按钮、一个组合框。如下图所示:
7
《信息系统开发工具》实验指导
3.编写代码 (1) 为应用程序对象添加代码 在应用程序的 Open 事件中输入如下代码来打开“jedxxzh_ win”窗口。 Open(jedxxzh_ win) (2) 在【转换】按钮的 clicked 事件下编写如下代码: a="叁" Long i,j,k,n String a,aa,cc,cm[10],b[10] Case "4" Cc="" a="肆" Cm[1]="分" Case "5" a="伍" Cm[2]="角" Cm[3]="元" Case "6" a="六" Cm[4]="拾" Cm[5]="佰" Case "7" a="柒" Cm[6]="千" Cm[7]="万" Case "8" Cm[8]="拾" a=" 捌" Cm[9]="佰" Case "9" Cm[10]="仟" a="玖" For i=1 to 10 Case "0" b[i]="*" a="零" Next case else k=round(real(sle_1.text),2)*100 a="*" aa=string(k) end choose k=len(aa) b[k+(-n)+1]=a For n=k to 1 step -1 next a=mid(aa,n,1) cc="" choose case a for i=10 to 1 step -1 case "1" if b[i]="*" then a="壹" continue Case "2" end if cc=cc+b[i]+cm[i] A="贰" Case "3" next sle_2.text=cc
8
《信息系统开发工具》实验指导
(3) 在【退出】按钮的 clicked 事件下编写如下代码: Close(parent) 思考:怎样把大写金额转换为小写金额 试验三: 试验三:使用 SQL 语句 实验目的: 实验目的:掌握在 PowerBuilder 9.0 的开发环境中使用简单的 SQL 语句 实验要求: 实验要求:上机实现各种 SQL 语句 实验内容: 实验内容:创建数据库和编程实现一个简单的登录程序 内容 试验步骤: 试验步骤: 1 创建数据库 鼠标单击工具栏上的 (Database) 按钮, 再单击 ODB ODBC, 单击 Utilities, 双击 Create
ASA Database。如下图所示:
接着在弹出的窗口中输入如下图的信息并命名为 data(注意:在 Use Transaction Log 选项 前去掉“√” 。
9
《信息系统开发工具》实验指导
单击 ok,进入下面的窗口
10
《信息系统开发工具》实验指导
在上图的 table 项,单击右键,弹出属性窗口。选择 New Table,并单击,在 columns 窗口 中输入如数据。
输入完毕后,保存,出现以下对话框,并输入以下内容。
单击 ok,数据库表就创建完毕。 2.为数据库表创建主键 在 object layout 画板中,选中 sp 表,单击右键,弹出属性窗口,如下图所示。
11
《信息系统开发工具》实验指导
单击 Primary Key,进入如下窗口。
在 General 选项卡中,在商品编号前打√,然后关闭保存。出现如下窗口,说明主键创建 成功
:
同理,我们在创建一个数据库表,名称为“tb_user” ,并设置主键。如下图所示
12
《信息系统开发工具》实验指导
4.在 Interactive SQL 中使用 SQL 语句 (1) 启动 Interactive SQL 开始菜单→程序→Sybase→Adaptive Server Anywhere→Interactive SQL,出现如下窗口, 并在 User 中输入 dba;Password 中输入 sql
单击,OK。进入 Interactive SQL,在 sp 数据库表中插入一条记录,如下图所示:
13
《信息系统开发工具》实验指导
(2)数据的添加(insert into 语句) 请同学们自己为 sp 数据表插入如下 5 条记录(注意,输入的内容要与数据表的结构 一致) 商品编号 商品名称 产地 供应商名称 进价 数量 总 金 额 0 0 0 0 0
2007091299 笔 记 m120 2007091383 硬盘 2007091471 优盘 2007100101 手机 2007110101 内存
本 中 国 福 Dell 亚洲公司 建 中 国 广 start 公司 东 中国 兴隆工作室 中国 中国
12000.0 5 340.0 200.0 10 10 20 10
海量手机批发公 2450.0 司 前进电脑公司 250.0
为 tb_user 添加如下记录 用户名 张前 王小小 (3)运用 select 语句查询 供应商名称中含有“公司”的记录 数量在 10 以上的商品 总金额大于 3000 元的商品 (4)用 update 语句修改总金额字段的数据(总金额=数量*进价)
14
密码 1234554321 123001
用户级别 1 0
《信息系统开发工具》实验指导
(5)删除供应商名称为“兴隆工作室”的记录 5.在 pb 中使用 sql 语句 (1)建立一个工作空间,命名为“sql_workspace” ,并保存在“d:\sql”目录下,然后建立 一个应用程序对象,命名为“sql_app” ,保存在“d:\sql”目录下。 (2)新建一个窗口,命名为“w_login” ,其效果如下图所示:
(3)另外,再新建一个窗口,命名为“w_insert_sp” ,如下图所示:
(4)编写代码 ①在窗体“w_login”中,双击窗体空白,在窗体的 open 事件下编写代码: string xm DECLARE zgxm CURSOR FOR SELECT "tb_user"."用户名" FROM "tb_user" ; open zgxm; fetch zgxm into :xm;
15
《信息系统开发工具》实验指导
do while sqlca.sqlcode=0 ddlb_1.insertitem(xm, 1) fetch zgxm into :xm; loop close zgxm; ②在窗体“w_login”中,双击确定按钮,在确定按钮的 click 事件下编写代码: string yhm,psd if ddlb_1.text="" then messagebox("信息提示","请选择一个用户名") return end if if sle_1.text="" then messagebox("信息提示","请输入密码") return end if yhm=trim(ddlb_1.text) select 密码 into:psd from tb_user where 用户名=:yhm; if psd=trim(sle_1.text) then open(w_insert_sp) else messagebox("信息提示","密码不正确") return end if ③在窗体“w_login”中,双击取消按钮,在取消按钮的 click 事件下编写代码: Close(parent) ④请同学们完成窗
体“w_insert_sp”的编程。功能:实现数据的添加。 (5)为应用程序编写代码 ①粘贴数据库连接代码 鼠标单击工具栏上的 (Database)按钮,在当前连接的数据库描述文件上单击鼠标右
键,选择 Properties,如下图所示:
在弹出的对话框中选择“preview”并单击“copy”按钮。然后该代码添加到应用程序的 open 事件中(方法:单击左边的 ,在弹出的 open 事件对话框中按“ctrl+v” )最后
16
《信息系统开发工具》实验指导
输入“connect ;open(main)等语句” ,然后保存。如下图:
思考:在 pb 中怎样实现对数据表的查询 试验四: 试验四:在 PowerBuilder 中操纵数据库 实验目的: 实验目的:在 PowerBuilder 9.0 的开发环境中,掌握数据库的基本操作 实验要求: 实验要求:上机实现数据库的各种操作 实验内容: 实验内容:数据库操作和一个简单的应用程序 实验步骤: 验步骤: 一.创建数据库及数据库表 1.用 PowerBuilder 9.0 自带的 ASA 数据库管理系统创建“data_base”数据库,该数据库 包含以下数据库表: Sp 表:字段名称和类型、宽度如下:
KH 表:字段名称和类型、宽度如下:
DD 表:字段名称和类型、宽度如下:
17
《信息系统开发工具》实验指导
2.为各个表创建主键和外键(外键的创建见教材 p197) ,结果如下图所示:
3.为各个表添加记录(请同学自己添加) 二.一个简单的应用程序 (1)创建一个工作工作空间,命名为:workspace_searh,保存在并保存在“d:\search”目 录下,然后建立一个应用程序对象,命名为“app_searh” ,保存在“d:\search”目录下 (2)创建窗体,命名为:w_searh,窗体上的控件如下所示:
18
《信息系统开发工具》实验指导
(3)为窗体编写代码 鼠标双击“查询”按钮,在“查询”按钮的 click 事件下编写如下代码: string mc int n,n_msg string c_mc,c_bh,c_tel,c_fax,c_yb,c_add mc=trim(sle_1.text) if len(mc)=0 then messagebox("信息提示","系统提示:请输入查询条件") sle_1.setfocus()//sle_1 对象获得焦点 return end if mc="%"+mc+"%" declare s_mc cursor for select 客户编号,客户名称,电话,传真,邮编,地址 from kh where 客户名称 like :mc; open s_mc; n=0 do while true fetch s_mc into :c_bh,:c_mc,:c_tel,:c_fax,:c_yb,:c_add; if sqlca.sqlcode=100 then
19
《信息系统开发工具》实验指导
if n=0 then messagebox("信息提示","系统提示:没有符合条件的记录!!!") else messagebox("信息提示","系统提示:符合条件的记录显示完毕!!!") end if exit end if sle_2.text=c_bh sle_3.text=c_mc sle_4.text=c_tel sle_5.text=c_fax sle_6.text=c_yb sle_7.text=c_add n=n+1 messagebox("信息提示","系统提示:这是第"+string(n
)+"条符合条件的记录!!!") n_msg=messagebox("信息提示","继续显示其他符合条件的记录吗?",question!,yesno!,1) if n_msg=2 then exit end if loop close s_mc; sle_1.text="" sle_2.text="" sle_3.text="" sle_4.text="" sle_5.text="" sle_6.text="" sle_7.text="" sle_1.setfocus()
20
《信息系统开发工具》实验指导
试验五: 试验五:建立应用对象 实验目的: 实验目的:掌握应用对象的设置和编程 实验要求: 实验要求:上机操作应用对象的设置和编程 实验内容: 实验内容:数据库的连接和应用对象的编程 实验步骤: 实验步骤: 一.连接已有数据库 1.创建数据源(连接实验 4 所做的数据库) 启动 pb 应用程序,鼠标单击工具栏上的 (Database)按钮,再单击 ODB ODBC,
单击 Utilities,双击 “ODBC Administrator”选项,在出现的对话框中点击“添加”按钮,选 择“Adeptive Server Anywhere 8.0”,点击“完成”按钮,出现输入数据源参数对话框。在 “ODBC”标签中,输入数据源名称 Data source name,一般采用所创建的数据库名称。在 Login 标签中, User ID:之后输入“dba”,在 Password:之后输入“sql”。如图 5-1 所示: 在 Database 标签中, Database file 之后输入数据库文件所在的位置及文件名。 最后单 击确定按钮,完成数据源的创建。如图 5-2 所示:
图 5-1
21
《信息系统开发工具》实验指导
图 5-2 2.创建数据库描述性文件 在数据库画板中,选择“ODB ODBC”,点击右键选择“New Profile”,出现定义数据源 配置文件对话框,在 Profile Name 之后输入名称,一般与数据库名称一致;在 Data Source 之后选择刚刚建好数据源的名称;在 User ID 之后输入“dba”;在 Password 之后输入“sql”, 单击【OK】按钮即可。此时在 ODBC 项下就会出现与数据库同名的配置文件的名称。
22
《信息系统开发工具》实验指导
3.连接数据库 选择数据库配置文件名称双击之,就会连接上数据库。 4.查看连接代码并复制代码到剪切板 方法同实验 4 二.应用程序的 open 事件的代码 新建一个名为“workspace_5”的工作空间,再建立一个名为“app_5”的应用程序, 按实验 4 的方法把上面数据库连接的代码粘贴在代码区并编写如下代码。
思考:请用 sql server 2000 创建数据库,然后在 pb 中连接该数据库。 三.一个简单的应用程序 利用 Idle 事件实现应用程序的自动关闭,如当应用程序在长时间内未进行任何操作,则 系统自动关闭。 实现方法:
23
《信息系统开发工具》实验指导
①在应用对象的 open 事件中添加如下代码: idle(180)//将定时器设为 180 秒 ②在应用对象的 idle 事件中添加代码: messagebox(“警告”,”程序
即将关闭”,stopsign!) beep(1) halt ③在应用对象的 close 事件中添加代码: idle(0) 实验六:数据窗口 实验六: 实验目的: 实验目的:掌握数据窗口的使用 实验要求: 实验要求:上机操作数据库窗口 实验内容:数据窗口的创建和使用 实验内容 实验步骤: 实验步骤: 一、创建工作空间和应用程序 建立一个工作空间,命名为“sworkspace_data” ,并保存在“d:\data”目录下,然后建 ,保存在“d:\data”目录下。 立一个应用程序对象,命名为“app_data” 二、连接实验 4 所创建的数据库(方法同实验 5) 三、创建各种类型的数据库窗口 1.创建 freeform 数据窗口 步骤:鼠标选择或单击【File】→【New】→DataWindow→freeform→OK→Quick Select →Next→选择 kh 表→Add All→OK →Next→Finish, 结果如下图所示。 最后保存数据窗口, : 名称为“d_kh_freefrom”
24
《信息系统开发工具》实验指导
2.创建 Gird 数据窗口 步骤:鼠标选择或单击【File】→【New】→DataWindow→Gird→OK→Quick Select→Next →选择 kh 表→Add All→OK →Next→Finish,结果如下图所示。最后保存数据窗口,名称 为“d_sp_Gird” :
3.创建 Gird-SQL Select 数据窗口 步骤:鼠标选择或单击【File】→【New】→DataWindow→Gird→OK→SQL Select→ Next→选择 kh 表, 表, 表→Open→OK →选取如下图的字段→单击工具栏上的 return sp dd : Next→Finish,结果如下图所示。最后保存数据窗口,名称为“d_sp_kh_dd_Gird”
25
《信息系统开发工具》实验指导
4.请同学们创建其他类型的数据窗口 四、数据窗口的使用 1.简单的数据窗口使用 (1)创建窗体 【File】→【New】→PB Object→Window (2)为窗体添加数据窗口控件 (3)为数据窗口绑定数据窗口 在数据窗口的 DataObject 属性中选择“d_sp_Gird”数据窗口,如下图所示:
(4)添加其他控件(效果如下图所示)
26
《信息系统开发工具》实验指导
(5)编写代码 ①双击窗体空白处,在窗体的 open 事件中编写如下代码 dw_1.settransobject( sqlca) dw_1.retrieve( ) ②双击增加记录按钮,编写如下代码: long i i=dw_1.insertrow(0) dw_1.scrolltorow( i) ③双击删除记录按钮,编写如下代码 dw_1.deleterow(0) ④双击保存按钮,编写如下代码 if dw_1.update( )=1 then messagebox("提示","数据保存成功!") commit; else rollback; messagebox("提示","数据保存失败!") end if ⑤双击打印按钮,编写如下代码 Dw_1.print() ⑥双击查询按钮,编写如下代码 string sql1,mc mc=trim(sle_1.text) sql1="select * from sp where 商品名称 like '%"+mc+"%'"
27
//模糊查询
《信息系统开发工具》实验指导
dw_1.setsqlselect(sql1) dw_1.retrieve( ) ⑦双击全部
按钮,编写如下代码 string sql1 sql1="select * from sp" dw_1.setsqlselect(sql1) dw_1.retrieve( ) (6)为应用程序编写代码(自己完成) (7)运行 2.复杂的数据窗口设计 (1)窗口设计如下,窗体的名称为:w_kh_dd:
其中,数据窗口控件 dw_1 连接的数据窗口是“d_kh_freeform” ,数据窗口控件 dw_2 连接 的数据窗口是“d_dd_gird” 。 (2)代码设计 ①窗体的 open 事件 string khbh,sql dw_1.settransobject( sqlca) dw_2.settransobject( sqlca) dw_2.retrieve( ) khbh=dw_2.getitemstring( 1, "客户编号") sql="select * from dd where 客户编号='"+khbh+"'" dw_1.setsqlselect( sql) dw_1.retrieve( ) ②按钮“第一条”的 click 事件 string khbh,sql dw_2.scrolltorow( 1)
28
《信息系统开发工具》实验指导
khbh=dw_2.getitemstring( 1, "客户编号") sql="select * from dd where 客户编号='"+khbh+"'" dw_1.setsqlselect( sql) dw_1.retrieve( ) ③按钮“下一条”的 click 事件 string khbh,sql dw_2.scrollnextrow( ) khbh=dw_2.getitemstring( dw_2.getrow(), "客户编号") sql="select * from dd where 客户编号='"+khbh+"'" dw_1.setsqlselect( sql) dw_1.retrieve( ) ④其他代码请同学们自己完成 试验七: 试验七:用户界面设计 实验目的: 实验目的:掌握各种控件的使用 实验要求: 实验要求:上机各种控件的使用熟悉 实验内容: 实验内容:熟悉各种控件的使用 实验步骤: 实验步骤: 一.熟悉各种控件的属性设置(参见教材) 二.实例一:数据窗口中通过按
29
《信息系统开发工具》实验指导
(4)为用户对象编写如下代码
(5)保存用户自定义对象 (6)使用自定义的数据窗口控件 ①新建一数据窗口,鼠标选择或单击【File】→【New】→DataWindow→Gird→OK→Quick Select→Next→选择 kh 表→Add All→OK →Next→Finish。最后保存数据窗口,名称为 “d_sp_Gird” : ②新建一个窗口 ③使用自定义数据窗口控件,如下图所示:
30
《信息系统开发工具》实验指导
④为增加按钮编写如下代码 Dw_1.insertrow(0) ⑤为窗体的 open 事件编写如下代码 dw_1.settransobject( sqlca) dw_1.retrieve( ) 最后,运行 三.实例
二 设计条形码扫描程序 (1)建立一个工作空间,命名为“sworkspace_txm” ,并保存在“d:\txm”目录下,然后建立 ,保存在“d:\txm”目录下。 一个应用程序对象,命名为“app_txm” (2)用 sql server 2000 创建数据库和数据库表,数据库的名称为:txm,该数据库包含一个 数据库表,表名为 tmb,其结构如下图所示:
(3)在 pb 连接该数据库(方法见实验 3) (4)创建窗体 新建一个窗口,命名为“w_txm” ,在窗体上添加一个条形码控件,1 个列表框,一个 单行编辑框,两个命令按钮。 添家条形码控件的方法是: 选择主菜单 insert →control→OLE 选项, 弹出[insert Object] 窗口,如下图所示:单击“Register New” ,弹出“browse”对话框,寻找 MSBCODE9.OCX 文件,该文件在 Office 目录下,也可以通过文件搜索来查找。找到 MSBCODE9.OCX 文件 后,单击 OK,条形码控件便添加到 control Type 列表框中。
31
《信息系统开发工具》实验指导
在 Control Type 列表框中选择刚刚加入的条形码控件[Microsoft BarCode Control9.0],单 击 ok,鼠标变成“十”字形,然后再窗口的空白处单击,条形码控件便添加到窗体上, 继续添加其他控件,最后,窗体如下所示:
(4)编写代码 ①应用对象的 open 事件的代码,通过粘贴得到,结果如下 SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "ConnectString='DSN=data_8;UID=sa;PWD='" connect; //open(w_txm) ②窗体的 open 事件 string txm_value
32
《信息系统开发工具》实验指导
declare cur cursor for select 商品条形码 from tb_txm; open cur; fetch cur into:txm_value; do while sqlca.sqlcode=0 lb_1.additem(txm_value) txm_value="" fetch cur into:txm_value; loop close cur; sle_1.setfocus() ③lb_1 的 selectionchanged 事件 string is_item is_item=lb_1.selecteditem() sle_1.text=is_item ole_1.object.value=trim(sle_1.text) ④sle_1 的 modified 事件 ole_1.object.value=trim(sle_1.text) sle_1.selecttext(1,len(sle_1.text)) ⑤保存条形码的 clicked 事件 string txm_value,js_value long row_count,xrow_count txm_value=trim(sle_1.text) select count(*) into :row_count from tb_txm; select 商品条形码 into:js_value from tb_txm where 商品条形码=:txm_value; if js_value="" then if txm_value<>"" then insert into tb_txm(商品条形码) values(:txm_value); select count(*) into :xrow_count from tb_txm; if xrow_count>row_count then messagebox("信息提示","数据保存成功") else messagebox("信息提示","数据保存失败") end if end if else messagebox("信息提示","库中已有该条形码") end if ⑥打印条形码的 clicked 事件 Long job Job=printopen() Ole_1.border=false Ole_1.print(job,500,10000) Printclose(job) Ole_1.border=true
33
《信息系统开发工具》实验指导
运行效果:
试验八: 试验八:菜单设计 实验目
的:掌握菜单的设计和编程 实验目的 实验要求: 实验要求:上机实现菜单的设计和编程 实验内容: 实验内容:创建菜单和编程 实验步骤: 实验步骤: 一.创建菜单 (1)连接实验 4 所创建的数据库(方法见实验 5) (2)创建工作空间和应用程序 建立一个工作空间,命名为“sworkspace_menu” ,并保存在“d:\menu”目录下,然后 ,保存在“d:\menu”目录下。 建立一个应用程序对象,命名为“app_menu” (3)为应用程序编写代码(方法见实验 5) (4)创建菜单(方法见教材 p165-172) 创建如下菜单:
34
《信息系统开发工具》实验指导
二.创建 MDI 窗口 (1)新建窗体 【File】→【New】→PB Object→Window (2)设置窗体属性,如下图所示:
三.创建窗体 1.创建登录窗口 在实验 4 创建的“data_base”数据库中添加如实验 3 的 tb_user 表,并设计登录窗体,
35
《信息系统开发工具》实验指导
窗体名称为 w_login 2.创建商品信息维护窗体(名称为 w_sp)如下图所示,代码见实验 5:
3.创建如下查询窗口(命名为 w_dd_search)
4.其他窗口请同学们自己创建 五.为菜单编写代码 双击菜单项的“订单查询” ,并编写如下代码: opensheet(w_dd_search,w_main,2,original!) 双击菜单项的“客商品信息维护” ,并编写如下代码: opensheet(w_sp,w_main,2,original!) 六.编写应用程序的代码
36
《信息系统开发工具》实验指导
思路:系统先运行登录窗口,登录窗口中密码与用户名一直,系统打开 MDI 窗口。最 后运行效果如下:
试验九:一个具体的实例 试验九: 简单的财务收支管理系统 一.系统功能 本系统用于单位或个人财务收支管理,主要功能包括:收支类型定义,基本收支数据录入 或修改,按年度和收支类型制作报表,统计图。 二.基本步骤 1.创建数据库 用 sql server 创建数据库,数据库名称为: “xxcw”,该数据库包含如下数据库表: (1)收支信息表,表名为:jtsz;表的结构如下所示:
样本数据
37
《信息系统开发工具》实验指导
(2)收支类型表,表名为:dic_szlx;表的结构如下所示:
样本数据:
(3)用户信息表,表名为:t_user 表;的结构如下所示:
样本数据:
三.创建工作空间和应用对象 (1)创建工作空间应用对象 建立一个工作空间,命名为“workspace_jxc” ,并保存在“d:\jxc”目录下,然后建立 一个应用程序对象,命名为“app_jxc” ,保存在“d:\jxc”目录下 四.创建菜单 创建如下菜单,菜单名为:m_main
38
《信息系统开发工具》实验指导
五.创建 mdi 窗口 建立一个窗体,名称为:w_mai
n,设置该窗口的类型为:mdihelp!,标题为: “小型 财务收支管理系统” ,MenuName 设置为:m_main 六.为应用程序编写代码 (1)用记事本,编写如下代码,并保存为“connect.ini”,保存在 d:\jxc 目录下 [Database] DBMS=MSSQL SQL Server 2000 Database=xxcw UserId=sa DatabasePassword= LogId=sa LogPassword= ServerName=XXJ_LS SQLCA.DBParm = Lock= Prompt=0 (2)在应用对象的 open 事件中编写如下代码: string ls_inifile ="connect.ini" //进行数据库连接sqlca.DBMS = ProfileString ("connect.INI", "database", "dbms", "") sqlca.database = ProfileString ("connect.INI", "database", "database", "") sqlca.logid = ProfileString ("connect.INI","database", "logid", "") sqlca.logpass = ProfileString ("connect.INI", "database", "LogPassWord","") sqlca.servername=ProfileString("connect.INI","database", "servername", "") sqlca.dbparm = ProfileString ("connect.INI", "database", "dbparm", "") sqlca.autocommit=true; connect using sqlca; If sqlca.sqlcode<>0 then Messagebox("错误","不能连接到数据库!请检查数据库连接或者 ini 配置") else //OPEN(w_login) end if 七.创建登录窗口 w_login,效果如下所示:
39
《信息系统开发工具》实验指导
代码参见前面的实验 八.创建数据窗口 (1)创建数据窗口 d_szlx,效果如下图
该数据窗口的数据风格为:gird,数据源为:quick select。 (2)创建数据窗口 d_jbxx,效果图如下所示: 该数据窗口的数据风格为:gird,数据源为:quick select。 Szlx 的 edit 属性使用了下拉数据窗口 d_szlx,总结区分别添加了收入金额,支出金额的合 计。 颜色控制: 分别选中 srje,zcje,在属性的 Font 卡中,单击 Text Color 下拉列表右边的表达式生成器, 在打开的对话框中输入如下表达式: If(srje=0 rgb(128,128,128),rgb(200,0,200)) If(zcje=0 rgb(128,128,128),rgb(200,0,200)) 选中 szlx,用同样的方法输入如下表达式: If(left(zclx)=”s”, rgb(150,50,0),rgb(150,150,50))
40
《信息系统开发工具》实验指导
九.设计 w_d_in 窗口,用于收支管理
该窗口的代码 ① 窗体的 open 事件
41
《信息系统开发工具》实验指导
string s_lx int i dw_1.settransobject(sqlca) dw_1.retrieve() for i=year(today())-30 to year(today()) ddplb_1.insertitem(string(i),1) next declare s_sz cursor for select dic_szlx.收入类型 from dic_szlx; open s_sz; fetch s_sz into :s_lx; do while sqlca.sqlcode=0 ddplb_2.additem(s_lx) fetch s_sz into :s_lx; loop close s_sz; ② 窗体的 closequery 事件 int ianswer if dw_1.modifiedcount()<=0 then message.returnvalue=0 return end if ianswer=messagebox("窗口将被关闭","数据被修改了,保存吗?",& question!,yesnocancel!,1) if ianswer=3 then message.returnvalue=1 return elseif ianswer=1 then dw_1.update() end if message.returnvalue=0 ③ Dw_1 的 dberror 事件 choose case sqldbcode case -193 mes
sagebox(" 数据操作错误 ","主码有重复") case -195 messagebox(" 数据操作错误 "," 不该空的数据为空") case -198 messagebox(" 数据操作错误 ","要改变或删除的数据在其它库中被使用") case else messagebox(" 数据操作错误 ","错误信息:"+sqlerrtext+"~r~n"+& "代 码:"+string(sqldbcode)) end choose
42
《信息系统开发工具》实验指导
return 1 //返回码“1” 表示跳过系统错误信息提示 ④ 几个命令按钮的 clicked 事件 首行 dw_1.scrolltorow(1) dw_1.setfocus() 上行: dw_1.scrollpriorrow() dw_1.setfocus() 下行: dw_1.scrollnextrow() dw_1.setfocus() 末行: dw_1.scrolltorow(dw_1.rowcount()) dw_1.setfocus() 插入: long li_rowno,col_no string s1,s2,year,month,day,fen,miao,t,bh1,t1 dw_1.scrolltorow(dw_1.rowcount()) li_rowno=dw_1.insertrow(0) dw_1.scrolltorow(li_rowno) // year=string(year(today())) if month(today())<10 then month="0"+string(month(today())) else month=string(month(today())) end if if day(today())<10 then day="0"+string(day(today())) else day=string(day(today())) end if t=string(now()) fen=mid(t,1,2) miao=mid(t,4,2) bh1=year+month+day+fen+miao t1=string(today())+" "+string(now()) dw_1.setitem( dw_1.getrow(), 1, bh1) dw_1.setcolumn(2) dw_1.settext(t1) // for col_no=3 to 4 dw_1.setcolumn(col_no) dw_1.settext("0") next dw_1.setfocus()
43
《信息系统开发工具》实验指导
dw_1.setcolumn(3) sle_2.text=string(dw_1.rowcount()) sle_1.text=string(dw_1.getrow()) 删除: dw_1.deleterow(0) dw_1.setfocus() sle_2.text=string(dw_1.rowcount()) sle_1.text=string(dw_1.getrow()) 存储: if dw_1.update()>0 then commit using sqlca; else rollback using sqlca; end if 退出: close(parent) ⑤ ddplb_1 和 ddplb_2 的 selectionchanged 事件的代码: string jstj=" ",rq1 rq1=trim(ddplb_1.text)+"%" if len(trim(ddplb_1.text))>0 then jstj="pos(rq,'"+ddplb_1.text+"')>0" end if if len(trim(ddplb_2.text))>0 then if len(jstj)>0 then jstj=jstj+" and pos(szlx,'"+ddplb_2.text+"')>0" else jstj="pos(szlx,'"+ddplb_2.text+"')>0" end if end if dw_1.setfilter( jstj) dw_1.filter( ) sle_1.text=string(dw_1.rowcount()) sle_2.text=string(dw_1.getrow()) 十.设计收支类型窗口,名称为:w_szlx,效果如下:
44
《信息系统开发工具》实验指导
代码与上面的相同,请同学们自己补上。 十一、统计报表的设计 (1) 设计报表数据窗口 数据窗口名称为:d_tjb
(2) 设计窗口 窗口名为:w_tib
45
《信息系统开发工具》实验指导
代码:窗体的 open 事件: string s_lx int i dw_1.settransobject(sqlca) dw_1.retrieve() for i=year(today())-30 to year(today()) ddlb_1.insertitem(string(i),1) next ddlb_1 的 selectchanged 事件: string s,var s=trim(ddlb_1.text) var="left(#1,4)='"+s+"'" dw_1.setfilter( var) dw_1.filter( ) 十二、统计图数据窗口和统计图窗口的设计 数据窗口名为:d_tjt,它的 data 属性设置如下图右边所示:
46
《信息系统开发工具》实验指导
窗口名称:w_tjt
代码: Ddlb_1 的 selectionchanged 事件的代码 string var var=ddlb_1.text if var<>"" then var="left(bh,4)='"+ddlb_1.text+"'" dw_1.setfilter( var) dw_1.filter( ) else
47
《信息系统开发工具》实验指导
var="SELECT jtsz.szlx,jtsz.zcje,jtsz.srje,jtsz.bh FROM jtsz" dw_1.setsqlselect( var) dw_1.retrieve( ) end if 收入选项的 clicked 事件 string var Var="gr_1.values='sum(srje for graph)'" Dw_1.modify(var) Dw_1.setredraw(true) 支出选项的 clicked 事件 string var Var="gr_1.values='sum(zcje for graph)'" Dw_1.modify(var) Dw_1.setredraw(true) 窗体的 open 事件 string s_lx int i dw_1.settransobject(sqlca) dw_1.retrieve() for i=year(today())-30 to year(today()) ddlb_1.insertitem(string(i),1) next 十三、为菜单添加代码(自己完成)
48