一、系统分析与设计 在任何高等院校,学生的成绩管理都是学校教务管理的重要环节之一。随着学校学生人数的增加,学生成绩管理的任务更加繁重,必须借助现代化的管理工具和手段提高学生成绩管理效率。学生成绩管理系统广泛适用于高校教务管理部门的学生成绩管理。 、系统功能分析 系统功能分析阶段的任务就是确定该系统所要解决的问题及其具体要求。需要通过与用户的交流和沟通明确用户对系统的功能要求,最终列出系统可以实现的功能由用户确认。本例中的学生成绩管理系统需要完成的主要功能如下。 ⑴ 班级信息的输入和存储,包括班级编号、班级名称、所属院系、入校时间和学制等。 ⑵ 对已经输入的班级信息的修改、查询。 ⑶ 学生基本信息的输入和存储,包括学号、姓名、性别、出生日期、班级等。 ⑷ 学生基本信息的修改和查询。 ⑸ 每学期初各班所开设课程的输入,包括课程名、学期、学时等。 ⑹ 各班所开设课程信息的修改和查询。 ⑺ 学期末输入每个学生的考试成绩。 ⑻ 学生成绩的修改。 ⑼ 查询某个学生某学期的各科成绩。 ⑽ 查询并打印某班某学期所有学生的各科成绩。 ⑾ 查询并打印某班某学期某科成绩。 ⑿ 系统具有用户和密码的管理。 、系统功能模块设计 通过对上述各项功能的分析、分类、综合,按照模块化程序设计的要求,得到如图1所示的功能模块图。 二、数据库设计与实现 数据库在一个管理信息系统中占有非常重要的地位,数据库结构的好坏将直接影响到应用系统的实现效果和数据操作效率以及能否保证数据的一致性、完成性和安全性。 、数据库设计 根据学生成绩管理系统的功能要求,通过分析系统要涉及的相关实体以及要收集、存储和操纵的数据信息,得到如图2所示的系统E-R图。 根据系统E-R图得到以下关系模式。 班级(班级编号,班级名称,所属院系,学制,入学时间,人数)。 学生基本信息(学号,姓名,性别,出生日期,家庭住址,班级编号)。 课程(班级编号,学期,课程名称,学时,教师)。 成绩(学号,学期,课程名称,成绩)。 为了系统的使用安全,要建立用户管理,而用户使用权限分为管理员和一般用户两类,因此需要建立一个存储用户信息的关系。 用户(姓名,密码,用户类型)。 、创建数据库 根据关系模式,确定需要建立的数据库和表。 在PowerBuilder开发环境中打开数据库画板,使用【ODB ODBC】接口建立Adaptive Server Anywhere 9.0(ASA 9.0)的数据库D:.db,然后依次建立以下5个表和1个视图。 为了访问数据库方便,还建立了1个视图“v_1”,该视图由学生基本信息表和班级 表连接而成,对应的SQL语句如下。 VIEW v_1(xh,xm,xb,csrq,bjbh,bjmc,zymc)AS SELECT .xh,student.xm,student.xb,student.csrq,stude .bjbh,class.bjmc,class.xbmc student,class (class.bjbh=student.bjbh); 完成数据库和表的创建后,可以在数据库画板中向数据库输入部分数据。其中,“用户”表中必须输入一条记录(“900001”,“123456”,“管理员”),作为进入系统默认的管理员,即账号为“900001”,密码为“123456”,用户类型“管理员”。 三、创建应用对象 完成数据库的设计和系统功能设计之后,可以开始各个功能模块的实现。在PowerBuilder中开发应用程序时,就是创建各种对象、为对象设置属性以及编写事件脚本的过程。 ⑴ 创建新的工作空间,工作空间文件路径及名称设为“d:.pbw”。 ⑵ 创建应用对象,应用对象名设为“xscj”,应用库文件路径及名称设为“d:.pbl”,目标文件路径及名称设为“d:.pbt”。 (3) 为应用对象xscj的Open事件编写代码如下。 四、设计系统管理模块 本模块实现用户登录控制、学生能查询自己的个人成绩,教师能录入班级的课程信息,管理员能实现对用户管理的控制以及对一些基本信息的录入。 、设计登录窗口 创建登录窗口w_load,调整其大小,在窗口上放置1个图片控件(p_1)、4个静态文本 ) 编写脚本 ⑴ 定义全局变量。 gs_username,gs_password,gs_admin分别存储登录用户的账号、密码和用户类型。 ⑵ 定义实例变量。 li_n 存储登录时用户输入密码错误的尝试次数,控制在最多3次机会不能是局部变量。 ⑶ 登录窗口w_login的Open事件脚本如下。初始化变量li_n,限制出错次数为3次。 ⑷【登录】按钮cb_1的Clicked事件脚本如下。 、设计密码修改窗口 密码修改窗口如图5所示。 ) 创建窗口并设置属性 创建密码修改窗口w_mmxg,调整其大小,在窗口上放置3个静态文本控件(st_1、st_2、st_3)、3个单行编辑器控件(sle_1、sle_2、sle_3)、2个命令按钮控件(cb_1、cb_2),各个控件的位置和大小参照图5调整。 其他需要修改的属性见表2,表中未列出的属性保留其默认值。 (2)【取消】按钮cb_2的Clicked事件脚本如下。 、设计用户管理的数据窗口和窗口 ) 设计数据窗口 创建数据窗口“d_yhgl”,显示风格为“Grid”,数据源类型为“Quick Select”,布局如图6所示。数据窗口d_yhgl生成的SQL Select语句为: ) 创建窗口并设置属性 创建用户管理窗口w_yhgl,调整其大小,在窗口上放置1个数据窗口控件(dw_1)、 个命令按钮控件(cb_1、cb_2、cb_3、cb_4),各个控件的位置和大小如图7所示,其 (1) 用户管理窗口w_yhgl的Open事件脚本如下。 (2) 用户管理窗口w_yhgl的Closequery事件脚本如下。 (3) 数据窗口控件dw_1的Itemchanged事件脚本如下。 _3.enabled=true//激活“保存”按钮 (4)【添加】按钮控件cb_1的Clicked事件脚本如下。 row row=dw_1.insertrow(0) _1.scrolltorow(row) (5)【删除】按钮控件cb_2的Clicked事件脚本如下。 _1.deleterow(0) _3.enabled=true (6)【保存】按钮控件cb_3的Clicked事件脚本如下。 if dw_1.update(true,false)=1 then _1.resetupdate() _3.enabled=false (7)【退出】按钮控件cb_4的Clicked事件脚本如下。 五、设计主窗口和菜单 主窗口和菜单是系统工作的主界面。 、创建菜单对象 菜单结构如图8所示。菜单对象名为“m_main”,菜单栏中的菜单项设置了访问 键(AccessKey),菜单项在工具条上建立了图标按钮。 (1)【系统】菜单下【密码修改】菜单项的Clicked事件脚本如下。 (w_mmxg) (2)【系统】菜单下【用户管理】菜单项的Clicked事件脚本如下。 (w_yhgl) (3)【系统】菜单下【退出系统】菜单项的Clicked事件脚本如下。 (parentwindow) (4)【班级管理】菜单下【录入班级信息】菜单项的Clicked事件脚本如下。 (w_banji_shuru) (5)【班级管理】菜单下【修改班级信息】菜单项的Clicked事件脚本如下。 (w_banji_xiugai) (6)【班级管理】菜单下【浏览班级信息】菜单项的Clicked事件脚本如下。 (w_banji_liulan) (7)【学生管理】菜单下【录入学生信息】菜单项的Clicked事件脚本如下。 (w_student_shuru) (8)【学生管理】菜单下【修改学生信息】菜单项的Clicked事件脚本如下。 (9)【学生管理】菜单下【查询学生信息】菜单项的Clicked事件脚本如下。 (w_student_chaxun) (10)【课程管理】菜单下【录入/修改开设课程】菜单项的Clicked事件脚本如下。 (w_subject_shuruxiugai) (11)【课程管理】菜单下【查询开设课程信息】菜单项的Clicked事件脚本如下。 (w_subject_chaxun) (12)【成绩管理】菜单下【录入修改成绩】菜单项的Clicked事件脚本如下。 (w_xscj_shuru) (13)【成绩管理】菜单下【查询个人成绩】菜单项的Clicked事件脚本如下。 (w_xscj_grcx) (14)【成绩管理】菜单下【查询班级成绩】菜单项的Clicked事件脚本如下。 (w_xscj_bjcx) (15)【成绩管理】菜单下【查询课程成绩】菜单项的Clicked事件脚本如下。 (w_xscj_kccx) (16)【窗口】菜单下【层叠窗口】菜单项的Clicked事件脚本如下。 //w_main.arrangesheets(cascade!) (17)【帮助】菜单下【关于】菜单项的Clicked事件脚本如下。 (w_about) 、设计主窗口 创建主窗口w_main如图9所示,其需要设置的属性如表4所示,表中未列出的属性保留其默认值。 表4 窗口对象w_main的Open事件脚本如下。 gs_admin=学生 then _main.m_系统.m_用户管理.enabled=false m_main.m_学生管理.enabled=false _main.m_班级管理.enabled=false _main.m_课程管理.m_录入修改开设课程信息.enabled=false _main.m_成绩管理.m_录入修改成绩.enabled=false _main.m_成绩管理.m_查询班级成绩.enabled=false _main.m_成绩管理.m_查询课程成绩.enabled=false gs_admin=教师 then _main.m_系统.m_用户管理.enabled=false m_main.m_学生管理.enabled=false m_main.m_班级管理.enabled=false 其功能是对用户进行权限控制。 六、设计班级管理模块 本模块实现班级信息的输入、修改和查询。 、设计访问班级信息的数据窗口 ) 设计输入班级信息的数据窗口 创建数据窗口d_class_shuru,显示风格为“Freeform”,数据源类型为“Quick Select”, 其布局如图10所示。 创建数据窗口d_class_xiugai,显示风格为“Grid”,数据源类型为“Quick Select”,其布局如图11所示。 、设计访问班级信息的窗口 首先设计两个通用的输入窗口和修改窗口作为父对象,实现一般输入和修改的功能,窗口中的数据窗口控件不设定具体的数据窗口对象,在继承的窗口对象中再设定。通过继承可以简化程序设计,实现代码重用。 创建窗口对象w_shuru,调整其大小,放置1个数据窗口控件(dw_1)、8个命令按钮控件(cb_1~cb_8),窗口布局如图12所示。窗口及其控件的属性设置见表5。 表5 设置完属性后开始编写脚本代码,其中窗口w_shuru的Open事件和Closequery事件、命令按钮(【添加】、【删除】、【保存】和【退出】)的Clicked事件同窗口w_yhgl的相应事件脚本,在此不再重复。其他命令按钮的事件脚本如下。 通过继承输入窗口w_shuru生成输入班级信息窗口w_class_shuru,将数据控件dw_1的DataObject属性设置为d_class_shuru,将窗口的Title属性改为“录入班级信息”,此窗口设计便完成了。 ) 设计修改班级信息窗口 通过继承修改窗口w_xiugai生成修改班级信息窗口w_class_xiugai,将数据控件dw_1的DataObject属性设置为d_class_xiugai,将窗口的Title属性改为“修改班级信息”,此窗口设计便完成了。 ) 设计浏览班级信息窗口 创建窗口对象w_class_liulan,调整其大小,放置1个数据窗口控件dw_1,调整窗口布局如图14所示。设置窗口的属性为Response!,“text”属性为“浏览班级信息” 七、设计学生基本信息管理模块 本模块实现学生基本信息的输入、修改和查询。 、设计访问学生基本信息的数据窗口 ) 设计输入学生基本信息的数据窗口 创建数据窗口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生成的SQL Select语句为: 图15 数据窗口d_student_shuru ) 设计修改学生基本信息的数据窗口 创建数据窗口d_student_xiugai,显示风格为“Grid”,数据源类型为“Quick Select”,其布局如图16所示。 其中,列控件“xb”的编辑风格改为“DropDownListBox”,列表项为“男”,“女”; 列控件“bjbh”的编辑风格改为“DropDownDW”,其DataWindow属性设置为“d_banji_xiugai”,Display Column属性和Data Column属性都设置为“bjbh”,Width o (%)属性设置为“300”,Lines in DropDown属性设置为“6”,VScrollBar属性 设置为“True”。 数据窗口d_student_xiugai生成的SQL Select语句为: 图16 数据窗口d_student_xiugai ) 设计查询学生基本信息的数据窗口 创建数据窗口d_student_chaxun,显示风格为“Grid”,数据源类型为“SQL Select”,其布局如图17所示。 其中,定义3个String型检索参数变量mxh、mxm、mbjmc,分别表示学号、姓名、班级,形成带检索参数的数据窗口。 该数据窗口的修改属性为默认值即“不允许修改”。 数据窗口d_student_chaxun生成的SQL Select语句为: 、设计访问学生基本信息的窗口 ) 设计输入学生基本信息的窗口 通过继承输入窗口w_shuru生成输入学生基本信息窗口w_student_shuru,如图18所示,将数据控件dw_1的DataObject属性设置为d_student_shuru,将窗口的Title属性改为“录入学生基本信息”,此窗口设计便完成了。 ) 设计修改学生基本信息的窗口 通过继承修改窗口w_xiugai生成修改学生基本信息窗口w_student_xiugai,如图19所示,将数据控件dw_1的DataObject属性设置为d_student_xiugai,将窗口的Title属性改为“修改学生基本信息”,此窗口设计便完成了。 ) 设计查询学生基本信息的窗口 要求此窗口中能够根据学生的姓名或学号查询出学生的基本信息,能够根据班级名称查询出该班所有学生的基本信息。 查询学生基本信息窗口如图20所示。 首先创建一个窗口对象w_student_chaxun,调整其大小,在窗口中放置2个静态文本控件(st_1,st_2)、1个下拉图片列表框控件(ddplb_1)、1个单行编辑器控件(sle_1)、1个命令按钮(cb_1)、1个数据窗口控件(dw_1),调整各个控件的位置和大小。设置窗口及其控件的属性见表7。 代码中根据查询依据的不同,以不同参数方式检索数据。 八、设计课程管理模块 本模块实现各班开设课程的输入、修改和查询。 、 设计访问课程信息的数据窗口 )、设计输入班级课程信息的数据窗口 创建数据窗口d_subject_shuru,显示风格为 “Grid”,数据源类型为“Quick Select”, 其布局如图21所示。 图21 数据窗口d_subject_shuru 其中,列控件“bjbh”的编辑风格改为“DropDownDW”,其DataWindow属性设置 ) 、设计查询班级课程信息的数据窗口创建数据窗口d_subject_chaxun,显示风格为“Grid”,数据源类型为“SQL Select”,其布局如图22所示。其中,定义2个String型检索参数变量mxq、mbjmc,分别表示学期、班级,形成带检索参数的数据窗口。该数据窗口的修改属性为默认值即“不允许修改”。 、 设计访问课程信息的窗口 )、设计输入修改班级课程信息的窗口 班级课程的输入和修改都通过此窗口完成,输入修改班级课程信息的窗口的布局如图所示。首先,从祖先窗口w_xiugai继承生成窗口对象w_subject_shuruxiugai,调整其大小。然后将数据窗口控件 _1的DataObject属性设置为 d_subject_shuru,此窗口设计即完成。 )、设计查询班级开设课程的窗口 要求此窗口能够根据输入的学期和班级查询出该班此学期开设的课程。查询班级开设课程的窗口如图24所示。 首先创建一个窗口对象w_subject_chaxun, 调整其大小,在窗口中放置2个静态文本控件(st_1,st_2)、2个下拉图片列表框控件(ddplb_1,ddplb_2)、1个命令按钮(cb_1)、1个数据窗口控件(dw_1),调整各个控件的位置和大小。 设置窗口及其控件的属性见表8,表中未列出的采用默认值。 (1)窗口w_subject_chaxun的Open事件脚本如下。 dw_1.settransobject(sqlca)//连接事务对象sqlca //定义局部变量 li_xq,li_bjmc,n ls_xq,ls_bjmc //动态生成学期下拉列表框的列表项 count(distinct xq)into :li_xq subject; xqcursor cursor for xq from subject group by xq; xqcursor; n=1 to li_xq next xqcursor into :ls_xq; _1.additem(ls_xq) xqcursor; //动态生成班级下拉列表框的列表项 count(distinct bjbh) into :li_bjmc from subject; bjmccursor cursor for class.bjmc subject, class subject.bjbh=class.bjbh group by class.bjmc; open bjmccursor; n=1 to li_bjmc next bjmccursor into :ls_bjmc; _2.additem(ls_bjmc) bjmccursor; (2)【查询】按钮的Clicked事件脚本如下 九、设计成绩管理模块 本模块实现成绩的输入、修改和多种方式的查询与打印。 、 设计访问成绩信息的数据窗口 )、设计输入成绩的数据窗口 图25 数据窗口d_xscj_shuru 创建数据窗口d_xscj_shuru,显示风格为“Grid”,数据源类型为“SQL Select”,其 局如图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语句为: )、设计查询学生个人某学期各科成绩的数据窗口 创建数据窗口d_xscj_grcx,显示风格为“Grid”,数据源类型为“SQL Select”,其 布局如图27所示。在【Summary】条中添加一个计算域控件,计算数据窗口中成绩 总和。数据窗口的检索参数为mxh、mxq,分别对应于学号和学期。 )、设计查询某班级某学期全体学生各科成绩的数据窗口 创建数据窗口d_xscj_bjcx,显示风格为“Cross Tab”,数据源类型为“SQL Select”, 其布局如图28所示。数据来源于成绩表xscj和视图 v_1,其中,学号、课程名称和成绩为成绩表xscj的列,姓名是视图xsbj的列。在【Header[1]】条中添加2个计算域控件,对应的表达式分别为mbjmc和mxq,3个文本控件,其文本分别为“成绩单”、“班级:”和“学期:”。数据窗口的检索参数为mxq和mbjmc,分别对应于学期和班级名称。修改属性取默认值(不允许修改)。 )、设计查询某班级某学期全体学生某科成绩的数据窗口 创建数据窗口d_xscj_kccx,显示风格为“Grid”,数据源类型“SQL Select”,其布局如 图29所示。数据来源于成绩表xscj和视图v_1,其中,学号和成绩为成绩表xscj的列,姓名是视图xsbj的列。在【Header】条中添加2个计算域控件对应的表达式分别为mbjmc和mkcmc,3个文本控件,其文本分别为“成绩单”、“班级:”和“课程:”。数据窗口的检索参数为mxq、mbjmc和mkcmc,分别对应于学期、班级名称和课程名称。修改属性取默认值(不允许修改)。 、 设计访问成绩信息的窗口 )、设计输入成绩的窗口 输入成绩的窗口如图30所示。首先创建窗口对象w_xscj_shuru,在窗口上放置1 个分组框控件、3个静态文本控件、3个下拉列表框控件、3个命令按钮控件和1个数据窗口控件。根据图30的布局调整窗口和控件的大小、位置及有关属性。其中,【保存】按钮 的enabled属性设为False;数据窗口控件调整到只显示学号、姓名和成绩3列,VScrollBar 属性设为True,数据窗口对象为d_xscj_shuru;3个下拉列表框控件的列表项为空,由代码动态生成。 各个窗口和控件的事件脚本如下。 (1)窗口的Open事件脚本如下: _1.settransobject(sqlca) //定义局部变量 li_xq,li_bjmc,li_kcmc,n ls_xq,ls_bjmc,ls_kcmc //生成学期下拉列表框的列表项 count(distinct xq)into :li_xq subject; xqcursor cursor for xq from subject group by xq; open xqcursor; n=1 to li_xqparnext xqcursor into :ls_xq; _1.additem(ls_xq) xqcursor; //生成班级下拉列表框的列表项 count(distinct bjbh) into :li_bjmc subject; bjmccursor cursor for class.bjmc subject, class subject.bjbh=class.bjbh group .bjmc; bjmccursor; n=1 to li_bjmc next bjmccursor into :ls_bjmc; _2.additem(ls_bjmc) 窗口的Closequery事件脚本如下。 (3)课程的下拉列表框的Getfocus事件脚本如下。 li_kcmc,n ls_kcmc,ls_xq,ls_bjmc _xq=ddplb_1.text _bjmc=ddplb_2.text not(ls_xq=or ls_bjmc=)then //求选定班级和学期的课程门数 count(distinct subject.kcmc)into :li_kcmc subject,class (subject.bjbh=class.bjbh)and(class.bjmc=:ls_bjmc)and(subject.xq=:ls_xq); //生成课程的下拉列表框的列表项 kcmccursor cursor for subject.kcmc class,subject (subject.bjbh=class.bjbh)and (class.bjmc=:ls_bjmc)and(subject.xq=:ls_xq) by subject.kcmc; _3.reset() kcmccursor; n=1 to li_kcmc next kcmccursor into :ls_kcmc; _3.additem(ls_kcmc) kcmccursor; if (4)【确定】按钮的Clicked事件脚本如下。 int li_xh,n ls_kcmc,ls_xq,ls_bjmc,ls_xh _xq=ddlb_1.text _bjmc=ddlb_2.text _kcmc=ddlb_3.text ls_xq=or ls_bjmc=or ls_kcmc=then messagebox(提示,选择项不能空!) //用SQL语句插入所选班级每个学生的选定课程和学期的成绩记录 //成绩列为空值,由数据窗口输入 li_xh,n ls_kcmc,ls_xq,ls_bjmc,ls_xh _xq=ddplb_1.text _bjmc=ddplb_2.text _kcmc=ddplb_3.text ls_xq= or ls_bjmc= or ls_kcmc= then (提示,选择项不能空!) count(distinct xh)into :li_xh v_1 v_1.bjmc=:ls_bjmc; xhcursor cursor for xh v_1 v_1.bjmc=:ls_bjmc; xhcursor; n=1 to li_xh fetch next xhcursor into:ls_xh; into xscj (xh,xq,kcmc,cj) (:ls_xh,:ls_xq,:ls_kcmc,null); xhcursor; _1.retrieve(ls_xq,ls_bjmc,ls_kcmc) if (5)【保存】按钮的Clicked事件脚本如下。 dw_1.update(true,false)=1 then _1.resetupdate() _2.enabled=false (提示,保存数据失败!) if (6)【退出】按钮的Clicked事件脚本如下。 (parent) (7)数据窗口的Itemchanged事件脚本如下。 _2.enabled=true ) 、设计查询学生个人成绩的窗口 查询学生个人成绩的窗口如图31所示。数据窗口控件连接的数据窗口 对象为d_xscj_grcx。 (1)【查询】按钮的Clicked事件脚本如下。 string l_xh l_xq _xh=trim(sle_1.text) _xq=trim(sle_2.text) l_xh=or l_xq= then (提示,学号,学期不能为空) _1.retrieve(l_xh,l_xq) if (2)【打印】按钮的Clicked事件脚本如下。 dw_1.print(true) (3)【退出】按钮的Clicked事件脚本如下。 close(parent) _xscj_grcx 、 设计查询班级成绩的窗口 查询班级成绩的窗口如图32所示。数据窗口控件的DataObject属性为d_xscj_bjcx。 此窗口的Open事件脚本与输入成绩窗口的Open事件脚本相同,【打印】按钮和【退出】按钮的Clicked事件脚本略。 、 设计查询课程成绩的窗口 查询课程成绩的窗口如图33所示。 图33 窗口w_xscj_kccx 数据窗口控件的DataObject属性为d_xscj_kccx。此窗口的Open事件脚本、“课程”的下拉列表框的Getfocus事件脚本与输入成绩窗口的对应事件脚本相同,【打印】按钮和【退出】按钮的Clicked事件脚本略。【查询】按钮的Clicked事件脚本如下。 _1.settransobject(sqlca) ddplb_1.text=or ddplb_2.text=or ddplb_3.text= then (提示,班级 学期和课程不能为空) _1.retrieve(ddplb_1.text,ddplb_2.text,ddplb_3.text) _2.enabled=true if 十、系统的编译和发布 、创建工程对象 单击工具条上的【New】图标,打开【New】对话框,在对话框中选择【Project】标 签页,再选择【Application Wizard】图标,单击【Ok】按钮,开始工程的向导,最后出现,如图34所示的工程对象。 2、编译生成可执行程序 单击工程画板工具条上的【Deploy】图标,开始编译过程。编译通过后,生成可执行文件xscj.exe。 、测试分布 对可执行程序做系统的测试,最后便可发布了。 十一、小结 第一次自己一个人完成了一个简单的管理系统的开发,其中遇到的困难,通过上网搜索资料,同学的帮助的很好的解决了,例如在对学生成绩班级成绩查询时,数据窗口的显示风格crasstab不知道该怎么实现,期间花了很多时间查资料才弄明白应该怎么一步一步的实现,什么做行,什么做列,统计什么都需要明白。 通过此次对学生成绩管理系统的开发,让我对PowerBuilder中各个常用的窗口控件的用法、属性、数据库的操作有了个大致的了解,让我对使用PowerBuilder进行数据库应用程序的开发过程有了个全面的了解,明白了一个软件系统开发所需要的的步骤,系统分析、功能设计、数据库设计以及数据库的实现等。
信息发布:广州名易软件有限公司 http://www.myidp.net
|