华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统.docx
- 文档编号:495988
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:27
- 大小:904.88KB
华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统.docx
《华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统.docx》由会员分享,可在线阅读,更多相关《华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统.docx(27页珍藏版)》请在冰点文库上搜索。
华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统
2011-2012学年第1学期
PowerBuilder程序设计
(专业选修课)
学号:
姓名:
班级:
答辩情况:
1、程序难易程度:
难(),较难(),一般(),简单();
2、程序工作量:
大(),较大(),一般(),较小();
3、基本操作:
熟练(),较熟练(),一般(),不熟练(),
极不熟练();
4、代码理解:
准确(),较准确(),一般(),不准确(),
极不准确();
平时成绩:
优秀(),良好(),中等(),一般()
总评成绩:
任课教师:
2011年12月5日
学生成绩数据库管理系统
一、系统结构设计
XSCJ数据库中包含有三个表,XS表用来存放学生基本信息,KC表用来存放课程基本信息,XS—CJ表用来存放学生课程成绩信息。
根据学校教育管理的实际要求,可以设计以下主要的交互窗口:
1.登陆窗口w_load
2.控制台窗口w_main
3.查询子系统窗口w_query
4.数据管理子系统窗口w_data
5.帮助系统窗口w_help
其中查询子系统包括学生成绩查询,学生基本情况查询,学生选课信息查询和交互式查询。
而数据管理子系统窗口包括资源管理,数据的更新,数据的删除,数据插入等。
二、系统开发计划
(1)检查系统硬件和软件环境是否符合要求。
(2)检查XSCJ数据库的三个样本数据表,观察是否满足系统的需求。
(3)为项目创建磁盘存储区域,并创建新的工作空间。
(4)逐一创建组成系统的各个模块。
(5)采用面向对象的方式,实现模块的可重用性。
(6)完成各个模块的代码,并进行单个模块的测试。
(7)进行整个系统的测试。
(8)生成可执行文件。
(9)软件发布。
整个系统的体系结构图如图1-1所示:
图1.1
三、设计步骤
1.创建工作空间、应用与数据库表
(1)启动PowerBuilder10.0,创建工作空间和应用—project1
(2)创建的ASA数据库XSCJ.db,数据源名称Xscj,创建xs数据表,kc数据表,xs_cj数据表,其结构如:
表1XS表结构
表2KC表结构
表3XS_CJ表结构
2.新建主窗口对象
(1)建一个主窗口w_load,在窗口上放置了三个静态文本,两个单行文本编辑框和两个命令按钮。
在w_load窗口中新建了一个用于连接数据库的窗口函数load_connect,函数脚本为:
StringIs_userid,Is_password,Is_database//定义形参
//将实参的值赋给形参
Is_userid=trim(userid)
Is_password=(password)
IFIs_password=""THEN//输入密码非空
RETURN-1
ENDIF
SQLCA.DBMS="ODBC"
SQLCA.AutoCommit=FALSE
Is_database="ConnectString='DSN=xscj;"
SQLCA.dbparm=Is_database+"UID="+Is_userid+";PWD="+Is_password+"'"
CONNECTUSINGSQLCA;//与数据库连接
RETURNsqlca.SQLCode
定义cb_ok中的Click事件的脚本为:
SetPointer(hourglass!
)
IFPARENT.load_connect(sle_userid.text,sle_password.text)=-1THEN
MessageBox("连接数据库错误","连接失败"+sqlca.sqlerrtext)
HALT
ELSE
Close(PARENT)
Open(w_main)
ENDIF
保存并测试登录窗口
(2)创建控制台窗口w_main
放置了一个静态文本框,六个命令按纽,放置了背景图片并且将其放在底部。
按钮“退出”的Clicked事件的脚本为:
Close(PARENT)
(3)创建了一个新选单,该选单的树型结构如下图
并且编写各个选单按钮的脚本。
(4)创建子系统的基本窗口并利用继承关系派生出各子系统的窗口
1.创建基本窗口w_base,设置窗口的WindowsType类型为midhelp!
、MenuName=manue,其他属性采用系统默认。
2.在w_base的基础上,通过继承的方式创建子系统窗口w_query,w_data,w_help,w_pipe,w_statistic.分别在子系统窗口上添加控件。
编辑完成后的窗口如下图。
窗口W_query图
在窗口w_main中的“查询子系统”命令按钮的clicked事件中编写代码:
Open(w_query)
保存所做工作,运行应用程序进行测试。
窗口W_data图
在窗口w_main中的“数据管理子系统”命令按钮的clicked事件中编写代码:
Open(w_data)
保存所做工作,运行应用程序进行测试。
窗口W_help图
在窗口w_main中的“帮助子系统”命令按钮的clicked事件中编写代码:
Open(w_help)
保存所做工作,运行应用程序进行测试。
窗口W_pipe图
在窗口w_main中的“数据通道”命令按钮的clicked事件中编写代码:
Open(w_pipe)
保存所做工作,运行应用程序进行测试。
窗口W_statistic图
在窗口w_statistic的Open事件中输入一下脚本:
gr_1.Elevation=33//将三维图形视角旋转33度
gr_1.Spacing=150//条形图数据之间距离为本条本身宽度的150%
gr_1.AddCategory("第一学期")//设置分类轴
gr_1.AddCategory("第二学期")
gr_1.AddCategory("第三学期")
gr_1.AddCategory("第四学期")
gr_1.AddCategory("第五学期")
gr_1.AddCategory("第六学期")
gr_1.AddCategory("第七学期")
gr_1.AddSeries("计算机基础")//设置系列轴
gr_1.AddSeries("程序设计语言")
gr_1.AddSeries("数据结构")
gr_1.AddSeries("操作系统")
gr_1.AddSeries("程序设计与语言")
gr_1.AddSeries("计算机原理")
gr_1.AddSeries("数据库原理")
gr_1.AddSeries("软件工程")
gr_1.AddData(1,80,1)//添加数据
gr_1.AddData(2,68,2)
gr_1.AddData(4,68,5)
gr_1.AddData(5,68,6)
gr_1.AddData(6,85,5)
gr_1.AddData(7,68,7)
gr_1.AddData(9,51,7)
在窗口w_main中的“统计分析”命令按钮的clicked事件中编写代码:
Open(w_statistic)
保存所做工作,运行应用程序进行测试。
(5)创建查询子系统的子窗口
在w_base基本窗口的基础上,通过继承的方式创建w_stu,w_select,w_achievement,w_custom。
分别添加控件!
窗口W_stu图
窗口W_select图
窗口W_achievement图
窗口W_custom图
3.为查询子系统的字窗口编写脚本,并建立各窗口之间的联接。
(1)建立各窗口之间的连接
A.在窗口w_query中的“学生基本信息查询”命令按钮clicked的事件中编写代码:
Open(w_stu)
B.在w_query窗口中的“学生选课查询”命令按钮的clicked事件中编写代码:
Open(w_select)
C.在w_query窗口中的“学生成绩查询”命令按钮的clicked事件中编写代码:
Open(w_achievement)
D.在w_query窗口中的“自定义查询”命令按钮的clicked事件中编写代码:
Open(w_custom)
E.在窗口w_main中的“查询子系统”命令按钮的clicked事件中编写代码:
Open(w_query)
(2)编写窗口s_tu的脚本
OPEN事件:
dw_1.SetTransObject(SQLCA)
查询按钮的clicked事件:
Stringxuehao
xuehao=Trim(sle_1.text)
IFxuehao=""THEN
MessageBox("没有输入学号","请输入正确的查询条件!
")
ELSE
dw_1.Retrieve(xuehao)
ENDIF
sle_1.SetFocus()
清除按钮的clicked事件:
dw_1.ReSet()
sle_1.text=""
sle_1.SetFocus()
(3)编写窗口w_achievement的脚本
OPEN事件:
dw_1.SetTransObject(SQLCA)
查询按钮clicked事件:
Stringxh,kc
xh=Trim(sle_1.text)
kc=Trim(sle_2.text)
IFxh=""ANDkc=""THEN
MessageBox("非法的条件输入","请输入正确的查询条件!
")
ELSE
dw_1.Retrieve(xh,kc)
ENDIF
sle_1.SetFocus()
清除按钮clicked事件:
dw_1.ReSet()
sle_1.text=""
sle_1.text=""
sle_1.SetFocus()
(4)编写定义查询窗口w_custom的脚本
命令按钮:
Intm,n
Stringmysql,str
mysql=mle_1.text//读取查询语句
lb_1.reset()//重置Ib_1
DECLAREmycurDYNAMICCURSORFORsqlsa;
PREPAREsqlsaFROM:
mysqlUSINGsqlca;
DESCRIBEsqlsaINTOsqlda;
OPENDYNAMICmycurUSINGDESCRIPTORsqlda;
FETCHmycurUSINGDESCRIPTORsqlda;
m=sqlda.numoutputs//获取输出参数的个数,即Select中列的个数
DOWHILEsqlca.sqlcode=0//测试查询是否成功
str=""//将查询结果变为一个串
FORn=1TOm//处理所有输出参数
CHOOSECASEsqlda.outparmtype[n]//判断每个输出参数的类型
CASEtypeinteger!
typedecimal!
TypeDouble!
//输出参数为Integer,decimal,Double型
str=str+string(sqlda.getdynamicnumber(n))+""
CASEtypestring!
//输出参数为String型
str=str+trim(sqlda.getdynamicstring(n))+""
CASEtypedate!
//输出参数为Date型
str=str+string(sqlda.getdynamicdate(n))+""
ENDCHOOSE
NEXT
lb_1.additem(str)//显示查询结果
FETCHmycurUSINGDESCRIPTORsqlda;//处理下一条记录LOOP
CLOSEmycur;//关闭游标
4.创建数据管理子系统的子窗口
在基本窗口的基础上,通过继承的方式创建学生信息管理窗口w_stuupdata,在窗口上添加八个命令按钮和一个静态文本控件和一个分组框控件。
通过继承w_stuupdata创建w_course.在基本窗口w_base的基础上通过继承的的方式创建窗口w_achieveupdata.
窗口W_stuupdata图
窗口W_course图
窗口W_achieveupdata图
5.为数据管理的子系统的子窗口编写脚本,并建立各窗口之间的连接。
创建帮助子系统的子窗口,并建立各窗口之间的连接及相应的脚本.
(1)建立各窗口之间的连接
A.在窗口w_data中的“学生信息管理”命令按钮clicked的事件中编写代码:
Open(w_stuupdata)
B.在w_data窗口中的“课程信息管理”命令按钮的clicked事件中编写代码:
Open(w_course)
C.在w_data窗口中的“学生成绩信息管理”命令按钮的clicked事件中编写代码:
Open(w_achieveupdata)
(2)编写窗口w_stuupdata的脚本
OPEN事件:
dw_1.SetTransObject(SQLCA)
增加记录按钮cb_2的clicked事件:
Longrow
Row=dw_1.InsertRow(0)
dw_1.SetRow(row)
dw_1.ScrollToRow(row)
dw_1.SetFocus()
插入记录按钮cb_5的clicked事件:
Longrow
row=dw_1.InsertRow(dw_1.GetRow())
dw_1.SetRow(row)
dw_1.ScrollToRow(row)
dw_1.SetFocus()
删除记录按钮cb_4的clicked事件:
dw_1.DeleteRow(dw_1.GetRow())
显示记录按钮cb_6的clicked事件:
dw_1.Retrieve()
更新记录按钮cb_3的clicked事件:
dw_1.Update()
dw_1.ReSet()
返回按钮cb_1的clicked事件:
close(parent)
下一记录按钮cb_7的clicked事件:
dw_1.ScrollNextRow()
dw_1.SelectRow(dw_1.GetRow()-1,false)
dw_1.SelectRow(dw_1.GetRow(),true)
上一记录按钮cb_8的clicked事件:
dw_1.ScrollPriorRow()
dw_1.SelectRow(dw_1.GetRow()+1,false)
dw_1.SelectRow(dw_1.GetRow(),true)
6.创建数据窗口对象
一共创建了5个数据窗口对象
(1)在w_stu的dw_1的数据窗口对象d_1
(2)在w_select的dw_1的数据窗口对象d_2
(3)在W_achievement中新建了一个数据窗口d_3,主要用于XS_CJ表,KC表及XS中按学号和课程号检索学生的课程与成绩信息.
(4)在窗口w_stuupdata中新建一个数据窗口对象d_4主要用于管理XS表中的信息。
(5)在w_course窗口中新建一个数据窗口d_5对象,主要用于管
表KC中的信息。
7.创建帮助子系统的子窗口,并建立各窗口之间的连接及编写相应的脚本
(1)建立帮助子系统的子窗口:
在基本窗口的基础之上,通过继承的方式创建使用帮助窗口。
窗口W_help图
(2)建立窗口之间的连接。
在窗口w_main中的“使用帮助”命令按钮clicked的事件中编写代码:
Open(w_help)。
8.创建数据通道系统的子窗口,并编写相应的脚本
窗口w_pipe图
编写窗口w_pipe的脚本
(1)在窗口w_mian中的“数据通道”命令按钮clicked事件中编写代码:
Open(w_pipe)
(2)创建服务器数据库cour_pro,并配置其数据源。
创建两个数据管道:
pipe_0,pipe_1。
Pipe_0:
将XSCJ数据库中的表XS中的数据上传到数据库cour_pro中以更新数据;
Pipe_1:
将cour_pro中的表stu中的数据下载到XSCJ数据库中。
(3)在窗口w_pipe中定义函数Connectserver()表示连接服务器数据库、error(integerret)错误处理、sartpipe(Transationsourcetrans,Transactiondesttrans,stringp_object)开始管道操作。
(4)编写代码
在窗口w_pipe中,声明以下InstanceVariables对象实例:
//定义事务处理对象serverdb
//serverdb用来连接服务器数据库
Transactionserverdb
//定义数据管道对象u_pipe
Pipelineu_pipe
在窗口w_pipe的open事件中编写代码:
//定义事务处理对象实例变量serverdb
serverdb=CreateTransaction
//定义数据管道对象实例变量
u_pipe=Createpipeline
在窗口w_pipe的close事件中编写代码:
//释放数据管道对象
DESTROYu_pipe;
//释放事务处理对象
DISCONNECTUSINGsqlca;
DESTROYsqlca;
DISCONNECTUSINGserverdb;
DESTROYserverdb;
在“取消”命令的clicked事件中编写代码:
Intret
ret=u_pipe.Cancel()//终止管道运行
IFret=1THEN
MessageBox("取消操作成功","终止管道运行")
ELSE
MessageBox("取消操作失败","未能终止管道运行")
ENDIF
在“返回”命令按钮cb_return的clicked事件中编写代码:
Close(PARENT)
在连接服务器数据库的函数Connectserver()中编写代码:
//该函数无参数,返回值为sqlcode
//连接服务器数据库
//这里为方便实验,选用了另一个本地库cour_pro
serverdb.autocommit=true
serverdb.DBMS="odbc"
serverdb.database="cour_pro"
serverdb.userid="dba"
serverdb.dbpass="sql"
serverdb.servername=""
serverdb.logid=""
serverdb.logpass=""
serverdb.dbparm="CONNECTstring='dsn=stu;uid=dba;pwd=sql'"
CONNECTUSINGserverdb;
RETURNserverdb.sqlcode
在错误处理函数error(integerret)中编写代码:
//该函数的入口参数ret,表示执行数据管道操作返回的错误代码。
//该函数无返回值。
Stringmsg
CHOOSECASEret
CASE-1
msg="打不开数据管道"
CASE-2
msg="列数太多"
CASE-3
msg="要创建的表已经存在"
CASE-4
msg="要增加数据的表不存在"
CASE-5
msg="未建立与数据库的连接"
CASE-6
msg="参数错误"
CASE-7
msg="列不匹配"
CASE-8
msg="访问源数据库的SQL语句致命错误"
CASE-9
msg="访问目标数据库的SQL语句致命错误"
CASE-10
msg="已经达到指定的最大错误数"
CASE-12
msg="不正确的表语法"
CASE-13
msg="需要关键字、但未指定关键字"
CASE-15
msg="数据管道已经在运行"
CASE-16
msg="源数据库出错"
CASE-17
msg="目标数据库出错"
CASE-18
msg="目标数据库处于只读状态,不能写入数据"
ENDCHOOSE
MessageBox("数据管道运行出错",msg,StopSign!
ok!
)
在执行管道操作的函数startpipe(Transactionsourcetrans,Transactiondesttrans,stringp_object)中编写代码:
//该函数有三个入口参数sourcetrans、desttrans、p_object
//该函数无返回值。
//参数sourcetrans表示源事务处理对象
//参数desttrans表示目标事务处理对象
//参数p_object表示在数据库画板中创建的数据管道对象
Integerret
//定义数据管道对象实例变量
u_pipe.DataObject=p_object//设置数据管道对象
ret=u_pipe.Start(sourcetrans,desttrans,w_pipe.dw_1)
IFret<>1THEN
error(ret)//转错误处理程序
ELSE
MessageBox("数据管道运行成功","操作成功")
ENDIF
sle_2.text=String(u_pipe.RowsRead)//显示已读数据行数
sle_1.text=String(u_pipe.RowsWritten)//显示已写数据行数
sle_3.text=String(u_pipe.RowsInError)//显示出错数据行数
四、课程设计总结和体会
在本次课程设计中通过学生管理系统实例介绍了用PowerBuilder开发数据库应用程序的过程,介绍了开发应用系统时的系统分析,功能设计,数据库设计以及数据库的实现,具体描述了实例中各种PowerBuilder对象的设计方法,较为系统、全面的总结了PowerBuilder的应用。
个人在设计调试整个系统的时候遇到许多问题,并通过书上的解说和请教老师来解决我在设计时所面临的问题。
本人从中学习到了很多知识,并在以后的学习中希望能学到很多,来完成自己所设计的系统。
在这里衷心感谢王老师的耐心指导。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华北 科技学院 powerbuilder 课程设计 报告 学生 成绩 数据库 管理 系统