⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator.java

📁 一个日程管理和通讯录管理的软件,采用的Access数据库,其中用到了三个自已写的三个控件:无售点按钮(NFButton.ocx)、带图片的按钮(ImageButton.ocx)、改进的日历控件(Gol
💻 JAVA
字号:
package myBeans;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;

public class Calculator{
	//各时间区域
	private int DAWN_BEGIN = 1;
	private int DAWN_END = 5;
	private int MORNING_BEGIN = 8;
	private int MORNING_END = 12;
	private int NOON_BEGIN = 14;
	private int NOON_END = 18;
	private int NIGHT_BEGIN = 20;
	private int NIGHT_END = 24;
	//各折算标准
	private double DAWN_DISCOUNT = 1.5;
	private double MORNING_DISCOUNT = 1;
	private double NOON_DISCOUNT = 1;
	private double NIGHT_DISCOUNT = 1.25;
	private double WEEKEND_DISCOUNT = 1.25;
	//各计时点
	private int dawn_start_point = -1;
	private int morning_start_point = -1;
	private int noon_start_point = -1;
	private int night_start_point = -1;
	private int dawn_end_point = -1;
	private int morning_end_point = -1;
	private int noon_end_point = -1;
	private int night_end_point = -1;
	//分钟有时需要被抹去,因此作为属性便于控制
	private int startMinute = 0;
	private int endMinute = 0;
	
	public double countTime(String recordDate, String startTime, String endTime){
		double count = 0;
		if(recordDate==null||recordDate.equals("")||startTime==null||startTime.equals("")||
				endTime==null||endTime.equals("")){
			System.out.println("input is(are) invalid!");
			return 0;
		}
		//获取上下班的时,分点。
		int startHour = Integer.parseInt(startTime.split("\\.")[0].trim());
		startMinute = Integer.parseInt(startTime.split("\\.")[1].trim());
		int endHour = Integer.parseInt(endTime.split("\\.")[0].trim());
		endMinute = Integer.parseInt(endTime.split("\\.")[1].trim());
		
		//将上下班时点放入正确时段
		findStartPoint(startHour);
		findEndPoint(endHour);
		
		//确定好时间点以后,即可进行工时计算
		count = calculate(recordDate);
		System.out.println("count is:"+count);
		return count;
	}
	
	//将上班时点放入正确时段,并保持分点在计算时的正确性
	private void findStartPoint(int point){
		if(point<DAWN_END){
			if(point>=DAWN_BEGIN)
				dawn_start_point = point;
			else{
				dawn_start_point = DAWN_BEGIN;
				startMinute = 0;
			}
			return;
		}
		if(point<MORNING_END){
			if(point>=MORNING_BEGIN)
				morning_start_point = point;
			else{
				morning_start_point = MORNING_BEGIN;
				startMinute = 0;
			}
			return;
		}
		if(point<NOON_END){
			if(point>=NOON_BEGIN)
				noon_start_point = point;
			else{
				noon_start_point = NOON_BEGIN;
				startMinute = 0;
			}
			return;
		}
		if(point<NIGHT_END){
			if(point>=NIGHT_BEGIN)
				night_start_point = point;
			else{
				night_start_point = NIGHT_BEGIN;
				startMinute = 0;
			}
			return;
		}
	}
	
	//将下班时点放入正确时段,并保持分点在计算时的正确性
	private void findEndPoint(int point){
		if(point>=NIGHT_BEGIN){
			if(point<NIGHT_END)
				night_end_point = point;
			else{
				night_end_point = NIGHT_END;
				endMinute = 0;
			}
			return;
		}
		if(point>=NOON_BEGIN){
			if(point<NOON_END)
				noon_end_point = point;
			else{
				noon_end_point = NOON_END;
				endMinute = 0;
			}
			return;
		}
		if(point>=MORNING_BEGIN){
			if(point<MORNING_END)
				morning_end_point = point;
			else{
				morning_end_point = MORNING_END;
				endMinute = 0;
			}
			return;
		}
		if(point>=DAWN_BEGIN){
			if(point<DAWN_END)
				dawn_end_point = point;
			else{
				dawn_end_point = DAWN_END;
				endMinute = 0;
			}
			return;
		}
	}
	
	private double calculate(String workDay){
		SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
		Date date;
		int dayOfWeek = 0;
		try{
			date = fmt.parse(workDay);
			GregorianCalendar grc=new GregorianCalendar();   
			grc.setTime(date);   
			dayOfWeek = grc.get(GregorianCalendar.DAY_OF_WEEK);
		} catch (Exception e){
			e.printStackTrace();
		}
		//周末各时段均为1.25倍工资
		if(dayOfWeek==1||dayOfWeek==7)
			DAWN_DISCOUNT = MORNING_DISCOUNT = NOON_DISCOUNT = NIGHT_DISCOUNT = WEEKEND_DISCOUNT;
		
		boolean flag = false;
		double count = 0;
		int top,bottom = 0;
		if(dawn_start_point==-1&&!flag)
			;
		else{
			flag = true;
			if(dawn_start_point==-1)
				top = DAWN_BEGIN*60;
			else
				top = dawn_start_point*60 - startMinute;
			if(dawn_end_point==-1)
				bottom = DAWN_END*60;
			else {
				bottom = dawn_end_point*60 + endMinute;
				flag = false;
			}
			count = count + (bottom - top)*DAWN_DISCOUNT;
			if(!flag)
				return count;
		}
		
		if(morning_start_point==-1&&!flag)
			;
		else{
			flag = true;
			if(morning_start_point==-1)
				top = MORNING_BEGIN*60;
			else
				top = morning_start_point*60 - startMinute;
			if(morning_end_point==-1)
				bottom = MORNING_END*60;
			else {
				bottom = morning_end_point*60 + endMinute;
				flag = false;
			}
			count = count + (bottom - top)*MORNING_DISCOUNT;
			if(!flag)
				return count;
		}
		
		if(noon_start_point==-1&&!flag)
			;
		else{
			flag = true;
			if(noon_start_point==-1)
				top = NOON_BEGIN*60;
			else
				top = noon_start_point*60 - startMinute;
			if(noon_end_point==-1)
				bottom = NOON_END*60;
			else {
				bottom = noon_end_point*60 + endMinute;
				flag = false;
			}
			count = count + (bottom - top)*NOON_DISCOUNT;
			if(!flag)
				return count;
		}
		
		if(night_start_point==-1&&!flag)
			;
		else{
			flag = true;
			if(night_start_point==-1)
				top = NIGHT_BEGIN*60;
			else
				top = night_start_point*60 + startMinute;
			if(night_end_point==-1)
				bottom = NIGHT_END*60;
			else {
				bottom = night_end_point*60 + endMinute;
				flag = false;
			}
			count = count + (bottom - top)*NIGHT_DISCOUNT;
			if(!flag)
				return count;
		}
		
		return count;
	}
	
	//每次调用前应将各项参数清零
	public void reset(){
		//各时间区域
		DAWN_BEGIN = 1;
		DAWN_END = 5;
		MORNING_BEGIN = 8;
		MORNING_END = 12;
		NOON_BEGIN = 14;
		NOON_END = 18;
		NIGHT_BEGIN = 20;
		NIGHT_END = 24;
		//各折算标准
		DAWN_DISCOUNT = 1.5;
		MORNING_DISCOUNT = 1;
		NOON_DISCOUNT = 1;
		NIGHT_DISCOUNT = 1.25;
		WEEKEND_DISCOUNT = 1.25;
		//各计时点
		dawn_start_point = -1;
		morning_start_point = -1;
		noon_start_point = -1;
		night_start_point = -1;
		dawn_end_point = -1;
		morning_end_point = -1;
		noon_end_point = -1;
		night_end_point = -1;
		//分钟有时需要被抹去,因此作为属性便于控制
		startMinute = 0;
		endMinute = 0;
	}
	
	public static void main(String [] args){
		/*SimpleDateFormat fmt = new SimpleDateFormat("yyyy/MM/dd");
		Date date;
		try{
			date = fmt.parse("2008/05/25");
			GregorianCalendar grc=new GregorianCalendar();   
			grc.setTime(date);   
			System.out.println(grc.get(GregorianCalendar.DAY_OF_WEEK));
		} catch (Exception e){
			e.printStackTrace();
		}*/
		
		Calculator cal = new Calculator();
		cal.reset();
		System.out.println(cal.countTime("2008/08/31", "04.00", "12.00"));
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -