抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

在学习完 Java 基础编程的全部知识点后,为了更加熟悉 Java 面向对象的高级特性,进一步掌握编程技巧和调试技巧,实现模拟一个基于文本界面的开发团队调度软件,并以文档的形式记录软件设计结构、实现方法和一些疑难之处,主要涉及类的继承性和多态性、对象的值传递和接口、static 和 final 修饰符、特殊类的使用(包装类、抽象类、内部类)、异常处理等知识点。以下为我在实战练习过程中所做的笔记,可供参考。

软件需求

  • 软件启动时,根据给定的数据创建公司部分成员列表(数组)
  • 根据菜单提示,基于现有的公司成员,组建一个开发团队以开发一个新的项目
  • 组建过程包括将成员插入到团队中,或从团队中删除某成员,还可以列出团队中现有成员的列表
  • 开发团队成员包括架构师、设计师和程序员

需求分析

  • 软件采用单级菜单方式工作,当软件运行时,主界面显示公司成员的列表
  • 当选择“添加团队成员”菜单时,将执行从列表中添加指定(通过 ID)成员到开发团队的功能
  • 如果添加操作因某种原因失败,将显示失败信息(失败原因视具体原因而不同)
  • 当选择“删除团队成员”菜单时,将执行从开发团队中删除指定(通过 TeamID)成员的功能
  • 当选择“团队列表”菜单时,将列出开发团队中的现有成员

软件设计结构

  • 软件由 view、service、domain 三个模块组成
    • com.atguigu.team.view 模块为主控模块,负责菜单的显示和处理用户操作
    • com.atguigu.team.service 模块为实体对象(Employee 及其子类如程序员等)的管理模块,NameListServiceTeamService 类分别用各自的数组来管理公司员工和开发团队成员对象
    • domain 模块为 Employee 及其子类等 JavaBean 类所在的包
  • com.atguigu.team.domain 模块中包含了所有实体类
    • 其中 Programmer 及其子类,均会领用 Equipment

创建项目基本组件

  1. 创建 TeamSchedule 项目,按照设计要求创建所有包,将项目提供的几个类复制到相应的包中
    • view 包中:TSUtility.java
    • service包中:Data.java
  2. 按照设计要求,在 com.atguigu.team.domain 包中,创建 Equipment 接口及其各实现子类代码
  3. 按照设计要求,在 com.atguigu.team.domain 包中,创建 Employee 类及其各子类代码
  4. 检验代码的正确性

键盘访问的实现

  • 项目 view 包中提供了 TSUtility.java 类,提供了以下静态方法,可用来方便地实现键盘访问
    • public static char readMenuSelection():该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符
    • public static void readReturn():该方法提示并等待,直到用户按回车键后返回
    • public static int readInt():该方法从键盘读取一个长度不超过2位的整数,并将其作为方法的返回值
    • public static char readConfirmSelection():从键盘读取‘Y’或’N’,并将其作为方法的返回值

Equipment 接口及其实现子类的设计

  • 根据需要提供各属性的 get/set 方法以及重载构造器
  • 实现类实现接口的方法,返回各自属性的信息

Employee 类及其子类的设计

  • memberId 用来记录成员加入开发团队后在团队中的 ID
  • Status 是项目 service 包下自定义的类,声明三个对象属性,分别表示成员的状态
    1. FREE-空闲
    2. BUSY-已加入开发团队
    3. VOCATION-正在休假
  • equipment 表示该成员领用的设备
  • bonus 表示奖金
  • stock 表示公司奖励的股票数量
  • 可根据需要为类提供各属性的 get/set 方法以及重载构造器

Status 类

  • Status 枚举类位于 com.atguigu.team.service 包中,封装员工的状态

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    package com.atguigu.team.service;
    public class Status {
    private final String NAME;
    private Status(String name) {
    this.NAME = name;
    }
    public static final Status FREE = new Status("FREE");
    public static final Status VOCATION = new Status("VOCATION");
    public static final Status BUSY = new Status("BUSY");
    public String getNAME() {
    return NAME;
    }
    @Override
    public String toString() {
    return NAME;
    }
    }

实现 service 包中的类

  1. 按照设计要求编写 NameListService 类
  2. 在 NameListService 类中临时添加一个 main 方法中,作为单元测试方法
  3. 在方法中创建 NameListService 对象,然后分别用模拟数据调用该对象的各个方法,以测试是否正确
    • 测试应细化到包含了所有非正常的情况,以确保方法完全正确
  4. 重复以上3步,完成 TeamService 类的开发

NameListService 类的设计

  • 负责将 Data 中的数据封装到 Employee[] 数组中,同时提供相关操作 Employee[] 的方法
  • employees 用来保存公司所有员工对象
  • NameListService() 构造器
    • 根据项目提供的 Data 类构建相应大小的 employees 数组
    • 再根据 Data 类中的数据构建不同的对象,包括 Employee、Programmer、Designer 和 Architect 对象,以及相关联的 Equipment 子类的对象
    • 将对象存于数组中
    • Data类位于 com.atguigu.team.service 包中
  • getAllEmployees():获取当前所有员工
    • 返回:包含所有员工对象的数组
  • getEmployee(id : int):获取指定ID的员工对象
    • 参数:指定员工的 ID
    • 返回:指定员工对象
    • 异常:找不到指定的员工
  • 在 service 子包下提供自定义异常类:TeamException
  • 另外,可根据需要自行添加其他方法或重载构造器

TeamService 类的设计

  • 关于开发团队成员的管理:添加、删除等
  • counter 为静态变量,用来为开发团队新增成员自动生成团队中的唯一 ID,即 memberId(应使用增1的方式)
  • MAX_MEMBER:表示开发团队最大成员数
  • team数组:用来保存当前团队中的各成员对象
  • total:记录团队成员的实际人数
  • getTeam() :返回当前团队的所有对象
    • 返回:包含所有成员对象的数组,数组大小与成员人数一致
  • addMember(e: Employee):向团队中添加成员
    • 参数:待添加成员的对象
    • 异常:添加失败,TeamException 中包含了失败原因
  • removeMember(memberId: int):从团队中删除成员
    • 参数:待删除成员的 memberId
    • 异常:找不到指定 memberId 的员工,删除失败
  • 另外,可根据需要自行添加其他方法或重载构造器

实现 view 包中类

  1. 按照设计要求编写 TeamView 类,逐一实现各个方法,并编译
  2. 执行 main 方法中,测试软件全部功能

TeamView 类的设计

  • listSvc 和 teamSvc 属性:供类中的方法使用
  • enterMainMenu():主界面显示及控制方法
  • 以下方法仅供 enterMainMenu() 调用:
    • listAllEmployees():以表格形式列出公司所有成员
    • getTeam():显示团队成员列表操作
    • addMember():实现添加成员操作
    • deleteMember():实现删除成员操作

评论



Copyright © 2020 - 2022 Zhihao Zhuang. All rights reserved

本站访客数: 人,
总访问量: