注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

沙漠里de烟雨

原创分享,禁止转载

 
 
 

日志

 
 

JAVA程序之考勤统计源码  

2011-12-11 12:33:25|  分类: JAVA应用与研究 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

由于将考勤表导出后,要一个个看每个人的考勤太过麻烦,又费时,所以做了这个软件,希望能减少相关人员的工作量。

 

代码如下:

 


import java.io.*;
import jxl.*;
import jxl.write.*;
import jxl.write.Label;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

@SuppressWarnings("serial")
public class KaoQin extends JFrame{

 private static  String ExcelPathOld;
 private static  String ExcelPathNew="d:/信得乐考勤统计详表.xls";
 private static  String ColName[]={"工号","姓名","星期","日期","上午上班卡","上午下班卡","下午上班卡","下午下班卡"};
 private static  Workbook WorkBookOld;
 private static  Sheet SheetOld;     //源表
 private static  WritableSheet SheetNew;   //新表
 private static int RowIdOld=1; //从源文件的第二行开始记录当前处理的那行(索引号)
 private static int RowIdNew=1; //从生成文件的第二行开始记录当前处理好的那行(索引号)
 private static int RowIdOldSum; //源文件总的记录数
 private static String StrDate;  //日期
 private static String strc001Temp;   //工号
 private static String strc003;    //星期
 public KaoQin(){
  Container cp=getContentPane();
  
  JPanel jp1=new JPanel(new FlowLayout());
  JPanel jp2=new JPanel(new FlowLayout(1,30,5));
  cp.add(jp1,BorderLayout.NORTH);cp.add(jp2,BorderLayout.SOUTH);
  
  JLabel jl=new JLabel("请导入待处理的Excel考勤源文件");
  final JTextField jtf=new JTextField(20);
  JButton jb1=new JButton("导入源文件..");
  JButton jb2=new JButton("统计");
  JButton jb3=new JButton("取消");  
  jp1.add(jl);jp1.add(jtf);jp1.add(jb1);
  jp2.add(jb2);jp2.add(jb3);
  
  //
  jb1.addActionListener(new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    JFileChooser fileChooser=new JFileChooser();
    int i=fileChooser.showOpenDialog(getContentPane());
    if(i==JFileChooser.APPROVE_OPTION){
     File selectedFile=fileChooser.getSelectedFile();
     jtf.setText(selectedFile.getPath());
     
    }
   }
   
  });
  //
  jb2.addActionListener(new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    String path=new String(jtf.getText());
    if(path.length()>0){
     ExcelPathOld=path;
     buit();
     JOptionPane.showMessageDialog(null, "   报表已生成,请查看!\n"+ExcelPathNew);
     System.exit(0);
    }
   }
   
  });
  //
  jb3.addActionListener(new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    System.exit(0);
    }
   
   
  });
  
  
  setTitle("周工解梦之考勤统计软件");
  setVisible(true);
  setBounds(400, 300, 600,110);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setResizable(false);
 
 }
 
 @SuppressWarnings("static-access")
 private void buit(){
  try{
   this.ReadExcel(ExcelPathOld);    //
   File fileWrite=new File(ExcelPathNew);   //
   fileWrite.createNewFile();
   OutputStream OutStr=new FileOutputStream(fileWrite);
   this.WriteExcel(OutStr);

   }catch(Exception e){
    e.printStackTrace();
   }
 }
 
 public static Sheet ReadExcel(String ExcelPathOld){     //读取源表格中的内容
  try {
   InputStream InputStr=new FileInputStream(ExcelPathOld);   //创建从指定路径的源文件拷贝的输入流
   WorkBookOld=Workbook.getWorkbook(InputStr);        //以输入流为对象创建工作簿
   SheetOld=WorkBookOld.getSheet(0);           //从工作簿的第一个工作表为对象实例化工作表对象
   int myCol=SheetOld.getColumns();    //源工作表中的列数
   int myRow=SheetOld.getRows();         //源工作表中的行数
   RowIdOldSum=myRow-1;

   System.out.println("总行数 "+myRow+" 总列数"+myCol);

  } catch (Exception e) {

   e.printStackTrace();
  }
  return SheetOld;
 }
 
 public static WritableSheet WriteExcel(OutputStream OutStr){    //生成新的表格
  try {
   WritableWorkbook WorkBookNew=Workbook.createWorkbook(OutStr);  //创建以输出流OutStr表格为对象的工作簿
   SheetNew=WorkBookNew.createSheet("考勤统计报表", 0);  //以新建的工作簿来创建工作表
   for(int i=0;i<ColName.length;i++){
    SheetNew.addCell(new Label(i,0,ColName[i]));        //给新表格列名添加进去
   }
   
             DoWithExcel();

   WorkBookNew.write();
   WorkBookNew.close();
   WorkBookOld.close();
   
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return SheetNew;
 }
 

 
 private static void DoWithExcel(){
     try{
  while(RowIdOld<=RowIdOldSum){
    //工号
    Cell CellOld001=SheetOld.getCell(0,RowIdOld);
     String strc001=CellOld001.getContents();
     jxl.write.Label LabelNew001=new jxl.write.Label(0,RowIdNew,strc001);
     SheetNew.addCell(LabelNew001);
     //姓名
    Cell CellOld002=SheetOld.getCell(1,RowIdOld);
     String strc002=CellOld002.getContents();
     jxl.write.Label LabelNew002=new jxl.write.Label(1,RowIdNew,strc002);
     SheetNew.addCell(LabelNew002);
     //星期
    Cell CellOld003=SheetOld.getCell(4,RowIdOld);
     strc003=CellOld003.getContents();
     jxl.write.Label LabelNew003=new jxl.write.Label(2,RowIdNew,strc003);
     SheetNew.addCell(LabelNew003);
     //日期
    Cell CellOld004=SheetOld.getCell(5,RowIdOld);
     String strc004=CellOld004.getContents();
     jxl.write.Label LabelNew004=new jxl.write.Label(3,RowIdNew,strc004);
     SheetNew.addCell(LabelNew004);
     
    
             StrDate=strc004;   //字符串化的日期变量
            

    //比较日期来处理一天的打卡记录
         do{
          //将当前行的打卡时间的时钟与分钟的数值化
       Cell CellOld005=SheetOld.getCell(6,RowIdOld);
       String strc005=CellOld005.getContents();
       String HourStr=strc005.substring(0,2);
       String MiniStr=strc005.substring(3,5);
       //
       Byte HourByte=new Byte(HourStr);
       Byte MiniByte=new Byte(MiniStr);
       int HourNum=HourByte.intValue();
       int MiniNum=MiniByte.intValue();
       //

       
              //周一至周五9:30之前上班,周六10:30之前上班
       if(strc003.equals("星期六")){                           //星期六10:30之前上班
          if(HourNum<10||(HourNum==10&&MiniNum<=30)){
         jxl.write.Label label=new jxl.write.Label(4,RowIdNew,"Y");
         SheetNew.addCell(label);}            
          }else{
                      if(HourNum<9||(HourNum==9&&MiniNum<=30)){            //9:30之前上班
           jxl.write.Label label=new jxl.write.Label(4,RowIdNew,"Y");
           SheetNew.addCell(label);}
                   }    

   
       //周一至周五18:00之后下班,周六17:00之后下班
       if(strc003.equals("星期六")){                        //星期六17:00之后下班
        if(HourNum>=17){
          jxl.write.Label label=new jxl.write.Label(7,RowIdNew,"Y");
          SheetNew.addCell(label);}
       }else{
        if(HourNum>=18){                                              //18:00之后下班
          jxl.write.Label label=new jxl.write.Label(7,RowIdNew,"Y");
          SheetNew.addCell(label);}
       }

        
        //上午下班卡在12:00至12:30之间打卡有效
                if(HourNum>=12&&(HourNum<=12&&MiniNum<=30)){      
        jxl.write.Label label=new jxl.write.Label(5,RowIdNew,"Y");
        SheetNew.addCell(label);
       }
 
                //下午上班卡在13:00至13:30之间打卡有效
                if(HourNum>=13&&(HourNum<=13&&MiniNum<=30)){      
       jxl.write.Label label2=new jxl.write.Label(6,RowIdNew,"Y");
       SheetNew.addCell(label2);
      }


       /////////判断是否是同一日期的前提

      ++RowIdOld;
     if(RowIdOld<=RowIdOldSum){
          Cell CellOld004Temp=SheetOld.getCell(5,RowIdOld);
      String strc004Temp=CellOld004Temp.getContents();
      StrDate=strc004Temp;
      ////
     Cell CellOld001Temp=SheetOld.getCell(0,RowIdOld);
      strc001Temp=CellOld001Temp.getContents();
      continue; 
     }
     else break;
      }while(strc004.equals(StrDate)&&strc001.equals(strc001Temp));

       ++RowIdNew;
    
    }
     }catch(Exception e){
   e.printStackTrace();
  }

 }
 
 public static void main(String[] args) {         //主函数
  @SuppressWarnings("unused")
  KaoQin KQ=new KaoQin();


 }

}

 

 

 

效果如下:

JAVA程序之考勤统计源码 - 漠雨 - 沙漠里de烟雨

 

JAVA程序之考勤统计源码 - 漠雨 - 沙漠里de烟雨

 

JAVA程序之考勤统计源码 - 漠雨 - 沙漠里de烟雨

 

JAVA程序之考勤统计源码 - 漠雨 - 沙漠里de烟雨

 

JAVA程序之考勤统计源码 - 漠雨 - 沙漠里de烟雨

 

JAVA程序之考勤统计源码 - 漠雨 - 沙漠里de烟雨

 JAVA程序之考勤统计源码 - 漠雨 - 沙漠里de烟雨

 

这里涉及到一个包:jxl.jar,它是处理excel的必备,可以从网上下载下来并将之放在ext目录下,如下图所示:

JAVA程序之考勤统计源码 - 漠雨 - 沙漠里de烟雨

 

JAVA程序之考勤统计源码 - 漠雨 - 沙漠里de烟雨

 

JAVA程序之考勤统计源码 - 漠雨 - 沙漠里de烟雨

 

JAVA程序之考勤统计源码 - 漠雨 - 沙漠里de烟雨

 
这样这个软件就能正常运行了。如果要导出可执行文件,如下:

JAVA程序之考勤统计源码 - 漠雨 - 沙漠里de烟雨

 

JAVA程序之考勤统计源码 - 漠雨 - 沙漠里de烟雨

 

JAVA程序之考勤统计源码 - 漠雨 - 沙漠里de烟雨

 

此时,就算大功告成,如果要能在其它的电脑上运行,则此电脑得安装java虚拟机。当然你也可以安装JDK1.6.0等安装包亦可。这里就不多述。

  评论这张
 
阅读(6310)| 评论(6)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018