`
happmaoo
  • 浏览: 4548503 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

公布一下工资管理系统中核心部分工资计算的代码

阅读更多
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>

终于完成了工资计算部分的代码,请大家指教一下

用户可以自行定义工资计算公式:例如

实发工资=应发工资-应扣工资
个人所得税=tax(应发工资)

CREATE TABLE pq_unitgzxm (
unit_id char(8) NOT NULL DEFAULT '',
xmbh int NOT NULL DEFAULT 0,
xmmc varchar(200) NOT NULL DEFAULT '',
gs varchar(400) NOT NULL DEFAULT '',
gdx bit NOT NULL DEFAULT '0',
bz varchar(200) NOT NULL DEFAULT '',
xtnd bit NOT NULL DEFAULT '0'
)

Go
INSERT INTO pq_unitgzxm values ('00000001',1,'基本工资' ,'',1,'',0);
INSERT INTO pq_unitgzxm values ('00000001',2,'奖金' ,'',1,'',0);
INSERT INTO pq_unitgzxm values ('00000001',3,'应发工资' ,'',1,'',0);
INSERT INTO pq_unitgzxm values ('00000001',4,'个人所得税','',1,'系统内定,不可修改',1);
INSERT INTO pq_unitgzxm values ('00000001',5,'应扣工资' ,'',1,'',0);
INSERT INTO pq_unitgzxm values ('00000001',6,'实发工资' ,'',1,'系统内定,不可修改',1);

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pq_gzb]')
and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [pq_gzb]
CREATE TABLE pq_gzb (
gzb_id char(8) NOT NULL PRIMARY KEY,
unit_id char(8) NOT NULL DEFAULT '', /* 单位id */
dwmc varchar(400) NOT NULL DEFAULT '', /* 单位名称 */
gzqjyear char(4) NOT NULL DEFAULT '', /* 工资期间年 */
gzqjperiod char(2) NOT NULL DEFAULT '', /* 工资期间期 */
gzffksrq varchar(10) NOT NULL DEFAULT '', /* 工资发放开始日期 */
gzffjsrq varchar(10) NOT NULL DEFAULT '', /* 工资发放结束日期 */

jsshebao varchar(2) NOT NULL DEFAULT '', /* 计算社保 */
shebaoksrq varchar(10) NOT NULL DEFAULT '', /* 社保开始日期 */
shebaojsrq varchar(10) NOT NULL DEFAULT '', /* 社保结束日期 */
fh varchar(8) NOT NULL DEFAULT '', /* 复合 */
fhr varchar(20) NOT NULL DEFAULT '' /* 复合人 */
)

Go

INSERT INTO pq_gzb (gzb_id,unit_id,dwmc,gzqjyear,gzqjperiod,gzffksrq,gzffjsrq,jsshebao,fh,fhr) values ('00000001','00000001','软件','2006','04','2006-04-01','2006-04-30','1','','');


if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pq_gzmx]')
and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [pq_gzmx]
CREATE TABLE pq_gzmx (
gzb_id char(8) NOT NULL DEFAULT '',
employee_id char(8) NOT NULL DEFAULT '',
xm varchar(400) NOT NULL DEFAULT '',
dwmc varchar(400) NOT NULL DEFAULT '',
unitcontract_id char(8) NOT NULL DEFAULT '',
employeecontract_id char(8) NOT NULL DEFAULT '',
gzffksrq varchar(10) NOT NULL DEFAULT '', /* 工资发放开始日期 */
gzffjsrq varchar(10) NOT NULL DEFAULT '', /* 工资发放结束日期 */
yff varchar(8) NOT NULL DEFAULT '', /* 已发放 */
gzdata1 decimal NOT NULL DEFAULT '0',
gzdata2 decimal NOT NULL DEFAULT '0',
gzdata3 decimal NOT NULL DEFAULT '0',
gzdata4 decimal NOT NULL DEFAULT '0',
gzdata5 decimal NOT NULL DEFAULT '0',
gzdata6 decimal NOT NULL DEFAULT '0',
gzdata7 decimal NOT NULL DEFAULT '0',
gzdata8 decimal NOT NULL DEFAULT '0',
gzdata9 decimal NOT NULL DEFAULT '0',
gzdata10 decimal NOT NULL DEFAULT '0',
gzdata11 decimal NOT NULL DEFAULT '0',
gzdata12 decimal NOT NULL DEFAULT '0',
gzdata13 decimal NOT NULL DEFAULT '0',
gzdata14 decimal NOT NULL DEFAULT '0',
gzdata15 decimal NOT NULL DEFAULT '0',
gzdata16 decimal NOT NULL DEFAULT '0',
gzdata17 decimal NOT NULL DEFAULT '0',
gzdata18 decimal NOT NULL DEFAULT '0',
gzdata19 decimal NOT NULL DEFAULT '0',
gzdata20 decimal NOT NULL DEFAULT '0'
)

Go
INSERT INTO pq_gzmx (gzb_id,employee_id,xm,dwmc,unitcontract_id,employeecontract_id,gzffksrq,gzffjsrq,gzdata1) values ('00000001','00000001','张三','软件','00000001','00000001','2006-04-01','2006-04-30',0);
INSERT INTO pq_gzmx (gzb_id,employee_id,xm,dwmc,unitcontract_id,employeecontract_id,gzffksrq,gzffjsrq,gzdata1) values ('00000001','00000002','李四','软件','00000001','00000002','2006-04-01','2006-04-30',0);

function cal_salary($gzb_id = '',$error = '') {
global $db, $me, $t,$_POST;


extract($_POST);
if ($gzb_id && !$error) {
$unit = $db->GetRow("select unit_id,dwmc from ".TBL_GZB." where gzb_id = '$gzb_id'");
$unit_id = $unit['unit_id'];
$dwmc = $unit['dwmc'];

//取出该单位所有的工资项
$unitgzxm = $db->GetAll("select xmmc,gdx,gs from ".TBL_UNITGZXM." where unit_id = '$unit_id'");

//取出所有的工资表
$rs = $db->Execute("select * from ".TBL_GZMX." where gzb_id = '$gzb_id'");

while (!$rs->EOF) { //取到工资表的一行,对这一行开始处理计算

debug_echo("Now cal the employee:".$rs->fields['employee_id']);
//先得到一个本行的名值对,如$data['应发工资']['value']=>'1000' $data['实发工资']['value']=>'1000'
for ($i = 0, $count = count($unitgzxm); $i
$data[$unitgzxm[$i]['xmmc']]['value'] = $rs->fields['gzdata'.($i+1)];
$data[$unitgzxm[$i]['xmmc']]['gs'] = $unitgzxm[$i]['gs'];

if($unitgzxm[$i]['gdx']==1) { //是固定项的,用来计算

if(trim($unitgzxm[$i]['gs'])!="") {
$data[$unitgzxm[$i]['xmmc']]['ready'] = 0; //表示该值尚没有计算好
}else {
$data[$unitgzxm[$i]['xmmc']]['ready'] = 1; //固定项,但公式为空,也看成准备就绪
}

} else {

$data[$unitgzxm[$i]['xmmc']]['ready'] = 1; //表示该值准备就绪

}
}

//print_r($data);

$allcal = 0; //所有都计算完的标志,为1时表示计算完毕
while($allcal ==0) {
$havecontinue = 0;
for ($i = 0, $count = count($unitgzxm); $i
if($data[$unitgzxm[$i]['xmmc']]['ready']==0) { //该值尚未计算好,进行计算


$allready = 1; // 公式中所有项都ready了么?

//取出公式里面所有的中文
preg_match_all("/[".chr(0xa1)."-".chr(0xff)."]+/", $data[$unitgzxm[$i]['xmmc']]['gs'],$matches, PREG_SET_ORDER);

//检查每一项ready情况
foreach ($matches as $val) {
if($data[$val[0]]['ready'] == 0) {
$allready = 0;
}
else {
$data[$unitgzxm[$i]['xmmc']]['gs'] = str_replace($val[0], $data[$val[0]]['value'], $data[$unitgzxm[$i]['xmmc']]['gs']);
}

}
debug_echo("the cal is".$data[$unitgzxm[$i]['xmmc']]['gs']);


//所有项都ready,就开始计算,计算完毕,$data[$unitgzxm[$i]['xmmc']]['ready'] = 1
//否则continue,继续for循环,检查下一个变量,并置havecontinue标志

if($allready==1) {
//先替换变量

//开始计算
$expression = $data[$unitgzxm[$i]['xmmc']]['gs'];


//$expression = "(2.33*6)";
$rpn = new Math_Rpn();
$value = $rpn->calculate($expression,'deg',false);
debug_echo("The value is ".$value);

$record["gzdata".($i+1)] = $value;

$data[$unitgzxm[$i]['xmmc']]['ready'] = 1;
} else {
$havecontinue = 1;
continue;
}



}

}

if(!$havecontinue) $allcal = 1;

}

$db->AutoExecute(TBL_GZMX,$record,'UPDATE', "gzb_id = '$gzb_id' and employee_id='".$rs->fields['employee_id']."'");


$rs->MoveNext();
}

}
show_form($gzb_id);
}

pear RPN包中加入了tax()的自定义函数如下

'tax' => array ('tax', 3, 1, '_tax'), //hack by Daniel Summer for rcpq

/**
* Tax function
*
* @param array $temp Temporary array
* @param integer $pos Position of operator
* @return float Function's relult
* @access private
*/
function _tax($temp, $pos) {
global $db;

$value = $temp[$pos-1];
$base = $db->GetOne("select * from ".TBL_TAX_BASE." where name = 'base'");

if($value
$value = $value - $base;
$rates = $db->GetAll("select * from ".TBL_TAX_RATE);


for ($i = 0, $count = count($rates); $i if($value>=$rates[$i]['bottomline'] && $value $value = $value * $rates[$i]['rate'];
$value = $value - $rates[$i]['quickcal'];
break;
}

}


return $value;

}



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=783572


分享到:
评论

相关推荐

    编写的职工工资管理系统源代码.rar

    职工工资管理系统是企业日常运营中的重要组成部分,它负责记录、计算和管理员工的薪资信息。在这个系统中,源代码是实现各项功能的基础,是程序设计者的心血结晶。本篇文章将围绕"编写的职工工资管理系统源代码"这一...

    c#工资管理系统源代码

    在这个工资管理系统中,C#的强大特性得以体现,如类、对象、继承、多态等概念都被用来构建模块化的代码结构。开发者可能使用了Windows Forms作为用户界面,通过事件驱动的方式与用户交互,提供友好的图形化操作体验...

    工资管理系统 课程设计 源代码

    工资管理系统是一种用于企业或组织内部,管理员工薪资发放、计算、调整及记录的应用软件。在进行课程设计时,这样的系统通常会涵盖多个关键模块,包括员工信息管理、薪酬结构设定、考勤记录处理、福利计算以及报表...

    企业工资管理系统源代码

    企业工资管理系统源代码是用于帮助企业高效管理员工薪资计算、发放及记录的重要软件系统。这个系统通常包含多个模块,如员工信息管理、薪酬结构设定、考勤管理、福利处理、个税计算以及报表生成等,旨在简化人力资源...

    工资管理系统 C#源代码

    工资管理系统是企业日常运营中必不可少的一部分,它帮助企业高效地处理员工薪资的计算、发放和管理。本项目是一个基于C#编程语言开发的完整工资管理系统,适用于初学者学习和实际应用。下面将详细介绍这个系统的核心...

    C# 工资管理系统 内附源代码

    在源代码中,"第2章 工资管理系统"可能包含了系统的详细实现,包括数据库设计(如SQL Server或SQLite)、业务逻辑处理(如C#类和方法)、视图展示(如ASP.NET MVC或Windows Forms)以及可能的数据访问层(如ADO.NET...

    员工工资管理系统源代码

    【员工工资管理系统源代码】是一个基于C++编程语言开发的应用程序,主要用于管理和维护企业内部的员工工资信息。这个系统的设计和实现旨在简化人力资源部门的工作,提高数据处理的效率和准确性,确保员工工资发放的...

    代码 工资管理系统 数据库

    在工资管理系统中,通常会包含以下几个核心表: 1. 员工表(Employees):存储员工的基本信息,如员工ID、姓名、性别、入职日期、部门等。 2. 薪资结构表(SalaryStructures):定义公司的薪资组成,包括基本工资、...

    asp.net代码工资管理系统

    在工资管理系统中,报告可能详细描述了如何实现工资的计算逻辑,如何确保数据的安全性,以及如何通过报表展现工资数据。这不仅有助于项目的内部管理,也方便了后期的维护和升级。 总结来说,这个ASP.NET代码工资...

    工资管理系统数据库源代码

    综上所述,这个工资管理系统数据库源代码是一个实践性的案例,展示了如何利用C++和数据库技术解决企业管理中的实际问题。无论是对初学者还是经验丰富的开发者,都提供了深入理解软件工程、数据库设计和C++编程的宝贵...

    商业工资管理系统的代码

    在代码层面,商业工资管理系统的实现通常包含以下几个核心模块: 1. **用户界面**:这是系统与用户交互的窗口,提供友好的图形化界面,让用户能方便地输入员工信息、设置薪资结构、查看工资单等。 2. **员工信息...

    VB工资管理系统设计(源代码+论文).rar

    VB工资管理系统设计(源代码+论文).rar VB工资管理系统设计(源代码+论文).rar VB工资管理系统设计(源代码+论文).rar VB工资管理系统设计(源代码+论文).rar VB工资管理系统设计(源代码+论文).rar VB工资管理系统设计...

    工资管理系统源代码 JAVA

    在实际应用中,这个工资管理系统可以实现员工工资的录入、计算、查询、修改和统计等功能。通过SSH框架,开发者可以更高效地构建系统,同时保证系统的稳定性和扩展性。Struts的Action类负责处理用户请求,调用Service...

    工资管理系统文献综述

    企业工资管理系统是现代人力资源管理的核心组成部分,对于企业而言,有效的人力资源管理是保持竞争优势的关键。人力资源被视为企业的生命线,而工资管理则是人力资源管理中的核心任务,因为它直接关系到员工的工作...

    中小企业工资管理系统

    中小企业工资管理系统是现代企业管理的重要组成部分,它以计算机技术为基础,为企业的薪酬管理提供高效、准确的解决方案。在当今数字化时代,此类系统对于中小型企业来说具有深远的影响和价值。 1.1 计算机管理员工...

    工资管理系统的课程设计报告模版

    工资管理系统的主要功能包括工资计算、工资支付、工资报表生成等。 二、系统设计与实现 系统设计与实现是课程设计报告的关键部分,主要包括系统功能模块、系统流程、系统的类设计和系统功能实现四个方面。 2.1 ...

    工资管理系统代码

    工资管理系统是一种专为企事业单位设计的应用...总的来说,工资管理系统通过集成这些功能,实现了对人力资源管理中薪资部分的自动化和精细化,极大地提高了工作效率,减少了人为错误,是现代企业不可或缺的管理工具。

Global site tag (gtag.js) - Google Analytics