www.pudn.com > exam.rar > ExamHall.java


package kaoshi.bean; 
 
import java.util.*; 
/** 
 * @version 2007-12-28 
 * @author Xiaofei  
*/ 
 
public class ExamHall { 
/*考场有三种状态 
*wait 
*exam 
*over 
*被删除返回removed 
*/ 
	private int registerTotal = 0; 
	private int paperTotal = 0; 
	private HashMap registers = new HashMap(); 
	 
	public ExamHall(){} 
	 
	public void setRegisterTotal(int i){ 
		this.registerTotal = i; 
	}	 
	public int getRegisterTotal(){ 
		return this.registerTotal; 
	} 
	 
	public void setPaperTotal(int s){ 
		this.paperTotal = s; 
	} 
	public int getPaperTotal(){ 
		return this.paperTotal; 
	} 
	 
	public Collection getRecords() { 
		return registers.values(); 
	} 
	 
	public synchronized boolean register (String sid, String nm, String ip) { 
		boolean result = false; 
		Record record = (Record)registers.get(sid); 
		if (record==null) { 
			record = new Record(); 
			record.setSid(sid); 
			record.setNm(nm); 
			record.setIp(ip); 
			record.setStatus("wait"); 
			record.setStartTime(new Date()); 
			registers.put(sid, record); 
			result = true; 
			registerTotal++; 
		} else { 
			//Permit relogin again, but must using the same ip 
			if (record.getIp().equals(ip)) { 
				result = true; 
			} 
		} 
		return result; 
	} 
	 
	public String getStatus(String sid) { 
		String s = null; 
		Record r = (Record)registers.get(sid); 
		if (r!=null) { 
			s = r.getStatus(); 
		} else { 
			s = "removed"; 
		} 
		return s; 
	} 
	 
	public void remove (String sid) { 
		if (registers.containsKey(sid)) { 
			Record r = (Record)registers.get(sid); 
			registerTotal--; 
			if (r.getStatus().equals("exam")) { 
				paperTotal--;	 
			} 
			registers.remove(sid); 
		} 
	} 
	 
	public void permitExam(String sid) { 
		Record r = (Record)registers.get(sid); 
		if (r!=null) { 
			if (!r.getStatus().equals("exam")) { 
				r.setStatus("exam"); 
				paperTotal++;		 
			}			 
		} 
	} 
	 
	public void permitAll() { 
		Iterator ir = registers.values().iterator(); 
		while (ir.hasNext()) { 
			Record r = (Record)ir.next(); 
			if ("wait".equals(r.getStatus())) {	 
				r.setStatus("exam"); 
			} 
		} 
		paperTotal = registerTotal; 
	} 
	 
	public boolean reportResult(String sid, double k) { 
		boolean result = false; 
		Record r = (Record)registers.get(sid); 
		if (r!=null) { 
			r.setEndTime(new Date()); 
			r.setSelectTypeScore(k); 
			r.setStatus("over"); 
			result = true; 
		} 
		return result; 
	} 
	 
	public boolean isValidPaper(String sid, String ip) { 
		boolean result = false; 
		Record r = (Record)registers.get(sid); 
		if ((r!=null)&&(r.getStatus().equals("exam"))&&(r.getIp().equals(ip))) { 
			result = true; 
		} 
		return result; 
	} 
 
}