410 likes | 537 Views
第 10 章 学生成绩管理系统实例. 10.1 系统分析与设计 10.2 数据库设计与实现 10.3 创建应用对象 10.4 设计系统管理模块 10.5 设计主窗口和菜单 10.6 设计班级管理模块 10.7 设计学生基本信息管理模块 10.8 设计课程管理模块. 10.9 设计成绩管理模块 10.10 系统的编译和发布 10.11 小 结 10.12 实 训. 本章要点. PowerBuilder 应用系统分析 PowerBuilder 应用系统的开发过程
E N D
第10章 学生成绩管理系统实例 10.1 系统分析与设计 10.2 数据库设计与实现 10.3 创建应用对象 10.4 设计系统管理模块 10.5 设计主窗口和菜单 10.6 设计班级管理模块 10.7 设计学生基本信息管理模块 10.8 设计课程管理模块 • 10.9 设计成绩管理模块 • 10.10 系统的编译和发布 • 10.11 小 结 • 10.12 实 训
本章要点 PowerBuilder应用系统分析 PowerBuilder应用系统的开发过程 PowerBuilder应用程序的各种对象的设计方法 PowerBuilder应用程序的调试和发布
10.1 系统分析与设计 一个应用系统的开发过程包括分析、设计、实现、调试和发布等阶段,本节介绍学生成绩管理系统的功能分析和模块设计。
10.1.1 系统功能分析 • 本例中的学生成绩管理系统需要完成的主要功能如下。 • (1) 班级信息的输入和存储,包括班级编号、班级名称、所属专业、入校时间和学制等。 • (2) 对已经输入的班级信息的修改、查询。 • (3) 学生基本信息的输入和存储,包括学号、姓名、性别、出生日期、班级等。 • (4) 学生基本信息的修改和查询。 • (5) 每学期初各班所开设课程的输入,包括课程名、学期、学时等。 • (6) 各班所开设课程信息的修改和查询。 • (7) 学期末输入每个学生的考试成绩。 • (8) 学生成绩的修改。 • (9) 查询某个学生某学期的各科成绩。 • (10) 查询并打印某班某学期所有学生的各科成绩。 • (11) 查询并打印某班某学期某科成绩。 • (12) 系统具有用户和密码的管理。
10.1.2 系统功能模块设计 • 通过对上述各项功能的分析、分类、综合,按照模块化程序设计的要求,得到如图所示的功能模块图。
10.2 数据库设计与实现 10.2.1 数据库设计 根据学生成绩管理系统的功能要求,通过分析系统要涉及的相关实体以及要收集、存储和操纵的数据信息,得到系统E-R图。 根据系统E-R图得到以下关系模式。 l班级(班级编号,班级名称,所属专业,学制,入学时间,人数)。 l学生基本信息(学号,姓名,性别,出生日期,家庭住址,班级编号)。 l课程(班级编号,学期,课程名称,学时,教师)。 l成绩(学号,学期,课程名称,成绩)。 为了系统的使用安全,要建立用户管理,而用户使用权限分为管理员和一般用户两类,因此需要建立一个存储用户信息的关系。 l用户(姓名,密码,权限)。
10.2.2 创建数据库 • 首先,在D盘根目录下建立本实例的工作文件夹“xscj”,再在“D:\xscj”文件夹下建立文件夹“data”,用于存储数据库文件。 • 在PowerBuilder开发环境中打开数据库画板,使用【ODB ODBC】接口建立Adaptive Server Anywhere 8.0(ASA 8.0)的数据库D:\xscj\data\xscj.db,然后依次建立以下5个表和1个视图。 • “班级”表 、“学生基本信息”表 、“课程”表 、“成绩”表 、“用户”表 、视图“xsbj”(学生基本信息表和班级表连接 )
各个表之间通过外键形成如图所示的关联关系。各个表之间通过外键形成如图所示的关联关系。
10.3 创建应用对象 (1) 创建新的工作空间,工作空间文件路径及名称设为“d:\xscj\xscj.pbw”。 (2) 创建应用对象,应用对象名设为“app_xscj”,应用库文件路径及名称设为“d:\xscj\xscj.pbl”,目标文件路径及名称设为“d:\xscj\xscj.pbt”。 (3) 打开应用对象画板,应用对象app_xscj的Icon属性设置为“d:\xscj\BOOKS.ICO”。BOOKS.ICO是预先准备的图标文件。 (4) 为应用对象app_xscj的Open事件编写代码如下。
//连接数据库 • SQLCA.DBMS = "ODBC" • SQLCA.AutoCommit = False • SQLCA.DBParm = "Connectstring='DSN=xscj;UID=dba;PWD=sql'" • CONNECT; • if SQLCA.sqlcode<>0 then • messagebox("提示","数据库连接失败!") • else • //open(w_login) //打开登录窗口 • end if
10.4 设计系统管理模块 10.4.1 设计登录窗口 1. 创建窗口并设置属性 2. 编写脚本 10.4.2 设计密码修改窗口 1. 创建窗口并设置属性 2. 编写脚本
10.4.3 设计用户管理的数据窗口和窗口 • 1. 设计数据窗口 2. 创建窗口并设置属性 3. 编写脚本
10.5 设计主窗口和菜单 10.5.1 创建菜单对象 菜单结构如图10.8所示。菜单对象名为“m_main”,菜单栏中的菜单项设置了访问键(AccessKey),常用的菜单项设置了快捷键(如【退出系统】的快捷键为【Alt+F4】,【录入班级信息】的快捷键为【Ctrl+A】),最常用的菜单项在工具条上建立了按钮。 编写各个菜单项的脚本。对于这些代码行,在对应的窗口没有建立之前先注释掉,在对应的窗口建立后再去掉其注释符。
对 象 属 性 取 值 w_main Title 学生成绩管理系统 Window Type mdihelp! MenuName m_main WindowState maximized 10.5.2 设计主窗口 • 主窗口界面如图所示。 • 创建窗口对象w_main,设置相应属性。窗口对象w_main的Open事件脚本如下。 • if gs_admin='n' then • m_main.m_系统.m_用户管理.enabled=false • end if
10.6 设计班级管理模块 本模块实现班级信息的输入、修改和查询。 10.6.1 设计访问班级信息的数据窗口 1. 设计输入班级信息的数据窗口 创建数据窗口d_banji_shuru,显示风格为“Freeform”,数据源类型为“Quick Select”。 数据窗口d_banji_shuru生成的SQL Select语句为: SELECT "banji"."bjbh", "banji"."bjmc", "banji"."zymc", "banji"."xz", "banji"."rxsj","banji"."rs" FROM "banji"
2. 设计修改班级信息的数据窗口 • 创建数据窗口d_banji_xiugai,显示风格为“Grid”,数据源类型为“Quick Select”,其布局如图所示。 • 数据窗口d_banji_xiugai生成的SQL Select语句为: • SELECT"banji"."bjbh","banji"."bjmc","banji"."zymc","banji"."xz","banji"."rxsj","banji"."rs" • FROM "banji" • ORDER BY "banji"."bjbh" ASC
10.6.2 设计访问班级信息的窗口 • 1. 设计输入窗口 • 创建窗口对象w_shuru,调整其大小,放置1个数据窗口控件(dw_1)、8个命令按钮控件(cb_1 ~cb_8),窗口布局如图所示。 • 设置窗口及其控件的属性。 • 设置完属性后开始编写脚本代码 。
2. 设计修改窗口 • 创建窗口对象w_xiugai,调整其大小,放置1个数据窗口控件(dw_1)、4个命令按钮控件(cb_1 ~cb_4),窗口布局如图10.13所示。 • 设置窗口及其控件的属性。 • 窗口和控件的事件脚本与输入窗口的对应部分相同。
3. 设计输入班级信息窗口 • 通过继承输入窗口w_shuru生成输入班级信息窗口w_banji_shuru,将数据控件dw_1的DataObject属性设置为d_banji_shuru,将窗口的Title属性改为“录入班级信息”,此窗口设计便完成了。 • 4. 设计修改班级信息窗口 • 通过继承修改窗口w_xiugai生成修改班级信息窗口w_banji_xiugai,将数据控件dw_1的DataObject属性设置为d_banji_xiugai,将窗口的Title属性改为“修改班级信息”,此窗口设计便完成。
5. 设计浏览班级信息窗口 • 创建窗口对象w_banji_liulan,调整其大小,放置1个数据窗口控件dw_1,调整窗口布局如图所示。 • 设置窗口及其控件的属性。 • 窗口的Open事件脚本如下。 • dw_1.settransobject( sqlca) • dw_1.retrieve()
10.7 设计学生基本信息管理模块 10.7.1 设计访问学生基本信息的数据窗口 1.设计输入学生基本信息的数据窗口 创建数据窗口d_jiben_shuru,显示风格为“Freeform”,数据源类型为“Quick Select”,其布局如图所示。 其中,列控件“xb”的编辑风格改为“RadioButtons”,码表如图10.15中所示;列控件“bjbh”的编辑风格改为“DropDownDW”,其DataWindow属性设置为“d_banji_xiugai”,Display Column属性和Data Column属性都设置为“bjbh”,Width of DropDown(%)属性设置为“300”,Lines in DropDown属性设置为“6”,VScrollBar属性设置为“True”。
2.设计修改学生基本信息的数据窗口 • 创建数据窗口d_jiben_xiugai,显示风格为“Grid”,数据源类型为“Quick Select”,其布局如图所示。 • 其中,列控件“xb”的编辑风格改为“DropDownListBox”,列表项为“男”,“女”;列控件“bjbh”的编辑风格改为“DropDownDW”,其DataWindow属性设置为“d_banji_xiugai”,Display Column属性和Data Column属性都设置为“bjbh”,Width of DropDown(%)属性设置为“300”,Lines in DropDown属性设置为“6”,VScrollBar属性设置为“True”。
3.设计查询学生基本信息的数据窗口 • 创建数据窗口d_jiben_chaxun,显示风格为“Grid”,数据源类型为“SQL Select”,其布局如图10.17所示。 • 其中,定义3个String型检索参数变量mxh、mxm、mbj,分别表示学号、姓名、班级,形成带检索参数的数据窗口。 • 该数据窗口的修改属性为默认值即“不允许修改”。
10.7.2 设计访问学生基本信息的窗口 • 1.设计输入学生基本信息的窗口 • 通过继承输入窗口w_shuru生成输入学生基本信息窗口w_jiben_shuru,将数据控件dw_1的DataObject属性设置为d_jiben_shuru,将窗口的Title属性改为“录入学生基本信息”,此窗口设计便完成了。 • 2.设计修改学生基本信息的窗口 • 通过继承修改窗口w_xiugai生成修改学生基本信息窗口w_jiben_xiugai,将数据控件dw_1的DataObject属性设置为d_jiben_xiugai,将窗口的Title属性改为“修改学生基本信息”,此窗口设计便完成了。
3.设计查询学生基本信息的窗口 • 要求此窗口中能够根据学生的姓名或学号查询出学生的基本信息,能够根据班级名称查询出该班所有学生的基本信息。查询学生基本信息窗口如图所示。 • 创建一个窗口对象w_jiben_chaxun,放置控件 ,设置窗口及其控件的属性 。 编写【查询】按钮的Open事件脚本。
【查询】按钮的Open事件脚本如下。 dw_1.settransobject( sqlca) if ddlb_1.text="" or sle_1.text="" then messagebox("提示","查询列和查询内容不能空!") return end if string str str=trim(sle_1.text) choose case ddlb_1.text case "学号" dw_1.retrieve( str, "%","%") case "姓名" dw_1.retrieve( "%",str ,"%") case "班级名称" dw_1.retrieve( "%","%", str) end choose
10.8 设计课程管理模块 10.8.1 设计访问课程信息的数据窗口 1. 设计输入班级课程信息的数据窗口 创建数据窗口d_bjkc_shuru,显示风格为“Grid”,数据源类型为“Quick Select”,其布局如图所示。其中,列控件“bjbh”的编辑风格改为“DropDownDW”,其DataWindow属性设置为“d_banji_xiugai”,Display Column属性和Data Column属性都设置为“bjbh”,Width of DropDown(%)属性设置为“300”,Lines in DropDown属性设置为“6”,VScrollBar属性设置为“True”。
2. 设计查询班级课程信息的数据窗口 • 创建数据窗口d_bjkc_chaxun,显示风格为“Grid”,数据源类型为“SQL Select”,其布局如图10.20所示。 • 其中,定义2个String型检索参数变量mxq、mbjmc,分别表示学期、班级,形成带检索参数的数据窗口。 • 该数据窗口的修改属性为默认值即“不允许修改”。
10.8.2 设计访问课程信息的窗口 • 1. 设计输入修改班级课程信息的窗口 • 窗口的布局如图所示。 • 从祖先窗口w_xiugai继承生成窗口对象w_bjkc_shuruxiugai,调整其大小。然后将数据窗口控件dw_1的DataObject属性设置为d_bjkc_shuru,此窗口设计即完成。
2. 设计查询班级开设课程的窗口 • 窗口如图所示。创建一个窗口对象w_bjkc_chaxun,放置控件,设置窗口及其控件的属性。书写各个对象的事件脚本。 • (1) 窗口w_bjkc_chaxun的Open事件脚本 • (2) 【查询】按钮的Clicked事件脚本
10.9 设计成绩管理模块 10.9.1 设计访问成绩信息的数据窗口 1. 设计输入成绩的数据窗口 创建数据窗口d_xscj_shuru,显示风格为“Grid”,数据源类型为“SQL Select”,其布局如图所示。数据来源于成绩表xscj和视图xsbj,其中,学号、学期、课程名称和成绩为成绩表xscj的列,姓名是视图xsbj的列。 选择【Rows】|【Update Properties】命令,设置数据窗口的修改属性,使只有成绩表xscj的成绩列(xscj_cj)可以在数据窗口中修改,关键字为成绩表xscj的主关键字(xh,xq,kcmc)。然后,单击工具条上的【Tab Order】图标,将列控件xscj_cj的Tab Order值设为10。
2. 设计查询学生个人某学期各科成绩的数据窗口 • 创建数据窗口d_xscj_grcx,显示风格为“Grid”,数据源类型为“Quick Select”,其布局如图10.25所示。在【Summary】条中添加一个计算域控件,计算数据窗口中成绩总和。 • 数据窗口的检索参数为mxh、mxq,分别对应于学号和学期。
3. 设计查询某班级某学期全体学生各科成绩的数据窗口 • 创建数据窗口d_xscj_bjcx,显示风格为“Cross Tab”,数据源类型为“SQL Select”,其布局如图所示。数据来源于成绩表xscj和视图xsbj,其中,学号、课程名称和成绩为成绩表xscj的列,姓名是视图xsbj的列。 • 在【Header[1]】条中添加2个计算域控件,对应的表达式分别为mbjmc和mxq,3个文本控件,其文本分别为“成绩单”、“班级:”和“学期:”。 • 数据窗口的检索参数为mxq和mbjmc,分别对应于学期和班级名称。修改属性取默认值(不允许修改)。
4. 设计查询某班级某学期全体学生某科成绩的数据窗口 • 创建数据窗口d_xscj_kccx,显示风格为“N_Up”,栏数为2,数据源类型为“SQL Select”,其布局如图10.27所示。数据来源于成绩表xscj和视图xsbj,其中,学号和成绩为成绩表xscj的列,姓名是视图xsbj的列。 • 在【Header】条中添加2个计算域控件对应的表达式分别为mbjmc和mkcmc,3个文本控件,其文本分别为“成绩单”、“班级:”和“课程:”。 • 数据窗口的检索参数为mxq、mbjmc和mkcmc,分别对应于学期、班级名称和课程名称。修改属性取默认值(不允许修改)。
10.9.2 设计访问成绩信息的窗口 • 1. 设计输入成绩的窗口 • 输入成绩的窗口如图所示。首先创建窗口对象w_xscj_shuru,放置控件,调整窗口和控件的大小、位置及有关属性。其中,【保存】按钮的enabled属性设为False;数据窗口控件调整到只显示学号、姓名和成绩3列,VScrollBar属性设为True,数据窗口对象为d_xscj_shuru;3个下拉列表框控件的列表项为空,由代码动态生成。 • 编写窗口和各个控件的事件脚本。
2. 设计查询学生个人成绩的窗口 • 查询学生个人成绩的窗口如图所示。数据窗口控件连接的数据窗口对象为d_xscj_grcx。 • 编写以下脚本: • (1)【查询】按钮的Clicked事件 • (2)【打印】按钮的Clicked事件 • (3)【退出】按钮的Clicked事件
3. 设计查询班级成绩的窗口 • 查询班级成绩的窗口如图所示。数据窗口控件的DataObject属性为d_xscj_bjcx。 • 编写窗口的Open事件脚本,【打印】按钮和【退出】按钮的Clicked事件脚本略,【查询】按钮的Clicked事件脚本。
4. 设计查询课程成绩的窗口 • 查询课程成绩的窗口如图所示。数据窗口控件的DataObject属性为d_xscj_kccx。 • 编写窗口的Open事件脚本、“课程”的下拉列表框的Getfocus事件脚本、【打印】按钮和【退出】按钮的Clicked事件脚本、【查询】按钮的Clicked事件脚本。
10.10 系统的编译和发布 在每个模块的实现过程中,对其每个功能要进行仔细的测试和调试,最后对整个应用程序做系统的测试,在测试工作完成后可以进行应用程序的编译和发布步骤如下。 1) 创建工程对象 2) 编译生成可执行程序 3) 测试分布
10.11 小结 本章通过学生成绩管理系统实例介绍了用PowerBuilder开发数据库应用程序的过程,介绍了开发应用系统时的系统分析、功能设计、数据库设计以及数据库的实现,具体描述了实例中各种PowerBuilder对象的设计方法,较为系统、综合、全面地总结了PowerBuilder的应用。
10.12 实训 实训目的 (1) 掌握数据库应用系统的设计方法。 (2) 掌握用PowerBuilder创建数据库的方法。 (3) 具备用PowerBuilder开发一个完整的应用系统的能力。 实训内容 (1) 用PowerBuilder实现本章所讲的“学生成绩管理系统”。 (2) 调试并发布完成的应用系统。