java 面向对象程序设计课程设计报告

面向对象程序设计

课程设计报告

题    目 门禁系统的设计与实现   

系 (院)    计算机科学技术系     

专    业       软件技术          

班    级    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问题描述与分析

2.1问题描述

某公司安装了电子门,要设计门禁系统:

l  公司的雇员可以凭借密码、胸卡或指纹进入公司

l  计算机根据雇员的验证方式对其身份进行验证

l  管理员在监控室可以通过按钮直接开启电子门,管理员可以为新职员设置密码

l  访客可以按门铃请求进入,由管理员为其放行

2.2问题分析

(1)根据需求分析对象

  门禁系统、电子门、计算机、输入设备

  管理员、 雇员、 访客

  验证接口、验证实现

(2)对象关系

java  面向对象程序设计课程设计报告

3总体设计

3.1开发环境

   Pc机 与 eclipse软件

3.2功能设计

   本系统至少要具备以下功能:

    1、公司的雇员可以凭借密码、胸卡或指纹进入公司;

    2、计算机根据雇员的验证方式对其身份进行验证;

    3、管理员在监控室可以通过按钮直接开启电子门,管理员可以为新职员设置密码;

    4、访客可以按门铃请求进入,由管理员为其放行。

3.3界面设计

  在此次的设计中,除了在控制台输出外,我组还添加了对话框形式,如:

 

 3.4类的设计

java  面向对象程序设计课程设计报告

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 程序流程图

java  面向对象程序设计课程设计报告

                      5程序测试分析

5.1 程序运行情况

(运行时首先出现对话框形式)

(点击“确定”,由控制台输出程序结果)

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

相关推荐