case else
m_main.m_1.m_11.visible = false
m_main.m_1.m_12.m_122.visible = false
m_main.m_1.m_b1.visible = false
m_main.m_1.m_15.visible = false
m_main.m_2.visible = false
m_main.m_3.m_34.visible = false
m_main.m_3.m_35.visible = false
m_main.m_3.m_36.visible = false
m_main.m_4.visible = false
m_main.m_5.m_52.visible = false
gs_ruler = "5"
end choose
//设置状态栏
dw_1.x = 0
dw_1.y = this.y - dw_1.height
dw_1.width = this.width
dw_1.settransobject(sqlca)
dw_1.insertrow(0)
dw_1.setitem(1,"BNNAM",gs_bnnam)
dw_1.setitem(1,"BDNAM",gs_bdnam)
dw_1.setitem(1,"TODAY",gd_today)
dw_1.setitem(1,"week",dayname(gd_today))
5.3、系统基本资料管理与维护
人员设置
长沙市国家税务局岳麓分局的每个职工都有所属的工作部门、工作职称、和相应的管理权限。在软件中可进行人员设置管理,其功能包括有新增职工、职工信息修改、职工权限设置和删除职工等职能。
(1)新增职工
首先由系统管理员录入职工的BNENO(员工编号)、BNNAM(姓名)、所属科室、职务代码和参加工作时间,单击“新增”按钮系统自动完成数据保存事务。其过程如下:
string ls_bdno,dwfilter
string ls_bneno
string ls_bnpwd
if dw_in.update() =1 then
commit;
//向密码表中增加新用户默认密码123
ls_bnpwd = "123"
ls_bneno = dw_in.getitemstring(1,"BNENO")
INSERT INTO htjs.kq_bpwd
( bneno,bnpwd)
VALUES ( :ls_bneno,:ls_bnpwd) ;
//刷新dw_list窗口
ls_bdno = dw_in.getitemstring(1,"BDNO")
if isnull(ls_bdno) then return
dwfilter = "BDNO = '"+ls_bdno+"'"
dw_list.setfilter(dwfilter)
dw_list.filter()
dw_list.retrieve()
//刷新dw_in窗口
dw_in.setredraw(false)
dw_in.reset()
dw_in.insertrow(0)
dw_in.setredraw(true)
//set focus
dw_in.setcolumn("BNENO")
dw_in.setfocus()
else
messagebox("错误","新增用户失败!",stopsign!)
rollback;
end if
其含义为:首先,窗口的数据输入文本框中取得相应数值,并直接保存数据窗口的新增数据行,新增用户成功后立即新增该用户的系统登录权限,并为其设置初始密码。最后刷新所有窗口数据窗口。如果用户输入有误不保存数据并给用户提示。
(2)职工权限设置
a、职工权限设置窗口(W_right)具有权限设置、修改两种功能,如果是第一次设置该用户权限,则由系统管理员对相应人员设置对应权限;如果己对该用户设置权限,窗口打开时自动读该职工己有的权限,可提供给系统管理员进行修改。这个判断过程由W_right的Open事件执行,其过程如下:
if gstr_para.bneno = "" then
messagebox("提示","请用鼠标单击右边列表中的用户行!")
close(w_right)
return
end if
//显示科室
dw_dev_select.settransobject(sqlca)
dw_dev_select.retrieve()
dw_dev.settransobject(sqlca)
dw_name.settransobject(sqlca)
if isnull(gstr_para.bneno) = false or len(gstr_para.bneno) > 0 then
dw_name.retrieve(gstr_para.bneno)
end if
//显示现有管理科所
dw_dev.retrieve(gstr_para.bneno)
//读权限
cbx_pg.checked = f_read_bman_pms(gstr_para.bneno,"cbx_pg")
cbx_gx_yj.checked = f_read_bman_pms(gstr_para.bneno,"cbx_gx_yj")
cbx_gx_sp.checked = f_read_bman_pms(gstr_para.bneno,"cbx_gx_sp")
cbx_fd_yj.checked = f_read_bman_pms(gstr_para.bneno,"cbx_fd_yj")
cbx_fd_sp.checked = f_read_bman_pms(gstr_para.bneno,"cbx_fd_sp")
cbx_jb_yj.checked = f_read_bman_pms(gstr_para.bneno,"cbx_jb_yj")
cbx_jb_sp.checked = f_read_bman_pms(gstr_para.bneno,"cbx_jb_sp")
cbx_qj_ky_half.checked= f_read_bman_pms(gstr_para.bneno,"cbx_qj_ky_half")
cbx_qj_ky_more_yj.checked=f_read_bman_pms(gstr_para.bneno,"cbx_qj_ky_more_yj")
cbx_qj_ky_more_sp.checked=f_read_bman_pms(gstr_para.bneno,"cbx_qj_ky_more_sp")
cbx_qj_kz_one_yj.checked=f_read_bman_pms(gstr_para.bneno,"cbx_qj_kz_one_yj")
cbx_qj_kz_one_sp.checked=f_read_bman_pms(gstr_para.bneno,"cbx_qj_kz_one_sp")
cbx_qj_kz_more_yj.checked=f_read_bman_pms(gstr_para.bneno,"cbx_qj_kz_more_yj")
cbx_qj_kz_more_sp.checked=f_read_bman_pms(gstr_para.bneno,"cbx_qj_kz_more_sp")
cbx_xx_sp.checked= f_read_bman_pms(gstr_para.bneno,"cbx_xx_sp")
其含义为:首先,显示数据窗口内的所有内容,然后从登录时保存的全局函数据中读取用的相应权限,在窗口中的各种权限设计为“复选框”选择,复选框有选中与未选中两种状态。从全局函数中读出相应的项目来影响复选项的“Checked”属性。
b、设置职工权限
由系统管理员根据实际情况确定系统职工的所辖科室、科员请假、科长请假、派工、加班等相应权限。所辖科室从下拉列表框中进行选择,其余权限通过复选框进行选择,选择好权限后单击“确定存盘”系统自动判断数据自动性并进行保存,保存结果反馈给用户提示。其保存过程如下:
if dw_dev.rowcount() <= 0 then
messagebox("提示","选择所管辖的科所!",exclamation!)
return
end if
if messagebox("提示","确认无误保存吗?",question!,okcancel!) = 1 then
if dw_dev.update() = 1 then
commit;
//写权限
f_write_bman_pms(gstr_para.bneno,"cbx_pg",cbx_pg.checked)
f_write_bman_pms(gstr_para.bneno,"cbx_gx_yj",cbx_gx_yj.checked)
f_write_bman_pms(gstr_para.bneno,"cbx_gx_sp",cbx_gx_sp.checked)
f_write_bman_pms(gstr_para.bneno,"cbx_fd_yj",cbx_fd_yj.checked )
f_write_bman_pms(gstr_para.bneno,"cbx_fd_sp",cbx_fd_sp.checked)
f_write_bman_pms(gstr_para.bneno,"cbx_jb_yj",cbx_jb_yj.checked)
f_write_bman_pms(gstr_para.bneno,"cbx_jb_sp",cbx_jb_sp.checked)
f_write_bman_pms(gstr_para.bneno,"cbx_qj_ky_half",cbx_qj_ky_half.checked)
f_write_bman_pms(gstr_para.bneno,"cbx_qj_ky_more_yj",cbx_qj_ky_more_yj.checked) f_write_bman_pms(gstr_para.bneno,"cbx_qj_ky_more_sp",cbx_qj_ky_more_sp.checked) f_write_bman_pms(gstr_para.bneno,"cbx_qj_kz_one_yj",cbx_qj_kz_one_yj.checked) f_write_bman_pms(gstr_para.bneno,"cbx_qj_kz_one_sp",cbx_qj_kz_one_sp.checked)
f_write_bman_pms(gstr_para.bneno,"cbx_qj_kz_more_yj",cbx_qj_kz_more_yj.checked) f_write_bman_pms(gstr_para.bneno,"cbx_qj_kz_more_sp",cbx_qj_kz_more_sp.checked)
f_write_bman_pms(gstr_para.bneno,"cbx_xx_sp",cbx_xx_sp.checked)
messagebox("提示","成功保存权限!")
dw_dev.reset()
close(parent)
else
rollback;
messagebox("错误","保存所属科所失败?",stopsign!)
end if
end if
其含义为:首先,判断窗口中各项内容是否输入完整,数据完整无误后直接保存数据窗口中的内容,并将权限内容保存到全局函数中。最后反馈给用户保存提示。
5.4、考勤处理
科所长请假
科所正、副职请假一天以上需首先由当事人填写请假申请单,由政工局长签署意见,再由局长审批,最后交政工科备案。
a、填写请假申请单
单击“考勤处理/请假/科所长”菜单,窗口打开时,首先取己知的部分数据,如姓名、当前日期、所属部门等,再交由用户自行填写其余内容,如请假类别、事由、天数等。其取己数据部分过程如下:
long ll_cur_row
string ls_qjno,ls_bnnam,ls_bdnam
datetime ldt1
time lt1
int li_xh
lt1 = now()
ldt1 = datetime(date(gs_today),lt1)
dw_1.settransobject(sqlca)
ll_cur_row = dw_1.insertrow(0)
ls_qjno = f_qj_no(gs_id)
//请假单号
dw_1.setitem(ll_cur_row,"QJNO",ls_qjno)
//用户NO
dw_1.setitem(ll_cur_row,"BNENO",gs_id)
//用户姓名
dw_1.setitem(ll_cur_row,"BNNAM",gs_bnnam)
//科室NO
dw_1.setitem(ll_cur_row,"BDNO",gs_bdno)
//科室名称
dw_1.setitem(ll_cur_row,"BDNAM",gs_bdnam)
//日期
dw_1.setitem(ll_cur_row,"QJDAT",ldt1)
dw_1.setitem(ll_cur_row,"QJTIME",ldt1)
dw_1.setitem(ll_cur_row,"QJTIME1",ldt1)
//查找个人序号xh
dw_1.setitem(ll_cur_row,"xh",gstr_pa.qj_xh
其含义为:首先,设置数据窗口的事务对象,然后取得系统己知的部分内容并填写到数据窗口的相应栏目中。己一个数据窗口反馈给用户。
b、保存申请单内容
用户填写完相应项目后,单击“保存”按钮系统将用户数据保存到数据库中。其处理过程如下:
long ll_cur_row
string ls_qjno
datetime ldt1
time lt1
if dw_1.rowcount() <=0 then return
if dw_1.update() = 1 then
commit;
messagebox("提示","成功提交!")
else
rollback;
messagebox("错误","保存请假单失败!",stopsign!)
return
end if
dw_1.setredraw(false)
dw_1.reset()
ll_cur_row = dw_1.insertrow(0)
dw_1.setredraw(true)
////初始化/////
lt1 = now()
ldt1 = datetime(date(gs_today),lt1)
ls_qjno = f_qj_no(gs_id)
//请假单号
dw_1.setitem(ll_cur_row,"QJNO",ls_qjno)
//用户NO
dw_1.setitem(ll_cur_row,"BNENO",gs_id)
//用户姓名
dw_1.setitem(ll_cur_row,"BNNAM",gs_bnnam)
//科所no
dw_1.setitem(ll_cur_row,"BDNO",gs_bdno)
//科所名称
dw_1.setitem(ll_cur_row,"BDNAM",gs_bdnam)
//日期
dw_1.setitem(ll_cur_row,"QJDAT",ldt1)
dw_1.setitem(ll_cur_row,"QJTIME",ldt1)
dw_1.setitem(ll_cur_row,"QJTIME1",ldt1)
//查找个人序号xh
dw_1.setitem(ll_cur_row,"xh",gstr_pa.qj_xh)
其含义为:首先,设置提交数据窗口的数据保存事务,并反馈用户保存结果。然后重新初始化数据窗口,以恢复初始值。
c、签署意见和审批
主管局长、政工局长等管理人员都需要对申请请假的单据进行签署意见和审批,在系统设计中首先单击“查询”按钮由数据窗口查询得到所有待审批的单据,再交由管理人员人审核,对审核通过的可以进行输入数据签名密码,其保存处理过程如下:
long ll_count
int i
string ls_bz2
if sle_sig.text <> f_signature(gs_id) then
messagebox("错误","签名密码错误!",stopsign!)
return
end if
//请假代码 2、3、5
ll_count = tab_1.tabpage_1.dw_1.rowcount()
//查询标志0未1同意2不同意
for i = 1 to ll_count
ls_bz2 = tab_1.tabpage_1.dw_1.getitemstring(i,"BZ2")
if ls_bz2 = "1" or ls_bz2 = "2" then
tab_1.tabpage_1.dw_1.setitem(i,"BNENO2",gs_id)
tab_1.tabpage_1.dw_1.setitem(i,"BNNAM2",gs_bnnam)
end if
next
//请假代码 1
ll_count = tab_1.tabpage_2.dw_2.rowcount()
//查询标志0未1同意2不同意
for i = 1 to ll_count
ls_bz2 = tab_1.tabpage_2.dw_2.getitemstring(i,"BZ2")
if ls_bz2 = "1" or ls_bz2 = "2" then
tab_1.tabpage_2.dw_2.setitem(i,"BNENO2",gs_id)
tab_1.tabpage_2.dw_2.setitem(i,"BNNAM2",gs_bnnam)
end if
next
//请假代码 6
ll_count = tab_1.tabpage_3.dw_3.rowcount()
//查询标志0未1同意2不同意
for i = 1 to ll_count
ls_bz2 = tab_1.tabpage_3.dw_3.getitemstring(i,"BZ2")
if ls_bz2 = "1" or ls_bz2 = "2" then
tab_1.tabpage_3.dw_3.setitem(i,"BNENO2",gs_id)
tab_1.tabpage_3.dw_3.setitem(i,"BNNAM2",gs_bnnam)
end if
next
//请假代码 7
ll_count = tab_1.tabpage_4.dw_4.rowcount()
//查询标志0未1同意2不同意
for i = 1 to ll_count
ls_bz2 = tab_1.tabpage_4.dw_4.getitemstring(i,"BZ2")
if ls_bz2 = "1" or ls_bz2 = "2" then
tab_1.tabpage_4.dw_4.setitem(i,"BNENO2",gs_id)
tab_1.tabpage_4.dw_4.setitem(i,"BNNAM2",gs_bnnam)
end if
next
if messagebox("提示","确认要保存吗?",question!,okcancel!) = 1 then
if tab_1.tabpage_1.dw_1.update() = 1 then
commit;
tab_1.tabpage_1.dw_1.reset()
else
rollback;
messagebox("错误","保存科员请假审批结果失败!",stopsign!)
end if
if tab_1.tabpage_2.dw_2.update() = 1 then
commit;
tab_1.tabpage_2.dw_2.reset()
else
rollback;
messagebox("错误","保存在职学习审批结果失败!",stopsign!)
end if
if tab_1.tabpage_3.dw_3.update() = 1 then
commit;
tab_1.tabpage_3.dw_3.reset()
else
rollback;
messagebox("错误","保存科所长请假一天审批结果失败!",stopsign!)
end if
if tab_1.tabpage_4.dw_4.update() = 1 then
commit;
tab_1.tabpage_4.dw_4.reset()
else
rollback;
messagebox("错误","保存科所长请假一天以上审批结果失败!",stopsign!)
end if
end if
其含义为:首先,校验数据签名的密码是否正确。然后查询审批意见,针对不同的审批结果,得到请假结果,最后保存数据窗口数据,反馈用户保存结果。
5.5、统计查询
系统所有的查询菜单都能针对时间段进行统计查询,部分选项还能分类查询。首先由用户输入查询的时间段,选择分类项目查询,单击查询按钮系统会根据查询条件对数据窗口进行检索。其派工查询处理过程如下:
//1.局长 2.政工局长 3.主管局长 4.科所长 5.科员
string dwfilter
datetime dt1,dt2
time lt1,lt2
lt1 = time("00:00:00")
lt2 = time("23:59:59")
dt1 = datetime(date(em_1.text),lt1)
dt2 = datetime(date(em_2.text),lt2)
//设置查询的时间条件
if isdate(em_1.text) = true and isdate(em_2.text) = true and em_1.text <= em_2.text then
//按时间段
choose case true
case gs_ruler = "4" or gs_ruler = "5"
dw_1.setredraw(false)
dw_1.dataobject = "d_pg_cx"
dw_1.setredraw(true)
dw_1.settransobject(sqlca)
dwfilter = "BDNO='"+gs_bdno+"'"
dw_1.setfilter(dwfilter)
dw_1.filter()
dw_1.retrieve(dt1,dt2)
case gs_ruler = "3"
dw_1.setredraw(false)
dw_1.dataobject = "d_pg_cx_fjz"
dw_1.settransobject(sqlca)
dw_1.setredraw(true)
dw_1.retrieve(dt1,dt2,gs_id)
case gs_ruler = "1" or gs_ruler = "2"
dw_1.setredraw(false)
dw_1.dataobject = "d_pg_cx"
dw_1.setredraw(true)
dw_1.settransobject(sqlca)
dw_1.retrieve(dt1,dt2)
end choose
else
messagebox("错误","输入查询的起止时间!~r"+"或截止时间大于起始时间!",exclamation!)
end if
其含义为:首先,取得用户输入的时间段查询条件。然后通过数据窗口检索数据库中是否有符合条件的数据,如果有就按用户职称分类进行显示,以供用户参考。
6、性能测试与分析
为了验证系统的正常运行,我将系统安装到长沙市国家税务局岳麓分局总部和下属的五个税务所,完全按照需求分析的业务流程来操作使用本系统,税务所和总部之间采用点对点的联系方式,在总局设立了一台拨入发布分发服务器,每天定时进行数据的合并复制保证所有单据得到及时的审批和查询统计。经过多次的软件调试和修改后,目前系统运行正常,实现了长沙市国家税务局岳麓分局的互联网考勤管理。
6.1、测试实例的选择
(1)用户登陆和用户权限测试
a、测试系统外用户登陆情况
b、测试存在用户名但是系统管理员没有给予相应权限情况
(2)“科员请假” 测试
(3)“科员学历学习”测试
(4)“科员加班”测试
(5)“科长请假” 测试
6.2、测试环境与测试条件
(1)硬件环境
数据发布服务器:P4 2.4G,128M内存,40G硬盘,10/100M自适应网卡。
数据订阅服务器:P3 1.0G,128M内存,40G硬盘,10/100M自适应网卡
客户端:P3赛扬533M,64M内存,20G硬盘,10/100M自适应网卡。
(2)网络环境
TPLINK24口交换机1台,实达外置56K Modem 2台。
(3)软件环境
数据发布服务器:Win2000 server family版本、SQL2000 企业版
数据订阅服务器:Win2000 server family版本、SQL2000 企业版
客户端:Win98、配置ODBC数据源
6.3、实例测试
测试序号 测试项目 结果 结论
1 系统外用户 用户名:123 “用户编码不存在” 通过
用户未赋权限 用户名:0108 可以进入系统,菜单为科员 通过
2 科员请假 公休价 科长签署意见、政工局长审批 通过
其它法定假 科长签署意见、政工局长审批 通过
科员请假半天 科长审批 通过
科员请假一天以上 科长签署意见、政工局长审批 通过
3 科员学历学习 政工局长审批 通过
4 科员加班 科长审批 通过
5 科长请假 科长请假一天 副局签署意见、政工局长审批 通过
科长请假一天以上 政工局长签署意见、局长审批 通过
6.4、性能分析
数据实例建立之后,我首先对个性化登录的功能进行测试。登录测试分两部分,一是系统外用户登陆情况,二是测试存在用户名但是系统管理员没有给予相应权限情况。对于系统以外的用户做随意登录时,系统能自动进行否决,并反馈给用户相应的提示;对于系统之内的用户,系统自动会根据登录用户的权限进行判断,再根据系统一定固定权限进行登录辨认,不同的用户权限有不同的用户界面。达到了普通用户与管理者的区别。
科员请假测试。科员请假分别为公休假、法定假、半天假、一天以上假等四项测试。每一项测试都由科员在其客户端软件上填写请假申请,再根据相应的审批原则由各领导进行审批,测试全部通过,完成满足业务需求。
科员学历学习测试。由科员在其客户端软件上进行请假申请,再根据相应的审批原则由政工局长进行审批,测试全部通过,满足业务需求。
科员加班测试。由科员在其客户端软件上填写请假申请,再根据相应的审批原则由科长进行审批,测试全部通过,满足业务需求。
科长请假测试。科长请假分别为请一天假、一天以上假等两项测试。每一项测试都由科长在其客户端软件上填写请假申请,再根据相应的审批原则由各领导进行审批,测试全部通过,完成满足业务需求。
数据传输测试。在不同的税务所,填写完请假等相应考勤申请后,数据保存在本局域网的数据库中。然后,连通税务所与税务局总局的互联网网络连接,再进行SQL Server的数据库合并复制,数据合并成功。
因此,在实际应用中,同一单位在不同地区可以纳人总部一并进行考勤管理,并且不用架设专的网络通讯,利用现有的互联网网络资源,完成申请、审批等相应功能,达到信息化管理的目的。
7、结束语
在学习了互联网网点对点的拨号联接技术、VPN架设技术、SQLServer远程数据复制等基于互联网R 开发技术后,以及对PowerBulder数据窗口设计有了一定了解的基础上,我完成了长沙市国家税务局岳麓分局的互联网网上考勤系统。本文讨论了考勤系统的系统结构、数据库设计的实现情况,着重分析了互联网网点对点的拨号联接技术、VPN架设技术、SqlServer远程数据复制技术,并将系统安装到了实际用户得到了软件的验证。
基于互联网的信息化处理是信息化建设的潮流,许多系统上都可以见到关于此方面的应用。我们这里研究设计的方案从最后测试结果来看,效果比较明显,得到了实际用户的好评,提高了工作效率,当然,还有一些具体细节问题需要解决。随着计算机科学特别是互联网技术及数据库技术的发展,我们相信在不久的将来相关技术将发展成熟,并走向日常生活的其它领域,为提高人们的生活质量作出贡献。
致 谢
在这里我首先要感谢的是我的指导老师王丽明副教授,在他无微不至的关怀下使我的设计得以顺利进行,他对我设计中的每一个环节都不遗余力地给予帮助。他深厚的学术修养、严谨的治学态度、强烈的责任心和对学生的无私关怀,将令我受益终生。
我还要感谢长沙广播电视大学的所有教师,是他们的辛勤教诲,使我学到了丰富的专业知识和为人处世之道,提高了我的自学能力以及分析问题和解决问题的能力。
参考文献:
1、《MICROSOFT SQL SERVER 技术内幕》,Ronsoukup著,北京大学出版社。
2、《SQL Server 2000数据库管理》,耿冲著,机械工业出版社。
3、《PowerBuilder基础类库技术详解》,王梅君著,电子工业出版社。
4、《PowerBuilder用户参考手册》,张长富著,北京希望电脑公司。
5、《PowerBuilder开发人员指南》,李匀著,北京希望电脑公司。
6、《软件工程》,陆惠思著,电子工业出版社。
7、《数据库系统概论》高等教育出版社。
基于互联网的网上考勤系统(三)相关范文