第二步:接下来向导会要求输入拨入服务器连接的电话号码,最后完成即可建立连接。
完成上述操作之后,只要双击创建的拨入网络连接图标就可以先触发互联网拨号连接,在登录到互联网拨号连接,在登录到互联网上之后,即可远程拨入服务器建立连接了。MODEM点对点安装、设置全部完成了。
3.2、SQL Server 2000远程数据库复制
长沙市国家税务局岳麓分局的和税务所分布在不同的地点,通过了点对点拨号技术组成了一个网络了,在这个网络上,总部有一台数据库服务器,各税务所也有一台数据库服务器,它们分别运行各自的考勤管理系统。为了保证各税务所的讲假能由总部领导审批、查询和统计,它们之间必须实现数据库的合并。为此我采用了SQL SERVER的数据库合并复制方案。下面对其进行详细描述。
(1)复制简介
SQL SERVER2000的复制是在数据库之间对数据和数据库对数据库对象进行复制和分发并进行同步以确保其一致性的一组技术。
复制:从一个数据库将数据和数据库对象复制和分发到另一个数据库,然后使两个数据库之间的信息同步以获得一致性的进程。使用复制可以将数据分发到不同的位置,通过局域网或互联网分发给远程用户。
有以下需求时,复制是分布式数据环境的一种解决方案:
a、将数据复制或分发到一个或多个站点。
b、依照调度方式分发数据复本。
c、将数据更改分发到其它服务器上。
d、允许多个用户和站点进行更改,然后将数据修改合并到一起,潜在地识和解决冲突。
(2)SQL SERVER 2000复制模型
SQL SERVER 2000复制采用发布工业术语来表示复制拓朴中的组件和进程,如图3.19。
图3.19 SQL SERVER 2000复制模型
发布服务器:提供数据以便复制到其它服务器的服务器。发布服务可以具有一个或多个发布,每个发布代表一组逻辑相关性的数据。
分发服务器:作为分发数据库宿主并存储历史数据或事务以及元数据的服务器。远程分发服务器是独立于发布服务器并配置为复制的分发服务器的服务器。
订阅服务器:接收复制数据的服务器。订阅服务器订阅的是发布而不是发而中分离的项目;并且订阅服务器只订阅其需要的发布。根据复制类型和所选择的 复制选项,订阅服务器还可以将数据更改传回发布服务器或将数据重新发布到其它订阅服务器。
发布:是一个数据库中的一个或多个项目的集合。
项目:指要复制的数据表、数据分区或数据库对象。
订阅:对数据或数据库对象的复本的请求。订阅定义将接收的发布和接收的时间、地点。
(3)合并复制
合并复制使各站点得以自主工作(联机或脱机),并且经过一段时间后将多个站点上的数据修改合并为一个统一的结果。首先在订阅服务器上应用初始快照,然后SQL SERVER 2000在发布服务器和订阅服务器上跟踪对己发布数据的更改。数据在调度时间或请求时在服务器之间进行同步。
以下条件适合使用合并复制:
a、多个订阅服务器需要在不同时刻更新数据并将这些更改传播到发布服务器和其它订阅服务器。
b、订阅服务器需要接收数据,脱机更改数据,然后将更改同步到发布服务器和其它订阅服务器。
合并复制的工作机制
合并复制是由快照代理程序和合并代理程序实现的。快照代理程序准备快照文件,其中包含己发布的架构和数据,然后将这些文件的存储在快照文件夹中,并在发布数据库中插入同步作业。快照代理程序还创建复制特定的存储过程、触发器和系统表。合并复制代理程序将保存在发布数据库表中的初始快照作业应用到订阅服务器上。如图3.20
图3.20 合并复制的工作机制
(4)配置合并复制
a、配置分发、出版服务器
第一步:打开SQL SERVER企业管理器,打开“工具/SQL SERVER配置属性”菜单,单击复制的TAB页面。单击分发和发布的“配置”按钮,系统弹出发布和分发向导窗口,我在这里使用的分发和发布在同一台服务器上,快照文件夹使用系统默认路径,输入发布数据库名称,选择当前服务器为注册服务器,系统弹出启用数据库窗口(如图3.21),最后启用订阅服务器,单击完成系统弹出完状态窗口,如图3.22。
图3.21
图3.22
第二步:打开企业管理器的数据库服务器,依次打开复制/发布内容,右键选择“新建发布”,弹出数据库发布向导,选择需要发布的数据库,弹出“选择发布类型”窗口(如图3.23),选择合并发布,并选择全部的数据库表进行发布,输入发布名称,最后单击完成。
图3.23
第三步:打开企业管理器的数据库服务器,依次打开复制监视器/发布服务器/服务器名/发布项目名,在右边的窗口在出现一个快照图标,右键单击并启动。
到此为止,发布、出版服务器的设置就全部完成了,下面继续设置远程用户如何订阅发布服务器。
b、配置远程数据订阅
各税务所的服务器必须的到总部的服务器中合并复制相应的数据,以保证请假、派工等单据及时得到批复,其配置过程如下:
第一步:通过VPN或点对点方式连接到总部的服务器
第二步:打开企业管理器,依次打开“工具/复制/请求订阅”菜单,系统弹出请求订阅窗口,单击请求新订阅按钮,在弹出的发请求订阅向导中,单击“注册服务器”输入总部服务器名称和登录用户(如图4.24)。接下来输入服务器登录时的SQL 身份验证用户名和密码,选择本地创建的订阅数据库,选择初始化订阅,选择合并代理程序调度时间,选择订阅优先级,最后单击完成。
图3.24
这时些服务器开始到发布服务器上订阅并合并复制数据库表中数据,以保证数据的传递与合并,订阅服务器配置完成。
4、系统结构与模型
4.1、业务流程图设计
(1)管理职能组成
(2)业务处理总体流程图
(3)派工业务处理流程
(4)请假业务处理流程
(5)加班业务处理流程
4.2、软件功能设计
(1)科室(所)设置
a、新增科所:科所代码、名称、地址、电话等。
b、修改科所:科所代码、名称、地址、电话等。
c、删除科所。
(2)职务设置
a、新增职务:职务代码、名称等。
b、修改职务:职务代码、名称等。
c、删除职务。
(3)在职人员设置
a、新增人员:编号、姓名、科室、职务、参加工作时间等。
b、修改人员:编号、姓名、科室、职务、参加工作时间等。
c、删除人员。
(4)权限设置
a、新增权限:所管辖科室,请假审批、签署意见权,派工权,加班签署意见、审批权等。
b、修改权限:所管辖科室,请假审批、签署意见权,派工权,加班签署意见、审批权等。
c、删除权限。
(5)派工
a、科所负责人填写派工并签名确认。
b、政工科备案
(6)请假
分五种情况及处理方法。
a.科员病假、事假半天
(a)填写:当事人
(b)签名确认:当事人
(c)审批:所属科室科所长
(d)备案:政工科
b.科员病假、事假一天以上(含一天)
(a)填写:当事人
(b)签名确认:当事人
(c)签署意见:所属科室科所长
(d)审批:政工局长
(e)备案:政工科
C.科所正、副职请假一天
(a)填写:当事人
(b)签名确认:当事人
(c)签署意见:主管局长
(d)审批:政工局长
(e)备案:政工科
d.科所正、副职请假一天以上
(a)填写:当事人
(b)签名确认:当事人
(c)签署意见:政工局长
(d)审批:局长
(e)备案:政工科
e.职工学历学习
(a)填写:当事人
(b)签名确认:当事人
(c)审批:政工局长
(d)备案:政工科
(7)加班
a、填写:当事人
b、签名确认:当事人
c、签署意见:所属科室科所长
d、审批:主管局长
e、备案:政工科
(8)统计查询
a、“外出工作指派单”查询
查询条件:按时间段查询
b、“请假/事假申请表”查询
查询条件:
(a)按请假分类查询
(b)按时间段查询
c、“科所加班情况统计表”查询
查询条件:按时间段查询
d、考勤统计汇总表
汇总条件:按时间段汇总
4.3、数据库设计
数据库名称:KQXT
编码式命名
a.人事数据表 KQ_BMAN
字段名称 中文名称 类型 长度 小数 初值 说明
BNENO 员工编号 VARCHAR 10 NOT NULL 主键
BNCODE 编代码 VARCHAR 10 NOT NULL
BNNAM 中文姓名 VARCHAR 20 NOT NULL
BDNO 科室编号 VARCHAR 10 NOT NULL 外键BDEV
BZWNO 职务编号 VARCHAR 10 NOT NULL 外键BZW
BNLAST 上级标志 VARCHAR 1 T or F
BNNEXT 下级标志 VARCHAR 1 T or F
BNWORK 参加工作时间 DATETIME
BNVAL 有效标志 VARCHAR 1 T T or F删除
b.密码表 KQ_BPWD
字段名称 中文名称 类型 长度 小数 初值 说明
BNENO 员工编号 VARCHAR 10 NOT NULL 主键
BNPWD 登录密码 VARCHAR 10 NOT NULL
BNDS 数字签名 VARCHAR 10 NOT NULL
c.权限设置表 KQ_SYSPMS
字段名称 中文名称 类型 长度 小数 初值 说明
BNENO 员工编号 VARCHAR 10 NOT NULL 主键
PMSFUN 功能项目 VARCHAR 10 NOT NULL 主键
PMSNAM 功能名称 VARCHAR 40 NOT NULL
PMS 权限 VARCHAR 1 NOT NULL T or F
d.科室设置表 KQ_BDEV
字段名称 中文名称 类型 长度 小数 初值 说明
BDNO 科室编号 VARCHAR 10 NOT NULL 主键
BDNAM 科室名称 VARCHAR 40 NOT NULL 预设
BDADR 地址 VARCHAR 100 NULL
BDTEL1 电话 VARCHAR 20 NULL
BDTEL2 VARCHAR 20 NULL
BDTEL3 VARCHAR 20 NULL
e.职务设置表 KQ_BZW
字段名称 中文名称 类型 长度 小数 初值 说明
BZWNO 职务编号 VARCHAR 10 NOT NULL 主键
BZWNAM 职务名称 VARCHAR 40 NOT NULL 预设
f.外出工作指派表 KQ_PG
字段名称 中文名称 类型 长度 小数 初值 说明
PGNO 派工单号 VARCHAR 12 NOT NULL 主键
BDNO 科室编号 VARCHAR 10 NOT NULL
BNENO 当事人编号 VARCHAR 10 NOT NULL
BNNAM 当事人姓名 VARCHAR 20 NOT NULL
PGDAT 派工日期 DATETIME NOT NULL
PGADR 派工单位 VARCHAR 40 NOT NULL
PGCASE 派工事宜 VARCHAR 200 NOT NULL
PGTEL 联系电话 VARCHAR 20 NOT NULL
PGTIME 外出时限 VARCHAR 11 NOT NULL
PGWEK 星期几 VARCHAR 1
PGMARK 备注 VARCHAR 200
BNENO1 科长签名 VARCHAR 10 NOT NULL
BNNAM1 科长姓名 VARCHAR 20 NOT NULL
PGZG 政工备案标志 VARCHAR 1 T T or F
PGTRA 传送标志 VARCHAR 1 F T or F
g.病假事假申请表 KQ_QJ
字段名称 中文名称 类型 长度 小数 说明
QJNO 病假事假单号 VARCHAR 12 NOT NULL 主键
QJKIND 请假类型 VARCHAR 1 NOT NULL 1:病2:事
BDNO 科室编号 VARCHAR 10
BDNAM 科室名称 VARCHAR 40 NOT NULL
BNENO 当事人编号 VARCHAR 10 NOT NULL
BNNAM 当事人姓名 VARCHAR 20 NOT NULL
QJDAT 日期 DATETIME NOT NULL
QJCASE 请假事由 VARCHAR 200
QJTIME 请假时限 DATETIME
QJDAY 几天 SMALLINT
PGMARK 备注 VARCHAR 200
BNENO1 科长签名 VARCHAR 10
BNNAM1 科长姓名 VARCHAR 20 NOT NULL
BNENO2 政工局长签名 VARCHAR 10
BNNAM2 局长姓名 VARCHAR 20
BNENO3 局长签名 VARCHAR 10
BNNAM3 局长姓名 VARCHAR 20
QJZG 政工备案标志 VARCHAR 1 T T or F
QJTRA 传送标志 VARCHAR 1 F T or F
h.科所加班情况表 KQ_JB
字段名称 中文名称 类型 长度 小数 说明
JBNO 加班单号 VARCHAR 12 NOT NULL 主键
BDNO 科室编号 VARCHAR 10
BDNAM 科室名称 VARCHAR 40 NOT NULL
BNENO 当事人编号 VARCHAR 10 NOT NULL
BNNAM 当事人姓名 VARCHAR 20 NOT NULL
JBTIME 加班 DATETIME NOT NULL
JBCASE 加班事由 VARCHAR 200
QJTIME 请假时限 DATETIME
JBMARK 备注 VARCHAR 200
BNENO1 科长签名 VARCHAR 10
BNNAM1 科长姓名 VARCHAR 20 NOT NULL
BNENO2 局长签名 VARCHAR 10
BNNAM2 局长姓名 VARCHAR 20 L
JBZG 政工备案标志 VARCHAR 1 T T or F
JBTRA 传送标志 VARCHAR 1 F T or F
4.4、功能的一般性规定
本软件系统界面格式统一,统一的错误声音提示,在线帮助等。
4.5、性能的一般性规定
数据精度:DATETIME类型数据精确到秒.
响应时间:保存、删除的平均响应时间小于2秒;各类查询的平均响应时间小于5秒.
4.6、其它专门要求
数据库系统能满足以下能力:
a.良好的并行系统的解决方案
b.对异种数据源的访问能力
c.高可靠性和安全性
d.提供分布试数据的存取和管理机制
e.支持数据库维护工具、CLIENT开发工具、查询开发工具
对数据库的要求,满足多平台特性要求,操作特性要求,场合适应性要求等;所有终端机安装开放的数据库接口(ODBC)。
4.7、运行环境要求
(1)网络拓扑结构
(2)系统平台
a、硬件系统
(a)专用服务器
Intel P4级CPU,512M以上内存,40G*2枚7200转硬盘(另一块做冗于RAID1),100M网卡。
(b)工作站
系统最低配置:Intel 赛扬级CPU,64M以上内存,15寸以上显示器,最佳分辨率800*600,4.3G以上硬盘,使用Win98、Win2000、WinXp操作系统。
b、软件系统
(a)服务器操作系统:Win2000 server + SP4
(b)服务器数据库:SQL2000 + SP1
5、系统实现技术
我在两台服务器、两个56K拨号MODEM上,Windows 2000 Advanced Server环境下,实现了基于互联网的网上考勤系统各功能模块。具体开发工具为Sybase PowerBuilder 8.0(以下简称PB8),数据库采用Microsoft SqlServer 2000(以下简称SQL2000)数据库。该系统主要包括:
a、系统基本资料管理维护
b、考勤处理
c、统计查询
以下介绍了各功能模块的实现方法及一些特殊技术问题的解决。
5.1、与数据库的链接
由于各工作站客户程序频繁地与数据库打交道,如何与数据库链接就显得十分重要。本系统用到一个数据库,名为KQXT_DATA.MDF,所有用户登陆时就要进行数据库操作,为实现客户端和数据库链接,首先在WinSERVER 的控制面板/管理工具/数据源(ODBC)选项中添加一个kqxt_sql的用户数据源。再在Pb8创建的“KQXT”开发工程的“KQXT”系统应用对象的OPEN事件中建立与SQL2000 KQXT_DATA.MDF数据库的链接,即加入以下语句:
// Profile KQXT_SQL
SQLCA.DBMS= profilestring("HTJS_ODBC.ini","DataBase","DBMS","")
SQLCA.DBParm= profilestring("HTJS_ODBC.ini","DataBase","DBParm","")
SQLCA.AutoCommit= true
connect using sqlca;
if sqlca.sqlcode <> 0 then
messagebox("错误","初始SQL数据库失败!",stopsign!)
halt close
end if
open(w_logo)
该语句完成以下工作
a、完成初始化工作
b、利用INI文件设置属性,初始化一个事务对象
c、连接要访问的数据库
d、打开第一个窗口
其中,SQLCA.DBMS表示数据库厂商的名称,SQLCA.DBParm表示与具体数据库管理系统相关的一组连接参数,SQLCA.AutoCommit定义就用程序如何提交事务,TRUE的取值表示自动提交每一条SQL语句。这样,在工作站打开客户端软件时提出一个数据库连接请求,就会去执行以上语句,从而建立与SQL2000的KQXT数据库连接。以后对其它程序代码操作数据库的所有操作都是基于此链接。该链接关闭于软件停止运行。
5.2、用户个性化登陆
要实现用户页面的个性化,首先要做的显然是弄清登陆的用户是谁。我采用“用户名/密码”登陆的方式来识别用户。
用户登录时需要填入的是BNENO (用户代码),BNPWD (密码)二个信息。当用户点击“确定”按钮后,软件判断用户填入信息是否完整、系统根据BNENO查找数据库的KQ_BPWD密码表,将查找到的BNENO与用户输入BNENO比较,若相同则做相关初始化操作,允许用户进入软件,否则给出提示信息。这些过程由“W_logo”窗口的“确定” 按钮的clicked事件实现。过程如下:
string ls_pwd,ls_bnpwd,ls_bneno
string ls_user
ls_user = trim(sle_user.text)
if ls_user = "" then
messagebox("提示","用户名不能为空!",exclamation!)
return
end if
///系统时间
datetime ldt_date
select getdate() into :ldt_date from htjs.kq_bpwd;
gs_today = string(ldt_date,"YYYY-MM-DD")
gd_today = date(ldt_date)
gs_id = sle_user.text
///////////////
if ls_user = "admin" then
gs_id = "admin"
SELECT htjs.kq_bpwd.bnpwd
INTO :ls_bnpwd
FROM htjs.kq_bpwd
WHERE htjs.kq_bpwd.bneno = :gs_id;
if ls_bnpwd <> trim(sle_pwd.text) then
messagebox("错误","登录密码不正确!",stopsign!)
sle_pwd.setfocus()
return
else
gs_bnnam = "系统管理员" //姓名
gs_bdnam = "系统管理员" //科室名称
open(w_main)
close(parent)
end if
else
//比对密码
SELECT HTJS.KQ_BPWD.BNPWD,HTJS.KQ_BPWD.BNENO
INTO :ls_pwd,:ls_bneno
FROM HTJS.KQ_BPWD
where htjs.kq_BPWD.BNENO = :ls_user ;
if isnull(ls_bneno) or len(ls_bneno)<= 0 then
messagebox("错误","用户编号不存在!",stopsign!)
sle_user.setfocus()
return
end if
if ls_pwd <> trim(sle_pwd.text) then
messagebox("错误","登录密码不正确!",stopsign!)
sle_pwd.setfocus()
return
else
////////////////////初始数据//////////////////////
string ls_bnnam,ls_bdno
//用户中文姓名、科室no
SELECT HTJS.KQ_BMAN.BNNAM , HTJS.KQ_BMAN.BDNO
INTO :ls_bnnam,:ls_bdno
FROM HTJS.KQ_BMAN
WHERE HTJS.KQ_BMAN.BNENO = :gs_id;
string ls_bdnam
//科室名称
select htjs.kq_bdev.bdnam
into :ls_bdnam
from htjs.kq_bdev
where htjs.kq_bdev.bdno = :ls_bdno;
gs_bnnam = ls_bnnam //姓名
gs_bdno = ls_bdno //科室编号
gs_bdnam = ls_bdnam //科室名称
open(w_main)
close(parent)
end if
end if
用户名和密码校验完后就必须校验用户的操作权限。在“W_main”窗口的的Open事件实现。过程如下:
/////菜单权限/////////
////1.局长 2.政工局长 3.主管局长 4.科所长 5.科员//
choose case true
//系统管理员
case gs_id = "admin"
//快捷菜单设置为false
m_main.m_3.m_31.toolbaritemvisible = false
m_main.m_3.m_32.toolbaritemvisible = false
m_main.m_3.m_33.toolbaritemvisible = false
m_main.m_1.visible = false
m_main.m_2.visible = false
m_main.m_3.visible = false
m_main.m_5.m_52.visible = false
//局长
case f_read_bman_pms(gs_id,"cbx_qj_kz_more_sp") = true
m_main.m_1.visible = false
m_main.m_2.m_21.visible = false
m_main.m_2.m_22.visible = false
m_main.m_2.m_23.visible = false
m_main.m_4.visible = false
gs_ruler = "1"
//政工局长
case f_read_bman_pms(gs_id,"cbx_gx_sp") = true and &
f_read_bman_pms(gs_id,"cbx_fd_sp") = true and &
f_read_bman_pms(gs_id,"cbx_qj_ky_more_sp") = true and &
f_read_bman_pms(gs_id,"cbx_qj_kz_one_sp") = true and &
f_read_bman_pms(gs_id,"cbx_qj_kz_more_yj") = true and &
f_read_bman_pms(gs_id,"cbx_xx_sp") = true
m_main.m_1.visible = false
m_main.m_2.m_21.visible = false
m_main.m_2.m_22.visible = false
m_main.m_2.m_24.visible = false
m_main.m_4.visible = false
gs_ruler = "2"
//主管局长
case f_read_bman_pms(gs_id,"cbx_jb_sp") = true and &
f_read_bman_pms(gs_id,"cbx_qj_kz_one_yj") = true
m_main.m_1.visible = false
m_main.m_2.m_21.visible = false
m_main.m_2.m_23.visible = false
m_main.m_2.m_24.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
gs_ruler = "3"
//科所长
case f_read_bman_pms(gs_id,"cbx_pg") = true and &
f_read_bman_pms(gs_id,"cbx_gx_yj") = true and &
f_read_bman_pms(gs_id,"cbx_fd_yj") = true and &
f_read_bman_pms(gs_id,"cbx_jb_yj") = true and &
f_read_bman_pms(gs_id,"cbx_qj_ky_half") = true and &
f_read_bman_pms(gs_id,"cbx_qj_ky_more_yj")
m_main.m_1.m_12.m_121.visible = false
m_main.m_1.m_b1.visible = false
m_main.m_1.m_15.visible = false
m_main.m_2.m_22.visible = false
m_main.m_2.m_23.visible = false
m_main.m_2.m_24.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
gs_ruler = "4"
//科员
基于互联网的网上考勤系统(二)相关范文