假设一个部门20个人,每周星期一到星期五工作,每天都需要有一个人值班,由这20个人轮流值班
如何用JAVA实现,每天是星期X由XXX值班,请给出代码,谢谢
下面这个代码是我写的,当只有五个人的时候的轮换!谢谢大家了 !
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;public class Demo1 { /**
* @param args
*/
public static void main(String[] args) {
Map map = new HashMap();
/*
* 将星期和ID放入Map中,然后根据数据库中的ID对应找相应的人
* 由于我这里没有数据库,这里就用MAP代替数据库了
*/
map.put("星期一", "张一");
map.put("星期二", "张二");
map.put("星期三", "张三");
map.put("星期四", "张四");
map.put("星期五", "张五");
// 根据系统时间获得当前日期
Demo1 d = new Demo1();
int j=d.getDay();
System.out.println(j); switch(j){
case 1:
System.out.println("星期一");
System.out.print("今天值班的人是"+map.get("星期一"));
break;
case 2:
System.out.println("星期二");
System.out.print("今天值班的人是"+map.get("星期二"));
break;
case 3:
System.out.println("星期三");
System.out.print("今天值班的人是"+map.get("星期三"));
break;
case 4:
System.out.println("星期四");
System.out.print("今天值班的人是"+map.get("星期四"));
break;
case 5:
System.out.println("星期五");
System.out.print("今天值班的人是"+map.get("星期五"));
break;
}
}
//此方法用来获得系统当前是星期几
public int getDay() {
int i=0;
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
i=cal.get(Calendar.DAY_OF_WEEK);
int j=i-1;
return j;
}
}
如何用JAVA实现,每天是星期X由XXX值班,请给出代码,谢谢
下面这个代码是我写的,当只有五个人的时候的轮换!谢谢大家了 !
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;public class Demo1 { /**
* @param args
*/
public static void main(String[] args) {
Map map = new HashMap();
/*
* 将星期和ID放入Map中,然后根据数据库中的ID对应找相应的人
* 由于我这里没有数据库,这里就用MAP代替数据库了
*/
map.put("星期一", "张一");
map.put("星期二", "张二");
map.put("星期三", "张三");
map.put("星期四", "张四");
map.put("星期五", "张五");
// 根据系统时间获得当前日期
Demo1 d = new Demo1();
int j=d.getDay();
System.out.println(j); switch(j){
case 1:
System.out.println("星期一");
System.out.print("今天值班的人是"+map.get("星期一"));
break;
case 2:
System.out.println("星期二");
System.out.print("今天值班的人是"+map.get("星期二"));
break;
case 3:
System.out.println("星期三");
System.out.print("今天值班的人是"+map.get("星期三"));
break;
case 4:
System.out.println("星期四");
System.out.print("今天值班的人是"+map.get("星期四"));
break;
case 5:
System.out.println("星期五");
System.out.print("今天值班的人是"+map.get("星期五"));
break;
}
}
//此方法用来获得系统当前是星期几
public int getDay() {
int i=0;
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
i=cal.get(Calendar.DAY_OF_WEEK);
int j=i-1;
return j;
}
}
比如:String name = "John|Tom|Jerry";
当你取出星期几的时候,对你取出来的字符串进行加工:
String[] temp=(String)(map.get("星期一")).split("\\|");
然后 就可以输出来了:
for(String str:temp)
{
System.out.println(str);
}
是不是你想要的结果,拿去运行一下:import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map; class Demo1 { /**
* @param args
*/
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>();
/*
* 将星期和ID放入Map中,然后根据数据库中的ID对应找相应的人
* 由于我这里没有数据库,这里就用MAP代替数据库了
*/ map.put("星期一", "张一");
map.put("星期二", "张二");
map.put("星期三", "张三");
map.put("星期四", "张四|Tom|Jerry|Lucy|John");
map.put("星期五", "张五"); // 根据系统时间获得当前日期
Demo1 d = new Demo1();
int j=d.getDay();
System.out.println(j); switch(j){
case 1:
System.out.println("星期一");
System.out.print("今天值班的人是"+map.get("星期一"));
break;
case 2:
System.out.println("星期二");
System.out.print("今天值班的人是"+map.get("星期二"));
break;
case 3:
System.out.println("星期三");
System.out.print("今天值班的人是"+map.get("星期三"));
break;
case 4:
String[] name = map.get("星期四").split("\\|");
System.out.println("星期四");
System.out.print("今天值班的人是");
for(String str:name)
{
System.out.print(str+",");
}
System.out.println();
break;
case 5:
System.out.println("星期五");
System.out.print("今天值班的人是"+map.get("星期五"));
break;
}
}
//此方法用来获得系统当前是星期几
public int getDay() {
int i=0;
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
i=cal.get(Calendar.DAY_OF_WEEK);
int j=i-1;
return j;
}
}
String[] name = new String[]{"Tom","Jerry","John"};
int day=0;
int temp=new Date().getDay();
if(day!=temp)
{
index++;
day=temp;
System.out.println("今天值班的人为:"+name[index]);
}
if(index==name.length)
{
index=0;
}
import java.util.Date;
import java.util.GregorianCalendar;public class Demo1 { public static void main(String[] args) {
// 设置 6 位员工
String[] emps = {"a", "b", "c", "d", "e", "f"};
// 从 2007 年 12 月 20 日开始进行排班
Calendar c = new GregorianCalendar(2007, Calendar.DECEMBER, 20, 0, 0, 0);
WorkSchedule schedule = new WorkSchedule(c.getTime(), emps); // 输出结果
for(int i = 1, k = c.get(Calendar.DAY_OF_WEEK); i < k; i++) {
System.out.print(" ");
} // 输出之后 300 天的排班结果
for(int i = 0; i < 300; i++) {
int week = c.get(Calendar.DAY_OF_WEEK);
if(week == 1) {
System.out.println();
}
System.out.printf("%tm-%<td %-4s ", c, schedule.getEmployeeDuty(c));
c.add(Calendar.DATE, 1);
} System.out.println("\n"); // 当前天的值班人员
System.out.printf("今天 %tF 是 %s 值班%n", new Date(), schedule.getEmployeeDuty());
}
}class WorkSchedule {
/**
* 排班的开始时间
*/
private Calendar startDate; /**
* 员工列表,首次排班从第一位员工开始
*/
private String[] employees; /**
* 休息日
*/
private int[] dayoff; /**
* 每天的毫秒数
*/
private static long DAY_MILLISECOND = 24L * 3600 * 1000; /**
* 使用周六、周日作为休息日的构造
* @param startDate
* @param employees
*/
public WorkSchedule(Date startDate, String[] employees) {
this(startDate, employees, new int[]{Calendar.SUNDAY, Calendar.SATURDAY});
} /**
* @param startDate 排班的起始时间
* @param employees 员工表,在起始时间时,由 employees[0] 员工值班
* @param dayoff 休息日
*/
public WorkSchedule(Date startDate, String[] employees, int[] dayoff) {
if(!checkStartDate(startDate, dayoff)) {
// 如果 startDate 为休息日,则抛出异常
throw new IllegalStateException(startDate + " is dayoff!");
}
this.startDate = pruneDate(startDate);
this.employees = employees;
this.dayoff = dayoff;
} /**
* 获得当天的值班员工
* @return
*/
public String getEmployeeDuty() {
Calendar c = Calendar.getInstance();
return getEmployeeDuty(pruneDate(c));
} /**
* 获得某一 Date 值班的员工
* @param date
* @return
*/
public String getEmployeeDuty(Date date) {
Calendar c = pruneDate(date);
return getEmployeeDuty(c);
} /**
* 获得某一 Calendar 值班的员工
* @param calendar
* @return
*/
public String getEmployeeDuty(Calendar calendar) {
if(!checkStartDate(calendar, dayoff)) {
// 如果那一天为休息日,则返回 NULL
return "NULL";
}
int workDay = diffWorkDay(calendar);
return employees[workDay % employees.length];
} /**
* 计算 current 与 startDate 相差的工作天数(除去设定的休息日)
* @param current
* @return
*/
private int diffWorkDay(Calendar current) {
long diff = (current.getTimeInMillis() - startDate.getTimeInMillis()) / DAY_MILLISECOND;
return (int)(diff - ((diff + startDate.get(Calendar.DAY_OF_WEEK) - 1) / 7) * dayoff.length);
} private Calendar pruneDate(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
return pruneDate(c);
} /**
* 修剪日期,将小时及以下的时间单位置 0
* @param c
* @return
*/
private Calendar pruneDate(Calendar c) {
c.set(Calendar.HOUR, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c;
} private boolean checkStartDate(Date date, int[] dayoff) {
Calendar c = Calendar.getInstance();
c.setTime(date);
return checkStartDate(c, dayoff);
} /**
* 检查日期是否属于工作日
* @param date
* @param dayoff
* @return
*/
private boolean checkStartDate(Calendar date, int[] dayoff) {
int week = date.get(Calendar.DAY_OF_WEEK);
for(int i = 0; i < dayoff.length; i++) {
if(week == dayoff[i]) {
return false;
}
}
return true;
}
}
* 获得当天的值班员工
* @return
*/
public String getEmployeeDuty() {
return getEmployeeDuty(Calendar.getInstance());
}
/**
* 获得某一 Date 值班的员工
* @param date
* @return
*/
public String getEmployeeDuty(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return getEmployeeDuty(calendar);
}
/**
* 获得某一 Calendar 值班的员工
* @param calendar
* @return
*/
public String getEmployeeDuty(Calendar calendar) {
if(!checkStartDate(calendar, dayoff)) {
// 如果那一天为休息日,则返回 NULL
return "NULL";
}
calendar = pruneDate(calendar);
int workDay = diffWorkDay(calendar);
return employees[workDay % employees.length];
}
lz 可不可以这样,先把这20个人放在一个列表里面,然后再给他们编号如 1-20 ,在用一个字段来存前一天值班人的编号,到今天的时候把前一天值班人的id+1 不就行了?不知道意思理解对了没 ?
-------------------------------------------------------------
Quietly through .....
import java.util.Date;
import java.util.Calendar;
public class Demo1
{
public Worker getWorker()
{
Date today=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(today);
//休息
if(7==cal.get(Calendar.DAY_OF_WEEK) || 1==cal.get(Calendar.DAY_OF_WEEK))
{
return new Worker();
}
SchInfo info=DBHelper.getSchInfo();
//今天和库中日期一样
if(0!=today.compareTo(info.getDate()))
{
return DBHelper.getWorkerById(info.getId());
}
//今天和库中日期不一样
java.util.List<Worker> workerList=DBHelper.getAllWorker();
//找到下一个当班职工
Worker turnWorker=new Worker();
for(int i=0;i<workerList.size();i++)
{
if(info.getId()==workerList.get(i).getId())
{
int index=(i+1)%workerList.size();
turnWorker.setId(workerList.get(index).getId());
turnWorker.setName(workerList.get(index).getName());
break;
}
}
//更新调度表
info.setDate(new java.sql.Date(today.getTime()));
info.setId(turnWorker.getId());
DBHelper.setSchInfo(info);
return turnWorker;
}
public static void main(String []args)
{
new Demo1().getWorker();
}
}
class Worker
{
public Worker()
{
}
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
private int id;
private String name;
}
class SchInfo
{
public SchInfo()
{
}
public java.sql.Date getDate()
{
return date;
}
public void setDate(java.sql.Date date)
{
this.date = date;
}
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
private java.sql.Date date;
private int id;
}
class DBHelper
{
public static SchInfo getSchInfo()
{
//取得数据库中保存的上次调度信息,封闭到SchInfo中返回
return new SchInfo();
}
public static void setSchInfo(SchInfo info)
{
//更新调度信息
}
public static java.util.List<Worker> getAllWorker()
{
//返回按ID号排序后的Worker信息
return new java.util.ArrayList<Worker>();
}
public static Worker getWorkerById(int id)
{
//返回对应ID的员工信息
return new Worker();
}
}
如何用JAVA实现,每天是星期X由XXX值班,请给出代码,谢谢 不懂,20人,5天,那岂不是固定的顺序了。呵呵呵!1 日期循环,计数器清零
2 如果是1-5 则计数器加一,同时%5,得到一个余数,然后让对应此index的人员值班就行了。
3 继续循环%5 是因为有5个人,如果12个人值班,则%12. 注意数组的index 从0开始