使用自定义公式计算工资

pshy 2009-03-19 10:19:11
我在做人事软件的时候,考虑到工资计算方法可能会经常变化,想用自定义公式来实现。看了好多贴子都没看到比较好的解决方法,在此请教各位。
例如我有一个员工考勤表(迟到,请假),一个基本工资表(全勤奖),我要用这二个表中的字段进行自定义公式。
全勤奖计算方法为:如果迟到2次或请事假1天及以上者得0%,迟到1次或请事假半天者得50%,无迟到请事假者得100%。
请问这个公式用程序如何定义?该如何验证用户输入的公式是否正确呢?怎么让程序解释该公式并计算得出结果呢?
...全文
976 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengxue61 2011-03-14
  • 打赏
  • 举报
回复
我有个自己用Delphi写的自定义公式,公式项目可以自定义多项,且每个项目可以由不同的项目根据不同的条件生成,如果有兴趣可以联系我,邮箱:fengxue106@163.com
例如定义一个实得底薪,在公式里可写成:if(上班天数>=21,实得底薪,基本底薪*(上班天数/21),基本底薪和上班天数是一个项目。
此自定义公式经测试成功,且目前有支持十几个函数,但可以增加多个函数
booker 2009-03-20
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 booker 的回复:]
引用楼主 pshy 的帖子:

我在做人事软件的时候,考虑到工资计算方法可能会经常变化,想用自定义公式来实现。看了好多贴子都没看到比较好的解决方法,在此请教各位。
例如我有一个员工考勤表(迟到,请假),一个基本工资表(全勤奖),我要用这二个表中的字段进行自定义公式。
全勤奖计算方法为:如果迟到2次或请事假1天及以上者得0%,迟到1次或请事假半天者得50%,无迟到请事假者得100%。
请问这个公式用程序如何定义?该如何…
[/Quote]

不是bool,是float,汗颜-___-
caorenlong 2009-03-20
  • 打赏
  • 举报
回复
就用最简单的if else 或 switch case吧!
booker 2009-03-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 pshy 的帖子:]
我在做人事软件的时候,考虑到工资计算方法可能会经常变化,想用自定义公式来实现。看了好多贴子都没看到比较好的解决方法,在此请教各位。
例如我有一个员工考勤表(迟到,请假),一个基本工资表(全勤奖),我要用这二个表中的字段进行自定义公式。
全勤奖计算方法为:如果迟到2次或请事假1天及以上者得0%,迟到1次或请事假半天者得50%,无迟到请事假者得100%。
请问这个公式用程序如何定义?该如何验证用户输入的公式是否…
[/Quote]

既让你要在公式中加入逻辑判断,可以参照以下形式:

全勤奖 = 基本工资表.基本工资 * IF(考勤表.迟到>=2 || (考勤表.请假.type=="事假" && 考勤表.请假.times==1) , 0 , IF(考勤表.迟到==1 || (考勤表.请假.type=="事假" && 考勤表.请假.times==0.5) , 0.5 , 1))

或者你可以将这部分计算比例的判断定义到函数中(公式虽然灵活,但在人事管理中这种全勤奖给付条件应该是不会改变的吧)
全勤奖 = 基本工资表.基本工资 * getPercent();

bool getPercent()
{
...
return percent;
}

budong0000 2009-03-19
  • 打赏
  • 举报
回复
将公式里需要变动的保存为另一张表,程序从表中取表达式。像动态SQL。。。即LS说的建个公式工厂模式。
wwwojc 2009-03-19
  • 打赏
  • 举报
回复
在数据库建立计算工资需要的基本字段,之后加判断不就行了吗。
lxf2000104 2009-03-19
  • 打赏
  • 举报
回复
个人所得税,表结构公式
1 0 500 5 0
2 501 2000 10 25
3 2001 5000 15 125
4 5001 20000 20 375
5 20001 40000 25 1375
6 40001 60000 30 3375
7 60001 80000 35 6375
8 80001 100000 40 10375
9 100001 NULL 45 15875
lxf2000104 2009-03-19
  • 打赏
  • 举报
回复
岗位对应的可能是角色等等咯
lxf2000104 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 pshy 的回复:]
谢谢各位兄弟!
我就是想把逻辑判断也加入到公式定义里面,因为蛮多工资项目要用到判断的。如个人所得税,病假的工资等。我就是想用公式来处理,如果计个税的起征点变化,病假的计薪基数变动等只要改公式就可以。
要是不加逻辑判断就会简单了。
11楼的兄弟,我不是要在程序里写死:(
各位还有什么好的方法请多多指教,谢谢!!!
[/Quote]

对的,用数据库表存储起来。而且还要跟岗位挂钩,有岗位工资啊。
dell0923 2009-03-19
  • 打赏
  • 举报
回复
我觉得是楼主的设计有问题,如果我是用户,我只想输入迟到次数和请假天数,以及对应的奖金百分比就可以了.我们再来设计一个Config的表,里面有三个字段:LateTime,LeaveDay,Percent.系统管理员登录到画面时,设定这些值之后,考勤系统记录下每个员工的出勤记录.在统计画面,程序根据Config表里的字段以及员工的考勤记录和基本工资表(全勤奖)计算出实得奖金,显示给用户就可以了.
lchh0917 2009-03-19
  • 打赏
  • 举报
回复
创建一个工资工厂模型
genius_tong 2009-03-19
  • 打赏
  • 举报
回复
这个,我觉得还是具体情况具体分析的好~~~
wanabe 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 pshy 的回复:]
谢谢各位兄弟!
我就是想把逻辑判断也加入到公式定义里面,因为蛮多工资项目要用到判断的。如个人所得税,病假的工资等。我就是想用公式来处理,如果计个税的起征点变化,病假的计薪基数变动等只要改公式就可以。
要是不加逻辑判断就会简单了。
11楼的兄弟,我不是要在程序里写死:(
各位还有什么好的方法请多多指教,谢谢!!!
[/Quote]
不加逻辑判断你咋实现
写个存储过程可能还方便点
pshy 2009-03-19
  • 打赏
  • 举报
回复
谢谢各位兄弟!
我就是想把逻辑判断也加入到公式定义里面,因为蛮多工资项目要用到判断的。如个人所得税,病假的工资等。我就是想用公式来处理,如果计个税的起征点变化,病假的计薪基数变动等只要改公式就可以。
要是不加逻辑判断就会简单了。
11楼的兄弟,我不是要在程序里写死:(
各位还有什么好的方法请多多指教,谢谢!!!
happychou 2009-03-19
  • 打赏
  • 举报
回复
int P_LateTime;//
int p_SickLeaveHalf;//
int p_SickLeaveDay;//

private int mp_SickLeave(int Half,int Day)
{
int n=Half+2*Day;
return n;
}
private int Salary(int LateTime,int SickLeaveHalf,int SickLeaveDay)
{
int percent=0;
int m= mp_SickLeave(SickLeaveHalf,SickLeaveDay);
if((LateTime>=2)||(m>=1) )
{
percent=0;
}
if((LateTime=1)||(m=1) )
{
percent=50;
}
if((LateTime=0)&&(m=0) )
{
percent=100;
}

return percent;
}


lxf2000104 2009-03-19
  • 打赏
  • 举报
回复
比如说表c-公式表:
条件 比例
迟到=0 and 事假=0 1
迟到>2 or 事假>1 0
迟到>1 or 事假>=0.5 0.5
用表a中的数据替换解析这些条件
wuyi8808 2009-03-19
  • 打赏
  • 举报
回复
解析用户输入的字符串。
lxf2000104 2009-03-19
  • 打赏
  • 举报
回复

你这个公式表比较复杂。
表a,迟到次数和请假次数,表b,全勤奖,表c-公式表:条件,比例。
然后用表a中的数据去匹配表c的条件获得员工的全勤奖比例*全勤奖

如果是多部分工资,就用工资公式表的字段代替了。公式表的中每一列代表工资项目中的一项。
booker 2009-03-19
  • 打赏
  • 举报
回复
比如说“全勤奖计算方法为:如果迟到2次或请事假1天及以上者得0%,迟到1次或请事假半天者得50%,无迟到请事假者得100%。 ”,迟到1次还是病假1天,这个最好不要用你的公式来区分,你只要对全勤将是0%还是50%还是100%三种状态进行处理,让逻辑简单化
booker 2009-03-19
  • 打赏
  • 举报
回复
根据两个表的字段来设置公式,然后通过解析公式来生成select语句机型计算。不过只能是简单逻辑。如果要在公式中加上判断的话逻辑就会复杂一些了,关键看你这个公式面向什么人,如果对编程不是很熟悉的人,即使你写出来比较复杂的语法分析器,他们也不见得会用。所以逻辑尽量简单,能分解成几部来处理的就不要统一在一步完成。
加载更多回复(10)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧