门禁系统
-
system包
Computer.java
package com.handson.sys;
import com.handson.validate.CardVld;
import com.handson.validate.FingerVld;
import com.handson.validate.PasswordVld;
import com.handson.validate.Validate;
public class Computer {
private String[] pwds = new String[100]; // 计算机存储的雇员密码,数字字符串
private String[] cards = new String[100]; // 计算机存储的雇员胸卡号,字符串形式
private String[] fingerMarks = new String[100]; // 计算机存储的雇员指纹,字符串形式
//无参构造方法,创建一组测试用密码、指纹、卡号
public Computer(){
pwds[0] = "2222";
cards[0] = "accp";
fingerMarks[0] = "accp";
}
//验证
public boolean validate(String inputMsg){
boolean bn = false;
Validate validate = null;
if (inputMsg.length()>2)
{
String prefix = inputMsg.substring(0, 2);
/*验证密码*/
if(prefix.equals("pa")){
validate = new PasswordVld();
bn = validate.check(pwds, inputMsg);
}
/*验证胸卡*/
else if(prefix.equals("ca")){
validate = new CardVld();
bn = validate.check(cards, inputMsg);
}
/*验证指纹*/
else if(prefix.equals("fi")) {
validate = new FingerVld();
bn = validate.check(fingerMarks,inputMsg);
}
}
return bn;
}
// //增加新胸卡
// public void addCards(String card) {
// for(int i=0;i<100;i++){
// if(this.cards[i]==null){
// this.cards[i] = card;
// return;
// }
// }
// }
//
// //增加新指纹
// public void addFingerMarks(String fingerMark) {
// for(int i=0;i<100;i++){
// if(this.fingerMarks[i]==null){
// this.fingerMarks[i] = fingerMark;
// return;
// }
// }
// }
//
// //增加新密码
// public void addPwds(int passWord) {
// for(int i=0;i<100;i++){
// if(this.pwds[i]==null){
// this.pwds[i] = passWord*2+"";
// return;
// }
// }
// }
//setter/getter
public String[] getCards() {
return cards;
}
public String[] getfingerMarks() {
return fingerMarks;
}
public String[] getPassWords() {
return pwds;
}
}
Door.java
package com.handson.sys;
public class Door {
public final static String OPEN = "门已开启";
public final static String CLOSE = "门已关闭";
private String state = CLOSE; // 电子门状态
private boolean bellState = false; //门铃状态
//构造方法
public Door(){
this.setState(CLOSE);
}
//开启电子门
public void open(){
this.setState(OPEN);
}
//关闭电子门
public void close(){
this.setState(CLOSE);
}
//setter/getter
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public boolean isBellState() {
return bellState;
}
public void setBellState(boolean bellState) {
this.bellState = bellState;
}
}
-
validata包
CardVld.java
package com.handson.validate;
public class CardVld implements Validate {
// 重写验证方法-根据卡号验证
public boolean check(String[] srcContent, String inputMsg)
{
boolean bn = false;
for(int i=0; i<srcContent.length; i++){
if (inputMsg.substring(2).equals(srcContent[i]) ) // 解析输入的密码
{
bn = true;
break;
}
}
return bn;
}
}
FingerVld.java
package com.handson.validate;
public class FingerVld implements Validate {
//重写验证方法-根据指纹验证
public boolean check(String[] srcContent, String inputMsg)
{
boolean bn = false;
for(int i=0; i<srcContent.length; i++){
if (inputMsg.substring(2).equals(srcContent[i]) ) // 解析输入的密码
{
bn = true;
break;
}
}
return bn;
}
}
PasswordVld.java
package com.handson.validate;
public class PasswordVld implements Validate {
//重写验证方法-根据密码验证
public boolean check(String[] srcContent, String inputMsg)
{
boolean bn = false;
for(int i=0; i<srcContent.length; i++){
if (inputMsg.substring(2).equals(srcContent[i]) ) // 解析输入的密码
{
bn = true;
break;
}
}
return bn;
}
}
Validate.java
package com.handson.validate;
public interface Validate {
public boolean check(String[] srcContent, String inputMsg);
}
-
user包
Admin.java
package com.handson.user;
import java.util.Scanner;
import com.handson.sys.Door;
public class Admin extends Employee {
//构造方法
public Admin() {
super();
}
public Admin(String name) {
super(name);
}
//管理员的工作方法1,通过控制室的按钮,开启电子门
public boolean work(Door door) {
boolean bn = false;
Scanner scanner = new Scanner(System.in);
System.out.print("管理员(" + this.getName() + ")按开门按钮?[y/n]:");
String btn = scanner.nextLine();
if (btn.equals("y")) {
System.out.println("管理员(" + this.getName() + ")按下开门按钮");
bn = true;
} else {
System.out.println("---管理员(" + this.getName() + ")拒绝开门");
}
return bn;
}
//管理员的工作方法2,监听门铃
public boolean work(Door door, Guest guest) {
boolean bn = false;
if (door.isBellState() ) { //门铃响
bn = this.work(door);
door.setBellState(false);
}
return bn;
}
// //管理员的工作方法3,录入验证信息
// public void addUserInfo( String valType, String valStr) {
// if (valType.equals("pa")) {
// controlSys.getComputer().addPassWord(Integer.parseInt(valStr));
// controlSys.getLogger().debug(
// "管理员(" + this.getName() + ")录入新的密码验证信息");
// } else if (valType.equals("ca")) {
// controlSys.getComputer().addCard(valStr);
// controlSys.getLogger().debug(
// "管理员(" + this.getName() + ")录入新的胸卡验证信息");
// } else if (valType.equals("fi")) {
// controlSys.getComputer().addFingerMark(valStr);
// controlSys.getLogger().debug(
// "管理员(" + this.getName() + ")录入新的指纹验证信息");
// } else {
// controlSys.getLogger().debug("验证信息录入失败");
// }
// }
}
Employee.java
package com.handson.user;
import java.util.Scanner;
public class Employee extends Guest {
//构造方法
public Employee() {
super();
}
public Employee(String name) {
super(name);
}
//输入身份信息
public String input() {
Scanner scanner = new Scanner(System.in);
System.out.print("身份验证:" );
String passStr = scanner.nextLine();
return passStr;
//controSys.getInputEquip().input();
}
}
Guest.java
package com.handson.user;
import java.util.Scanner;
public class Employee extends Guest {
//构造方法
public Employee() {
super();
}
public Employee(String name) {
super(name);
}
//输入身份信息
public String input() {
Scanner scanner = new Scanner(System.in);
System.out.print("身份验证:" );
String passStr = scanner.nextLine();
return passStr;
//controSys.getInputEquip().input();
}
}
-
Test包
AdminTest.java
package com.handson.test;
import com.handson.sys.Door;
import com.handson.user.Admin;
public class AdminTest {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("门禁系统的使用方法\n" +
" 1.模拟输入密码:以“pa”开头,后跟密码\n" +
" 2.模拟刷卡:以“ca”开头,后跟卡号\n" +
" 3.模拟取指纹:以“fi”开头,后跟表示指纹的字符串\n"+
" 4.模拟管理员按下开门按钮:输入“y”");
System.out.println("***************************************************");
System.out.println("门禁系统启动");
System.out.println("门禁系统---管理员测试");
System.out.println("***************************************************");
Admin admin = new Admin("王石头");
Door door = new Door();
while(true){
boolean bn = admin.work(door); //通过控制室的按钮开启电子门
/* 检查开门信号(检查电子门,开) */
if(bn){
door.open(); // 开启电子门
System.out.println("-------^_^管理员 " + admin.getName() + " 开启了电子门");
}
/* 电子门开启状态将维持5秒后关闭 */
if(door.getState().equals(Door.OPEN)){
try {
Thread.sleep(5000); // 让电子门开启状态维持5秒
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
door.close(); // 关闭电子门
System.out.println("---电子门5秒后自动关闭---");
}
}
}
}
EmployeeTest.java
package com.handson.test;
import com.handson.sys.Computer;
import com.handson.sys.Door;
import com.handson.user.Employee;
public class EmployeeTest {
//main方法
public static void main(String[] args) {
System.out.println("门禁系统的使用方法\n" +
" 1.模拟输入密码:以“pa”开头,后跟密码\n" +
" 2.模拟刷卡:以“ca”开头,后跟卡号\n" +
" 3.模拟取指纹:以“fi”开头,后跟表示指纹的字符串\n"+
" 4.模拟管理员按下开门按钮:输入“y”");
System.out.println("***************************************************");
System.out.println("门禁系统启动");
System.out.println("门禁系统---员工测试");
System.out.println("***************************************************");
Employee emp = new Employee("员工张三丰");
Computer computer = new Computer();
Door door = new Door();
while(true){
String inputMsg = emp.input();//员工输入身份验证
boolean bn = computer.validate(inputMsg);//根据输入的内容,验证身份
if (bn) //验证通过
{
door.open();
System.out.println("<身份验证成功, " + emp.getName() + " 通过电子门>");
if (door.getState().equals(Door.OPEN))
{
try {
Thread.sleep(5000); // 让电子门开启状态维持5秒
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
door.close(); // 关闭电子门
System.out.println("---电子门5秒后自动关闭---");
}
} else { //验证没通过
System.out.println("-^-^-^-^-^-身份验证失败!");
}
}
}
}
GuestTest.java
package com.handson.test;
import com.handson.sys.Door;
import com.handson.user.Admin;
import com.handson.user.Guest;
public class GuestTest {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("门禁系统的使用方法\n" +
" 1.模拟输入密码:以“pa”开头,后跟密码\n" +
" 2.模拟刷卡:以“ca”开头,后跟卡号\n" +
" 3.模拟取指纹:以“fi”开头,后跟表示指纹的字符串\n"+
" 4.模拟管理员按下开门按钮:输入“y”");
System.out.println("***************************************************");
System.out.println("门禁系统启动");
System.out.println("门禁系统---访客测试");
System.out.println("***************************************************");
Guest guest = new Guest("赵强");
Admin admin = new Admin("王石头");
Door door = new Door();
while(true){
guest.pressRing(door); //按门铃
boolean bn = admin.work(door, guest); //管理员监听门铃
/* 检查开门信号(监听门铃,响) */
if(bn){
door.open(); // 开启电子门
System.out.println("-------^_^管理员 " + admin.getName() + " 开启了电子门");
}
/* 电子门开启状态将维持5秒后关闭 */
if(door.getState().equals(Door.OPEN)){
try {
Thread.sleep(5000); // 让电子门开启状态维持5秒
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
door.close(); // 关闭电子门
System.out.println("---电子门5秒后自动关闭---");
}
}
}
}