7207数据库.docx

上传人:b****4 文档编号:12096661 上传时间:2023-04-17 格式:DOCX 页数:18 大小:267.93KB
下载 相关 举报
7207数据库.docx_第1页
第1页 / 共18页
7207数据库.docx_第2页
第2页 / 共18页
7207数据库.docx_第3页
第3页 / 共18页
7207数据库.docx_第4页
第4页 / 共18页
7207数据库.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

7207数据库.docx

《7207数据库.docx》由会员分享,可在线阅读,更多相关《7207数据库.docx(18页珍藏版)》请在冰豆网上搜索。

7207数据库.docx

7207数据库

 

院系:

信院电子系

专业:

信息与计算科学

学号:

11011100xx姓名:

xxx

2013年1月02日

powerBuilder(简称PB)开发学生成绩管理系统,该系统用于实现对学生信息,课程信息和学生成绩的增加,删除,修改查询等功能。

在实现上述功能时涉及了PB中对数据库的基本操作和对数据库中触发器以及存储过程的使用。

准备工作

1.在数据库PSXCJ中创建CXB表。

2.新建操作PSXCJ数据库数据源。

3.新建Profile:

与数据源相连。

一主应用程序与主题窗

1.主应用程序

前面介绍了建立数据库连接及通过数据库画板访问数据库的方法。

但是,在应用程序中药访问数据库必须通过事务对象实现,事务对象是一种特殊的非可视化对象。

在PB应用程序中,如果要连接和操作数据库,必须首先建立事务对象。

在PB中,对数据库操作的步骤如下:

(1)为事务对像属性赋值;

(2)连接到数据库;

(3)根据需要,将事务对像赋值该DataWindow空件或DataStore对象;

(4)执行数据库操作;

(5)断开与数据库的连接。

PB提供了一种默认的全局事务对象SQLCA,开发人员可使用默认对象建立与数据库的连接。

如果应用程序需同时操作多个程序,则必须建立另外的数据库事务对象。

在应用程序XSCJ的open()事件中添加代码,用于对默认是务对象SQLCA的属性赋值,并连接到数据库,具体代码如下:

SQLCA.DBMS="ODBC"

SQLCA.AutoCommit=False

SQLCA.DBParm="ConnectString='DSN=PXSCJ;UID=PUSER;PWD=123456'"

connectusingsqlca;

ifsqlca.sqlcode<>othen

messagebox("提示!

","连接数据库失败原因"+sqlca.sqlerrtext)

return

endif

open(stumain)

2.设计主题窗

设置主窗口MDI类型,并添加菜单,运行。

主要功能:

进入各个界面的主菜单。

创建过程:

(1)创建窗口stumain,WindowType为MDI类型。

(2)创建菜单stumen,添加菜单项。

(3)添加菜单代码,双击菜单项,会出现编辑窗口。

代码设计:

“学生信息查询”菜单Click事件代码;

open(stuseach)

功能:

打开stuseach学生信息查询窗口。

“学生信息修改”菜单Click事件代码;

open(stuinfo)

功能:

打开stuinfo学生信息修改窗口。

“学生成绩修改”菜单Click事件代码;

open(stuscore)

功能:

打开stuinfo学生成绩修改窗口。

④“成绩分布分析”菜单Click事件代码;

open(stuscorechart)

功能:

打开stuscorechart学生成绩修改窗口。

3学生信息查询

输入查询条件,在数据窗口中提示查询的结果。

主要功能:

根据用户的输入条件,运用数据窗口控件的过滤功能,实现数据的查询,并实现学生照片的更新。

创建过程:

(1)创建DataWindowsstuschdw,创建GRi功能的数据窗口。

单击“OK”按钮,进入数据源选择界面,选择SQL_Select。

单击“NEXT”按钮,进入数据表选择界面,选择xcb,xsb,表,并把xcb表中的性别和xsb表中的性别关联,选择xh,xm,xbm,cssj,zy,zxf,bz以供DataGrid显示。

(2)创建输入条件控件:

学号和姓名两个SingleLineEdit控件、专业DropDownListBox

控件和Picture控件,分别命名为“stuxh”、“stuxm”、“stuzy”、“StuZP”。

(3)创建DataWindow控件,命名为dw_1,DataObject对象为stuschdw。

代码设计:

窗口的“open”事件。

设置数据窗口的SetTransObject对象,并获得数据。

dw_1.SetTransTransObject(sqlca)

dw_1.retrieve

添加全局变量。

BLob{5485760}Ls_BLob

intpic_flag

stringcurrent_xh

“查询”Click事件。

根据输入从数据窗口中过滤符合条件的记录。

stringsql,strtmp

stringsstuxh,sstuxm,sstuzy

sstuxh=trim(StuXH.text)

sstuxm=trim(stuXM.text)

sstuzy=trim(stuZY.text)

ifsstuzy<>""then

strtmp="ZY="'+sstuzy+'"and"

strtmp=strtmp+"XHlike'%''+sstuxh'+''%'"

else

strtmp="XHlike'%''+sstuxh+''%'"

Endif

dw_1.setfilter(sstump)

dw_1.filer()

strtmp=""

ifsstuzy<>""then

ifstrtmp="ZY="'+sstuzy+'"and"

strtmp=strtmp+"XMlike'%''+sstuxm+''%'"

dw_1.setfilter(sstump)

dw_1.filer()

endif

else

strtmp="XMlike'%''+sstuxm+''%'"

dw_1.setfilter(sstump)

dw_1.filer()

Emdif

dw_1.retrieve()

④数据窗口Click事件

取当前学号,并从数据库取出其照片信息显示。

blobStuZPBlob

ifrow<>0then

current_xh=dw_1.getitemstring(row,"XH")

SELECTblobZP

INTO:

StuZPBlob

FROMXSBwhereXH=:

current_xh

usingsqlca;

StuZP.SetPicture(StuZPBlob)

endif

⑤“载入照片”Click事件

打开文件对话框,根据用户选择的图片,打开图片循环读入照片数据,存放到变量中去,并更新到数据库中。

stringLs_path,ls_file,ls_name,ls_parms,ls_dir,ls_commaned

integerls_num,ls_cs,i

integerfh,ret

blob{32768}is_pic_blob

//blob{5485760}ls_blob//max5M

stringdefext="JPG"

stringFilter="bitmapFiles(*.JPG),*.JPG"

ulongnbr,ls_len

ret=GetFileOpenName("OpenBitmap",Ls_path,ls_name,defext,filter)

IFret=1THEN

ls_len=filelength(ls_path)

ls_cs=ls_len/(32*1024)

ifmod(ls_len,)=0then

else

ls_cs=ls_cs+1

endif

ls_num=FileOpen(ls_path,StreamMode!

//IFls_len>32765THEN

nbr=1

fori=1tols_cs

ret=fileread(ls_name,is_pic_blob)

nbr=BlobEdit(ls_blob,nbr,is_pic_blob)

next

StuZP.SetPicture(ls_blob)

FileClose(ls_num)

pic_flag=1

ifpic_flag=1then

UPDATEBLOBXSB

SETZP=:

ls_blob

wherexh=:

current_xh

usingsqlca;

ifsqlca.sqlcode<>0then

rollback:

else

commit

pic_flag=0

endif

endif

ENDIF

4学生信息修改

对学生信息进行修改、删除的窗体,运行界面。

主要功能:

对学生信息修改、删除,通过基本的Select、Insert、Delete、Update来操作数据库,删除学生时系统调用Check_XSB_CJB触发器来保持数据的参照完整性。

创建过程:

1.界面设计。

参照界面分别放置控件,分别创建“查找”、“添加”、“删除”、“更新”的CommandButton。

2.代码设计。

“查找”Click事件处理。

stringsql

stringsstuXH,sstuXM,sstuBZ,sstuZY

datesstuCSSJ

booleansstuXB

intsstuZXF

selectXH,XM,XB,CSSJ,ZY,ZXF,BZ

into:

sstuXH,:

sstuXM,:

sstuBZ,:

sstuZY

fromXSB

whereXH=:

StuXH.textorXM=:

StuXM.text

usingsqlca;

StuXH.text=sstuXH

StuXM.text=sstuXM

ifsstuXBthen

StuXBN.checked=TRUE

else

StuXBV.checked=TRUE

endif

StuCSSJ.text=string(sstuCSSJ)

StuZY.text=sstuXHZY

StuZXF.text=string(sstuZXF)

StuBZ.text=sstuBZ

“添加”Click事件处理。

通过Insert语句,插入当前的学生记录。

stringsstuXH,sstuXM,sstuBZ,sstuZY

datesstuCSSJ

booleansstuXB

intsstuZXF

sstuXH=StuXH.text

sstuXM=StuXM.text

ifStuXBN.checkedthen

sstuXB=TRUE

else

sstuXB=FALSE

endif

sstuCSSJ.text=date(StuCSSJ.text)

sstuZY.text=StuZY

sstuZXF.text=integer(StuZXF.text)

sstuBZ.text=StuBZ

insertintoXSB(XH,XM,XB,CSSJ,ZY,ZXF,BZ)

values(:

sstuXH,:

sstuXM,:

sstuXB,:

sstuCSSJ,:

sstuZXF,:

sstuBZ,:

sstuZY)

usingsqlca;

ifsqlca.sqlcode<>0then

messagebox(“学生信息”,"添加失败!

")

else

messagebox(“学生信息”,"添加成功!

")

endif

“删除”Click事件处理。

通过Insert语句,插入当前的学生记录,会引起Check_XSB_CJB触发器的动作。

stringsstuXH

sstuXH=StuXH.text

datefromXSB

whereXH=:

sstuXH

usingsqlca;

ifsqlca.sqlcode<>0then

messagebox(“学生成绩管理”,"没有此学生!

")

else

messagebox(“学生成绩管理”,"删除成功!

")

endif

④“更新”Click事件处理。

stringsstuXH,sstuXM,sstuBZ,sstuZY

datesstuCSSJ

booleansstuXB

intsstuZXF

sstuXH=StuXH.text

sstuXM=StuXM.text

ifStuXBN.checkedthen

sstuXB=TRUE

else

sstuXB=FALSE

endif

sstuCSSJ=date(StuCSSJ.text)

sstuZY=StuZY.text

sstuZXF=integer(StuZXF.text)

sstuBZ=StuBZ.text

updateXSB

setXM=:

sstuXM,XB=:

sstuXB,CSSJ=:

sstuCSSJ,ZXF=:

sstuZXF,BZ=:

sstuBZ,ZY=:

sstuZY)

whereXH=:

sstuXH

usingsqlca;

ifsqlca.sqlcode<>0then

messagebox(“学生信息”,"更新失败!

")

else

messagebox(“学生信息”,"更新成功!

")

endif

5学生成绩修改

学成绩输入、修改的窗体。

主要功能:

用户选择专业和课程,这时下面的数据窗口中会显示相应课程的学生的成绩和学分,修改后批量更新到数据库,并更新相应学生的总学分,相应的存储过程实现请参照实习0.

创建过程:

(1)数据窗口的设计,Grid风格的数据窗口用来显示学生课程信息,这里选择TempCJB所需要的字段。

关闭保存为数据窗口stuscorein。

(2)成绩输入界面设计:

创建专业、课程名、学号的DropDownListBox,分别为stuzy、stukern,专业DropDownListBox中添加“计算机”、“通信工程”。

代码设计:

窗口的“open”事件。

添加课程名的显示项,设置dw_1数据窗口的SetTransObject对象,并获取数据。

stringskcm

dw_1.SetTransObject(sqlca)

//addKCMadd

declarecukcmcursorfor

selectKCMformKCBorderbyKCMdesc;

opencukcm;

fetchcukcminto:

skcm

//StuKCM.additem(skcm)

dowhilesqcla.sqlcode=0

StuKCM.additem(skcm)

fetchcukcminto:

skcm;

loop

closecukcm;

StuKCM.text=skcm

stugetscoreinfo()

dw_1.retrieve()

“专业”selectionchanged事件处理。

使用stugetscoreinfo从数据中载入当前选择的专业和课程的学生成绩信息。

stugetscoreinfo()

“课程名”selectionchanged事件处理。

使用stugetscoreinfo从数据中载入当前选择的专业和课程的学生成绩信息。

stugetscoreinfo()

④stugetscoreinfo()函数。

根据输入的学号、课程名,调用Load_CJ存储过程来载入当前选择的专业和课程的学生成绩信息到临时表Temp_CJB中并显示。

selectKCH

into:

sKCH

fromKCB

whereKCM=:

StuKCM.text

usingsqlca;

sZY=stuzy.text

sql="executeLoad_CJ?

?

"

preparesqlcafrom:

sqlusingsqlca;

executesqlcausing:

sKCH,:

sZY;

dw_1.retrieve()

⑤“更新”Click事件。

调用Write_CJ来批量更新临时表中的成绩信息,同时修改相应学生的总学分。

stringsql

stringsKCH,sZY

dw_1.update()

selectKCH

into:

sKCH

fromKCB

whereKCM=:

StuKCM.text

usingsqlca;

sZY=stuzy.text

sql="executeLoad_CJ?

?

"

preparesqlcafrom:

sqlusingsqlca;

executesqlcausing:

sKCH,:

sZY;

dw_1.retrieve()

ifsqlca.sqlcode<>0then

messagebox(“学生成绩管理”,"更新失败!

")

else

messagebox(“学生成绩管理”,"更新成功!

")

endif

6学生成绩分布分析

主要功能:

用户选择课程名,在图形统计控件中显示当前的课程的分数段统计情况。

创建过程:

(1)Graph控件:

Graph属性设定。

(2)界面设计创建课程名DropDownListBox,为stukcm。

代码设计:

窗口的“open”事件。

添加课程名的先是向,设置dw_1数据窗口的SetTranObject对象,并获得数据。

stringskcm

declarecukcmcursorfor

selectKCMformKCBorderbyKCMdesc;

opencukcm;

fetchcukcminto:

skcm

//StuKCM.additem(skcm)

dowhilesqcla.sqlcode=0

StuKCM.additem(skcm)

fetchcukcminto:

skcm;

loop

closecukcm;

StuKCM.text=skcm

“确定”Click事件事件。

查询当前的课程号,调用TJ_CJ存储过程,更新TJB并显示当前统计结果到图形界面。

intirs1,irs2,irs3,irs4,irs5

stringsKCH,sql

selectKCH

into:

sKCH

fromKCN

whereKCM=:

StuKCM.text

usingsqlca;

sql="executeTJ_CJ?

"

preparesqlsafrom:

sqlusingsqlca;

executesqlcausing:

sKCH;

selectrs1,rs2,rs3,rs4,rs5

into:

irs1,:

irs2,:

irs3,:

irs4,:

irs5

fromTJB

whereKCH=:

sKCH

usingsqlca;

gr_1.rest(ALL!

gr_1.addseries("<60")

gr_1.addseries("60-69")

gr_1.addseries("70-79")

gr_1.addseries("80-89")

gr_1.addseries("90-100")

gr_1.adddata(1,irs1)

gr_1.adddata(2,irs2)

gr_1.adddata(3,irs3)

gr_1.adddata(4,irs4)

gr_1.adddata(5,irs5)

附录

 

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

当前位置:首页 > 人文社科 > 军事政治

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

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