有效的管理条件
查询要求查询结果
有效的查询条件
无效
输入
数据库文件
0层数据流图
二、延边大学科研管理系统登陆系统流程图
密码错误
三、延边大学科研管理系统论文部分功能模块图
第六部分主要功能分析
近几年由于延边大学教师及学生发表论文以及科研成果、著作的增加。众多科研信息的管理方面变得越来越复杂化,为了管理好科研信息,所以很有必要开发一个科研管理系统来对学校科研信息进行管理,以方便管理人员进行管理和用户进行查询。下面我们就根据设计当中的各个模块来具体介绍一下延边大学科研管理系统的主要功能,以及毕业设计中所遇到的问题及其解决方式。
一、用户维护模块
这个模块分为增删用户和更改口令两个部分。
*增删用户功能:
实现过程中直接使用SQL语句直接操作数据库中的数据
1、新增用户
//判断新加的用户名是否已经存在
如果xm1不为空则需要重新添加用户名
selectnameinto:xm1from_userwherename=:xm;
iflen(xm1)>0then
messagebox("","该用户名已有人使用!~n~n请换名!")
sle_xm.setfocus()
return
根据新增用户选择的权限设置:qxl
ddlb_qx.text="修改权限"then
qxl='1'
else
qxl='2'
把xm,:kl,:qxl添加到表_user中
insertinto_user(name,password,jb)
values(:);
commit;//返回数据库操作
2、删除用户
利用dw_1.getrow()得到当前选定的数据项,dw_1.deleterow数据窗口函数删除当前选定用户dw_1.update()更新数据,返回数据库。
intn
n=messagebox("","确实要删除吗?",question!,yesno!,2)
ifn=1then
dw_1.deleterow(dw_1.getrow())
dw_1.update()
commit;
endif
*口令修改功能
//判断原密码是否正确
stringxm,kl,xkl
integern
xm=trim(sle_1.text)
selectpasswordinto:klfrom_userwherename=:xm;
xkl=sle_2.text
ifxkl<>klthen
messagebox("","原口令不正确!~n~n请重新输入!")
sle_2.setfocus()
return
endif
//修改数据库中原来的口令为新的口令
ifsle_3.text=sle_4.textthen
update_usersetpassword=:sle_3.textwherename=:xm
commit;
messagebox("","修改成功!")
close(parent)
else
messagebox("","新口令不统一!~n~n请重新输入!")
endif
二、论文管理模块
由于本系统管理的信息量很大,因此我们创建了论文管理,专利管理,著作管理等多个主窗口。在每个窗口中都能够完成添加,删除,修改,更新等功能。现在议论文管理为主说明:
本窗口是科研管理系统的核心部分,系统中的论文管理,专利管理,著作管理等都采用了此窗口的模式,在本窗口中使用了TAB页控件,分别在TAB页加入了基本信息,作者信息和列表信息使用户在使用系统时可以方便的查看与基本信息有关的作者信息,不必再打开其它窗口,在每个TAB页中都使用了数据窗口对象和数据窗口控件用以显示数据信息,在基本信息页中数据窗口对象的显示格式选择了自由格式而作者信息中选择了表格格式,自由格式在显示数据时只显示一条数据记录表格格式则显示多条,这样可以实现一个作品对应多个作者的情况,把数据窗口对象和数据窗口控件组合成一个整体并不能显示数据,必须把数据窗口控件和事物对象联系起来,在PowerBuilder中开发人员可以自己定义事物对象,也可以使用PowerBuilder提供的默认事物对象SQLCA(SQL通信区域)本系统使用了使用了默认的事物对象,要想对数据库进行操作必须调用SETTANS或SETTANSOBJECT函数。
在窗体的右上角设置了一个组合单选控件,其中显示了理工,人文以及全部三个单选按钮,当某一项被选中时,基本信息中显示相应学院的内容,用户可以根据需要使用单选框,在基本信息页中不仅有论文信息还有该论文作者信息的数据窗口控件,其中显示的内容是与论文信息窗口的内容匹配的,即作者信息数据窗口中显示的是论文的作者,在论文信息数据控件的rowfocuschanged事件中使用函数.retrieve
判断数据窗口的查询模式querymode
ifn<>0andthis.object.datawindow.querymode='no'then
利用getitemstring函数的到论文编号
_lwbh=dw_1.getitemstring(n,"lwbh")
根据_lwbh显示数据
tab_1.tabpage_3.dw_4.retrieve(_lwbh)
在作者信息页中也提供添加,删除,保存的功能,这些按钮完成当前论文作者增删,在作者信息页中还提供了一个作者信息按钮,作者信息按钮先获得当前的人员编号将人员编号传给kyry_xxzl窗口。
以下是这些功能的实现代码:
openwithparm(kyry_xxzl,bh)
在kyry_xxzl窗口中根据接受的bh显示作者的信息
在列表页中提供了任意查询和组合查询,如果使用组合查询则打开一个查询窗口用户可以根据需要填写查询信息进行查询,任意查询具有更大的灵活性
tab_1.tabpage_2.dw_2.object.datawindow.querymode='yes'
tab_1.tabpage_2.dw_2.object.datawindow.queryclear="yes"
通过上面的语句确定查询模式
确定查询条件后,窗口显示所查询的结果
1、添加按扭的实现
在输入新数据时按此键,首先显示提示信息,按照提示信息用户可以填入新的数据,由于在用户按此键之后,按钮自动变为取消,该按钮的文本变成保存,如果要取消添加用户可继续按取消键,窗口将返回按添加键之前的状态。
//显示提示信息要求首先选择学科以产生论文编号
ifthis.text="添加"then
ifrb_3.checked=truethen
messagebox("","请选择学科!")
return
endif
//产生论文编号过程
ifdw_1.rowcount()=0then
bh=xk+string(1,'00000')
else
计算dw_1的总的行数,负值给n
n=dw_1.rowcount()
bhs=integer(right(dw_1.getitemstring(n,1),5))+1
滚动数据到最后一行
dw_1.scrolltorow(n)
函数string(bhs,"00000")将bhs转换成格式为"00000"的字符串
bh=xk+string(bhs,"00000")
endif
//将按钮的显示文本变为"取消"
this.text='取消'
else
//如果按钮显示取消
//将按钮的显示文本变为"添加"
this.text='添加'
计算dw_1的总的行数,负值给n
n=dw_1.rowcount()
删除要添加数据行是产生的新空行
dw_1.deleterow(n)
程序流程图如下;
Yes
No
No
Yes
2删除键实现
intok
stringlwbh_ls
ok=messagebox("!","确实要删除该记录?",exclamation!,okcancel!,2)
ifok=1then
dw_1.deleterow(0)
dowhiledw_3.rowcount()>0
dw_3.deleterow(0)
loop
ifdw_3.update()=1then
commit;
else
messagebox("信息窗口","数据保存失败~n~n请重试!")
rollback;
endif
cb_4.triggerevent(clicked!)
endif
用户按此键系统显示提示信息窗口,确定删除后系统会删除当前记录且操作数据库内容。如果要取消删除可以再次按此键(此键文本已经变为"取消")则取消删除操作
3保存键实现
dw_1.accepttext()
longr
r=dw_1.getrow()
//判断有无未添写内容
ifisempty(dw_1,r,"lwmc","论文名称")=0then
return
endif
ifdw_1.getitemnumber(r,"zzrs")<=0orisnull(dw_1.getitemnumber(r,"zzrs"))then
messagebox("信息窗口","人数不能空或负数!")
dw_1.setcolumn("zzrs")
dw_1.setfocus()
return
endif
ifisnull(dw_1.getitemdatetime(r,"fbsj"))then
messagebox("信息窗口","发表时间不能为空!")
dw_1.setcolumn("fbsj")
dw_1.setfocus()
return
endif
ifisempty(dw_1,r,"dwdm","单位代码")=0then
return
endif
ifisempty(dw_1,r,"lwlxdm","论文类型")=0then
return
endif
ifisempty(dw_1,r,"kwmc","刊物名称")=0then
return
endif
ifisempty(dw_1,r,"kwqh","刊物期号")=0then
return
endif
ifisempty(dw_1,r,"zyzk","刊物或内容类别")=0then
return
endif
ifisempty(dw_1,r,"xkdm","学科名称")=0then
return
endif
ifisempty(dw_1,r,"yzdm","语种")=0then
return
endif
//存储记录
ifdw_1.update()=1then
commit;
else
// messagebox("信息窗口","数据保存失败~n~n请重试!")
rollback;
return
endif
cb_2.text="添加"
cb_10.text="修改"
setzt1(dw_1,cb_5,cb_6)
setcb2(tab_1.tabpage_1.cb_3,tab_1.tabpage_1.cb_10,tab_1.tabpage_1.cb_8,cb_1)
cb_2.enabled=true
cb_8.enabled=true
setcb2(cb_17,cb_18,cb_19,cb_20)
tab_1.tabpage_1.sle_4.text=''+string(tab_1.tabpage_1.dw_1.rowcount())
tab_1.tabpage_1.sle_5.text=tab_1.tabpage_1.sle_4.text
tab_1.tabpage_2.dw_2.retrieve()//刷新列表显示内容
按保存键能保存窗口中的数据在删除。修改,添加中都触发了保存键
自定义函数isempty判断数据窗口中是否含有空值
例如判断单位代码是否为空
isempty(dw_1,r,"dwdm","单位代码")
更新数据保存到数据库。
ifdw_1.update()=1then
commit;
commit为SQL语句
4修改键实现
当需要修改已有数据记录时,只要在按次按钮后便可对数据内容进行修改,在按更新键,完成了数据修改。
程序流图:
Y
N
N
Y
定义数据子窗口
datawindowchildfld
获得数据子窗口fld,把"lwfldm"数据加到fld中
dw_1.getchild("lwfldm",fld)
连接事物对象
fld.settransobject(sqlca)
tj为希望显示数据的条件
tj="left(codeid,2)='LW'andmid(codeid,3,1)<>'"+mc+"'"
设置fld中的过滤条件
fld.setfilter(tj)
数据子窗口进行过滤操作
fld.filter()
二、任意查询的实现
在各个主窗口中都提供了任意查询,给用户查找所需信息提供了方便
上一篇:
PB电子词典设计与开发(论文和程序)
下一篇:
试析影响公路路面平整度的因素及应采取的施工措施