工资管理系统

内容简介

本系统是一个面向中小型企业的工资管理系统,该系统在成功连编之后,可独立的在windows环境下操作,本模块共分为12个独立的模块,可以完成一些基本的工资管理操作,如基本的数据查找、修改、输入输出、打印以及数据统计的功能,可通过职工的基本信息表与工资表之间的联系来完成对职工工资的各种操作。

本系统包括项目的建立、数据库的建立、表的有关操作、数据库管理的操作、程序设计常用控件的使用、数据表的表单的程序设计、菜单的设计方法、SQL语言的使用等。

目       录

第一章. 工资管理系统需求分析与设计

1.系统功能需求简介

2、工资结构设置模块

3.目标系统要求

4.系统平台设计

第二章.工资管理系统信息概要设计

1.工资数据流程图

2.工资管理系统主要模块简介

2.1工资管理系统主要文件组成(数据词典分析)

2.2功能模块菜单

3.项目与数据库的建立

3.1项目地建立

3.2数据库及数据库表的建立

3.3数据表间关系的建立:

第三章.工资管理系统模块设计

1.系统主菜单设计

2.系统主控表单模块设计

2.1表单的执行屏幕

2.2表单与控件属性设置:

2.3事件代码

Form表单的laod事件代码:

3.数据库初始化及备份模块表单设计

3.1表单的执行与设计

3.2控件属性设置

3.3事件代码

4.工资录入模块表单设计

4.1工资录入模块表单的执行与设计

4.2表单与控件的属性设置

4.3事件代码

5.工资查找模块表单设计

5.1设计第一页

5.2设计第二页

6.工资浏览模块表单设计

6.1表单的执行与设计

6.2属性与事件代码

7.修改记录模块表单设计

7.1设计第一页

7.2设计第二页

7.3设计第三页

7.4.设计第四页

8.统计模块表单设计

8.1表单设计与实现

8.2事件代码

9.打印模块表单设计

9.1表单执行与设计

9.2事件代码

10.系统封面模块表单设计

10.1表单的执行与设计

10.2属性与事件代码

11.系统时间模块表单设计

11.1表单的执行与设计

11.2控件属性域代码

12.系统帮助表单模块设计

12.1表单的设计与执行

12.2表单控件的属性与事件代码:

13.报表表单的设计

13.1工资表报表的设计与执行

第四章.程序的连遍与系统维护

1. 将应用程序添加到项目管理器中

2.工资系统的主程序设计

3.程序的调试

4.程序的连编

第五章.心得体会

考核点评:

第一章. 工资管理系统需求分析与设计

1.系统功能需求简介

工资管理信息系统对企业加强工资管理有着极其重要的作用,就一般的企业来说,它的设计内容非常复杂,拥有工资计算功能,工资统计功能,报表输出功能,而且设计的模块也很多,如工资管理模块,工资统计模块,报表设计模块,打印输出模块,数据查询模块等等。

因此,针对该要求而言,确定了工资管理系统的设计方案。该工资管理系统的主要功能如图1所示:

图1系统功能模块组成

2、工资结构设置模块

该工资管理系统主要实现一些基本的数据管理,主要表单模块,由各种输入、输出、浏览、修改、统计、打印、查询、帮助及退出等功能组成。“工资管理查询系统”要求进行设计,并工资的工作流程,该系统包括12大模块:系统登录模块、系统主菜单模块、工资录入模块、工资记录修改模块、工资记录统计模块、工资记录查询模块、数据备份及初始化、工资浏览模块、工资记录打印、系统帮助、系统退出、系统时间模块组成。

系统登录模块的功能要求如下:

(1) 用户权限设置,不同级别的用设有有不同的权限密码。

(2) 综合初始系统设置。

数据录入模块功能要求如下:

(1) 职工信息的录入。

(2) 数据存储。

数据查询模块功能要求如下:

(1) 根据职工姓名查询职工的工资情况。

(2) 根据职工号查询职工的工资情况。

(3) 根据职工工作时间查询情况。

数据修改模块功能要求如下:

(1) 追加职工信息。

(2) 删除职工信息。

(3) 修改职工信息。(包括个人信息及集体更改)

(4) 自动计算职工工资信息。

报表浏览及打印模块功能要求如下:

(1) 打印工资信息。

(2) 打印工资条(个人信息)。

(3) 打印工资表(统计信息)。

员工信息包含以下内容:

(1) 职工号。

(2) 姓名。

(3) 日期。

数据备份及初始化功能要求如下:

  • 上月工资的备份存储。
  • 新信息存储初始化。
  • 退出。

系统帮助模块功能要求如下:

  • 显示系统时间。
  • 提示系统基本信息(注释版权出处)。

系统退出模块功能要求如下:

(1)用户可直接退出系统。

3.目标系统要求

目标系统应该达到以下要求:

1、时间经济性。优化逻辑设计与物理设计,使系统运行效率高,反映速度快。

2、可靠性。能连续准确的处理业务,有较强的容错能力。

3、可理解性。用户容易理解和使用该系统。

4、可维护性和适应性。系统应易于修改、易于扩充、易于维护,能够适应业务不断发展变化的需要。

5、可用性。目标系统功能齐全,能够完全满足业务需求。

6、安全保密性。保证系统的物理安全、数据存储和存取的安全与保密、数据传输的安全与保密,做好使用人员的授权管理。

4.系统平台设计

选择微软平台作为主导,一方面考虑目前微软的飞速发展,越来越多的企业在规划内部网络时,将微软平台作为首选方案;另一方面从技术角度来讲,微软平台上的应用无论是在开发上,还是在软件的部署上都非常容易,而且性能优越。

操作系统:Windows xp/2000/98

开发工具与语言: Visual FoxPro 6.0中文版

第二章.工资管理系统信息概要设计

 1.工资数据流程图

1).由需求分析可知,主导流程应用封面(设置受制权限)的表单进入系统菜单,再由各个表单模块做成系统菜单项。主要表单模块,由各种输入、输出、浏览、修改、统计、打印、查询、帮助及退出等功能。分别如图2.1、2.2所示

                

                            

图2.1

进入系统 数据管理

     图2.2

2.工资管理系统主要模块简介

2.1工资管理系统主要文件组成 (数据词典分析)

一般的工资管理系统主要功能包括:记录的录入、浏览、修改、统计、查找和打印等,下面为该系统主要功能模块。

1).表单功能模块

工资主控模块(调用表单gzgl.scx)

工资初始化及备份模块(调用表单gzinit.scx)

工资录入模块(调用表单gzlr.scx)

工资浏览模块(调用表单gzll.scx)

工资修改模块(调用表单gzmodi.scx)

工资统计模块(调用表单gzcount.scx)

工资查找模块(调用表单gzfind.scx)

工资打印模块(调用表单dayin.scx)

系统封面模块(调用表单fm.scx)

系统帮助模块(调用表单xthelp.scx)

系统时间模块(调用表单xttime.scx)

2).菜单与报表文件

系统功能菜单(xtcd.mnx)

工资表报表(gzb.frx)

工资条报表(gzt.frx)

3).数据库文件

数据库名称:gz.dbc

数据表名称:gzb.dbf

数据表名称:XXb.dbf

Gzb表结构如下图所示:

字段名称

字段类型

字段宽度

小数点

默认值

职工号

C

8

0

职称

C

8

0

姓名

C

8

0

出勤情况

L

职务工资

N

7

2

0

旷工扣款

N

7

2

0

职务补贴

N

8

2

0

应发工资

N

8

2

0

养老保险

N

7

2

0

合计扣款

N

7

2

0

实发工资

N

8

2

0

所得税

N

7

2

0

实发现金

N

8

2

0

其中合同%15与承包30%两字段在建立数据库表时写成其他形式。

XXB表结构如下图所示:

字段名称

字段类型

字段宽度

小数点

默认值

职工号

C

8

0

职称

C

8

0

姓名

C

8

0

性别

C

2

0

年龄

N

2

0

学历

C

8

0

2.2功能模块菜单

工资管理系统的菜单功能如下图3所示:

3.项目与数据库的建立

3.1项目地建立

①在硬盘上建立一个目录C:\Documents and Settings\Administrator\桌面\vf作业ll\gzgl。

②启动VFP系统,在“项目管理器窗口”中,建立一个项目,项目的名称为“工资管理系统”,并保存到所建立的C:\Documents and Settings\Administrator\桌面\vf作业ll\gzgl

目录下。

图4新建的项目

3.2数据库及数据库表的建立

建立一个GZ数据库和一个GZB表如下图5、6所示:

图5建立数据库

图6数据库表的内容

再在GZ数据库下建立一个xxb表如下图5.1、6.1所示:

图5.1

图5.2

3.3数据表间关系的建立:

为gzb建立主索引和xxb建立候选索引

第三章.工资管理系统模块设计

1.系统主菜单设计

①在“项目管理器”窗口中,选择“其他”选项卡。

②在其“他选”项卡中选择“菜单”。

③单击新建按钮,屏幕出现“新建菜单对话框”。

④在“新建菜单对话框”中,单击“菜单”命令,系统进入“菜单设计器”窗口。

分别建立“主菜单”及“工资记录管理子菜单”,主菜单包括工资记录管理、编辑菜单、记录打印、系统帮助、退出,工资记录子菜单中项目包括数据库初始化及备份、工资记录录入、工资记录浏览、工资记录修改、工资记录统计、工资记录查询、退出系统。

⑤退出系统设计为过程:代码为

byebye=messagebox("真的要退出吗?",64+1,"提示信息")

if byebye=1

close all

clear events

quit

endif

⑥在“菜单级”中选择“菜单栏”,返回主菜单。

⑦重复⑤~⑦步,编辑其他子菜单

图7

这些子菜单分别是调用系统的内部分量完成相应功能,其具体操作如下:

选单项目内部命令(图8所示)

撤销   _MED_UNDO          

重做   _MED_REDO         

     剪切   _MED_CUT

复制   _MED_COPY

粘贴   _MED_PASTE

清除   _MED_CLEAR

⑧输入上述菜单项所对应的系统菜单内部命令生成菜单,其他菜单项调用程序如下所示:(图7)所示:

记录打印菜单:

打印记录:do form dayin with s             

记录浏览:do form gzll

系统帮助菜单:do form xttime              

关于系统:do form xthelp

退出菜单:

退出系统:byebye=messagebox("真的要退出吗?",64+1,"提示信息")

if byebye=1                          

close all

clear events

quit                                

endif

系统帮助:do form xthelp

⑨设置顶层表单,保存菜单,菜单名为xtcd,扩展名.mnx,最后再生成.mpr文件。

⑩退出菜单设计器窗口,将会在“项目管理器”窗口中看到菜单文件,在对其行修改,直到运行无误为止。

图8

2.系统主控表单模块设计

主控表单用来调用系统菜单,用来控制整个系统的控制与管理。

2.1表单的执行屏幕

主控表单执行屏幕如图9所示。

2.2表单与控件属性设置:

Form表单的属性设置:

Caption=”工资管理系统”      

showwindow=2-作为顶层表单( 指定该表单位顶层表单)

Windowstate=2-最大化(指定表单在运行使最大化)

Showtips=.T.(指定表单对象显示“工具提示”)

2.3事件代码

Form表单的laod事件代码:

Do xtcd.mpr with this,.t. 

运行结果如下图所示:图9

3.数据库初始化及备份模块表单设计

3.1表单的执行与设计

下图为该表单的执行屏幕及设计屏幕,分别为:图10、图11

图10

3.2控件属性设置

Label1标签的属性设置。

    Caption改为:“数据库初始化”

    FontName改为:“华文行楷”

    FontSize改为:26

    Fontunderline改为:.T.—真

Shape1和Shape2的属性:

    BackStyle改为:0—透明

SpecialEffect改为:0—3维

3.3事件代码

表单form1的activate事件代码

thisform.label1.caption="数据初始化"

thisform.label2.caption="使用说明"

thisform.label3.caption="使用本模块要注意,备份文件的时候一般要给出一个具体的文件名(不需扩展名);

名字由工资、年份、月份、日期组成,其意义为明确备份的日期及备份是那个月的工资."

thisform.label4.caption="当前数据库的信息"

thisform.label5.caption="当前数据库名称:"+dbf()+chr(13)+"当前日期"+dtoc(date())+;

           chr(13)+"需要备份到:"+"工资"+ alltrim(str(year(date())))+"-"+;

          alltrim(str(month(date())))+"-"+alltrim(str(day(date())))+".dbf"

thisform.label6.caption="备份数据库到下面文件中"

thisform.label7.caption="下面是初始化"+alltrim(str(month(date())))+;

"月份的工资表:"

thisform.text1.value="C:\Documents and Settings\Administrator\桌面\vf作业\gz\gzb"+alltrim(str(year(date())))+;

alltrim(str(month(date())))+"-"+alltrim(str(day(date())))+".dbf"

“备份”command1按钮的click事件代码:

ff=alltrim(thisform.text1.value)

copy to ff

“初始化”command2按钮的click 事件代码:

set path to

a="下面要进行初始化,将对原来的数据进行改变,所以一定要先进行备份,否则原来的数据将丢失。";

+chr(13)+"进行备份吗?"

inotice=messagebox(a,65,"提示信息")

if inotice=1

if file("temptemp.vfp")

delete file temptemp.vfp

endif

copy to temptemp.vfp

thisform.refresh

endif

Command3“退出”按钮的Click事件代码:

Thisform.Release

4.工资录入模块表单设计

4.1工资录入模块表单的执行与设计

工资录入模块是用来录入工资记录的,在具体操作时有些数据需要自动生成,参见代码。具体设计时各字段是通过数据环境拖拽到表单中的,再利用“布局”工具栏进行调整。表单的执行屏幕如图12、13所示:            

图12

图13

4.2表单与控件的属性设置

Form1表单的属性:

Autocenter改为:.T.—真(运行时表单居中)

ShowWindow改为:1—在顶层表单中(使得该表单能够在顶层表单中运行)

Titlebar改为:0—关闭(使该表单的标题栏不可见)

Image1控件的属性:

Stretch改为:2—变比例填充

Label1控件的属性:

Caption改为:”工资录入模块”

FontName改为:”华文行楷”

FontSize改为:36

Shape1 控件的属性(“职工情况”的方框):

BackStyle改为:0—透明(背景透明,另外在选择时注意选择“格式”中的置后,以免使该控件遮盖其他控件)

SpecialEffect改为:0—3维(指明该控件是三维立体效果)

4.3事件代码

(1)文本框控件

“Txt应发工资”控件的事件。

Click和GotFocus(获得焦点事件)的代码:

with this.parent

this.value =.TXT职务工资.VALUE+.TXT书报费.VALUE+.TXT构成津贴.VALUE+.TXT合同15.VALUE+.TXT家属价格.VALUE+.TXT综合补贴.VALUE;

+.TXT出勤补.VALUE+.TXT岗位津贴.VALUE+.TXT洗理费.VALUE+.TXT交通补.VALUE+.TXT儿保费.VALUE;

+.TXT提租补贴.VALUE+.TXT外租房补.VALUE+.TXT未纳奖.VALUE+.TXT职务补贴.VALUE+.TXT补发工资.VALUE

endwith                    

“Txt合计扣款”控件的事件。

Click和GotFocus(获得焦点事件)的代码:

with this.parent

this.value=.txt养老保险.value+.txt扣会费.value+.txt公积金.value+.txt承包30.value

endwith

“txt所得税”控件的事件。

Click和GotFocus的代码:

if this.parent.txt实发工资.value>800

this.value=(this.parent.txt实发工资.value-800)*0.05

endif

thisform.refresh

“实发现金”控件的事件

Click和GotFocus(获得焦点事件)的代码:

with this.parent

this.value =.txt实发工资.value-.txt所得税.value-.txt其他扣款.value

endwith

thisform.refresh

该代码是在“txt实发现金”控件获得焦点时,自动计算实发现金的总数。

(2)命令按钮的控件

“第一个”命令按钮Command1的Click事件代码:

go top

thisform.refresh

“上一个”命令按钮Command2的Click事件代码:

skip-1

if bof()

go top

=messagebox("已经是第一个记录了!",64,"提示信息")

endif

thisform.refresh

“上一个”命令按钮Command3的Click事件代码:

skip+1

I f eof()

go bottom

=messagebox("已经是最后一个记录了!",64,"提示信息")

endif

thisform.refresh

“最后一个”命令按钮Command4的Click事件代码:

go bottom

thisform.refresh

“添加”命令按钮Command5和Click事件代码:

append blank

go bottom

thisform.refresh

“退出”命令按钮Command6的Click事件代码:

thisform.release

5.工资查找模块表单设计

5.1设计第一页

Form1表单的load事件

public getzgh1,getxm1,getrq1,s

getzgh1=''

getxm1=""

text1控件的interactivechange事件代码:

set exact off

GETzgh1=ALLTRIM(thisform.pageframe1.page1.TEXT1.VALUE)

GETxm1=ALLTRIM(thisform.pageframe1.page1.TEXT2.VALUE)

GETrq1=thisform.pageframe1.page1.TEXT3.VALUE

s=''

if len(getzgh1)>0

s=s+'职工号=GETZGH1'

endif

if len(getxm1)>0

s=s+'.and.'+'姓名=GETXM1'

endif

do while left(s,5)='.and.'.OR.LEFT(S,5)='.AND.'

s=subst(s,6)

enddo

IF LEN(ALLTRIM(S))=0

SET FILTER TO

ELSE

set filter to &s

ENDIF

GO TOP

THISFORM.PAGEFRAME1.PAGE1.REFRESH

THISFORM.PAGEFRAME1.PAGE2.REFRESH

添加页框控件,以工资表作为数据源其执行及设计表单屏幕如下图14、15所示:

        图14

Text2控件的interactivechange事件代码:

set filter to 在职称=this.parent.text2.value

thisform.refresh

Text3控件的interactivechange事件代码:

set filter to 姓名=alltrim(this.parent.text3.value)

thisform.refresh

“查看详细内容”命令按钮command1的click事件

thisform.pageframe1.page2.setfocus

thisform.refresh

“打印”命令按钮command2的click事件

do form dayin with s

“退出”命令按钮command2的click事件

Thisform.release

图15第一页执行屏幕

5.2设计第二页

以上是查询表单的第一页的控件,下面对页框第二页进行编辑,表单的执行屏幕如图17所示,表单的设计屏幕如图16所示。

在该页中,有三个标签控件,其标题为职工号、日期、姓名,坑害有三个文本框控件txt职工号、txt日期、txt姓名,其ForeColor属性值为(0,0,255),即前景为蓝色。

“返回上页”命令按钮Command1的Click事件代码为:

thisform.pageframe1.page1.setfocus

thisform.pageframe1.page1.refresh

“打印”命令按钮Command2和”退出”命令按钮Command3的Click事件和页框第一页相

图16

图16.1添加数据源屏幕

               

图17第二页执行屏幕

第二页设计屏幕

6.工资浏览模块表单设计

6.1表单的执行与设计

6.2属性与事件代码

表单form的load事件代码如下:

public getzgh1,getxm1,getrq1,s

getzgh=''

getxm1=''

图18记录浏览执行屏幕

记录浏览设计屏幕

Text1,text2,text3控件的interactivechange事件代码:

set exact off

GETzgh1=ALLTRIM(thisform.TEXT1.VALUE)

GETxm1=ALLTRIM(thisform.TEXT2.VALUE)

s=''

if len(getzgh1)>0

s=s+'职工号=GETZGH1'

endif

if len(getxm1)>0

s=s+'.and.'+'姓名=GETXM1'

endif

do while left(s,5)='.and.'.OR.LEFT(S,5)='.AND.'

s=subst(s,6)

enddo

IF LEN(ALLTRIM(S))=0

SET FILTER TO

ELSE

set filter to &s

ENDIF

GO TOP

THISFORM.REFRESH

THISFORM.REFRESH

7.修改记录模块表单设计

插入一个为页框数4的个页框控件,对各个页框设计

7.1设计第一页 

(表单执行如图19)所示

图19第一页执行屏幕

Text1,text2,text3控件的interactivechange事件代码:

set exact off

GETzgh1=ALLTRIM(thisform.pageframe1.page1.TEXT1.VALUE)

GETxm1=ALLTRIM(thisform.pageframe1.page1.TEXT2.VALUE)

s=''

if len(getzgh1)>0

s=s+'职工号=GETZGH1'

endif

if len(getxm1)>0

s=s+'.and.'+'姓名=GETXM1'

endif

if left(s,5)='.and.'.OR.LEFT(S,5)='.AND.'

s=subst(s,6)

endif

IF LEN(ALLTRIM(S))=0

SET FILTER TO

ELSE

set filter to &s

ENDIF

GO TOP

THISFORM.PAGEFRAME1.PAGE2.CAPTION=姓名+"的详细内容"

THISFORM.PAGEFRAME1.PAGE1.REFRESH

THISFORM.PAGEFRAME1.PAGE2.REFRESH

“查找记录”command1按钮的click事件代码:

if not empty(thisform.pageframe1.page1.text4.value)

n=val(alltrim(thisform.pageframe1.page1.text4.value))

go n

thisform.pageframe1.page2.setfocus

thisform.pageframe1.page2.caption=姓名+" 的记录内容"

thisform.refresh

else

set exact off

GETzgh1=ALLTRIM(thisform.pageframe1.page1.TEXT1.VALUE)

GETxm1=ALLTRIM(thisform.pageframe1.page1.TEXT2.VALUE)

s=''

if len(getzgh1)>0

s=s+'职工号=GETZGH1'

endif

if len(getxm1)>0

s=s+'.and.'+'姓名=GETXM1'

endif

if left(s,5)='.and.'.OR.LEFT(S,5)='.AND.'

s=subst(s,6)

endif

IF LEN(ALLTRIM(S))=0

SET FILTER TO

ELSE

set filter to &s

ENDIF

GO TOP

endif

THISFORM.PAGEFRAME1.PAGE2.CAPTION=姓名+"的详细内容"

THISFORM.PAGEFRAME1.PAGE1.REFRESH

THISFORM.PAGEFRAME1.PAGE2.REFRESH

“删除记录”command2按钮的click事件代码:

INOTICE=MESSAGEBOX("确定删除指定的记录吗?",65,"重要提示")

IF INOTICE=1

DELETE RECORD RECNO()

ANOTICE=MESSAGEBOX("确定物理删除指定的记录吗?"+CHR(13)+"一经删除,不能恢复!!!",65,"重要提示")

IF ANOTICE=1

use

use gzb  

PACK

use

thisform.release

ENDIF

THISFORM.REFRESH

ENDIF

“恢复删除”command3按钮的click事件代码:

INOTICE=MESSAGEBOX("恢复所有逻辑删除的记录吗?",65,"提示信息")

IF INOTICE=1

RECALL ALL

ENDIF

“打印记录”command3按钮的click事件代码:

DO FORM DAYIN WITH S

“退出”command3按钮的click事件代码:

THISFORM.RELEASE

7.2设计第二页

7.2.1表单的执行与设计

表单设计所需控件如图20所示,以gzb为数据源表,执行结果如图21所示

图20

图21(修改单个记录执行屏幕)

7.2.2事件代码

“自动计算”command1按钮的click事件代码:

With This.Parent

.Txt应发工资.Value=.Txt职务工资.Value同15.Value;+.Txt职务补贴.Value

.Txt合计扣款.Value=.Txt养老保险.Value

.Txt实发工资.Value=.Txt应发工资.Value-.Txt合计扣款.Value

If This.Parent.Txt实发工资.Value>800  &&果工资高于800则有所得税,费率为m 5%  

.Txt所得税.Value= (This.Parent.Txt实发工资.Value-800)*0.05

EndIf

.Txt实发现金.Value=.Txt实发工资.Value-.Txt所得税.Value

EndWith

“返回上页”command2按钮的click事件代码:

THISFORM.PAGEFRAME1.PAGE1.SETFOCUS

THISFORM.PAGEFRAME1.PAGE1.REFRESH

Command3, command4的代码与上页相同。

7.3设计第三页

7.3.1表单的设计与执行

第三页是用来实现批量修改满足条件的记录,可以对指定的多个记录进行修改。表单的设计屏幕如图22所示:

图22批量修改满足条件的记录

7.3.2事件代码

“确认修改”command1按钮的click事件代码:

A=MESSAGEBOX("确定更改指定的项目吗?",65,"提示信息")

IF A=1 &&选择确定按钮时执行

replace all 职务工资 WITH 职务工资+THIS.PARENT.TEXT4.VALUE

replace all 应发工资 WITH 应发工资+THIS.PARENT.TEXT4.VALUEreplace all 实发工资 WITH 实发工资+THIS.PARENT.TEXT4.VALUE

replace all 应发工资 WITH 应发工资+THIS.PARENT.TEXT5.VALUE

replace all 实发工资 WITH 实发工资+THIS.PARENT.TEXT5.VALUE

replace all 应发工资 WITH 应发工资+THIS.PARENT.TEXT6.VALUE

replace all 实发工资 WITH 实发工资+THIS.PARENT.TEXT6.VALUE

replace all 所得税 with iif(实发工资-800>0,(实发工资-800)*0.05 ,0)

replace all 实发现金 with 实发工资- 所得税

THIS.PARENT.TEXT4.VALUE=0

THIS.PARENT.TEXT5.VALUE=0

THIS.PARENT.TEXT6.VALUE=0

THISFORM.REFRESH

ENDIF

图23批量修改满足条件的记录设计

“自动计算”命令按钮的click事件代码如第二页及第四页代码相同

7.4.设计第四页

7.4.1表单的执行与设计

第四个页面主要是实现浏览时修改,设计与执行屏幕如下24、25所示

7.4.2控件属性与事件代码

Rowsource改为 gzb.职工号,姓名     rowsourcetype改为-字段    columncount改为2

List1列表框的click事件代码:

THISFORM.PAGEFRAME1.PAGE4.LABEL1.CAPTION=ALLTRIM(姓名)+"的记录内容"

THISFORM.REFRESH

图24浏览时修改设计模块

图25浏览式修改记录模块执行屏幕

Spinner1的属性和事件代码:

Spinnerhighvalue=12

Spinnerlowvalue=1

Keyboardhighvalue=12

Keyboardlowvalue=1

Increment=1

Spinner1的gotfocus事件代码:

PUBLIC X,XM

XM=姓名

X=THIS.VALUE

Spinner1的upclick事件代码:

LOCATE ALL FOR MONTH(日期)=THIS.VALUE .AND. 姓名=XM

*?THIS.VALUE,X,XM

IF FOUND()

     THISFORM.REFRESH

ELSE

     =MESSAGEBOX("该记录没找到!",64,"提示信息")

     THIS.VALUE=X

     THISFORM.REFRESH

ENDIF

Spinner1的downclick事件代码:

*XM=姓名

*X=THIS.VALUE

IF FOUND()

          THISFORM.REFRESH

ELSE

           =MESSAGEBOX("该记录没找到!",64,"提示信息")

           LOCATE ALL FOR MONTH(日期)=THIS.VALUE .AND. 姓名=XM

         THIS.VALUE=X

         THISFORM.REFRESH

ENDIF

8.统计模块表单设计

8.1表单设计与实现

表单的设计与执行模块设计分别如下图26,27

图26数据统计表单的设计屏幕

图27执行模块

8.2事件代码

“开始统计”command1按钮的click事件代码:

SET  talk off

SET FILTER TO

COUNT TO XYZ

SUM TO A1,A15,A16,A17,A181,A22,A23,

         THISFORM.TXT职务工资.VALUE=A1

THISFORM.TXT职务补贴.VALUE=A15

THISFORM.TXT补发工资.VALUE=A16

THISFORM.TXT应发工资.VALUE=A17

THISFORM.TXT养老保险.VALUE=A18

THISFORM.TXT合计扣款.VALUE=A22

THISFORM.TXT实发工资.VALUE=A23

THISFORM.TXT实发现金.VALUE=A26

THISFORM.TEXT7.VALUE=XYZ

THISFORM.REFRESH

9.打印模块表单设计

本表单用来实现对记录的打印,共有两种打印形式:打印工资条和打印工资表。

9.1表单执行与设计

表单的设计与执行模块如下图28所示

图28打印模块执行图

9.2事件代码

表单form1的init事件代码:

parameters tj

public tiaojian

tiaojian=tj

选项按钮组optiongroup1 的click事件代码:

if thisform.optiongroup1.value=3

thisform.optiongroup2.value=2

thisform.optiongroup2.refresh

endif

“打印”command1按钮的click事件代码:

xyz=recno()

do case

case thisform.optiongroup1.value=1

if thisform.optiongroup2.value=1

report form gzt.frx for recno()=xyz to printer noconsole

else

report form gzb.frx for recno()=xyz to printer noconsole

endif

case thisform.optiongroup1.value=2

if thisform.optiongroup2.value=1

report form gzt.frx for &tiaojian to printer noconsole

else

report form gzb.frx for &tiaojian to printer noconsole

endif

case thisform.optiongroup1.value=3

if thisform.optiongroup2.value=1

report form gzt.frx  to printer noconsole

else

report form gzt.frx  to printer noconsole

endif

endcase

“退出”command2按钮的click事件代码:

thisform.release

label2的init事件代码:

thisform.label2.caption='说明:'+chr(13)+;

'选择你所需要的打印方式,然后选择打印按钮即可,如果希望推出则选择退出按钮'

10.系统封面模块表单设计

10.1表单的执行与设计

表单的执行屏幕如图29所示          图29

当执行密码错误时执行结果为图30,当密码输入正确是执行结果如图31所示

图30密码错误时提示信息

图31密码正确时进入系统

10.2属性与事件代码

封面表单form属性

Autocebter改为:.T.—真(运行时居中)

Showtips改为:.T.—真

Showwindow改为2—作为顶层表单

Titlebar改为0—关闭

表单form1的laod事件代码:

public username(2)

username(1)="朱佩"

username(2)="allen"

timer1控件的属性

interval改为500

timer1控件的事件代码:

THISFORM.LABEL3.CAPTION='日期: '+ALLTRIM(STR(YEAR(DATE())))+'年'+ALLTRIM(STR(MONTH(DATE())))+'月'+ALLTRIM(STR(DAY(DATE())))+'日'+CHR(13)+'时间: '+TIME()

Combol组合框控件的属性

Rowsource改为:username(表单laod事件定义的数组)

Rowsourcetype改为5—数组(定义数据源)   tabindex改为1

Text1控件属性:passwordchar改为*

Command1的属性:tooltiptext改为:”密码输入正确时可进入系统”

Combol组合框空间的单击事件代码:

THISFORM.TEXT1.SETFOCUS

“登录系统”命令按钮command1的click事件代码:

STORE '' TO MYUSER,P1,P2,P3

MYUSER=THISFORM.COMBO1.VALUE

P1=ALLTRIM(THISFORM.TEXT1.VALUE)

P2=LEFT(ALLTRIM(TIME()),2)+SUBSTR(ALLTRIM(TIME()),4,2)

P3=ALLTRIM(STR(YEAR(DATE())))

IF MYUSER=USERNAME(1)

IF P1=P3

THISFORM.RELEASE

do form gzgl

ELSE

=MESSAGEBOX("超级用户密码错误,请再试一遍!",65,'提示信息')

ENDIF

ELSE

IF P1=P2

THISFORM.RELEASE

do form gzgl

ELSE

=MESSAGEBOX("普通用户密码错误,请再试一遍!",65,'提示信息')

ENDIF

ENDIF

“退出系统”命令按钮command2的click事件代码:

THISFORM.RELEASE

11.系统时间模块表单设计

11.1表单的执行与设计

表单的执行与设计屏幕分别如下图32、33所示

图33系统时间的执行屏幕

11.2控件属性域代码

时间控件的添加:

  • 选择“工具”菜单中的“选项”菜单项,屏幕出现如图34。
  • 选择“日历控件”,选择“确定”即可。
  • Form1的init事件:

thisform.label2.caption="时间:"+alltrim(dtoc(datetime()))+time()

“退出”命令按钮command1的click事件代码:

thisform.release

12.系统帮助表单模块设计

12.1表单的设计与执行

执行屏幕如图34所示

12.2表单控件的属性与事件代码:

Form1的init事件代码:

将label1,label2,label3的wordwrap属性改为:—.T.

thisform.label2.caption="系统说明"+chr(13)+"本工资管理系统,是一个比较"+chr(13); +"完整的,关于visual foxfro使用实例的"+chr(13)+"系统,希望大家能够喜欢。"

thisform.label3.caption="产品名称:工资管理系统"+chr(13)+;

"版本号:V1.00"

thisform.label4.caption="版权所有:朱佩佩"+chr(13)

“确定”命令按钮command1的click事件代码:

thisform.release

图34系统帮助的执行屏幕

13.报表表单的设计

本系统共需要2个报表,即工资表报表、工资条报表

13.1工资表报表的设计与执行

13.1.1工资表的设计

工资表的报表设计如图35

设计报表时打开生成器,打开自动生成的报表,使用格式菜单的命令来完成布局,然后利用画图和画框工具来调整布局。

13.1.2工资表报表的执行

在报表相应控件上进行修改和设计,实现打印的方法右击报表相应控件,在弹出快捷菜单上选择“属性”命令,出现“报表表达式”对话框如图36所示。

该处代码为:

alltrim(str(year(date())))+"年"+alltrim(str(month(date())))+"月份"

图36 “报表表达式”对话框

图37工资表报表的执行屏幕

图38

工资条执行屏幕39

第四章.程序的连遍与系统维护

应用系统的设计,通过项目管理器将表单与菜单、数据库等连在一起,就可以建立可执行程序。利用项目管理器编译成可执行文件很简单,它将在项目管理器中的全部文件编译在一起,形成一个独立的可执行文件。连编必须进行以下4个步骤:

1.将所有的应用程序加入到项目管理器中。

2 .主程序的建立

3 .程序的调试

4 .应用程序的连编。

1. 将应用程序添加到项目管理器中

将全部的应用程序添加到项目管理器中的操作步骤如下:

1 .打开已建立的项目。

2 .选择相应的选项卡,依次把自由表、数据库、表单文件、报表文件、菜单文件以及类库添加到项目。

如果建立应用程序时,上述表及相关文件就已经在项目管理器中,上述步骤可以省略。

3 .为了避免在程序编译后会出现一个VFP窗口,可以在“项目管理器”窗口的“其他”选项卡的“文本文件”中,填加一个Config,fpw文件,文本内容是Screen=Off即可。

2.工资系统的主程序设计

   为了连编,必须确定连编的顺序,并确定应用程序的接口,为此,必须编写主程序Main.prg,确定运行顺序。每个系统都应该有一个主程序,当在程序项目管理器中开始编写第一个程序(如程序文件、菜单、表单等)时,管理器会默认将其作为主程序,但有时可能第一个编辑的程序不是主程序,这时就要重新设置主程序。创建一个可独立运行的Windows程序,就必须建立一个程序文件作为主文件。其操作步骤如下:

1 .在“项目管理器”窗口中,单击“代码”选项卡,选择“程序”,并单击“新建”按钮。即可创建程序文件。

工资主程序的代码如下:

Clear Screen

=Setpath()

on shutdown Clear Events

Do Form fm

Read Events

On shutdown Events

Function Setpath()

Local lcsys16,lcprogram

Lcsys16=sys(16)

Lcprogram=subStr(lcsys16,at(“;”,lcsys16)-1)

Cd  Left(lcprogram,rat(“\”,lcprogram))

Set path   to   Gzgl

Endfunc

2.单击右上交的“关闭”按钮,在“另存为”对话框中,以“main”为文件名保存。

3.用鼠标右键单击文件名“main .prg’,在弹出的快捷菜单中,选择“设置主文件“如图40所示,此时可以看到程序main变为黑体。

图40“设计主文件”快捷菜单

3.程序的调试

如果在程序中有语法性的错误,当程序运行到错误的语句时,系统就会停下来并提示程序有错,通常还会说出是什么错误,如“命令中含有不能识别的短语或关键字”,并给出“取消”、“挂起”、“忽略”、“帮助”四个选择,它们的意思分别是:

“取消”表示中止程序运行,回到命令窗口,相当于执行了Cancel命令,在程序中创建的所有变量被释放(除公共变量),但数据库及数据表一般保持当时的状态,可以用Browse命令查看数据表的内容,如记录指针所在的位置等。

“挂起”表示暂停程序,相当于执行了Suspend命令,这时程序中的所有变量都保持原值,可以用?忽略。

“忽略”表示忽略所有出现的错误,即跳过出错的语句继续执行后面的语句。

“帮助”表示显示有关出错的帮助信息,对于错误做更详细的说明。

如果这时能看出问题出在哪里,可以选择“取消”,然后进到程序中找出错误所在的位置,将其改正。在选择了“取消”后,可能这时有表单是打开的,那么用鼠标点一下该窗口,然后选择“关闭”。如果菜单是自定义菜单,用Set sysmenu to default回到系统菜单。改完后,再次运行程序前,最好将所有的数据库及表关闭,以免在程序打开一个数据表时出现表已打开的错误,比较好的办法是在程序开头先关闭所有的数据库及表。关闭所有数据库的命令是:Close Datagbase All。

关闭所有表的命令是:Close Table All 。

如果不知道问题出在程序的哪个地方,选择“挂起”,系统会弹出一个调试器窗口,显示出错的语句,在跟踪窗口的黄色箭头所指的语句就是可能出错的语句。

4.程序的连编

程序全部编写完成就可以开始编译软件了,操作步骤如下:

1.单击“项目管理器”窗口中的“连编”命令,屏幕出现“连编选项”

对话框,如图:

2.在“操作”框中,选择“连遍可执行文件”,按“确定”按钮。

3.输入编译后的.EXE文件名,然后保存在已建的应用程序所在的目录中。

4.接着系统便进入编译过程,这一过程是计算机自动完成的。在这一过程中系统会首先检查程序是否有错误,如有错误时会给出提示,在提示中可以选择“忽略”、“全部忽略”、“取消”。这里的“忽略”就是不管出现的错误继续编译。当然,一般不应该这样,一旦出现错误提示,应选择“取消”,然后找出相应的错误,改正后再编译。为了容易查找错误,系统还将错误记录下来,在菜单的“项目”—“错误”中可以看到,其中会讲明是什么错误,发生在哪个程序的哪一条语句中。对于有些错误会不给出提示而直接忽略,但它仍然会把错误记录下来。如果系统编译时没有记录错误,那是因为在菜单上的“工具”—“选项”—“常规”—“编程”中的“记录编译错误”没有打开。

5.编译完成后,用户就可以将自己的系统拷贝到其他的机器上运行(即脱离VFP环境)。但是值得注意的是,系统要将相应版本的VFP支持文件拷贝进去,比如,VFP6.0中需要的文件为:VFP6r.dllVFP6renu,dull。

第五章.心得体会

通过本次实训体验,使我基本上掌握了开发一个系统所要做的准备,从采集信息到收集信息再到整理信息的过程是必不可少的。从用户的角度去搜索要完成的基本功能,再决定所要得做的功能模块,最后再编辑和设计各个模块,最后在实现各个模块的连编,完成一个可以实现基本功能的管理系统。

同时该次实训使我掌握了VF系统环境的各种基本操作,如数据库的建立和使用、表单的设计和使用、菜单的设计和使用及菜单和表单之间的关系建立等等。

这次实训使我收益非浅,不但让我学到了很多知识,也使自己开阔了视野,知道了当今科技的快速发展,只有不断学习才可跟上时代的步伐。

考核点评:

                                                                               

                                                                               

                                                                               

                                                                               

                                                                               

                                                                               

                                                                               

                                                                               

                                                                               

                                                                               

                                                                               

                                                                               

                                                                               

                                                                               

                                              成绩分类:A:90-100(优)

                                                        B:80-89(良)

                                                        C:60-79(中)

                                                        D:60以下(差)

                                                     

                                                评定等级:             

                                                 

评阅人 :                   

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
工资管理系统是一个用于管理和记录员工工资信息的软件系统。SSM,即Spring+SpringMVC+MyBatis,是一种常用的JavaWeb开发框架。工资管理系统ssm源码是指使用SSM框架开发工资管理系统的源代码,它包括了系统的各种功能模块的实现和代码逻辑。 工资管理系统ssm源码主要包括以下几个模块: 1. 员工信息管理模块:用于录入、修改、查询和删除员工的基本信息,包括姓名、工号、部门、职位等。 2. 工资计算模块:根据员工的基本工资、绩效、津贴等信息,自动计算员工的工资,并生成工资单。 3. 考勤管理模块:记录员工的考勤信息,包括迟到、早退、加班等情况,用于计算出勤工资。 4. 报表统计模块:根据员工工资信息生成各种报表,如月工资统计、年度报表等。 工资管理系统ssm源码的开发涉及技术包括Java、Spring、SpringMVC、MyBatis等,其中Java是主要的编程语言,Spring用于管理系统的各种Bean,SpringMVC用于处理系统的请求和响应,MyBatis用于数据库访问。 在实际开发过程中,需要根据需求设计系统的数据库表结构,编写业务逻辑和数据访问层的代码,同时编写前端页面和后台管理页面,以及配置系统的各种参数和环境。 工资管理系统ssm源码的实现需要考虑系统的稳定性、性能和安全性,同时要满足用户的需求和易用性。通过合理的架构设计和代码编写,可以开发出高质量的工资管理系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等天晴i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值