Pb学生管理系统源代码.docx
- 文档编号:8559174
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:36
- 大小:26.60KB
Pb学生管理系统源代码.docx
《Pb学生管理系统源代码.docx》由会员分享,可在线阅读,更多相关《Pb学生管理系统源代码.docx(36页珍藏版)》请在冰豆网上搜索。
Pb学生管理系统源代码
PowerBuilder的创始人米歇尔克茨曼。
PowerBuilder奠基人大卫李特瓦克。
1991年6月。
Powersoft公司发布了其旗标式客户/服务器硬功开发工具。
1995年PowerBuilder1.0
1996年PowerBuilder5.0
2003年PowerBuilder9.0
PowerBuilder特点:
面向对象的编程和时间去懂的应用开发程序开发工具,
支持跨平台开发
可以轻松编写语句
人性化设计。
拥有独特的库文件画板和层次清晰的系统资源库。
提供了丰富多样不同风格的数据窗口
PowerBuilder9.0新特性。
支持快速开发的jsp编辑器。
支持xml、PBNI(PowerBuilderNativeInterface)、EJBClient、PB9.0与WebService的关系,PB9.0与.NET、其他增强功能。
建立应用对象
建立Student的工作区和目标,然后建立一个名为student的对象在其Open事件中加入如下脚本:
//设置SQLCA的属性,利用名为pbexam的数据源连接数据库
SQLCA.DBMS="ODBC"
SQLCA.AutoCommit=False
SQLCA.DBParm="Connectistring='DSN=pbexam'"
CONNECTUSINGSQLCA;
//打开登录窗口
open(w_register)
在应用程序的Close事件中加入如下脚本:
//断开数据库连接
DISCONNECTUSINGSQLCA;
登录窗口
在用户名的单行编辑框的ue_enterkey事件中加入如下脚本:
//判断用户是否按下回车
Ifkey=KeyEnter!
Then
//把输入焦点转移到"密码"单行编辑框
sle_2.SetFocus()
EndIf
在密码单行编辑框的ue_enterkey事件中加入如下脚本:
Ifkey=KeyEnter!
Then
//触发登录按钮的Clicked事件
cb_1.TriggerEvent(Clicked!
)
EndIf
在登录按钮的Clicked事件的脚本中加入如下脚本:
Stringpassword,right
//用SQL语句根据用户名查找密码
//right为一全局变量,用来保存用户权限
SELECTmm,qx
INTO:
password,right
FROM"yh"
WHERE"yh"."hm"=:
sle_1.text;
//SQLCode等于100代替没有得到任何记录。
IfSQLCA.SQLCode=100Then
MessageBox("提示消息","没有此用户")
sle_1.text=""
sle_1.SetFocus()
ElseIfpassword<>sle_2.textThen
MessageBox("提示信息","密码错误!
")
sle_2.text=""
sle_2.SetFocus()
Else
//打开主窗口,关闭登录窗口
Open(w_main)
Close(Parent)
EndIf
在取消按钮的Clicked事件的中加入如下脚本:
Close(parent)//关闭登录窗口
菜单设计
在学生管理菜单项的Clicked事件中加入如下脚本:
//打开学生管理窗口
OpenSheet(w_student,w_main,4)
在页面设置菜单项的Clicked事件中加入如下脚本:
windowactsheet
//取得当前活动窗口
actsheet=w_main.GetActiveSheet()
//触发活动窗口的ue_pageset事件
actsheet.TriggerEvent("ue_pageset")
在打印菜单项的Clicked事件中加入如下脚本:
windowactsheet
actsheet=w_main.GetActiveSheet()
actsheet.TriggerEvent("ue_print")
在退出菜单项的Clicked事件中加入如下脚本:
Close(ParentWindow)
在窗口级联菜单项的Clicked事件中加入如下脚本:
//修改菜单的选中标志
m_jilian.checked=True
m_chongdie.checked=False
m_shuiping.checked=False
m_chuizhi.checked=False
//改变工作表的排列方式
ParentWindow.ArrangeSheets(cascade!
)
在窗口重叠菜单项的Clicked事件中加入如下脚本:
m_jilian.checked=False
m_chongdie.checked=True
m_shuiping.checked=False
m_chuizhi.checked=False
ParentWindow.ArrangeSheets(Layer!
)
在窗口水平菜单项的Clicked事件中加入如下脚本:
m_jilian.checked=False
m_chongdie.checked=False
m_shuiping.checked=True
m_chuizhi.checked=False
ParentWindow.ArrangeSheets(Tile!
)
在窗口垂直菜单项的Clicked事件中加入如下脚本:
m_jilian.checked=False
m_chongdie.checked=False
m_shuiping.checked=False
m_chuizhi.checked=True
ParentWindow.ArrangeSheets(TileHorizontal!
)
在个人成绩统计菜单项的Clicked事件中加入如下脚本:
//打开专业选择窗口,并把统计的类型作为参数传递给专业选择窗口
OpenWithParm(w_selectzy,"person",w_main)
MDI主窗口
在主窗口的Open事件中加入如下脚本:
//如果不是系统管理员则屏蔽用户管理菜单项
Ifright<>1thenm_main.m_file.m_id.visible=False
//因为打开主窗口后还没有打开任何工作表,所以把和工作表相关的功能菜单的Enabled属性设为false
m_main.m_file.m_pageset.enabled=False
m_main.m_file.m_preview.enabled=False
m_main.m_file.m_previewcancle.enabled=False
m_main.m_file.m_print.enabled=False
m_main.m_edit.m_insert.enabled=False
m_main.m_edit.m_del.enabled=False
m_main.m_edit.m_save.enabled=False
m_main.m_edit.m_append.enabled=False
m_main.m_edit.m_retrieve.enabled=False
m_main.m_edit.m_prior.enabled=False
m_main.m_edit.m_next.enabled=False
m_main.m_edit.m_first.enabled=False
m_main.m_edit.m_last.enabled=False
m_main.m_caozuo.m_select.enabled=False
m_main.m_caozuo.m_find.enabled=False
m_main.m_caozuo.m_sortasc.enabled=False
m_main.m_caozuo.m_sortdesc.enabled=False
m_main.m_window.m_jilian.enabled=False
m_main.m_window.m_chongdie.enabled=False
m_main.m_window.m_shuiping.enabled=False
m_main.m_window.m_chuizhi.enabled=False
学生管理窗口
在学生管理窗口的Open事件中加入如下脚本:
//为数据窗口分配事务对象,并检索数据
dw_stu.SetTransObject(SQLCA)
dw_stu.Retrieve)_
//用静态文本显示当前日期
st_1.text=string(today(),"yyyy/mm/dd")
在查询按钮的Clicked事件中加入如下脚本:
Ifsle_1.text=""Then
//如果没有输入查询关键字提示输入
MessageBox("提示","请输入您要查询的关键字")
sle_1.SetFocus()
Else
//按输入的姓名查询,并用like事件模糊查询
dw_stu.setFilter("xmlike'%"+sle_1.text+"%'")
dw_stu.filter()
dw_stu.SetFocus()
EndIf
在学生管理窗口的Activate事件中加入如下脚本:
//此事件在当前窗口获得焦点时触发
//如果当前用户不是系统管理员和数据管理员则屏蔽和数据修改有关的菜单项
Ifright>2Then
m_main.m_edit.m_insert.enabled=False
m_main.m_edit.m_del.enabled=False
m_main.m_edit.m_save.enabled=False
m_main.m_edit.m_append.enabled=False
Else
m_main.m_edit.m_insert.enabled=True
m_main.m_edit.m_del.enabled=True
m_main.m_edit.m_save.enabled=True
m_main.m_edit.m_append.enabled=True
EndIf
//在当前窗口得到焦点后设置菜单项的enabled属性为True
//在窗口得到焦点时使用菜单项即可
m_main.m_file.m_pageset.enabled=True
m_main.m_file.m_preview.enabled=True
m_main.m_file.m_previewcancle.enabled=True
m_main.m_file.m_print.enabled=True
m_main.m_edit.m_retrieve.enable=Ture
m_main.m_edit.m_prior.enable=Ture
m_main.m_edit.m_next.enable=Ture
m_main.m_edit.m_first.enable=Ture
m_main.m_edit.m_last.enable=Ture
m_main.m_caozuo.m_select.enabled=True
m_main.m_caozuo.m_find.enabled=True
m_main.m_caozuo.m_sortasc.enabled=True
m_main.m_caozuo.m_sortdesc.enabled=True
m_main.m_window.m_jilian.enabled=True
m_main.m_window.m_chongdie.enabled=True
m_main.m_window.m_shuiping.enabled=True
m_main.m_window.m_chuizhi.enabled=True
在学生管理窗口的CloseQuery事件中加入如下脚本:
Integeri
//判断是否有数据的修改
Ifdw_stu.ModifiedCount()+dw_stu.DeletedCount()>oThen
i=MessageBox("提示","是否保存对数据的修改?
",Exclamation!
YesNoCancel!
)
Choosecasei
case1
//保存数据
Ifdw_stu.UpDate()=1Then
//如果保存成功则提交
COMMIT;
Else
ROLLBACK;
MessageBox("错误","数据库内容更新失败")
EndIf
case2
//不保存数据
Return0
case3
//阻止窗口的关闭
Return1
EndChoose
EndIf
在学生管理窗口的Resize事件中加入如下脚本:
//此事件在窗口改变大小时触发
//修改数据窗口的控件的位置及大小,使其随窗口的大小的改变而改变
dw_stu.x=10
dw_stu.y=150
//newwidth和newheight为该事件传递的参数,代表窗口的新宽度和高度
dw_stu.width=newwidth-20
dw_stu.height=newheight-160
在学生管理窗口的ue_append事件中加入如下脚本:
//事件追加功能
Longtherow
//在数据窗口最后一行插入
therow=dw_stu.insertrow(0)
//滚动到新加入的行
dw_stu.ScrollToRow(therow)
dw_stu.SetFocus()
在学生管理窗口的ue_del事件中加入如下脚本:
//实现删除功能
Integeri,m
m=0
Longtherow
i=MessageBox("提示信息","确认要删除行?
",exclamation!
YesNoCancel!
)
Ifi=1Then
//如果当前数据窗口中选择了多行则用循环语句删除多行
Do
//因为如果删除了第3行,那么原来第四行就变成了现在的第三行
//所以要把搜索的行号减1
therow=dw_stu.GetSelectedRow(therow-1)
Iftherow<>0Then
m=1
dw_stu.DeleteRow(therow)
EndIf
LoopWhiletherow<>0
//如果没有选中多行则删除当前行
Ifm=0Then
dw_stu.DeleteRow(0)
EndIf
EndIf
dw_stu.SetFocus()
在学生管理窗口的ue_filter事件中加入如下脚本:
//实现查询功能,打开查询窗口,并把数据窗口dw_stu作为参数传递过去,
//可以使用多个窗口功用一个查询窗口
OpenWithParm(w_filter,dw_stu,w_student)
在学生管理窗口的ue_find事件中加入如下脚本:
//实现查询功能,打开查询窗口,并把数据窗口dw_stu作为参数传递过去,
//可以使用多个窗口功用一个查询窗口
OpenWithParm(w_filter,dw_stu,w_student)
在学上管理窗口的ue_first事件中加入如下脚本:
//滚动到第一行,实现最前一个的功能
dw_stu.ScrollToRow
(1)
dw_stu.SetFocus()
在学上管理窗口的ue_insert事件中加入如下脚本:
//实现插入功能
Longtherow,therow1
//得到当前数据窗口当前行,并在当前行前面插入
therow=dw_stu.GetRow()
therow1=dw_stu.InsertRow(therow)
dw_stu.SetRow(therow1)
dw_stu.SetFocus()
在学上管理窗口的ue_last事件中加入如下脚本:
//滚动到最后一行,实现最后一个的功能
Longtherow
therow=dw_stu.RowCount()
dw_stu.ScrollToTow(therow)
dw_stu.SetFocus()
在学上管理窗口的ue_next事件中加入如下脚本:
//滚动到下一行,实现下一个功能
dw_stu.ScrollPriorRow()
dw_stu.SetFocus()
在学上管理窗口的ue_prior事件中加入如下脚本:
//滚动到上一行,实现上一个的功能
dw_stu.ScrollPriorRow()
dw_stu.SetFocus()
在学上管理窗口的ue_pageset事件中加入如下脚本:
//实现页面设置功能,打开页面设置窗口,并把数据窗口dw_stu作为参数传递过去,
//可以使多个窗口共用一个页面设置窗口
OpenWithParm(w_pageset,dw_stu,w_student)
在学上管理窗口的ue_preview事件中加入如下脚本:
//实现打印预览功能,打开打印预览窗口,并把数据窗口dw_stu作为参数传递过去
//可以使多个窗口功用一个打印预览窗口
OpenWithParm(w_preview,dw_stu,w_student)
在学生管理窗口的ue_previewcancle事件中加入如下脚本:
//取消数据窗口的预览模式
dw_stu.modify("datawindwo.print.preview=No")
dw_stu.SetFocus()
在学生管理窗口的ue_print事件中加入如下脚本:
//实现打印预览功能,打开打印预览窗口,并把数据窗口dw_stu作为参数传递过去,
//可以使多个窗口功用一个打印预览窗口
OpenWithParm(w_pageset,dw_stu,w_student)
在学生管理窗口的ue_retrieve事件中加入如下脚本:
//实现检索功能,把过滤条件设置为空,并重新检索数据
dw_stu.setFilter("")
dw_stu.SetSort("")
dw_stu.SetTransObject(SQLCA)
dw_stu.Retrieve()
dw_stu.SetFocus()
在学生管理窗口的ue_save事件中加入如下脚本:
//实现保存功能
Ifdw_stu.UpDate()=1Then
COMMIT;
Else
ROLLBACK;
MessageBox("错误","数据库内容更新失败")
EndIf
在学生管理窗口的ue_sortasc事件中加入如下脚本:
//实现升序的功能
Stringls_ColumnName
//得到数据窗口中当前列的列名
Is_ColumnName=dw_stu.GetCOlumnName()
IfIs_ColumnName<>""Then
dw_stu.SetSort(Is_ColumnName+"A")
dw_stu.Sort()
Else
MessageBox("提示","请您点击数据窗口中的某一列,将此列按升序排列")
EndIf
在学生管理窗口的ue_sortdesc事件中加入如下脚本:
//实现降序的功能
StirngIs_ColumnName
Is_ColumnName=dw_stu.GetColumnName()
IfIs_ColumnName<>""Then
dw_stu.SetSort(Is_ColumnName+"D")
dw_stu.Sort()
Else
MessageBox("提示","请您点击数据窗口中的某一列,将此列按升序排列")
EndIf
在数据窗口控件dw_stu的Clicked事件中加入如下脚本:
//通过单击可以选择一行或多行
Longtherow,startrow,endrow
IfKeyDown(KeyControl!
)Then//如果按着Ctrl键则使点击的行被选择
Ifrow>0Then
//row是系统传递到Clicked事件的参数,代表当前鼠标点击的行
//事件的参数可以在脚本编辑器的“PasteArgument”下拉列表框中查看
this.SelectRow(row,True)
Else
Return
EndIf
ElseIfkeyDown(keyShift!
)Then//如果按着shift键则选择一定范围内的行
startrow=this.GetRow()
endrow=row
Ifstartrow>endrowThen
Fortherow=startrowToendRowStep-1
this.SelectRow(therow,True)
Next
Else
Fortherow=startrowToendrow
this.SelectRow(therow,True)
Next
EndIf
Else
//如果没有按Ctrl和Shift键,则取消选中状态
this.SelectRow(0,False)
EndIf
在数据窗口控件dw_stu的DBError事件中加入如下脚本:
//用自己的错误提示来屏蔽某些系统的错误提示
ChoosecaseSQLDBCode
//SQLAnywhere8.0主码重复的错误脚本为-193
//可以特意发生错误从而得到数据库管理系统的特定的错误脚本
case-193
MessageBox("提示信息","第"+string(row)+&"行学生编号重复",Exclamation!
OK!
)
ScrollToRow(row)
Return1
EndChoose
Return0
在数据窗口控件dw_stu的DoubleClicked事件中加入如下脚本:
//双击打开成绩管理窗口,显示该学生的成绩
StringExpression
//得到当前行的学号,并拼出成绩的窗口的数据的过滤条件
Expression="xk_xh='"+this.object.xh[row]+"'"
OpenSheetWithParm(w_score,Expression,w_main,4)
在数据窗口控件dw_stu的RetrieveEnd事件中加入如下脚本:
//此事件在数据检索完成后处罚
IntegerColIndex,ColNum
Ifright>2Then
//如果不是系统管理员和数据管理员则通过把列对象的Order
//设为0来阻止对数据的修改
ColNum=integer(this.describe("datawindow.column.count"))
ForColIndex=1ToColNum
this.SetTabOrder(ColIndex,0)
Next
End
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Pb 学生 管理 系统 源代码