PB课程设计Word格式.doc
《PB课程设计Word格式.doc》由会员分享,可在线阅读,更多相关《PB课程设计Word格式.doc(24页珍藏版)》请在冰点文库上搜索。
任务书…………………………………………
教师评语………………………………………1
前言……………………………………………2
目录……………………………………………3
正文……………………………………………
1.1数据库的设计与实现………………………………………4
1.2创建应用对象………………………………………………6
1.3设计系统管理模块…………………………………………7
1.4设计主窗口和菜单…………………………………………11
1.5设计班级管理模块…………………………………………14
1.6设计学生基本信息管理模块………………………………16
1.7设计课程管理模块…………………………………………18
1.8设计成绩管理系统…………………………………………20
1.9系统的编译和发布…………………………………………21
小结……………………………………………22
参考文献………………………………………23
正文
1.1数据库设计与实现
1.1.1数据库设计
根据学生成绩管理系统的功能要求,通过分析系统要涉及的相关实体以及要收集,存储和操纵的数据信息,得到如图1.1所示的系统E-R图。
根据系统E-R图得到以下关系模式:
班级(班级编号,班级名称,所属专业,学制,入学时间,人数).
学生基本信息(学号,姓名,性别,出生日期,家庭住址,班级编号).
课程(班级编号,学期,课程名称,学时,教师).
成绩(学号,学期,课程名称,成绩).
为了系统的使用安全,要建立用户管理,而用户使用权限分为管理员和一般用户两类,因此需要建立一个存储用户信息的关系.
用户(姓名,密码,权限).
性别
姓名
学号
出生日期
家庭住址
班级编号
学生
所属
班级
开设
课程
修课
班级名称
专业
学制
入学时间
人数
学期
教师
课程名称
学时
成绩
图1.1系统E-R图
1.1.2创建数据库
先要在D盘根目录下建立一个工作夹命名为“xscj”,然后在“D:
\xscj”文件夹下建立“data”,来存储数据库文件。
在PowerBuilder开发环境中打开数据库画板,使用[ODBODBC]接口建立AdaptiveserverAnywhere8.0(ASA8.0)的数据库D:
\xscj\data\xscj.db,然后建立以下5个表和1个视图。
1.“班级”表
表名:
banji
主键:
bjbh
各个键的属性见表1-1。
表1-1“班级”表的列属性
列名
数据类型
宽度
小数位
空值
标题
(Heading)
标签
(Label)
Bjbh
Char
6
NO
班级编号:
Bjmc
varchar
20
班级名称:
Zymc
专业名称
专业名称:
Xz
Numeric
1
学制:
Rxsj
Data
入学时间:
Rs
YES
人数:
根据如上图所示的关系模式确定需建立的数据库和表,除了建“Banji”之外还有“jiben”主键是“xh”;
“bjkc”主键是“bjbh,xq,kcmc”;
“xscj”主键是“xh,xq,kcmc”;
“users”主键是“xm”。
各表之间通过外键形成如下图所示的关联关系。
图1.2表的关联关系
2.视图
为了访问数据库方便,还建立了一个视图“xsbj”,该视图由学生基本信息表和班级表连接而成,对应的SQL语句如下:
CREATEVIEWxsbj(xh,xm,xb,csrq,bjbh,bjmc,zymc)AS
SELECT
JIBEN.xh,jiben.xm,jiben.xb,jiben.csrq,jiben.bjbh,banji.bjmc,banji.zymc
FROMDBA.banji,DBA.jiben
WHERE(jiben.bjbh=banji.bjbh)
完成数据库和表的创建后,可以在数据库画板中向数据库输入部分数据。
其中,“用户”表中必须输入一条记录(“admin”,“12345”,“y”),作为进入系统默认的管理员,即姓名为“admin”,密码为:
“12345”。
1.2创建应用对象
完成数据库的设计和系统功能设计之后,开始各种功能模块的实现,在PB中开发应用程序时,就是创建各种对象,为对象设置属性及编写事件脚本的过程
(1)创建新的工作空间,工作空间设为:
“d:
\xscj\xscj.pbw”。
(2)创建应用对象设为“app_xscj”,应用库文件的路径:
“d:
\xscj\xscj.pbl”,目标文件:
\xscj\xscj.pbt”.
(3)打开应用对象画板应用对象的icon属性设置为“d:
\xscj\BOOKS.ICO”.(预先准备的图标文件)。
(4)为应用对象的open事件编写代码如下
SQLCA.DBMS="
ODBC"
SQLCA.AutoCommit=False
SQLCA.DBPARM="
Connectstring='
DSN=aa;
UID=dba;
PWD=sql'
"
Connect;
ifSQLCA.sqlcode<
>
0Then
messagebox("
提示"
"
数据库连接失败!
)
else
open(w_login)//打开登陆窗口
endif
1.3设计系统管理模块
本模块实现用户登陆控制,用户自己的密码修改和用户管理,其中包括修改用户信息,添加新用户,删除用户,只有管理员有此权限。
1.3.1设计登陆窗口
登陆窗口如图1.3所示。
图1.3登陆窗口
1.创建窗口并设置属性
创建登录窗口W_login,在窗口上放置1个图片控件(p_1)。
3个静太文本(st_1,st_2,st_3),1个成组框控件(g_1),2个单行编辑起控件(sle_1,sle_2),2个命令按钮(cb_1,cb_2)
2.编写脚本
(1)定义全局变量。
Stringgs_username,gs_password,gs_admin
(2)定义实例变量。
Intli_n
(3)登陆窗口w_login的open事件脚本
li_n=3
注:
初始化变量li_n,限制出错次数为3次。
(4)
【确定】按钮cb_1的clicked事件脚本如下:
stringls_username,ls_password
ls_username=trim(sle_1.text)//输入用户名和密码
ls_password=trim(sle_2.text)
ifls_username="
orls_password="
then
messagebox("
用户名和密码不能为空"
SELECT"
users"
."
name"
password"
admin"
INTO:
gs_username,:
gs_password,:
gs_admin
FROM"
WHERE("
=:
ls_username)AND
("
ls_password);
ifsqlca.sqlcode<
0then
open(m_main)//密码正确,打开主窗口
close(w_login)
li_n=li_n-1
ifli_n<
用户名或密码错误"
错误超过3次,自动退出"
halt//错误超过3次,退出程序
endIf
(5)
【放弃】按钮cb_2的clicked事件脚本如下:
halt//退出程序
1.3.2设计密码修改窗口
密码修改窗口如图1.4所示。
图1.4密码修改窗口
1.创建窗口并设置属性
2.编写脚本
(1)[确定]按钮cb_1的Clicked事件脚本如下.
stringls_password
iftrim(sle_1.text)<
gs_passwordthen
旧密码错误"
iftrim(sle_2.text)=trim(sle_3.text)then
ls_password=trim(sle_2.text)
update"
set"
where("
gs_username)and
("
gs_password);
ifsqlca.sqlcode<
0then
messagebox("
密码修改不成功!
!
else
close(parent)
密码修改完成"
endif
两次新密码不相同"
(2)[取消]按钮cb_2的Clicked事件脚本如下
close(parent)
1.3.3设计用户管理的数据窗口
用户管理窗口如图1.5所示。
图1.5用户管理窗口
1.设计数据窗口
创建数据窗口”d_yhgl”,显示风格为”Grid”,数据源类型为”QuickSelect”,布局如图1.6所示。
其控件”admin”的编辑风格改为”DropDownListBox”,码表(CodeTable)如图1.6所示。
数据窗口d_yhgl生成的SQL.select语句为:
SELECT“users”.”name”,”users”.”password”,”users”.”admin”FROM”users”
图1.6数据窗口d_yhgl
2.创建窗口并设置属性
3.编写脚本
写脚本
(1)用户管理窗口的open事件如下:
dw_1.settransobject(sqlca)
dw_1.retrieve()
(2)用户管理窗口的closequery事件脚本如下|:
integerrt
dw_1.accepttext()
ifdw_1.modifiedcount()=0anddw_1.deletedcount()=0then
return
return1
(3)数据窗口控件的Itemchanged事件脚本如下:
cd_3.enabled=true//激活保存按钮
(4)添加】按钮的clicked事件家如下
integerrow
row=dw_1.insertrow(0)
dw_1.scrolltorow(row)
【删除】按钮的clicked事件脚本如下:
dw_1.deleterow(0)
cb_3.enabled=true
(6)
【保存】按钮的clicked事件如下:
(7)
【退出】按钮的clicked的事件脚本如下:
1.4设计主窗口和菜单
1.4.1创建菜单对象
1设计登录窗口
菜单结构如图1.7所示,菜单名为“m_main”,菜单栏中的菜单项设置了访问键(Accesskey),常用的菜单项设置了快捷键(如|:
【退出系】的快捷键为【ALT+F4】,【录入班级信息】的快捷键为【CTRL+A】),最常用的菜单项在工具条上建立了按钮。
2编写脚本
(1)
【系统】菜单下的【密码修改】的clicked事件脚本如下:
open(w_mmxg)
(2)
【系统】菜单下的【用户管理】的clicked事件脚本如下:
open(w_yhgl)
(3)
【系统】菜单下的【退出系统】的click事件脚本如下:
close(parentwindow)
【班级管理】菜单下的【录入班级信息】的clicked事件脚本如下:
opensheet(w_banji_shuru,w_main,6,original!
【班级管理】菜单下的【修改班级信息】的clicked事件如下:
opensheet(w_banji_xiugai,w_main,6,original!
【班级管理】菜单下的【浏览班级信息】的clicked事件:
opensheet(w_banji_liulan,w_main,6,ooriginal!
【学生管理】菜单的【录入学生信息】的clickeds事件:
opensheet(w_jiben_shuru,w_main,6,original!
(8)
【学生管理】菜单下的【修改学生信息】的clicked事件:
opensheet(w_jiben_xiugai,w_main,6,original!
(9)
【学生管理】菜单下的〖查询学生信息〗的clicked事件
opensheet(w_jiben_chaxun,w_mian,6,original!
(10)
【课程管理】菜单下的【录入/修改开设课程】的ckicked事件如下:
opensheet(w_bjkc_shuruxiugai,w_main,6,original!
(11)
【课程管理】菜单下的【查询开设课程】的clicked事件:
opensheet(w_bjkc_chaxun,w_mnain,6,original!
(12)
【成绩管理】菜单下的【录入修改成绩】的clicked事件:
opensheet(w_xscj_shuru,w_main,6,original!
(13)
【成绩管理】菜单下的【查询个人成绩】的clicked事件:
opensheet(w_xscj_grcx,w_main,6,original!
(14)
【成绩管理】菜单下的【查询班级成绩】的clicked事件:
opensheet(w_xscj_bjcx,w_main,6,original!
(15)
opensheet(w_xscj_kccj,w_main,6,original!
(16)
【窗口】菜单下的【层叠窗口】的clicked事件如下:
w_main.arrangesheets(cascade!
(17)
【帮助】菜单下的【关于】的clicked事件如下:
open(w_about)
(18)
【帮助】菜单下的【联机帮助】的clicked事件如下:
showHelp(“d:
\xscj\help\xscjhelp.chm”,index)
图1.7菜单结构
其功能是打开创建好的帮助文件”d:
\xscj\help\xscjhelp.chm”,index!
参数表示打开帮助的索引页。
PowerBulider本身没有提供制作帮助文件的工具,可以借助专门的制作工具实现,在PowerBulider中可以使用ShowHelp()函数打开
1.4.2设计主窗口
本例的主窗口界面如图1.8所示。
图1.8主窗口界面
创建窗口对象w_main,
表1-2主窗口的属性
对象
属性
取值
W_main
Title
学生成绩管理系统
Windowtype
Mdihelp
MenuName
M_main
windowstste
maximized
创建窗口对象w_main的Open事件脚本如下。
ifgs_admin=’n’then
m_main.m_系统.m_用户管理.enabled=false
其功能是非管理员用户进入系统时关闭[用户管理]菜单项。
1.5设计班级管理模块
1.5.1设计访问班级信息的数据窗口
1.设计输入班级信息的数据窗口
创建数据窗口d_banji_shuru,显示风格为”Freeform”,数据源类型为“Quickselect”,布局图略:
数据窗口生成的SQLselect语句为:
SELECT“banji”.“bjbh”,“banji”.“bjmc”“Banji”.zymc”,“banji”.“xz”,“banji”.“rsxj”,“banji”.“rs”
FROM“banji”
2.设计修改班级信息的数据窗口
创建数据窗口d_banji_xiugai,显示风格为“Grid”,数据源类型为“QuickSelect”,布局图略:
数据窗口生成的SQLSelect语句为:
SELECT“banji”.”bjbh”,”banji”.”bjmc”,”banji”.
“zymc”,”banji”.”xz”,”banji”.”rxsj”,”banji”.”rs”
ORDERBY“banji”.”bjbh”ASC
1.5.2设计访问学生信息窗口
1.设计输入窗口
创建窗口对象w_shuru,放置一个数据窗口控件,八个命令按钮,如下图1.9所示。
图1.9输入窗口
(1)
【〈〈〉按钮的clicked事件脚本:
dw_1.scrolltorow
(1)
(2)
【<
】按钮的clicked事件脚本:
dw_1.scrollnextrow()
【>
dw_1.scrolltotrow(dw_1.rowcount())
2.设计修改窗口
创建窗口对象w_xiugai,放置一个数据窗口控件,四个命令按钮:
窗口布局如下图1.10所示。
图1.10修改窗口
窗口和控件的事件脚本与以上输入窗口的对应相同
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.11所示。
图1.11班级信息浏览窗口
窗口的open事件脚本如下:
dw_1.settransobject(sqlca)
1.6设计学生基本信息
本模块实现学生基本信息的输入、修改和查询。
1.6.1设计访问学生的基本信息的数据窗口
1.设计输入学生基本信息的数据窗口
创建数据窗口d_jiben_shuru,显示风格为“”,数据源类型为“”其布局如图略
其中,列控件“xb”的编辑风格改为“RadloButtons”,列控件“bjbh”的编辑风格为“DropDownw”,其(DataWindow)属性设置为“d_banji_xiugai”,(DispiayColumn)和(DataColumn)属性都设置为“300”,(LiesinDropDown)属性设置为“6”。
(VScrollbar)属性设置为“True”.
数据窗口生成的SQLselect语句为
SELECT”jiben”.”xh”,”jiben”.”xm”,”jiben”.”xb”,”jiben”.”csrq”,”jiben”.”jizz”,”jiben”.”bjbh”
FROM“jiben”
2.设计修改学生基本信息的数据窗口
创建数据窗口d_jiben_xiugai,显示风格为“”,数据源类型为“”,数据窗口生成的SQLselect语句为:
SELECT“jiben”.”xh”,”jiben”.”xm”,”jiben”.”xb”,
“jiben”.”csrq”,”jiben”.”jizz”,”jiben”.”bjbh”
FROM“jiben”
ORDERBY|“jiben”.”xh”ASC
3.设计查询学生基本信息窗口
创建数据窗口为d_jiben_chaxun,显示风格为“Grid”,数据源类型为“SQLselect”,
其中定义3个string型检索参数变量mxh、mxm、mbj,
数据窗口生成的SQLelect语句为:
SELECT“banji”.”bjmc”,”jiben”.”xh”,”jiben”.
“xm”,”jiben”.”xb”,”jiben”.”csrq”,”jiben”.”jtzz”,”banji”