Java面向对象的应用——门禁系统
时间: 2023-07-28 17:09:49 浏览: 72
门禁系统是一个很好的面向对象的应用场景。在Java中,我们可以定义一个门禁系统类,该类包含门禁系统的属性和方法。门禁系统可以包括以下属性:
- 门禁卡号:每个门禁卡有唯一的卡号,用于识别持卡人身份。
- 持卡人姓名:每个门禁卡都有持卡人的姓名,用于显示在门禁系统上。
- 进入时间:记录持卡人进入门禁系统的时间,用于计算停留时间。
门禁系统可以包括以下方法:
- 打卡:持卡人将门禁卡放在门禁系统上进行打卡操作,系统会记录打卡时间,并且显示持卡人的姓名。
- 查询:持卡人可以查询自己的进出记录和停留时间。
- 统计:系统可以统计每个持卡人的停留时间,并且按照时间长短进行排名。
下面是一个简单的门禁系统类的实现:
```
public class AccessControlSystem {
private String cardId;
private String cardHolderName;
private Date enterTime;
private Date exitTime;
// 打卡
public void punchCard(String cardId, String cardHolderName) {
this.cardId = cardId;
this.cardHolderName = cardHolderName;
this.enterTime = new Date();
System.out.println("持卡人:" + cardHolderName + " 进入门禁系统,时间:" + enterTime);
}
// 查询
public void queryRecord() {
System.out.println("持卡人:" + cardHolderName + " 进出记录:");
System.out.println("进入时间:" + enterTime);
System.out.println("离开时间:" + exitTime);
System.out.println("停留时间:" + (exitTime.getTime() - enterTime.getTime()) / 1000 + "秒");
}
// 统计
public void ranking(List<AccessControlSystem> accessControlSystems) {
Collections.sort(accessControlSystems, Comparator.comparingLong(a -> a.exitTime.getTime() - a.enterTime.getTime()));
System.out.println("停留时间排名:");
for (int i = 0; i < accessControlSystems.size(); i++) {
AccessControlSystem accessControlSystem = accessControlSystems.get(i);
System.out.println("第" + (i + 1) + "名:" + accessControlSystem.cardHolderName + ",停留时间:" + (accessControlSystem.exitTime.getTime() - accessControlSystem.enterTime.getTime()) / 1000 + "秒");
}
}
// 离开
public void leave() {
this.exitTime = new Date();
System.out.println("持卡人:" + cardHolderName + " 离开门禁系统,时间:" + exitTime);
}
}
```
在上面的实现中,我们定义了一个AccessControlSystem类,并且包含了打卡、查询、统计、离开等方法。其中,打卡方法会记录持卡人进入门禁系统的时间,查询方法会显示持卡人的进出记录和停留时间,统计方法会按照停留时间长短进行排名,离开方法会记录持卡人离开门禁系统的时间。
我们可以在主函数中创建一个AccessControlSystem对象,并且模拟持卡人的进出操作:
```
public static void main(String[] args) {
AccessControlSystem accessControlSystem = new AccessControlSystem();
accessControlSystem.punchCard("001", "张三");
accessControlSystem.leave();
accessControlSystem.queryRecord();
AccessControlSystem accessControlSystem2 = new AccessControlSystem();
accessControlSystem2.punchCard("002", "李四");
accessControlSystem2.leave();
accessControlSystem2.queryRecord();
List<AccessControlSystem> accessControlSystems = new ArrayList<>();
accessControlSystems.add(accessControlSystem);
accessControlSystems.add(accessControlSystem2);
accessControlSystem.ranking(accessControlSystems);
}
```
上面的代码会创建两个持卡人张三和李四,分别进行打卡和离开操作,并且进行查询和统计操作。每次操作都会通过AccessControlSystem类的方法进行处理,并且输出对应的结果。
这样,我们就实现了一个简单的门禁系统,并且通过面向对象的方式进行了设计和实现。