有谁知道你们公司的考勤+开资系统是怎么运作的?
接公司的要求,要开发一个考勤+工资计算系统,我是用PHP+MYSQL来做;
原来的考勤没有工资结算,是C+MSSQL。本人不会EXE开发,所以用PHP来开发了,目前用PHP读取MYSQL发现XP的系统始终无法打开3306端口,只好用原系统中的导出功能把数据导出为CSV的再导入到这个PHP中。现在的问题是,我写着写着,发现考勤计算如此复杂!
不知各位在工厂的考勤是怎么运作的?我目前的工厂考勤是这样的:
一共有五个班次。除夜班外,其它班次是4次打卡,夜班只打两次卡;
程序要实现的结果是:
计算出此人当月出勤多少天,加班多少小时,迟到,早退多少小时,况工多久
问题:
我所在工厂,周一到周五是正常上班,员工周六日算加班;但是办公室班次的人周六是义务加班;这里有一个问题就是,我所在地区经常不定时限电,所以有可能在周一至周五的限电时间与周六周日对调;
也就是说,程序如果判断周六上班不记,那么限电时周六就是正常上班,就需要计算,所以迷茫;
还有就是,我重写了N多次的此模块发现计算出勤,加班,况工,迟到,早退代码连自己看都迷糊;
不知是我思路错了还是流程被自己搞得太复杂;本贴以思路为主进行交流,关于PHP技术方面我可以自己行解决,谢谢各位!

解决方案 »

  1.   

    1、php 无法完成打卡工作吧?
    既然原来是C+MSSQL,那么你可以用 php 去访问那个 mssql, 而不是导出数据2、鉴于你们那里上班时间不是很正常,所以就不要试图用一个简单的公式去计算
    你可以新建一张表用于记录是否是正常上班时间,计算时关联此表就可以了
      

  2.   

    什么公司呀,搞的那么复杂。这个有个一早一晚的,你再加两个字段。
    CREATE TABLE `present` (
      `userid` int(10) unsigned NOT NULL,
      `date` date NOT NULL,
      `starttime` time NOT NULL default '00:00:00',
      `endtime` time NOT NULL default '00:00:00',
      `ip` char(20) NOT NULL,
      `msg` varchar(255) default NULL,
      PRIMARY KEY  (`userid`,`date`),
    ) ENGINE=MyISAM DEFAULT CHARSET=gbk;
    <?php
    class Present
    {
    var $groupid;
    var $time1="09:05:00";
    var $time2="12:00:00";
    var $time3="13:00:00";
    var $time4="18:00:00";
    function Present(){
    //用户验证代码
    $this->groupid = $_SESSION['groupid'];
    }
    function init(){
    //使用该类逻辑前,先调用init,根据用户所属组,对time1...赋不同的值。逻辑按正常判断就行
    switch ($this->groupid){
    case 1:
    $this->time1 = "10:00:00";
    $this->time1 = "10:00:00";
    $this->time1 = "10:00:00";
    $this->time1 = "10:00:00";
    break;
    case 1:
    $this->time1 = "10:00:00";
    $this->time1 = "10:00:00";
    $this->time1 = "10:00:00";
    $this->time1 = "10:00:00";
    break; }
    }

    }