/*
* InputEquip
* 门禁系统
*/
package sys;
import org.apache.log4j.Logger;
public class ControlSys {
private Door door; // 门禁系统的电子门
private Computer computer; // 门禁系统的计算机
private InputEquip inputEquip; // 门禁系统的输入设备
private int ring; // 门铃,0为安静,1为鸣响
private int openSign; // 开门信号,由管理员按下按钮时产生,1为开启信号
private Logger logger; // 日志对象
/**
* 初始化
*/
public ControlSys(){
this.door = new Door();
this.computer = new Computer();
this.inputEquip = new InputEquip();
this.ring = 0;
this.openSign = 0;
//实例化logger对象
logger=Logger.getLogger("ControlSys");
System.out.println("门禁系统的使用方法\n" +
" 1.模拟输入密码:以“pa”开头,后跟密码\n" +
" 2.模拟刷卡:以“ca”开头,后跟卡号\n" +
" 3.模拟取指纹:以“fi”开头,后跟表示指纹的字符串\n"+
" 4.模拟管理员按下开门按钮:输入“y”");
System.out.println("***************************************************");
//输出日志信息:门禁系统启动
logger.info("门禁系统启动");
}
/**
* 门禁系统工作:根据输入设备提供的数据,检查设备状态,调度设备和记录日志
*/
public void work(){
/* 检查输入设备的输入缓存 */
if(inputEquip.getInput()!=null){ //当输入缓存还有数据时
//若输入数据为exit,则日志记录:门禁系统关闭,且退出整个程序
if(inputEquip.getInput().equals("exit")){
logger.info("门禁系统关闭!");
//退出整个程序
System.exit(0);
}
/**
* 用计算机验证输入的数据
* 若验证通过,打开电子门,日志记录:身份验证成功,通过电子门!,且清空输入缓存待下一次输入
* 若验证失败,日志记录:身份验证失败!
*/
if(computer.validate(inputEquip.getInput())){
door.open();
logger.info("身份验证成功,通过电子门!");
inputEquip.setInput(null);
}else {
logger.info("身份验证失败!");
}
}
/* 检查开门信号 */
if(this.getOpenSign()==1){
door.open(); // 开启电子门
logger.info("管理员开启了电子门"); // 记录日志
this.setOpenSign(0); // 电子门开门信号归零
}
/* 电子门开启状态将维持5秒后关闭 */
//判断电子门状态是否是开启状态,若是,则执行如下代码
if(door.getState().equals(Door.OPEN)){
try {
//Thread.sleep()为JAVA线程控制,程序将在此行代码处休眠5000毫秒,再运行余下代码
Thread.sleep(5000); //让电子门开启状态维持5秒
} catch (InterruptedException e) {
logger.debug(e.getMessage());
}finally{
door.close(); // 关闭电子门
logger.info("电子门关闭"); // 记录日志
}
}
}
/**
* 提供给访客按门铃的方法
*
*/
public void ring() {
this.ring = 1; //设置为1,表示门铃响起
}
/*以下为setter和getter方法*/
public Computer getComputer() {
return computer;
}
public void setComputer(Computer computer) {
this.computer = computer;
}
public Door getDoor() {
return door;
}
public void setDoor(Door door) {
this.door = door;
}
public InputEquip getInputEquip() {
return inputEquip;
}
public void setInputEquip(InputEquip inputEquip) {
this.inputEquip = inputEquip;
}
public Logger getLogger() {
return logger;
}
public void setLogger(Logger logger) {
this.logger = logger;
}
public int getOpenSign() {
return openSign;
}
public void setOpenSign(int openSign) {
this.openSign = openSign;
}
public int getRing() {
return ring;
}
public void setRing(int ring) {
this.ring = ring;
}
}