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

本文介绍了一个自定义工资计算系统的实现细节,包括数据库结构的设计、工资项的定义及计算逻辑等。通过SQL语句创建了工资配置表和明细表,并实现了工资计算功能。

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

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

实发工资=应发工资-应扣工资
个人所得税=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 < $count; $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 < $count; $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 < $base) return 0; //

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


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

}


return $value;

}

内容概要:本文介绍了一个基于冠豪猪优化算法(CPO)的无人机三维路径规划项目,利用Python实现了在复杂三维环境中为无人机规划安全、高效、低能耗飞行路径的完整解决方案。项目涵盖空间环境建模、无人机动力学约束、路径编码、多目标代价函数设计以及CPO算法的核心实现。通过体素网格建模、动态障碍物处理、路径平滑技术和多约束融合机制,系统能够在高维、密集障碍环境下快速搜索出满足飞行可行性、安全性与能效最优的路径,并支持在线重规划以适动态环境变化。文中还提供了关键模块的代码示例,包括环境建模、路径评估和CPO优化流程。; 适合人群:具备一定Python编程基础和优化算法基础知识,从事无人机、智能机器人、路径规划或智能优化算法研究的相关科研人员与工程技术人员,尤其适合研究生及有一定工作经验的研发工程师。; 使用场景及目标:①用于复杂三维环境下的无人机自主导航与避障;②研究智能优化算法(如CPO)在路径规划中的实际部署与性能优化;③实现多目标(路径最短、能耗最低、安全性最高)耦合条件下的工程化路径求解;④构建可扩展的智能无人系统决策框架。; 阅读建议:建议结合文中模型架构与代码示例进行实践运行,重点关注目标函数设计、CPO算法改进策略与约束处理机制,宜在仿真环境中测试不同场景以深入理解算法行为与系统鲁棒性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值