面向对象程序设计
课程设计报告
题 目 门禁系统的设计与实现
系 (院) 计算机科学技术系
专 业 软件技术
班 级 20## 级 3 班
学生姓名
学 号
指导教师
二〇##年六月十二日
团队介绍
(一)第六小组成员构成
组长:
组员:
(二)成员的不同分工及任务
1.前期工作
王丽珍负责:编写“管理员、 雇员、 访客”三个类
v 李晗雨和许亚男负责:编写“门禁系统、电子门、计算 机、输入设备"四个类
把门禁系统电子门作为一类,运用选择,循环结构,实现电子门的开闭,身份 验证等方法,把计算机作为一类,编写进入电子门的请求方式及计算机是否同
意电子门的开启。加以接口,实现进入电子门需要通过的三种方式:密码,刷
卡和指纹
v 我负责:编写“验证接口、验证实现”
包含属性:系统已有的信息和需要验证的信息
包含方法:
(1)验证接口定义验证方法
(2)编写默认的实现类:GenericValidate
(3)具体的验证类继承默认的实现类
v 小组所有成员负责:编写测试类
2.后期工作
v 李晗雨负责:整合各类代码
v 许亚男负责:优化代码,改善程序
v 我负责:编写ppt实验报告
v 王丽珍负责:讲解ppt,进行答辩
目 录
1课程设计目的与要求................................................... 1
1.1 课程设计目的...................................................... 1
1.2课程设计要求....................................................... 1
2问题描述与分析....................................................... 2
2.1问题描述........................................................... 2
2.2问题分析........................................................... 2
3总体设计............................................................. 3
3.1开发环境........................................................... 3
3.2功能设计........................................................... 3
3.3界面设计........................................................... 3
3.4类的设计........................................................... 4
4详细设计............................................................. 5
4.1 主要类的说明...................................................... 5
4.2 主要方法说明..................................................... 10
4.3 程序流程图....................................................... 15
5程序测试分析........................................................ 15
5.1 程序运行情况..................................................... 16
5.2 程序异常处理..................................................... 17
6总结与体会.......................................................... 19
参考资料............................................................. 19
1课程设计目的与要求
1.1 课程设计目的
培养学生综合运用所学课程知识解决实际问题的能力,促进学生动手实践能力的提高,很好地调动学生学习的积极性和主动性。同时使学生 熟练应用面向对象的特性:封装、继承、多态;掌握常量的定义和使用(必需的关键字 -- final);熟练应用接口解决实际问题;能使用异常处理处理程序中的异常情况;会使用log4j工具输出保存日志信息。
1.2课程设计要求
能够应用OO思想设计并实现门禁系统的功能要求,并要求系统具备良好的可扩展性、可维护性和健壮性。鼓励在原功能需求上根据实际情况进行功能的完善和创新。
2.1问题描述
某公司安装了电子门,要设计门禁系统:
l 公司的雇员可以凭借密码、胸卡或指纹进入公司
l 计算机根据雇员的验证方式对其身份进行验证
l 管理员在监控室可以通过按钮直接开启电子门,管理员可以为新职员设置密码
l 访客可以按门铃请求进入,由管理员为其放行
2.2问题分析
(1)根据需求分析对象
门禁系统、电子门、计算机、输入设备
管理员、 雇员、 访客
验证接口、验证实现
(2)对象关系
3.1开发环境
Pc机 与 eclipse软件
本系统至少要具备以下功能:
1、公司的雇员可以凭借密码、胸卡或指纹进入公司;
2、计算机根据雇员的验证方式对其身份进行验证;
3、管理员在监控室可以通过按钮直接开启电子门,管理员可以为新职员设置密码;
4、访客可以按门铃请求进入,由管理员为其放行。
在此次的设计中,除了在控制台输出外,我组还添加了对话框形式,如:
4.1 主要类的说明
(一)电子门类
包含属性:电子门的开启和关闭状态
public final static String OPEN = "门已开启";
public final static String CLOSE = "门已关闭";
private String state = CLOSE; // 电子门状态
包含方法:开启电子门 关闭电子门
public void open(){
this.setState(OPEN);}
public void open(){
this.setState(close);}
(二)输入设备类
包含属性:用户输入的认证信息,密码、胸卡信息、指纹信息等
private String input = null;
包含方法:输入设备接受认证信息
public void input(){}
public String getInput() {
return input;}
public void setInput(String input) {
this.input = input;}
(三)计算机类
包含属性:计算机存储的雇员密码,胸卡号,指纹
private String[] passWord = new String[100];
private String[] card = new String[100];
private String[] fingerMark = new String[100];
包含方法:
(1)无参构造方法,创建一组测试用密码、指纹、卡号
public Computer(){}
(2)验证密码,胸卡号,指纹
public boolean validate(String passStr){}
(3)增加新的密码,胸卡号,指纹
public void addPassWord(int passWord) {}
public void addCard(String card) {}
public void addFingerMark(String fingerMark) {}
(四)门禁系统类
包含属性:电子门对象、计算机对象、输入设备对象、门铃、开门信号、日志 对象
private Door door; // 门禁系统的电子门
private Computer computer; // 门禁系统的计算机
private InputEquip inputEquip; // 门禁系统的输入设备
private int ring;
private int openSign;
private Logger logger;
包含方法:工作
public void work()
(五)访客 雇员 管理员类
包含属性:人员姓名,日志对象
包含方法:
(1)访客:初始化 访客按铃
public Guest(String name){}
public void pressRing(ControlSys controlSys){}
(2)雇员:继承Guest类 输入验证信息
public Employee(String name) {super(name);}
public void input(ControlSys controSys) {}
(3)管理员:继承Employee类 工作方法
public Admin(String name) {super(name);}
管理员的工作方法1,通过控制室的按钮开启电子门
public void work(ControlSys controlSys) {}
管理员的工作方法2,监控门铃
public void work(ControlSys controlSys, Guest guest) {}
管理员的工作方法3,录入验证信息
public void work(ControlSys controlSys, String valType, String valStr) {}
(六)验证接口类
包含属性:系统已有的信息和需要验证的信息
private Object[] inner;
private Object input;
包含方法:
(1)验证接口定义验证方法
public boolean check(); // 定义验证方法
(2)编写默认的实现类:GenericValidate
private Object[] inner; // 系统保存的身份信息
private Object input; // 需要验证的身份信息
(3)具体的验证类继承默认的实现类
public class PassWordVld extends GenericValidate{}
public class FingerMarkVld extends GenericValidate{}
public class CardVld extends GenericValidate {}
(七)测试类
(1)测试雇员通过电子门
public class EmployeeTest {
public static void main(String[] args){
Employee employee = new Employee("雇员a"); // 管理员
ControlSys controlSys = new ControlSys(); // 门禁系统
System.out.println("门禁系统---雇员测试");
System.out.println("***************************************************");
while(true){
employee.input(controlSys);
controlSys.work();
}
}
}
(2)综合测试类-通过运用switch语句选择进入不同的系统
(1)访客测试
while(true){
guest.pressRing(controlSys2);
admin1.work(controlSys2, guest);
controlSys2.work();
break;}break;}
(2)管理员测试
while(true){
admin.work(controlSys);
controlSys.work();
admin.work(controlSys);
break; }break;}
(3)雇员测试
switch(num2){
case 1:
JOptionPane.showMessageDialog(null,"你选择以密码的形式 进入?","title",JOptionPane.PLAIN_MESSAGE);
Break;}
//此处省略代码
4.2 主要方法说明
(一)接口-Validate
public interface Validate {
public boolean check();}
(二)接口- GenericValidata
public GenericValidate(Object[] inner, Object input){
this.inner = inner;
this.input = input;
}
public boolean check() {
for(int i=0;i
if(this.getInput()!=null&&this.getInput().equals(this.getInner()[i])){
return true;
}}
return false;
}
(三)接口-CardVld
public CardVld(Object[] inner, Object input) {
super(inner, input); }
public boolean check() {
Logger logger = Logger.getLogger(Admin.class.getName());
String inputStr = null;
if(this.getInput()!=null && this.getInner()!=null){
try{
inputStr = ((String) this.getInput()).substring(2);
}catch(Exception e){
logger.debug("胸卡信息采集失败:"+e.getMessage());
return false;}//代码省略
(四)接口-FingerMarkVld
public FingerMarkVld(Object[] inner, Object input) {
super(inner, input); }
public boolean check() {
Logger logger = Logger.getLogger(Admin.class.getName());
String inputStr = null;
if(this.getInput()!=null && this.getInner()!=null){
try{
inputStr = ((String) this.getInput()).substring(2);
}catch(Exception e){ logger.debug("指纹信息采集失败: "+e.getMessage()); //代码省略
(五)接口- PassWordVld
public PassWordVld(Object[] inner, Object input) {
super(inner, input);}
public boolean check() {
Logger logger = Logger.getLogger(Admin.class.getName());
for(int i=0;i
int inputInt = 0;
int innerInt = 0;
//代码省略
(六) 验证人员信息
public boolean validate(String passStr){
Validate validate = null;
String prefix = passStr.substring(0, 2);
if(prefix.equals("pa")){
validate = new PassWordVld(passWord,passStr);
return validate.check();
}
else if(prefix.equals("ca")){
validate = new CardVld(card,passStr);
return validate.check();
}
else if(prefix.equals("fi")) {
validate = new FingerMarkVld(fingerMark,passStr);
return validate.check();
} else {
return false;
}}
(七)门禁系统工作
public void work(){
if(inputEquip.getInput()!=null){
if(inputEquip.getInput().equals("exit")){
logger.info("门禁系统关闭");
System.exit(0);
}
if(computer.validate(inputEquip.getInput())){
door.open();
logger.info("<身份验证成功,"+"雇员小伟"+" 通过电子门>");
inputEquip.setInput(null);
} //省略代码
(八)管理员工作方法
public void work(ControlSys controlSys) {
Scanner scanner = new Scanner(System.in);
System.out.print("管理员(" + this.getName() + ")按开门按钮?[y/n]:");
String btn = scanner.nextLine();
if (btn.equals("y")) {
JOptionPane.showMessageDialog(null,"你管理员确定开门吗?","title",JOptionPane.PLAIN_MESSAGE);
controlSys.setOpenSign(1);
controlSys.getLogger().debug("管理员(" + this.getName() + ")按下开门按钮");
} //省略代码
4.3 程序流程图
5程序测试分析
(运行时首先出现对话框形式)
(点击“确定”,由控制台输出程序结果)
5.2 程序异常处理
以下几处都采用了异常处理的方法,保证程序可正常运行
(1)验证胸卡:
try{
inputStr = ((String) this.getInput()).substring(2);
}catch(Exception e){
logger.debug("胸卡信息采集失败:"+e.getMessage());
return false;
}
for(int i=0;i
if( inputStr.equals(this.getInner()[i]) ){
return true;
}} }
return false;
(2)验证指纹:
try{
inputStr = ((String) this.getInput()).substring(2);
}catch(Exception e){
logger.debug("指纹信息采集失败:"+e.getMessage());
return false;
}
for(int i=0;i
if( inputStr.equals(this.getInner()[i]) ){
return true; } }
}
return false;
(3)验证密码:
try{
inputInt= Integer.parseInt( ((String)this.getInput()).substring(2) ); } catch(NumberFormatException e){
logger.debug("密码不合格:"+e.getMessage());
return false;
}
if(this.getInner()[i]!=null){
innerInt = Integer.parseInt( (String)(this.getInner()[i]) ); // 取得已有的密码
}
if(innerInt!=0&&inputInt*2==innerInt){
return true;
}
}
return false;
}
(4)综合测试类:
try {
Thread.sleep(5000); // 让电子门开启状态维持5秒
} catch (InterruptedException e) {
System.out.println("**********欢迎使用门禁系统**********");
}
6总结与体会
通过此次课程设计,使我更加扎实的掌握了java方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露了前期我在这方面知识的欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断进取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。课程设计是一门专业课,给了我很多专业知识以及专业技能上的提高,给了我很多的思考空间,让我感触很多。是我对抽象的理论有了具体的认识。通过这次课程设计,我熟练应用面向对象的特性:封装、继承、多态;掌握常量的定义和使用(必需的关键字 -- final);熟练应用接口解决实际问题;能使用异常处理处理程序中的异常情况;会使用log4j工具输出保存日志信息的知识。
另外,在实践过程中,我们学到了很多东西,不及巩固了以前学过的知识,还学到了好多的课外的知识。经过课程设计,我明白了理论和实践相结合的重要性。实践过程中,也对团队精神进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。团结就是力量,只有相互之间的默契配合才能换来最完美的结果。
[1] 张利国.java实用教程案例 北京:清华大学出版社,2004.2
[2] 李尊朝.java语言程序设计 北京:中国铁道出版社,2003.10
[3] http://cai.ecjtu.jx.cn
福建农林大学计算机与信息学院课程名称课题名称姓名学号专业年级指导教师职称计算机类课程设计报告面向对象程序设计课程设计猜数字游戏计算…
面向对象程序设计课程设计报告题目门禁系统的设计与实现系(院)计算机科学技术系专业软件技术班级20##级3班学生姓名学号指导教师二〇…
面向对象程序设计课程设计报告题目职工信息管理小型公司工资管理系统院系专业班级学号学生姓名小组成员20xx年9月6日一引言本题对程序…
C面向对象程序设计课程设计报告题目分数计算器设置班级专业计算机科学与技术学号K031241521姓名周林指导教师小组成员周林张齐满…
面向对象程序设计程序设计报告课程设计2020学年第学期设计题目职工工资管理系统设计院系计算机科学与信息工程学院专业班级学号学生姓名…
安徽广播电视大学梁伍七一、引言中期评估之前,我校加强网络教学的同时,逐步形成了“面授辅导+网络教学+小组学习”的课程教学模式实践模…
课程实验报告课程名称面向对象程序设计实验名称面向过程的整型栈编程院系计算机科学与技术专业班级学号姓名指导教师年日面向对象程序设计实…
Java面向对象程序设计第1版Java面向对象程序设计课程实验一报告学号姓名专业学校1Java面向对象程序设计第1版11实验目标查…
C面向对象程序设计课程设计报告题目分数计算器设置班级专业计算机科学与技术学号K031241521姓名周林指导教师小组成员周林张齐满…
课程设计报告课程名称课题名称专业班级学号20xx03010308姓名杜云龙指导教师20xx年月日湖南工程学院课程设计任务书课程名称…
《面向对象的程序设计基础》课程总结20xx~20xx学年第一学期基本结束,“面向对象的程序设计基础”课程的教学任务圆满完成。下面对…