Java面向对象的练习:门禁系统

        本次代码仅面向大一刚入门Java面向对象编程的练习,本次代码仅作基础练习故没采用mvc架构(ps:后面会更一期mvc架构)

这是整个项目的目录结构

下面我按照从底层开始构建的代码顺序来发

 Computer类

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 String[] getPwds() {
return pwds;
}
public String[] getCards() {
return cards;
}
public String[] getFingerMarks() {
return fingerMarks;
}
}

Door类

 

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);
	}
	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;
	}
	public static String getOpen() {
		return OPEN;
	}
	public static String getClose() {
		return CLOSE;
	}
	
}

Guest类

package com.handson.user;

import java.util.Scanner;

import com.handson.sys.Door;

public class Guest {
	private String name;
	public  Guest() {}
	public Guest(String name) {
		this.name=name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void pressRing(Door door) {
		Scanner scanner=new Scanner(System.in);
		System.out.print("访客("+this.getName()+")按门铃?[y/n]");
		String btn=scanner.nextLine();
		if(btn.equals("y")) {
			door.setBellState(true);
			System.out.print("访客("+this.getName()+")按下门铃");
		}
		else if(btn.equals("n")) {
			return;
		}
	}
}

Employee类

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("身份验证 \n");
		//修改
		return  scanner.nextLine();
	}
}

Admin类

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);
	}
	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();
//		System.out.print("22222"+btn);
		if(btn.equals("y")) {
			System.out.print("管理员("+this.getName()+")按下开门按钮 \n");
			bn=true;
		}else {
			System.out.print("---管理员("+this.getName()+")拒绝开门 \n");
		}
		return bn;
	}
	public boolean work(Door door,Guest guest) {
		boolean bn=false;
		if(door.isBellState()) {
			bn=this.work(door);
			door.setBellState(false);
		}
		return bn;
	}
}

Validate接口

package com.handson.validate;

public interface Validate {
	public boolean check(String[] srcContent,String inputMsg);
}

CardVld接口实现

package com.handson.validate;

public class CardVld implements Validate{

	@Override
	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接口实现

package com.handson.validate;

public class FingerVld implements Validate{
	@Override
	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接口实现

package com.handson.validate;

public class PasswordVld implements Validate{
	@Override
	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;
		
	}

}

以下为三个测试类加运行截图:

AdminTest类

package com.handson.test;

import com.handson.sys.Door;
import com.handson.user.Admin;

public class AdminTest {
	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);
			System.out.print("111111"+bn);
			if(bn) {
				door.open();
				System.out.println("-----管理员"+admin.getName()+"开启电子门");
			}
			if(door.getState().equals(Door.OPEN)) {
				try {
					Thread.sleep(5000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					System.out.println(e.getMessage());
				}
				door.close();
				System.out.println("电子门5秒后关闭");
			}
		}
	}
}

EmployeeTest类

package com.handson.test;

import com.handson.sys.Computer;
import com.handson.sys.Door;
import com.handson.user.Employee;


public class EmployeeTest {
	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 conputer=new Computer();
					Door door=new Door();
					while (true) {
						String inputMsg =emp.input();
						boolean bn =conputer.validate(inputMsg);
						System.out.print(bn);
						if(bn) {
							door.open();
							System.out.println("<身份验证成功"+emp.getName()+"通过电子门>");
							if(door.getState().equals(Door.OPEN));
							try {
								Thread.sleep(5000);
							} catch (InterruptedException e) {
								// TODO Auto-generated catch block
								System.out.print(e.getMessage());
							}
							door.close();
							System.out.println("电子门5秒后关闭");
						}else {
							System.out.println("身份验证失败");
						}
						}
	}

}

GuestTest类

package com.handson.test;

import com.handson.sys.Door;
import com.handson.user.Admin;
import com.handson.user.Guest;

public class GuestTest {
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()+"开启电子门");
					}
					if(door.getState().equals(Door.OPEN)) {
						try {
							Thread.sleep(5000);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							System.out.print(e.getMessage());
						}
						door.close();
						System.out.println("电子门5秒后关闭");
					}
				}
				
	}
}

本次分享到此结束,主要是学习面向对象的过程,继承,接口的实现,还有构造方法,代码没有难度,感谢观看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值