门禁系统的面向对象设计.

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

面向对象程序设计 、. 第二章 面向对象的分析与设计 学习目标 1 确定系统中的对象 2 确定对象的属性及操作 3 测试对象的有效性 4 区分对象和类 5 了解面向对象的编程和过程化编程之间的区别 6 了解封装的主要好处 7 了解软件开发的主要步骤.
单元二:面向对象程序设计 任务二:借书卡程序设计.
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
项目6 通用堆栈.
Java程序设计教程 第一讲 Java概述.
四資二甲 第三週作業 物件導向程式設計.
面向对象的程序设计(一).
南京理工大学 第2章 Java基本语法 本章我们将学习Java编程语言的基本语法,包括变量、操作符、表达式、语句、字符串、数组、控制流以及如何使用帮助文档。 使用下面的编程框架: public class Test{ public static void main(String []args){ //以下添加测试代码.
新闻发布系统.
第一章 面向对象程序设计.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
第二章 JAVA语言基础.
网上银行系统.
第二部分 Java语言基础篇 第4章 Java语言与面向对象 (之一).
類別與物件 Class & Object.
Ch07 介面與多重繼承 物件導向程式設計(II).
AOP实践 演讲人:陈思荣.
第三章 控制结构.
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
第九章 字符串.
Ch08 巢狀類別 物件導向程式設計(II).
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
Signutil.
物件導向程式設計 (Object-Oriented rogramming)
Java基础 JavaSE异常.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
程式撰寫流程.
Java语言程序设计 第五部分 Java异常处理.
第9章 多线程 王德俊 上海交通大学继续教育学院.
面向对象程序设计 、.
Java程序设计 第9章 继承和多态.
辅导课程十三.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
2019/1/16 Java语言程序设计-类与对象 教师:段鹏飞.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
辅导课程八.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第二章 Java基本语法 讲师:复凡.
Aspect Oriented Programming
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
Review 1~3.
辅导课程十五.
龍老師我不會Debug QQ.
第二章 Java基本语法 讲师:复凡.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
判斷(選擇性敘述) if if else else if 條件運算子.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
第6章 继承和多态 伍孝金
Summary
Presentation transcript:

门禁系统的面向对象设计

问题描述 某公司安装了电子门,要设计门禁系统: 公司的雇员可以凭借密码、胸卡或指纹进入公司 计算机根据雇员的验证方式对其身份进行验证 管理员在监控室可以通过按钮直接开启电子门 访客可以按门铃请求进入,由管理员为其放行 管理员可以为新职员设置密码 讲解思路: 1、先根据上面的需求说明业务。然后分析业务,指出3种验证方式都由键盘输入,为了区分,密码以“pa”开头,后跟密码;指纹以“fi”开头,后跟表示指纹的字符串;刷卡以“ca”开头,后跟卡号。 2、根据学员对业务的理解情况,可以演示完成的门禁系统。

问题分析-1 根据需求分析对象 门禁系统、电子门、计算机、输入设备 管理员、 雇员、 访客 验证接口、验证实现

问题分析-2 对象关系 门禁系统包含:电子门、输入设备、计算机 访客 验证接口 extends implements 默认实现 雇员 密码验证 指纹识别 胸卡验证 管理员

难点分析-1 门禁系统类:ControlSys 包含属性:电子门对象、计算机对象、输入设备对象、门铃、开门信号、日志对象 包含方法:工作方法 private Door door; // 门禁系统的电子门 private Computer computer; // 门禁系统的计算机 private InputEquip inputEquip; // 门禁系统的输入设备 private int ring; // 门铃,0为安静,1为鸣响 private int openSign; // 开门信号,由管理员按下按钮时产生 private Logger logger; // 日志 public void work()

难点分析-2 门禁系统工作分3步: 第一步:检查输入设备的输入缓存 第二步:检查开门信号 第三步:电子门开启状态维持5秒后关闭电子门 如果有输入且输入信息存在,开启电子门 输入是否正确由计算机类调用验证接口的相关方法判断 如果收到开门信号,开启电子门 //如果电子门已开启,维持5秒,关闭电子门 java.lang.Thread.sleep(5000); // 程序暂停5000毫秒

难点分析-3 输入设备类模拟输入各种验证信息: 密码、胸卡、指纹都以字符串形式从控制台输入: 输入的验证信息保存在输入设备的缓存中 1、密码以“pa”开头 2、胸卡以“ca”开头 3、指纹以“fi”开头 输入的验证信息保存在输入设备的缓存中 门禁系统保存的验证信息不以上述字符开头 验证时使用String类的方法解析字符串 private String input = null; // 输入设备缓存 java.lang.String.substring( int beginIndex, int endIndex ) java.lang.String.substring( int beginIndex )

难点分析-4 用户级别 访客 只能按门铃 extends 雇员 可以输入验证信息 extends 管理员 可以直接开启电子门,监控门铃

难点分析-5 验证 验证接口定义验证方法 编写默认的实现类:GenericValidate 具体的验证类继承默认的实现类 public boolean check(); // 定义验证方法 private Object[] inner; // 系统保存的身份信息 private Object input; // 需要验证的身份信息 public class PassWordVld extends GenericValidate public class FingerMarkVld extends GenericValidate public class CardVld extends GenericValidate

阶段划分 第一阶段(25分钟) 第二阶段(45分钟) 第三阶段(45分钟) 第四阶段(25分钟) 第五阶段(35分钟) 第六阶段(15分钟) 编写类:电子门、输入设备 第二阶段(45分钟) 编写类:计算机、门禁系统 第三阶段(45分钟) 编写类:访客、雇员、管理员 第四阶段(25分钟) 编写类:验证接口、默认实现 第五阶段(35分钟) 编写类:密码验证、指纹验证、胸卡验证 第六阶段(15分钟) 编写类:测试雇员通过电子门 第七阶段(30分钟) 编写类:测试访客按门铃、管理员开启电子门

第一阶段 第一阶段(25分钟) 要求学员自己动手完成,教员巡视,解答学员提出的问题 利用Eclipse创建工程、项目所需包 编写类:电子门、输入设备 要求学员自己动手完成,教员巡视,解答学员提出的问题

阶段检查 针对第一阶段抽查学员的操作结果 教员给出点评

第一阶段标准代码演示 创建工程和包 编写类:电子门类 Door.java 编写类:输入设备类 InputEquip.java sys包:放置门禁系统相关类 user包:放置访客、雇员、管理员类 validate包:放置验证身份的接口及其实现类 test包:放置测试类 编写类:电子门类 Door.java 编写类:输入设备类 InputEquip.java

第二阶段 第二阶段(45分钟) 编写类 :计算机、门禁系统 要求学员自己动手编写,教员巡视,解答学员提出的问题

阶段检查 针对第二阶段抽查学员的编码结果 抽查学员编写的完整代码,要求学员上台讲解 教员给出点评或集中演示难点部分

第二阶段标准代码演示 计算机类: Computer.java 门禁系统类: ControlSys.java

第三阶段 第三阶段(45分钟) 编写类:访客、雇员、管理员 要求学员自己动手编写,教员巡视,解答学员提出的问题

阶段检查 针对第三阶段抽查学员的编码结果 抽查学员编写的完整代码,要求学员上台讲解 教员给出点评或集中演示难点部分

第三阶段标准代码演示 访客类:Guest.java 雇员类:Employee.java 管理员:Admin.java

第四阶段 第四阶段(25分钟) 编写类:验证接口、默认实现 要求学员自己动手编写,教员巡视,解答学员提出的问题

阶段检查 针对第四阶段抽查学员的编码结果 抽查学员编写的完整代码,要求学员上台讲解,并演示运行结果 教员给出点评

第四阶段标准代码演示 验证接口 : Validate.java 默认实现:GenericValidate.java private Object[] inner; private Object input; /** * 比较方法的默认的实现,判断输入信息是否存在 * @return 比较结果 */ public boolean check() { for( int i=0; i<this.getInner().length; i++ ) { if( this.getInput()!=null && this.getInput().equals(this.getInner()[i]) ) { return true; } return false;

第五阶段 第五阶段(35分钟) 编写类:密码验证、指纹验证、胸卡验证 要求学员自己动手编写,教员巡视,解答学员提出的问题

阶段检查 针对第五阶段抽查学员的编码结果 抽查学员编写的完整代码,要求学员上台讲解,并演示运行结果 教员给出点评

第五阶段标准代码演示 密码验证: PassWordVld.java 胸卡验证: CardVld.java 指纹验证: FingerMarkVld.java

第六阶段 第六阶段(15分钟) 编写类:测试雇员通过电子门 要求学员自己动手编写,教员巡视,解答学员提出的问题

阶段检查 针对第六阶段抽查学员的编码结果 抽查学员编写的完整代码,要求学员上台讲解,并演示运行结果 教员给出点评

第六阶段标准代码演示 测试雇员通过电子门:EmployeeTest.java 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(); }

第七阶段 第七阶段(30分钟) 编写类:测试访客按门铃、管理员开启电子门 要求学员自己动手编写,教员巡视,解答学员提出的问题

阶段检查 针对第七阶段抽查学员的编码结果 抽查学员编写的完整代码,要求学员上台讲解,并演示运行结果 教员给出点评

第七阶段标准代码演示 测试访客:GuestTest.java 测试管理员:AdminTest.java public class AdminTest { public static void main(String[] args){ Admin admin = new Admin("王哲"); // 管理员 ControlSys controlSys = new ControlSys(); // 门禁系统 System.out.println("门禁系统---管理员测试"); System.out.println("***************************************************"); while(true){ admin.work(controlSys); controlSys.work(); } public class GuestTest { public static void main(String[] args){ Guest guest = new Guest("赵强"); // 访客员 Admin admin = new Admin("王石头"); // 管理员 ControlSys controlSys = new ControlSys(); // 门禁系统 System.out.println("门禁系统---访客测试"); System.out.println("***************************************************"); while(true){ guest.pressRing(controlSys); admin.work(controlSys, guest); controlSys.work(); }

总结 巩固知识点: 面向对象的特性:封装、继承、多态 常量:必需的关键字 -- final 接口:定义接口、实现接口 异常处理:try/catch/finally log4j:输出保存日志信息