华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统.docx

上传人:b****6 文档编号:3407047 上传时间:2022-11-22 格式:DOCX 页数:25 大小:4.42MB
下载 相关 举报
华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统.docx_第1页
第1页 / 共25页
华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统.docx_第2页
第2页 / 共25页
华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统.docx_第3页
第3页 / 共25页
华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统.docx_第4页
第4页 / 共25页
华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统.docx

《华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统.docx》由会员分享,可在线阅读,更多相关《华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统.docx(25页珍藏版)》请在冰豆网上搜索。

华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统.docx

华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统

 

华北科技学院powerbuilder课程设计报告学生成绩数据库管理系统

 

-第1学期

PowerBuilder程序设计

(专业选修课)

 

学号:

姓名:

班级:

答辩情况:

1、程序难易程度:

难(),较难(),一般(),简单();

2、程序工作量:

大(),较大(),一般(),较小();

3、基本操作:

熟练(),较熟练(),一般(),不熟练(),

极不熟练();

4、代码理解:

准确(),较准确(),一般(),不准确(),

极不准确();

平时成绩:

优秀(),良好(),中等(),一般()

总评成绩:

任课教师:

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的应用。

个人在设计调试整个系统的时候遇到许多问题,并经过书上的解说和请教老师来解决我在设计时所面临的问题。

本人从中学习到了很多知识,并在以后的学习中希望能学到很多,来完成自己所设计的系统。

在这里衷心感谢王老师的耐心指导。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1