请问一个一个java写的计算考勤的系统 有个小逻辑问题

 import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class daochudaoexcel {
    public static void main(String[] args) throws BiffException, IOException, ParseException {
        String fileName = "D://Io//jisuan.xls"; // Excel文件所在路径  
        File file = new File(fileName); // 创建文件对象  
        Workbook wb = Workbook.getWorkbook(file); // 从文件流中获取Excel工作区对象(WorkBook)  
        Sheet sheet = wb.getSheet(0); // 从工作区中取得页(Sheet)

        int n =0;
        int j =0;
        int f = 0;

        Date max = null;
        String   Stringmax = null;
        String Stringmin = null;
        String zgs = "总公司";

        DateFormat df = new SimpleDateFormat("HH:mm:ss");
        //规定早上最晚打卡时间
        Date time = df.parse("10:00:00");


    while(n<sheet.getRows()){
        //如果是总公司
        if(sheet.getCell(0,n).getContents().equals(zgs)){
           //如果姓名相等
           if(sheet.getCell(1,n).getContents().equals(sheet.getCell(1,n+1).getContents())){
                //如果日期相等
                if(sheet.getCell(2,n).getContents().equals(sheet.getCell(2,n+1).getContents())){
                    //如果第n个时间小于n+1,那么将max等于n+1
                    if(df.parse(sheet.getCell(3,n).getContents()).getTime()<df.parse(sheet.getCell(3,n+1).getContents()).getTime() ){
                        max=df.parse(sheet.getCell(3,n+1).getContents());
                        //将max转成String
                        Stringmax = sheet.getCell(3,n+1).getContents();
                    }
                }else {
                    //如果日期不相等那么下个日期的第一个打卡时间 就是min
                    Date min= df.parse(sheet.getCell(3,n+1).getContents());
                    //将min转为String类型 
                    Stringmin = sheet.getCell(3,n+1).getContents();
                    //如果最早打卡时间大于规定早上最晚打卡时间 那么则判定为迟到
                    if(min.getTime()>time.getTime()){
                    System.err.print("迟到");
                    //如果上班时间大于小于八个小时 则说明早退
                    }else if((max.getTime()-min.getTime())/3600000<8){
                    System.err.print("早退");
                    }
                    //输出员工上班下班时间 和上班多少小时
                    System.out.println(sheet.getCell(0,n).getContents()+"员工:" +sheet.getCell(1,n).getContents()+sheet.getCell(2,n+1).getContents() + "    "+ "上班时间:" + Stringmin + "  " + "下班时间" + Stringmax + "上班了" + "  " +(max.getTime()-min.getTime())/3600000 + "个小时" );
                    }
                }
        }
    n++;
}      
}
}

图片说明

图片说明

需求是输出这个人最早上班时间 最晚下班时间和是否迟到早退 我的逻辑是先判断第一列是不是相等 再判断第二列是否相等 直到判断到日期相等 然后遍历最大的时间替换为max 因为打卡时间是按照从早到晚排列的 到了下一天 那么下一天的第一个打卡时间是最早打卡时间 但是这样第一天的也就是表格中的第一天自动给略过了 因为第一天没有在else中判断 这个怎么解决 新手 请各位大牛帮帮忙 谢谢

查看全部
m11418166
m11418166
2017/12/06 03:29
  • 点赞
  • 收藏
  • 回答
    私信
满意答案
查看全部

4个回复