powerbuilder response 窗口c vscrollbarr怎么用

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
PowerBuilder参考手册.doc15页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
文档加载中...广告还剩秒
需要金币:100 &&
PowerBuilder参考手册.doc
你可能关注的文档:
··········
··········
PowerBuilder 是一个可视化图形界面的数据库应用系统开发工具,它支持面向对象技术、客户/服务器机制、分布式组件开发和因特网应用。
计算机应用结构的发展阶段:
1.集中式结构:计算机所有的系统资源都集中在主机上,所有处理也在主机完成。(增加服务器负载)。
2.文件服务器网络结构:应用程序在客户工作客户站上运行,文件服务器只提供资源的集中管理和访问途径。(增加网络负载)
3.客户服务器网络结构:向服务器发送处理请求而不是文件请求;服务器返回返回的是处理结果而不是文件。
4.分布式客户/服务器网络结构
客户端应用程序(客户层)电脑、实施商业规则的组件(中间层)电脑、数据库服务器(服务器层)电脑
组件具有不同的应用程序可以重复使用的组件共享特性。
组件具有配置和设计的灵活性,使计算机性能得以改善
组件开发使得复杂的应用变为易于管理的模块
5.Web网络结构
Web服务器(电脑)- 中间件(电脑)- 数据库服务器(电脑)
中间件负责管理Web服务器和数据库服务器之间的通信,并提供应用程序服务,它能够直接访问数据库、调用外部程序。或利用程序代码访问数据库。因此可以提供与数据库相关的动态HTML页面或执行用户查询,并将结果格式化成HTML页面,然后通过Web服务器返回给用户浏览器。
如何开发数据库应用系统?
信息系统开发主要分为:结构生命周期发、快速原型法和面向对象法。
通常软件系统根据需求分为两类。一类需求是需要比较稳定的而且并能够预先指定的系统,称之为预先指定的系统。如计算机控制系统,卫星图像处理系统、火箭发射控制、数据库管理系统。开发这类系统需要预先进行严格需求分析,指定精确的规格说明
正在加载中,请稍后...当前位置: >>
pb学生成绩管理系统
学生成绩管理系统一、系统分析与设计在任何高等院校,学生的成绩管理都是学校教务管理的重要环节之一。随着学校学生人 数的增加, 学生成绩管理的任务更加繁重, 必须借助现代化的管理工具和手段提高学生成绩 管理效率。学生成绩管理系统广泛适用于高校教务管理部门的学生成绩管理。1、系统功能分析系统功能分析阶段的任务就是确定该系统所要
解决的问题及其具体要求。需要通过与用 户的交流和沟通明确用户对系统的功能要求, 最终列出系统可以实现的功能由用户确认。 本 例中的学生成绩管理系统需要完成的主要功能如下。 ⑴ 班级信息的输入和存储,包括班级编号、班级名称、所属院系、入校时间和学制等。 ⑵ 对已经输入的班级信息的修改、查询。 ⑶ 学生基本信息的输入和存储,包括学号、姓名、性别、出生日期、班级等。 ⑷ 学生基本信息的修改和查询。 ⑸ 每学期初各班所开设课程的输入,包括课程名、学期、学时等。 ⑹ 各班所开设课程信息的修改和查询。 ⑺ 学期末输入每个学生的考试成绩。 ⑻ 学生成绩的修改。 ⑼ 查询某个学生某学期的各科成绩。 ⑽ 查询并打印某班某学期所有学生的各科成绩。 ⑾ 查询并打印某班某学期某科成绩。 ⑿ 系统具有用户和密码的管理。2、系统功能模块设计通过对上述各项功能的分析、分类、综合,按照模块化程序设计的要求,得到如图 1 所 示的功能模块图。二、数据库设计与实现数据库在一个管理信息系统中占有非常重要的地位,数据库结构的好坏将直接影响到应 用系统的实现效果和数据操作效率以及能否保证数据的一致性、完成性和安全性。1 图 1 系统功能模块1、数据库设计根据学生成绩管理系统的功能要求,通过分析系统要涉及的相关实体以及要收集、存 储和操纵的数据信息,得到如图 2 所示的系统 E-R 图。 根据系统 E-R 图得到以下关系模式。 班级(班级编号,班级名称,所属院系,学制,入学时间,人数)。 学生基本信息(学号,姓名,性别,出生日期,家庭住址,班级编号)。 课程(班级编号,学期,课程名称,学时,教师)。 成绩(学号,学期,课程名称,成绩)。 为了系统的使用安全,要建立用户管理,而用户使用权限分为管理员和一般用户两类, 因此需要建立一个存储用户信息的关系。 用户(姓名,密码,用户类型)。2、创建数据库根据关系模式,确定需要建立的数据库和表。 在 PowerBuilder 开发环境中打开数据库画板,使用【ODB ODBC】接口建立 Adaptive Server Anywhere 9.0(ASA 9.0)的数据库 D:\xscj\data\xscj.db, 然后依次建立以下 5 个表和 1 个 视图。2 图 2 系统 E_R 图 1) “class”表 表名:banji 主键:bjbh班级表 2) “student”表 表名:jiben 主键:xh学生表3 3) “subject”表 表名:bjkc 主键:(bjbh,xq,kcmc)课程表 4) “xscj”表 表名:xscj 主键:(xh,xq,kcmc)学生成绩表 5) “users”表 表名:users 主键:xm用户表 各个表之间通过外键形成如图 3 所示的关联关系。 6) 视图 为了访问数据库方便,还建立了 1 个视图“v_1” ,该视图由学生基本信息表和班级 表连接而成,对应的 SQL 语句如下。 CREATE VIEW v_1(xh,xm,xb,csrq,bjbh,bjmc,zymc)AS SELECT student.xh,student.xm,student.xb,student.csrq,student.bjbh,class.bjmc,class.xbmc FROM student,class WHERE(class.bjbh=student.bjbh); 完成数据库和表的创建后,可以在数据库画板中向数据库输入部分数据。其中, “用户” 表中必须输入一条记录(“900001”“123456”“管理员”),作为进入系统默认的管理员, , , 即账号为“900001” ,密码为“123456” ,用户类型“管理员” 。4 图 3、各表的关联关系三、创建应用对象完成数据库的设计和系统功能设计之后, 可以开始各个功能模块的实现。 PowerBuilder 在 中开发应用程序时,就是创建各种对象、为对象设置属性以及编写事件脚本的过程。 ⑴ 创建新的工作空间,工作空间文件路径及名称设为“d:\xscj\workplace.pbw” 。 ⑵ 创建应用对象, 应用对象名设为 “xscj” 应用库文件路径及名称设为 , “d:\xscj\xscj.pbl” , 目标文件路径及名称设为“d:\xscj\xscj.pbt” 。 (3) 为应用对象 xscj 的 Open 事件编写代码如下。 SQLCA.DBMS = &ODBC& SQLCA.AutoCommit = False SQLCA.DBParm = &ConnectString='DSN=UID=PWD=sql'& CONNECT; if SQLCA.sqlcode&&0 then messagebox(&提示&,&数据库连接失败!&) else open(w_main) end if5 四、设计系统管理模块本模块实现用户登录控制、学生能查询自己的个人成绩,教师能录入班级的课程信息, 管理员能实现对用户管理的控制以及对一些基本信息的录入。1、设计登录窗口图 4 窗口 w_load 1) 创建窗口并设置属性 创建登录窗口 w_load,调整其大小,在窗口上放置 1 个图片控件(p_1)、4 个静态文本对象 w_main p_1 st_1 st_2 st_3 st_4 sle_1 sle_2 cb_1 cb_2属性 Title Window Type picture name text text password text text TextColor FaceName text text text text表 16取值 登录 Response! 登录.jpg 账号 密码 TRUE 用户类型 欢迎登录学生管理学系统 Link Hove 华文斜体 && && 登录 退出 控件(st_1、 st_2、 st_3、 st_4)、 个单行编辑器控件(sle_1、 2 sle_2)、 个下拉列表控件 1 (ddlb_1) 、 2 个命令按钮控件(cb_1、cb_2),各个控件的属性如表 1 所示,表中未列出的采用默认值2) 编写脚本 ⑴ 定义全局变量。 string gs_username,gs_password,gs_admin 分别存储登录用户的账号、密码和用户类型。 ⑵ 定义实例变量。 int li_n 存储登录时用户输入密码错误的尝试次数,控制在最多 3 次机会不能是局部变量。 ⑶ 登录窗口 w_login 的 Open 事件脚本如下。 li_n=3 初始化变量 li_n,限制出错次数为 3 次。 ⑷【登录】按钮 cb_1 的 Clicked 事件脚本如下。 string ls_username,ls_password,ls_admin ls_username=trim(sle_1.text) ls_password=trim(sle_2.text) ls_admin=ddlb_1.text if ls_username=&& or ls_password=&& or ls_admin=&& then messagebox(&提示&,&账号,密码,用户类型不能为空&) else SELECT &users&.&name&,&users&.&password&,&users&.&admin& INTO :gs_username,:gs_password,:gs_admin FROM &users& WHERE (&users&.&name& = :ls_username ) AND (&users&.&password& = :ls_password )AND (&users&.&admin&=:ls_admin); if sqlca.sqlcode=0 then open(w_main) close(w_load)7 else li_n=li_n - 1 if li_n&&0 then messagebox(&提示&,&账号或密码错误&) else messagebox(&提示&,&错误超过 3 次,自动退出&) halt end if end if ⑸【退出】按钮 cb_2 的 Clicked 事件脚本如下。 halt//退出程序2、设计密码修改窗口密码修改窗口如图 5 所示。 1) 创建窗口并设置属性 创建密码修改窗口 w_mmxg,调整其大小,在窗口上放置 3 个静态文本控件(st_1、st_2、 st_3)、3 个单行编辑器控件(sle_1、sle_2、sle_3)、2 个命令按钮控件(cb_1、cb_2),各个控件 的位置和大小参照图 5 调整。 其他需要修改的属性见表 2, 表中未列出的属性保留其默认值。图 5 窗口 w_mmxg8 对象 w_mmxg p_1 st_1 st_2 st_3 sle_1 sle_2 sle_3 cb_1 cb_22) 编写脚本属性 Title Window Type picture name text text password text text password text password text password text text表 2取值 用户密码设置 Response! 密码修改.jpg 旧密码 新密码 TRUE 重新输入新密码 && TRUE && TRUE && TRUE 确定 取消(1)【确定】按钮 cb_1 的 Clicked 事件脚本如下。 string ls_password if trim(sle_1.text)&&gs_password then messagebox(&提示&,&旧密码错误&) else if trim(sle_2.text)=(sle_3.text) then ls_password=trim(sle_2.text) UPDATE &users& SET&password& = :ls_password WHERE (&users&.&name& = :gs_username ) AND (&users&.&password& = :gs_password); if sqlca.sqlcode&&0 then messagebox(&提示&,&密码修改不成功&) else close(parent) messagebox(&提示&,&密码修改完成&) end if else messagebox(&提示&,&两次密码不相同&) end if end if (2)【取消】按钮 cb_2 的 Clicked 事件脚本如下。 close(parent)9 3、设计用户管理的数据窗口和窗口1) 设计数据窗口 创建数据窗口“d_yhgl” ,显示风格为“Grid” ,数据源类型为“Quick Select” ,布局如图 6 所示。数据窗口 d_yhgl 生成的 SQL Select 语句为: SELECT&users&.&name&,&users&.&password&,&users&.&admin& FROM&users&图 6 数据窗口 d_yhgl 其中列控件“admin”的编辑风格改为“DropDownListBox” ,码表(CodeTable)下图所示。2) 创建窗口并设置属性 创建用户管理窗口 w_yhgl,调整其大小,在窗口上放置 1 个数据窗口控件(dw_1)、 4 个命令按钮控件(cb_1、cb_2、cb_3、cb_4),各个控件的位置和大小如图 7 所示,其对象 w_mmxg p_1 dw_1 cb_1 cb_2 cb_3 cb_4属性 Title Window Type picture name DataObject VScrollbar HScrollbar text text text Enabled text表310取值 用户密码设置 Response! 用户管理.jpg d_yhgl TRUE TRUE 添加 删除 保存 FALSE 退出 他需要修改的属性见表 3,表中未列出的属性保留其默认值。图 7 窗口 w_yhgl 3) 编写脚本 (1) 用户管理窗口 w_yhgl 的 Open 事件脚本如下。 dw_1.settransobject(sqlca) dw_1.retrieve() (2) 用户管理窗口 w_yhgl 的 Closequery 事件脚本如下。 integer rt dw_1.accepttext() if dw_1.modifiedcount() =0 and dw_1.deletedcount()=0 then return 0 else rt=messagebox(&提示&,&添加修改内容未保存,确实退出吗?&,Question!,YesNo!) if rt=1 then return 0 end if end if return 1 (3) 数据窗口控件 dw_1 的 Itemchanged 事件脚本如下。 cb_3.enabled=true//激活“保存”按钮11 (4)【添加】按钮控件 cb_1 的 Clicked 事件脚本如下。 integer row row=dw_1.insertrow(0) dw_1.scrolltorow(row) (5)【删除】按钮控件 cb_2 的 Clicked 事件脚本如下。 dw_1.deleterow(0) cb_3.enabled=true (6)【保存】按钮控件 cb_3 的 Clicked 事件脚本如下。 if dw_1.update(true,false)=1 then dw_1.resetupdate() cb_3.enabled= messagebox(&提示&,&保存数据失败!&) end if (7)【退出】按钮控件 cb_4 的 Clicked 事件脚本如下。 close(parent)五、设计主窗口和菜单主窗口和菜单是系统工作的主界面。1、创建菜单对象菜单结构如图 8 所示。菜单对象名为“m_main” ,菜单栏中的菜单项设置了访问 键(AccessKey),菜单项在工具条上建立了图标按钮。 (1)【系统】菜单下【密码修改】菜单项的 Clicked 事件脚本如下。 open(w_mmxg) (2)【系统】菜单下【用户管理】菜单项的 Clicked 事件脚本如下。 open(w_yhgl) (3)【系统】菜单下【退出系统】菜单项的 Clicked 事件脚本如下。 close(parentwindow) (4)【班级管理】菜单下【录入班级信息】菜单项的 Clicked 事件脚本如下。 opensheet(w_banji_shuru) (5)【班级管理】菜单下【修改班级信息】菜单项的 Clicked 事件脚本如下。 opensheet(w_banji_xiugai)12 图 8 菜单 m_main (6)【班级管理】菜单下【浏览班级信息】菜单项的 Clicked 事件脚本如下。 open(w_banji_liulan) (7)【学生管理】菜单下【录入学生信息】菜单项的 Clicked 事件脚本如下。 open(w_student_shuru) (8)【学生管理】菜单下【修改学生信息】菜单项的 Clicked 事件脚本如下。 open(w_student_xiugai) (9)【学生管理】菜单下【查询学生信息】菜单项的 Clicked 事件脚本如下。 open(w_student_chaxun) (10)【课程管理】菜单下【录入/修改开设课程】菜单项的 Clicked 事件脚本如下。 open(w_subject_shuruxiugai) (11)【课程管理】菜单下【查询开设课程信息】菜单项的 Clicked 事件脚本如下。 open(w_subject_chaxun)13 (12)【成绩管理】菜单下【录入修改成绩】菜单项的 Clicked 事件脚本如下。 open(w_xscj_shuru) (13)【成绩管理】菜单下【查询个人成绩】菜单项的 Clicked 事件脚本如下。 open(w_xscj_grcx) (14)【成绩管理】菜单下【查询班级成绩】菜单项的 Clicked 事件脚本如下。 open(w_xscj_bjcx) (15)【成绩管理】菜单下【查询课程成绩】菜单项的 Clicked 事件脚本如下。 open(w_xscj_kccx) (16)【窗口】菜单下【层叠窗口】菜单项的 Clicked 事件脚本如下。 //w_main.arrangesheets(cascade!) (17)【帮助】菜单下【关于】菜单项的 Clicked 事件脚本如下。 open(w_about)2、设计主窗口创建主窗口 w_main 如图 9 所示,其需要设置的属性如表 4 所示,表中未列出的属性保 留其默认值。图 9 主窗口 w_main14 对象 w_main p_1属性 Title Window Type MenuName MaxBox picture name表4取值 学生成绩管理系统 main! m_main FALSE 主界面.jpg窗口对象 w_main 的 Open 事件脚本如下。 if gs_admin=&学生& then m_main.m_系统.m_用户管理.enabled=false m_main.m_学生管理.enabled=false m_main.m_班级管理.enabled=false m_main.m_课程管理.m_录入修改开设课程信息.enabled=false m_main.m_成绩管理.m_录入修改成绩.enabled=false m_main.m_成绩管理.m_查询班级成绩.enabled=false m_main.m_成绩管理.m_查询课程成绩.enabled=false else if gs_admin=&教师& then m_main.m_系统.m_用户管理.enabled=false m_main.m_学生管理.enabled=false m_main.m_班级管理.enabled=false end if end if 其功能是对用户进行权限控制。六、设计班级管理模块本模块实现班级信息的输入、修改和查询。1、设计访问班级信息的数据窗口1) 设计输入班级信息的数据窗口 创建数据窗口 d_class_shuru,显示风格为“Freeform” ,数据源类型为“Quick Select” , 其布局如图 10 所示。 数据窗口 d_class_shuru 生成的 SQL Select 语句为:15 SELECT&class&.&bjbh&,&class&.&bjmc&,&class&.&xbmc&,&class&.&xz&,&class&.&rxsj&,&class&.&rs& FROM &class&图 10 数据窗口 d_class_shuru 2) 设计修改班级信息的数据窗口 创建数据窗口 d_class_xiugai,显示风格为“Grid” ,数据源类型为“Quick Select” , 其布局如图 11 所示。图 11 数据窗口 d_class_xiugai 数据窗口 d_class_xiugai 生成的 SQL Select 语句为: SELECT&class&.&bjbh&,&class&.&bjmc&,&class&.&xbmc&,&class&.&xz&,&class&.&rxsj&,&class&.&rs& FROM &class& ORDER BY&class&.&bjbh&ASC2、设计访问班级信息的窗口首先设计两个通用的输入窗口和修改窗口作为父对象,实现一般输入和修改的功能, 窗口中的数据窗口控件不设定具体的数据窗口对象,在继承的窗口对象中再设定。通过继 承可以简化程序设计,实现代码重用。 1) 设计输入窗口 创建窗口对象 w_shuru,调整其大小,放置 1 个数据窗口控件(dw_1)、8 个命令按钮控16 件(cb_1~cb_8),窗口布局如图 12 所示。窗口及其控件的属性设置见表 5。图 12 窗口 w_shuru对象 w_shuru cb_1 cb_2 cb_3 cb_4 cb_5 cb_6 cb_7 cb_8 dw_1属性 Title Window Type text text text Enabled text text text text text VscrollBar表5取值 response! 添加 删除 保存 FALSE 退出 |&& & & &&| TRUE设置完属性后开始编写脚本代码,其中窗口 w_shuru 的 Open 事件和 Closequery 事件、 命令按钮(【添加】【删除】【保存】和【退出】)的 Clicked 事件同窗口 w_yhgl 的相应事件 、 、 脚本,在此不再重复。其他命令按钮的事件脚本如下。 (1)【|&&】按钮的 Clicked 事件脚本如下。 dw_1.scrolltorow(1) (2)【&】按钮的 Clicked 事件脚本如下。 dw_1.scrollpriorrow() (3)【&】按钮的 Clicked 事件脚本如下。17 dw_1.scrollnextrow() (4)【&&|】按钮的 Clicked 事件脚本如下。 dw_1.scrolltorow(dw_1.rowcount()) 2) 设计修改窗口 创建窗口对象 w_xiugai,调整其大小,放置 1 个数据窗口控件(dw_1)、4 个命令按钮 控件(cb_1~cb_4),窗口布局如图 13 所示。 窗口及其控件的属性设置见表 6,表中未列出的采用默认值。图 13 窗口 w_xiugai对象 w_shuru cb_1 cb_2 cb_3 cb_4属性 Title Window Type text text text Enabled text表6取值 response! 添加 删除 保存 FALSE 退出窗口和控件的事件脚本与以上输入窗口的对应部分相同。 3) 设计输入班级信息窗口 通过继承输入窗口 w_shuru 生成输入班级信息窗口 w_class_shuru,将数据控件 dw_1 的 DataObject 属性设置为 d_class_shuru,将窗口的 Title 属性改为“录入班级信息” ,此窗口设 计便完成了。 4) 设计修改班级信息窗口 通过继承修改窗口 w_xiugai 生成修改班级信息窗口 w_class_xiugai,将数据控件 dw_118 的 DataObject 属性设置为 d_class_xiugai,将窗口的 Title 属性改为“修改班级信息” ,此窗 口设计便完成了。 5) 设计浏览班级信息窗口 创建窗口对象 w_class_liulan,调整其大小,放置 1 个数据窗口控件 dw_1,调整窗口布 局如图 14 所示。设置窗口的属性为 Response!,“text”属性为“浏览班级信息”图 14 窗口 w_class_liulan 窗口的 Open 事件脚本如下。 dw_1.settransobject(sqlca) dw_1.retrieve()七、设计学生基本信息管理模块本模块实现学生基本信息的输入、修改和查询。1、设计访问学生基本信息的数据窗口1) 设计输入学生基本信息的数据窗口 创建数据窗口 d_student_shuru,显示风格为“Freeform” ,数据源类型为“Quick Select” , 其布局如图 15 所示。 其中,列控件“xb”的编辑风格改为“RadioButtons” ,码表如图 15 中所示;列控件“bjbh” 的编辑风格改为“DropDownDW” ,其 DataWindow 属性设置为“d_banji_xiugai” ,Display Column 属性和 Data Column 属性都设置为 “bjbh” Width of DropDown(%)属性设置为 , “300” , Lines in DropDown 属性设置为 “6” VScrollBar 属性设置为 , “True” 数据窗口 d_jiben_shuru 。19 生成的 SQL Select 语句为: SELECT &student&.&xh&,&student&.&xm&,&student&.&xb&,&student&.&csrq&,&student&.&jtzz&,&student&.&bjbh& FROM&student&图 15 数据窗口 d_student_shuru 2) 设计修改学生基本信息的数据窗口 创建数据窗口 d_student_xiugai,显示风格为“Grid” ,数据源类型为“Quick Select” , 其布局如图 16 所示。 其中,列控件“xb”的编辑风格改为“DropDownListBox” ,列表项为“男”“女” , ; 列控件“bjbh”的编辑风格改为“DropDownDW” ,其 DataWindow 属性设置为 “d_banji_xiugai” ,Display Column 属性和 Data Column 属性都设置为“bjbh” ,Width o DropDown(%)属性设置为“300” ,Lines in DropDown 属性设置为“6” ,VScrollBar 属性 设置为“True” 。 数据窗口 d_student_xiugai 生成的 SQL Select 语句为: SELECT &student&.&xh&,&student&.&xm&,&student&.&xb&,&student&.&csrq&,&student&.&jtzz&,&student&.&bjbh& FROM&student& ORDER BY&student&.&xh&ASC20 图 16 数据窗口 d_student_xiugai 3) 设计查询学生基本信息的数据窗口 创建数据窗口 d_student_chaxun,显示风格为“Grid” ,数据源类型为“SQL Select” , 其布局如图 17 所示。 其中,定义 3 个 String 型检索参数变量 mxh、mxm、mbjmc,分别表示学号、姓名、班级, 形成带检索参数的数据窗口。 该数据窗口的修改属性为默认值即“不允许修改” 。 数据窗口 d_student_chaxun 生成的 SQL Select 语句为: SELECT &student&.&xh&, &student&.&xm&, &class&.&bjmc&, &student&.&xb&, &student&.&jtzz& FROM &class&, &student& WHERE ( &student&.&bjbh& = &class&.&bjbh& ) and ( ( &student&.&xh& = :mxh ) OR (&student&.&xm&=:mxm)OR(&class&.&bjmc&=:mbjbc)) &student&.&csrq&,图 17 数据窗口 d_student_chaxun2、设计访问学生基本信息的窗口1) 设计输入学生基本信息的窗口 通过继承输入窗口 w_shuru 生成输入学生基本信息窗口 w_student_shuru,如图 18 所示, 将数据控件 dw_1 的 DataObject 属性设置为 d_student_shuru, 将窗口的 Title 属性改为 “录入 学生基本信息” ,此窗口设计便完成了。21 图 18 窗口 w_student_shuru 2) 设计修改学生基本信息的窗口 通过继承修改窗口 w_xiugai 生成修改学生基本信息窗口 w_student_xiugai,如图 19 所 示,将数据控件 dw_1 的 DataObject 属性设置为 d_student_xiugai,将窗口的 Title 属性改为 “修改学生基本信息” ,此窗口设计便完成了。图 19 窗口 w_student_xiugai 3) 设计查询学生基本信息的窗口 要求此窗口中能够根据学生的姓名或学号查询出学生的基本信息,能够根据班级名称查22 询出该班所有学生的基本信息。 查询学生基本信息窗口如图 20 所示。图 20 w_student_chaxun 首先创建一个窗口对象 w_student_chaxun,调整其大小,在窗口中放置 2 个静态文本控 件(st_1,st_2)、1 个下拉图片列表框控件(ddplb_1)、1 个单行编辑器控件(sle_1)、1 个命令按 钮(cb_1)、1 个数据窗口控件(dw_1),调整各个控件的位置和大小。设置窗口及其控件的属 性见表 7。对象 w_student_chaxun dw_1 st_1 st_2 ddplb_1 sle_1 cb_1属性 Title Window Type DataObject VScrollbar HScrollbar text text items text text表7取值 查询学生信息 response! d_student_chaxun TRUE TRUE 选择检索条件 输入检索的内容 学号,姓名,班级名称 && 查询窗口的 Open 事件脚本。 dw_1.settransobject(sqlca) 【查询】按钮的 click 事件脚本如下。 dw_1.settransobject(sqlca) if ddplb_1.text=&& or sle_1.text=&& then23 messagebox(&提示&,&查询列和查询内容不能为空!&) return end if string str str=trim(sle_1.text) choose case ddplb_1.text case &学号& dw_1.retrieve(str,&&,&&) case &姓名& dw_1.retrieve(&&,str,&&) case &班级名称& dw_1.retrieve(&&,&&,str) end choose 代码中根据查询依据的不同,以不同参数方式检索数据。八、设计课程管理模块本模块实现各班开设课程的输入、修改和查询。1、 设计访问课程信息的数据窗口1)、设计输入班级课程信息的数据窗口 创建数据窗口 d_subject_shuru,显示风格为“Grid” ,数据源类型为“Quick Select” , 其布局如图 21 所示。图 21 数据窗口 d_subject_shuru 其中,列控件“bjbh”的编辑风格改为“DropDownDW” ,其 DataWindow 属性设置 为“d_banji_xiugai” ,Display Column 属性和 Data Column 属性都设置为“bjbh” ,Widthof DropDown(%)属性设置为“300” ,Lines in DropDown 属性设置为“6” ,VScrollBar 属性设置24 为“True” 。数据窗口 d_subject_shuru 生成的 SQL Select 语句为: SELECT&subject&.&bjbh&,&subject&.&xq&,&subject&.&kcmc&,&subject&.&xs&,&subject&.&jsxm& FROM&subject& 2) 、设计查询班级课程信息的数据窗口 创建数据窗口 d_subject_chaxun,显示风格为“Grid” ,数据源类型为“SQL Select” , 其布局如图 22 所示。其中,定义 2 个 String 型检索参数变量 mxq、mbjmc,分别表示学期、 班级,形成带检索参数的数据窗口。该数据窗口的修改属性为默认值即“不允许修改” 。 数据窗口 d_subject_chaxun 生成的 SQL Select 语句为: SELECT &subject&.&kcmc&, FROM &class&, &subject& WHERE ( &subject&.&bjbh& = &class&.&bjbh& ) and ( ( &subject&.&xq& = :mxq ) AND (&class&.&bjmc&=:mbjmc)) &subject&.&xs&, &subject&.&jsxm&图 22 数据窗口 d_subject_chaxun 2、 设计访问课程信息的窗口 1) 、设计输入修改班级课程信息的窗口 班级课程的输入和修改都通过此窗口完成,输入修改班级课程信息的窗口的布局如图 23 所示。 首先, 从祖先窗口 w_xiugai 继承生成窗口对象 w_subject_shuruxiugai, 调整其大小。 然后将数据窗口控件 dw_1 的 DataObject 属性设置为 d_subject_shuru,此窗口设计即完成。 2) 、设计查询班级开设课程的窗口 要求此窗口能够根据输入的学期和班级查询出该班此学期开设的课程。 查询班级开设课 程的窗口如图 24 所示。 首先创建一个窗口对象 w_subject_chaxun, 调整其大小,在窗口 中放置 2 个静态文本控件(st_1,st_2)、2 个下拉图片列表框控件(ddplb_1,ddplb_2)、1 个命令25 按钮(cb_1)、1 个数据窗口控件(dw_1),调整各个控件的位置和大小。 设置窗口及其控件的属性见表 8,表中未列出的采用默认值。图 23 窗口 w_subject_shuruxiugai图 24 窗口 w_subject_chaxun26 对象 w_student_chaxun dw_1 st_1 st_2 ddplb_1 ddplb_2 cb_1属性 Title Window Type DataObject VScrollbar HScrollbar text text items items text表8取值 查询班级开课信息 response! d_subject_chaxun TRUE TRUE 选择学期 输入班级 学期 班级名称 查询下面书写各个对象的事件脚本。 (1)窗口 w_subject_chaxun 的 Open 事件脚本如下。 dw_1.settransobject(sqlca)//连接事务对象 sqlca //定义局部变量 int li_xq,li_bjmc,n string ls_xq,ls_bjmc //动态生成学期下拉列表框的列表项 select count(distinct xq)into :li_ declare xqcursor cursor for select xq from for n=1 to li_xq fetch next xqcursor into :ls_ ddplb_1.additem(ls_xq) //动态生成班级下拉列表框的列表项 select count(distinct bjbh) into :li_ declare bjmccursor cursor for27 select class.bjmc from subject, class where subject.bjbh=class.bjbh group by class. for n=1 to li_bjmc fetch next bjmccursor into :ls_ ddplb_2.additem(ls_bjmc) n (2)【查询】按钮的 Clicked 事件脚本如下。 if ddplb_1.text=&& or ddplb_1.text=&& then messagebox(&提示&,&查询内容不能为空!&) else string s1,s2 s1=ddplb_1.text s2=ddplb_2.text dw_1.retrieve(s1,s2) end if九、设计成绩管理模块本模块实现成绩的输入、修改和多种方式的查询与打印。1、 设计访问成绩信息的数据窗口1) 、设计输入成绩的数据窗口图 25 数据窗口 d_xscj_shuru 创建数据窗口 d_xscj_shuru,显示风格为“Grid” ,数据源类型为“SQL Select” ,其28 局如图 25 所示。数据来源于成绩表 xscj 和视图 v-1,其中,学号、学期、课程名称 成绩为成绩表 xscj 的列,姓名是视图 v_1 的列。 选择【Rows】|【Update Properties】命令,打开数据窗口的修改属性对话框,如图 26 所示,设置数据窗口的修改属性,即只有成绩表 xscj 的成绩列(xscj_cj)可以在数据窗口中修 改,关键字为成绩表 xscj 的主关键字(xh,xq,kcmc)。然后,单击工具条上的【Tab Orde 图标 态。 ,将列控件 xscj_cj 的 Tab Order 值设为 10,再单击【Tab Order】图标回到原设计状图 26 数据窗口 d_xscj_shuru 的设置 数据窗口的检索参数为 mxq、mbjmc、mkcmc,分别对应于学期、班级名称和课程 名称。数据窗口 d_xscj_shuru 生成的 SQL Select 语句为: SELECT &xscj&.&xh&,&v_1&.&xm&,&xscj&.&xq&,&xscj&.&kcmc&,&xscj&.&cj& FROM &v_1&, &xscj&WHERE ( &v_1&.&xh& = &xscj&.&xh& ) and ( ( &xscj&.&xq& = :mxq ) AND ( &v_1&.&bjmc& = :mbjmc ) AND ( &xscj&.&kcmc& = :mkcmc ) ) 2) 、设计查询学生个人某学期各科成绩的数据窗口 创建数据窗口 d_xscj_grcx,显示风格为“Grid” ,数据源类型为“SQL Select” ,其 布局如图 27 所示。在【Summary】条中添加一个计算域控件,计算数据窗口中成绩 总和。数据窗口的检索参数为 mxh、mxq,分别对应于学号和学期。29 数据窗口 d_xscj_grcx 生成的 SQL Select 语句为: SELECT &xscj&.&kcmc&, FROM &xscj& WHERE ( &xscj&.&xh& = :mxh ) AND ( &xscj&.&xq& = :mxq ) &xscj&.&cj&图 27 数据窗口 d_xscj_grcx 3) 、设计查询某班级某学期全体学生各科成绩的数据窗口 创建数据窗口 d_xscj_bjcx,显示风格为“Cross Tab” ,数据源类型为“SQL Select” , 其布局如图 28 所示。数据来源于成绩表 xscj 和视图 v_1,其中,学号、课程名称和成绩为 成绩表 xscj 的列,姓名是视图 xsbj 的列。在【Header[1]】条中添加 2 个计算域控件,对应 的表达式分别为 mbjmc 和 mxq,3 个文本控件,其文本分别为“成绩单”“班级: 、 ”和“学 期:。数据窗口的检索参数为 mxq 和 mbjmc,分别对应于学期和班级名称。修改属性取默 ” 认值(不允许修改)。 数据窗口 d_xscj_bjcx 生成的 SQL Select 语句为: SELECT &xscj&.&xh&, &v_1&.&xm&, &xscj&.&kcmc&, &xscj&.&cj& FROM &v_1&, &xscj& WHERE ( &v_1&.&xh& = &xscj&.&xh& ) and ( ( &xscj&.&xq& = :mxq ) AND (&v_1&.&bjmc&=:mbjmc)) 4) 、设计查询某班级某学期全体学生某科成绩的数据窗口 创建数据窗口 d_xscj_kccx,显示风格为“Grid” ,数据源类型“SQL Select” ,其布局如 图 29 所示。数据来源于成绩表 xscj 和视图 v_1,其中,学号和成绩为成绩表 xscj 的列,姓 名是视图 xsbj 的列。在【Header】条中添加 2 个计算域控件对应的表达式分别为 mbjmc 和 mkcmc,3 个文本控件,其文本分别为“成绩单”“班级: 、 ”和“课程:。数据窗口的检索 ” 参数为 mxq、mbjmc 和 mkcmc,分别对应于学期、班级名称和课程名称。修改属性取默30 图 28 数据窗口 d_xscj_bjcx 认值(不允许修改)。 数据窗口 d_bjkc_shuru 生成的 SQL Select 语句为: SELECT &xscj&.&xh&, &v_1&.&xm&, &xscj&.&cj& FROM &v_1&, &xscj& WHERE ( &v_1&.&xh& = &xscj&.&xh& ) and ( ( &xscj&.&xq& = :mxq ) AND ( &v_1&.&bjmc& = :mbjmc ) AND ( &xscj&.&kcmc& = :mkcmc ) )图 29 数据窗口 d_xscj_kccx 2、 设计访问成绩信息的窗口 1) 、设计输入成绩的窗口 输入成绩的窗口如图 30 所示。首先创建窗口对象 w_xscj_shuru,在窗口上放置 131 个分组框控件、3 个静态文本控件、3 个下拉列表框控件、3 个命令按钮控件和 1 个数据窗 口控件。根据图 30 的布局调整窗口和控件的大小、位置及有关属性。其中, 【保存】按钮 的 enabled 属性设为 False;数据窗口控件调整到只显示学号、姓名和成绩 3 列,VScrollBar 属性设为 True,数据窗口对象为 d_xscj_shuru;3 个下拉列表框控件的列表项为空,由代码 动态生成。图 30 窗口 w_xscj_shuru 各个窗口和控件的事件脚本如下。 (1)窗口的 Open 事件脚本如下: dw_1.settransobject(sqlca) //定义局部变量 int li_xq,li_bjmc,li_kcmc,n string ls_xq,ls_bjmc,ls_kcmc //生成学期下拉列表框的列表项 select count(distinct xq)into :li_ declare xqcursor cursor for32 select xq from for n=1 to li_xq fetch next xqcursor into :ls_ ddplb_1.additem(ls_xq) //生成班级下拉列表框的列表项 select count(distinct bjbh) into :li_ declare bjmccursor cursor for select class.bjmc from subject, class where subject.bjbh=class.bjbh group by class. for n=1 to li_bjmc fetch next bjmccursor into :ls_ ddplb_2.additem(ls_bjmc)
(2)窗口的 Closequery 事件脚本如下。 integer rt dw_1.accepttext() if dw_1.modifiedcount()=0 then return 0 else rt=messagebox(&提示&,&添加修改内容未保存,确实退出吗?&,question!,yesno!) if rt=1 then return 0 end if33 end if return 1 (3)课程的下拉列表框的 Getfocus 事件脚本如下。 int li_kcmc,n string ls_kcmc,ls_xq,ls_bjmc ls_xq=ddplb_1.text ls_bjmc=ddplb_2.text if not(ls_xq=&&or ls_bjmc=&&)then //求选定班级和学期的课程门数 select count(distinct subject.kcmc)into :li_kcmc from subject,class where(subject.bjbh=class.bjbh)and(class.bjmc=:ls_bjmc)and(subject.xq=:ls_xq); //生成课程的下拉列表框的列表项 declare kcmccursor cursor for select subject.kcmc from class,subject where(subject.bjbh=class.bjbh)and (class.bjmc=:ls_bjmc)and(subject.xq=:ls_xq) group by subject. ddplb_3.reset() for n=1 to li_kcmc fetch next kcmccursor into :ls_ ddplb_3.additem(ls_kcmc) n end if (4)【确定】按钮的 Clicked 事件脚本如下。 int li_xh,n string ls_kcmc,ls_xq,ls_bjmc,ls_xh ls_xq=ddlb_1.text34 ls_bjmc=ddlb_2.text ls_kcmc=ddlb_3.text if ls_xq=&&or ls_bjmc=&&or ls_kcmc=&&then messagebox(&提示&,&选择项不能空!&) else //用 SQL 语句插入所选班级每个学生的选定课程和学期的成绩记录 //成绩列为空值,由数据窗口输入 int li_xh,n string ls_kcmc,ls_xq,ls_bjmc,ls_xh ls_xq=ddplb_1.text ls_bjmc=ddplb_2.text ls_kcmc=ddplb_3.text if ls_xq=&& or ls_bjmc=&& or ls_kcmc=&& then messagebox(&提示&,&选择项不能空!&) else select count(distinct xh)into :li_xh from v_1 where v_1.bjmc=:ls_ declare xhcursor cursor for select xh from v_1 where v_1.bjmc=:ls_ for n=1 to li_xh fetch next xhcursor into:ls_ insert into &xscj& (&xh&,&xq&,&kcmc&,&cj&) values(:ls_xh,:ls_xq,:ls_kcmc,null);35 dw_1.retrieve(ls_xq,ls_bjmc,ls_kcmc) end if (5)【保存】按钮的 Clicked 事件脚本如下。 if dw_1.update(true,false)=1 then dw_1.resetupdate() cb_2.enabled= messagebox(&提示&,&保存数据失败!&) end if (6)【退出】按钮的 Clicked 事件脚本如下。 close(parent) (7)数据窗口的 Itemchanged 事件脚本如下。 cb_2.enabled=true 2) 、设计查询学生个人成绩的窗口 查询学生个人成绩的窗口如图 31 所示。数据窗口控件连接的数据窗口 对象为 d_xscj_grcx。 (1)【查询】按钮的 Clicked 事件脚本如下。 string l_xh string l_xq l_xh=trim(sle_1.text) l_xq=trim(sle_2.text) if l_xh=&&or l_xq=&& then messagebox(&提示&,&学号,学期不能为空&) else dw_1.retrieve(l_xh,l_xq) end if (2)【打印】按钮的 Clicked 事件脚本如下。 dw_1.print(true)36 (3)【退出】按钮的 Clicked 事件脚本如下。 close(parent)图 31 窗口 w_xscj_grcx 3、 设计查询班级成绩的窗口 查询班级成绩的窗口如图 32 所示。数据窗口控件的 DataObject 属性为 d_xscj_bjcx。 此窗口的 Open 事件脚本与输入成绩窗口的 Open 事件脚本相同, 【打印】按钮和【退出】按 钮的 Clicked 事件脚本略。 【查询】按钮的 Clicked 事件脚本如下。 dw_1.settransobject(sqlca) if ddplb_1.text=&&or ddplb_2.text=&&then messagebox(&提示&,&班级和学期不能为空&) else dw_1.retrieve(ddplb_1.text,ddplb_2.text) cb_2.enabled=true end if37 图 32 窗口 w_xscj_bjcx 4、 设计查询课程成绩的窗口 查询课程成绩的窗口如图 33 所示。图 33 窗口 w_xscj_kccx38 数据窗口控件的 DataObject 属性为 d_xscj_kccx。此窗口的 Open 事件脚本、 “课程”的 下拉列表框的 Getfocus 事件脚本与输入成绩窗口的对应事件脚本相同, 【打印】按钮和【退 出】按钮的 Clicked 事件脚本略。 【查询】按钮的 Clicked 事件脚本如下。 dw_1.settransobject(sqlca) if ddplb_1.text=&&or ddplb_2.text=&&or ddplb_3.text=&& then messagebox(&提示&,&班级 else dw_1.retrieve(ddplb_1.text,ddplb_2.text,ddplb_3.text) cb_2.enabled=true end if 学期和课程不能为空&)十、系统的编译和发布 1、创建工程对象单击工具条上的【New】图标,打开【New】对话框,在对话框中选择【Project】标 签页,再选择【Application Wizard】图标,单击【Ok】按钮,开始工程的向导,最后出现, 如图 34 所示的工程对象。图 34 工程39 2、编译生成可执行程序单击工程画板工具条上的【Deploy】图标,开始编译过程。编译通过后,生成可执行 文件 xscj.exe。3、测试分布对可执行程序做系统的测试,最后便可发布了。十一、小结第一次自己一个人完成了一个简单的管理系统的开发, 其中遇到的困难, 通过上网搜索 资料,同学的帮助的很好的解决了,例如在对学生成绩班级成绩查询时,数据窗口的显示风 格 crasstab 不知道该怎么实现,期间花了很多时间查资料才弄明白应该怎么一步一步的实 现,什么做行,什么做列,统计什么都需要明白。 通过此次对学生成绩管理系统的开发,让我对 PowerBuilder 中各个常用的窗口控件的用 法、属性、数据库的操作有了个大致的了解,让我对使用 PowerBuilder 进行数据库应用程序 的开发过程有了个全面的了解,明白了一个软件系统开发所需要的的步骤,系统分析、功能 设计、数据库设计以及数据库的实现等。40}

我要回帖

更多关于 cvscrollbar 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信