资源描述
PowerBuilder实训报告书
- 35 -
2020年4月19日
文档仅供参考
重庆航天职业技术学院
重庆航天职业技术学院
继续教育学院
《PowerBuilder实用教程与实训》
课程设计任务报告书
班级:10计算机网络
学号:*******
姓名:**
指导老师:***
完成日期: /12/23
数据库技术课程设计任务书
班级:10计算机网络
一、 课程设计名称:`
学生成绩管理系统设计与实现
二、 课程设计的目的:
经过本次课程设计,学会PB的使用方法。
三、 任务要求:
1. 画出系统设计图。
2. 给出主要模块的设计和实现步骤。
3. 给出实现代码。
四、 课程设计报告书要求:
1. 要求有课程设计报告书封面,封面上写清楚标题、班级、姓名、指导老师、完成日期,格式自己设计。
2. 将本任务书装订在报告书的第二页。
3. 第三页为教师评语。
4. 第四页为目录。
5. 报告书的具体内容如下:
1) 系统结构图。
2) 数据库建立步骤及截图。
3) 系统模块实现步骤及截图。
4) 具体代码。
6. 报告书的最后是本次课程设计的小节和参考文献。
五、 作业周期:
.11.15—— .1.5
计算机工程系
***
重庆航天职业技术学院
教师评语
重庆航天职业技术学院
目录
1 课程设计目的……………………………5
2 数据库设计………………………………5
2.1 需求分析……………………….........5
2.2 数据库设计内容…………………….6
2.3 概念设计……………………….........6
2.4 创立数据库…………………….........7
3 模块及窗口设计……………………......11
3.1 设计系统管理模块…………….......11
3.2 设计主窗口和菜单………………...13
3.3 设计输入班级信息的数据窗口…...17
3.4 设计访问学生基本信息数据窗口...19
3.5 设计查询班级开设课程的窗口…...20
3.6 设计访问成绩信息的窗口………...23
3实训心得…………………………………27
4 参考文献………………………………..27
重庆航天职业技术学院
引言
数据库技术,已经成为先进信息技术的重要组成部分,是现代计算机信息系统和计算机应用系统的基础和核心。数据库从诞生到现在,在不到半个世纪的时间里,形成了坚实的理论基础、成熟的商业产品和广泛的应用领域,吸引越来越多的研究者加入。
计算机技术不断地应用到各行各业,大量的企业把数据存放在数据库中,而且经过T相关的代码语句来进行快速查询,获取比传统方式更高的效率。
为了进一步加深和巩固我们所学的《PowerBuilder实用教程和实训》的基础理论知识,使我们所学的理论能够更好的和实际的专业连接起来。是学生得到收集、处理、应用资料信息的实践训练,同时全面的考核学生所掌握的基础理论知识及其实际的专业能力,从而达到提高学生素质的最终目的。学校安排了实训课程,在这段时间里,希望阩能够利用所学到的只是穿件一个图书管理的数据系统,来达到图书管理的需要。
.12.20
重庆航天职业技术学院
1 课程设计目的
经过本次课程设计,学会PB的使用方法。
2 数据库设计
熟悉《PowerBuilder实用教程和实训》实训环境,熟练掌握数据库、表、窗口界面的设计、图形按钮的添加、数据库的链接及函数的创立与应用,确立数据库创立的方向,对图书管理系统进行分析并设计系统实现需要哪几张表以及各表结构,确立数据库创立要求,优化数据库界面的设计。
2.1 需求分析
书籍是人类进步的阶梯,人类进步的精神粮食。因此,读书显得格外重要。因此学生成绩系统应该是能够为阅读者提供充分的信息和快捷的查询手段的一种方式。
学生成绩管理工作繁琐,查阅繁琐,包含大量的信息数据,因此就需要一个完善的学生成绩管理系统来实现对这些数据的有效管理。从而达到领导、老师对查询学生成绩信息进行统一管理,满足用户的需要。
重庆航天职业技术学院
随着计算机信息技术的发展,数据库作为信息技术的一部分也在飞速的发展着。使用数据库对图书资源尽心管理工具有着手工管理无法比拟的有点,它检索迅速、查找方便、可靠性高、存储量大、成本低,因此数据库成为了图书管理最主要的选择。
2.2数据库设计内容
利用PowerBuilder开发一个小型图书管理系统改图书管理系统主要有一下几个功能:图书类型信息查询和编辑,图书信息的查询和编辑,用户的查询和编辑,借阅还书记录的生成和查询。
2.3 概念设计
概念设计是在需求分析基础上的,用概念数据模型来表述数据以及数据之间的相互联系,从上述的分析中得到图书管理系统的E-R图。
重庆航天职业技术学院
性别
姓名
修课
班级编号
班级
教师
学期
家庭住址
开设
系统E-R图
出生日期
学号
班级班号
学生
学期
所属
成绩
班级名称
学时
专业
课程
学制
人数
课程名称
入学时间
2.4 创立数据库
数据库是一个数据库系统的核心,一切数据都存储在数据库中,我们所进行的数据的查找,删除,更改等行为都是要进入数据库中的。要创立数据库管理系统,那么我们首先要创立一个数据库。
重庆航天职业技术学院
在D盘的新建xscj文件夹,再新建data文件夹。打开powerBuilder,新建一个工作空间和应用。在应用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
在工具栏上点击Database的图标(或者Tools-Database painter{快捷键Shift+F7}),弹出数据库创立的对话框。打开ODBC下拉菜单,单击[Utilities],然后双击[Create ASA Database]。Database name键入xscj,保存在在D盘下的xscj文件夹的data文件夹下,如图.
重庆航天职业技术学院
图2-1 新建xscj数据库 图 2-2 数据库树状图
在数据库中创立表banji、jiben、bjkc、xscj、 user同时为表创立主键,外键。
在数据库xscj中选中Tables,右键选择NewTable,
弹出表的创立窗口,输入表名,类型,宽度,以及是否为空。完成后点击图标或使用快捷键[Ctrl+S] 保存。
图 2-3 在数据库中创立表banji
创立完成后,打开xscj的Tables下拉菜单,选中刚
刚创立的表。右键New—primaryKey为表设置主键bjbh。
使用同样的方法建立表jiben,bjkc,xscj,user如图所示:
重庆航天职业技术学院
图 2-4 在数据库中创立表jiben
图2-5 在数据库中创立表 xscj
图 2-6 在数据库中创立表users
分别为其设置主键xh,<bjbh,xq,kcmc>,<xh,xqkcmc>,xm
表的关联关系:bjkc-foreignkey关联banji-primarykey
Jiben-primarykey关联jiben-foreignkey
Jinben-primarykey关联xscj-foreignkey
重庆航天职业技术学院
图 2-7 表的关联关系
3.1系统模块设计
点击工具栏的新建图标,或者[File-new],选择PB Object中的Windows。使用CommondButton,创立一个用户登陆窗口。在属性页面的Title框内输入登陆,使用两个Create static text control,在其一加入图片,另一text属性文本框内输入学生成绩管理系统。在窗口中添加GroupBox,text属性中输入请输入。在其内添加两个static text control,text。在static text control的text属性
输入用户名,密码。
本窗口实现用户登录控制
重庆航天职业技术学院
图 3-1 登陆窗口
在确定按钮下添加代码,如下:
string ls_username, ls_password
ls_username=trim(sle_1.text) //输入的用户名和密码
ls_password=trim(sle_2.text)
if ls_username="" or ls_password="" 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 );
if sqlca.sqlcode=0 then
open(w_main) //密码正确,打开主窗口
close(w_login)
else
li_n=li_n - 1
if li_n<>0 then
重庆航天职业技术学院
messagebox("提示","用户名或密码错误")
else
messagebox("提示","错误超过3次,自动退出")
halt //错误超过3次,退出程序
end if
end if
end if
放弃按钮下输入代码:
halt //退出程序
3.2 设计主窗口和菜单
主窗口和菜单是系统工作的主界面,本例的窗口为带帮助的多文档框架窗口。
[File|New] 在PB Object下选定Menu单击OK,或者使用new小图标弹出new的选择窗口对话框。打开Menu窗口。选定Untitled0右键Insert Submenu Item,输入-系统(&S)回车,选定系统(&S)右键Insert Submenu Item,输入-密码修改,再选定系统(&S)右键选择Insert Submenu Item输入用户管理….使用同样的方法创立
Menu的菜单结构。如图所示:
重庆航天职业技术学院
图3-2 系统树形菜单结构窗口
【系统】菜单下【密码修改】菜单项的Clicked事件脚本如下。
Open(w_mmxg)
【系统】菜单下【用户管理】菜单项的Clicked事件脚本如下。
Open(w_yhgl)
【系统】菜单下【退出系统】菜单项的Clicked事件脚本如下。
Close(parentwindow)
【班级管理】菜单下【录入班级信息】菜单项的Clicked
重庆航天职业技术学院
事件脚本如下。
Open(w_banji_shuru,w_main,6,Original!)
【班级管理】菜单下【修改班级信息】菜单项的Clicked事件脚本如下。
Open(w_banji_xiugai,w_main,6,original)
【班级管理】菜单下【浏览班级信息】菜单项的Clicked事件脚本如下。
Opensheet(w_banji_xiugai,w_main,6,original!)
【学生管理】菜单下【录入学生信息】菜单项的Clicked事件脚本如下。
Opensheet(w_jiben_shuru,w_main,6,original!)
【学生管理】菜单下【修改学生信息】菜单项的Clicked事件脚本如下。
Opensheet(w_jiben_xiugai,w_main,6,original!)
【学生管理】菜单下【查询学生信息】菜单项的Clicked事件脚本如下。
Opensheet(w_jiben_chaxun,w_main,6,original!)
【课程管理】菜单下【录入/修改开设课程】菜单项
重庆航天职业技术学院
的Clicked事件脚本如下。
Opensheet(w_bjkc_shuruxiugai,w_main,6,original!)
【课程管理】菜单下【查询开设课程信息】菜单项的Clicked事件脚本如下。
Opensheet(w_bjkc_chaxun,w_main,6,original!)
【成绩管理】菜单下【录入修改成绩】菜单项的Clicked事件脚本如下。
Opensheet(w_xscj_shuru,w_main,6,original!)
【成绩管理】菜单下【查询个人成绩】菜单项的Clicked事件脚本如下。
Opensheet(w_xscj_grcx,w_main,6,original!)
【成绩管理】菜单下【查询班级成绩】菜单项的Clicked事件脚本如下。
Opensheet(w_xscj_bjkc,w_main,6,original!)
【成绩管理】菜单下【查询课程成绩】菜单项的Clicked事件脚本如下。
Opensheet(w_xscj_kccx,w_main,6,original!)
【窗口】菜单下【层叠窗口】菜单项的Clicked事件
重庆航天职业技术学院
脚本如下。
W_main.arrangesheets(cascade!)
功能是将主窗口打开的子窗口以层叠方式排列。
【帮助】菜单下【关于】菜单项的Clicked事件脚本如下。
Open(w_about)
【帮助】菜单下【关于】菜单项的Clicked事件脚本如下。
ShowHelp(“d:\xscj\help\xscjhelp.chm”,index!)
3.3 设计输入班级信息的数据窗口
菜单栏中选择【File】-【new】或点击new小图标选择Datawindows窗口,选中Freedom单击ok。选择【Quick Select】类型的数据库,选中预览时检索数据的复选框,单击【Next】命令按钮,弹出【Quick Selct】数据窗口对话框。在途中左边的【Tables】列表框中列出当前数据库中所有的表名,单击某一个表名,会在【Columns】列表框中列出该表的全部字段。单击某个
字段名,单击右边的【Add All】命令按钮。完成字段选
重庆航天职业技术学院
择后单击【ok】按钮,接着弹出【Selcet Color and Border Seting】严责和边框设置对话框。
图 3-3 表的选择 图 3-4 颜色边框对话框
点击【Next】-【Finish】完成选择弹出以下对话框
图 3-5 数据窗口
单击【Save】图标,或【File】-【Save】弹出保存对
重庆航天职业技术学院
话框,输入创立
图 3-5 保存对话框
数据窗口d_banjishuru生成的SQL Selct语句为:
SELCET
“banji”.”bjbh”.”banji”.”bjmc” “banji”.”zymc”.”banji”.”xz”.”banji”.”rxsj”.”banji”.”rs”
FROM”banji”
3.4 设计访问学生基本信息的数据窗口
创立数据窗口d_jiben_shuru,显示风格为“Freefrom”,数据源类型为“Quick Selcet”。
数据窗口d_jiben_shuru生成的SQL selcet语句为:
SELCET
重庆航天职业技术学院
“jiben”.”xh”、”jiben”.”xm”.”jiben”.”xb”.
”jiben”.”csrq”、”jiben”.”jtzz”、”jiben”.””bjbh.
FROM ”jiben”
图 3-4 学生基本信息窗口
3.5 设计查询班级开设课程的窗口
首先创立一个窗口对象w_bjkc_chaxun,调整期大小,在窗口中放置2个静态文本控件(st_1,st_2)、2个下拉列表框控件(ddlb_1,ddlb_2)、1个命令按钮(cb_1)1个数据窗口控件(dw_1),调整各个控件的位置和大小。位置窗口及其控件的属性见一下表。
图 3-5 查询班级开设的课程的窗口
重庆航天职业技术学院
对象
属性
取值
W_bjkc_chaxun
Title
查询班级开设课程
Window Type
Main!
Resizable
False
Center
False
Maxbox
False
Minbox
False
Dw_1
VScrolloBar
Ture
DataObject
D_bjkc_chaxun
St_1
Text
选择学期:
St_2
Text
选择班级
Cb_1
text
查询
窗口w_bjkc_chaxun的open事件脚本如下。
重庆航天职业技术学院
dw_1.settransobject( sqlca)
int li_xq, li_bjmc, n
string ls_xq, ls_bjmc
SELECT count(distinct xq) INTO :li_xq
FROM bjkc;
DECLARE xqcursor CURSOR FOR
SELECT xq FROM bjkc GROUP BY xq;
OPEN xqcursor ;
FOR n=1 TO li_xq
FETCH NEXT xqcursor INTO :ls_xq;
ddlb_1.additem( ls_xq)
NEXT
CLOSE xqcursor ;
SELECT count(distinct bjmc) INTO :li_bjmc
FROM banji;
DECLARE bjmccursor CURSOR FOR
SELECT banji.bjmc
FROM bjkc, banji
WHERE bjkc.bjbh = banji.bjbh GROUP BY banji.bjmc;
OPEN bjmccursor ;
FOR n=1 TO li_bjmc
FETCH NEXT bjmccursor INTO :ls_bjmc;
ddlb_2.additem( ls_bjmc)
NEXT
CLOSE bjmccursor ;
【查询】按钮的clicked事件脚本如下
Dw_1.retrieve(ddlb_1.text、ddlb_2.text)
重庆航天职业技术学院
3.6 设计访问成绩信息的窗口
首先新建窗口对象w_xscj_shuru,在窗口上放置1个分组框控件、3个静态文本控件、3个下拉列表框控件、3个命令窗口按钮控件和1个数据窗口控件
其中,,【保存】按钮的enabled属性设成False;数据窗口控件调整到只显示学号、姓名和成绩3列,VScrollBar属性设置为Ture,数据窗口对象为d_xscj_shuru;3个下拉菜单列表框控件的列表项为空,由代码动态生成。
图 3-6 班级学生成绩查询
【确定】按钮的代码如下。
int li_xh, n
string ls_kcmc, ls_xq, ls_bjmc, ls_xh
ls_xq=ddlb_1.text
重庆航天职业技术学院
ls_bjmc=ddlb_2.text
ls_kcmc=ddlb_3.text
if ls_xq="" or ls_bjmc="" or ls_kcmc="" then
messagebox("提示", "选择项不能空!")
else
SELECT count(distinct xh) INTO :li_xh
FROM xsbj
WHERE xsbj.bjmc=:ls_bjmc;
DECLARE xhcursor CURSOR FOR
SELECT xh
FROM xsbj
WHERE xsbj.bjmc=:ls_bjmc;
OPEN xhcursor ;
FOR n=1 TO li_xh
FETCH NEXT xhcursor INTO :ls_xh;
INSERT INTO "xscj" ( "xh","xq","kcmc","cj" )
VALUES ( :ls_xh, :ls_xq, :ls_kcmc, null );
NEXT
CLOSE xhcursor ;
dw_1.retrieve(ls_xq,ls_kcmc )
end if
【保存】按钮的代码如下。
if dw_1.update(true,false )=1 then
dw_1.resetupdate( )
commit;
cb_2.enabled=false
重庆航天职业技术学院
else
rollback;
messagebox("错误","保存数据失败!")
end if
【退出】按钮代码如下。
close(parent)
课程的下拉列表框的Getfocus事件脚本如下。
int li_kcmc,n
string ls_kcmc, ls_xq, ls_bjmc
ls_xq=ddlb_1.text
ls_bjmc=ddlb_2.text
if not(ls_xq="" or ls_bjmc="") then
SELECT count(distinct bjkc.kcmc) INTO :li_kcmc
FROM bjkc,banji
WHERE (bjkc.bjbh = banji.bjbh) and(banji.bjmc=:ls_bjmc) and (bjkc.xq=:ls_xq);
DECLARE kcmccursor CURSOR FOR
SELECT bjkc.kcmc
FROM bjkc, banji
WHERE (bjkc.bjbh = banji.bjbh) and (banji.bjmc=:ls_bjmc) and (bjkc.xq=:ls_xq)
GROUP BY bjkc.kcmc;
ddlb_3.reset( )
重庆航天职业技术学院
OPEN kcmccursor ;
FOR n=1 TO li_kcmc
FETCH NEXT kcmccursor INTO :ls_kcmc;
ddlb_3.additem( ls_kcmc)
NEXT
CLOSE kcmccursor ;
end if
窗口的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 if
end if
return 1
dw_1事件代码如下。
cb_2.enabled=true
数据窗口的Itemchanged事件脚本如下。
Cb_2.enablde=ture
重庆航天职业技术学院
3 实训心得
这个星期是我们《PowerBuilder使实用教程与实训》的实训,经过这一段时间的实训,让我领悟到了很多课堂上没有注意的重要知识。如何使用PowerBuilder快速的创立一个通用接口的ODBC的数据库,用window来创立我们常常使用的软件的界面。而且将每个创立的窗口关联到主窗口,使整个学生管理系统使用更加方便。
抱着学习和探索的精神,我们投入到实训的过程去。一段时间以来,我学到了很多知识,也发现了自己在课堂学习中学习的不住和未能注意到的知识点。实训的过程中,也遇到了很多的问题,在老师和同学的帮助下都得以解决,对PowerBuilder的认识也更深刻。
4 参考文献
1 《PowerBuilder实用教程与实训》
2 网络资料
展开阅读全文