该软件由以下三个模块组成:
>com.ll.team.view模块为主控模块,负责菜单的显示和处理用户操作 >com.ll.team.service模块为实体对象(Employee及其子类如程序员等)的管理模块, >NameListService和TeamService类分别用各自的数组来管理公司员工和开发团队成员对象 domain模块为Employee及其子类等JavaBean类所在的包
第1步 — 创建项目基本组件
1. 完成以下工作:
① 创建TeamSchedule项目
② 按照设计要求,创建所有包
③ 将项目提供的几个类复制到相应的包中
(view包中:TSUtility.java; service包中:Data.java)
2. 按照设计要求,在com.ll.team.domain包中,创建Equipment接 口及其各实现子类代码
3. 按照设计要求,在com.ll.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接口及其实现子类的设计
说明:
>model 表示机器的型号
>display 表示显示器名称
>type 表示机器的类型
根据需要提供各属性的get/set方法以及重载构造器
实现类实现接口的方法,返回各自属性的信息
Employee类及其子类的设计
说明:
>memberId 用来记录成员加入开发团队后在团队中的ID
>Status是项目service包下自定义的类,声明三个对象属性,分别表示成员的状态。
FREE-空闲
BUSY-已加入开发团队
VOCATION-正在休假
>equipment 表示该成员领用的设备
可根据需要为类提供各属性的get/set方法以及重载构造器
Status类
Status枚举类位于com.ll.team.service包中,封装员工的状态。其代码如下:
package com.ll.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;
}
}
Employee类及其子类的设计
说明:
>bonus 表示奖金
>stock 表示公司奖励的股票数量
可根据需要为类提供各属性的get/set方法以及重载构造器
第2步 — 实现service包中的类
1.按照设计要求编写NameListService类
2.在NameListService类中临时添加一个main方法中,作为单元测试方法。
3.在方法中创建NameListService对象,然后分别用模拟数据调用该对象的各个方法,以测试是否正确。
注:测试应细化到包含了所有非正常的情况,以确保方法完全正确。
4.重复1-3步,完成TeamService类的开发
NameListService类的设计
功能:负责将Data中的数据封装到Employee[]数组中,同时提供相关操作Employee[]的方法。
说明:
>employees用来保存公司所有员工对象
>NameListService()构造器:
根据项目提供的Data类构建相应大小的employees数组
再根据Data类中的数据构建不同的对象,包括Employee、Programmer、Designer和Architect对象,以及相关联的Equipment子类的对象
将对象存于数组中
Data类位于com.ll.team.service包中
NameListService类的设计
说明:
>getAllEmployees ()方法:获取当前所有员工。
返回:包含所有员工对象的数组
>getEmployee(id : int)方法:获取指定ID的员工对象。
参数:指定员工的ID
返回:指定员工对象
异常:找不到指定的员工
在service子包下提供自定义异常类:TeamException
另外,可根据需要自行添加其他方法或重载构造器
TeamService类的设计
功能:关于开发团队成员的管理:添加、删除等。
说明:
>counter为静态变量,用来为开发团队新增成员自动生成团队中的唯一ID,即memberId。(提示:应使用增1的方式)
>MAX_MEMBER:表示开发团队最大成员数
>team数组:用来保存当前团队中的各成员对象
>total:记录团队成员的实际人数
TeamService类的设计
说明:
>getTeam()方法:返回当前团队的所有对象
返回:包含所有成员对象的数组,数组大小与成员人数一致
>addMember(e: Employee)方法:向团队中添加成员
参数:待添加成员的对象
异常:添加失败, TeamException中包含了失败原因
>removeMember(memberId: int)方法:从团队中删除成员
参数:待删除成员的memberId
异常:找不到指定memberId的员工,删除失败
另外,可根据需要自行添加其他方法或重载构造器
第3步 — 实现view包中类
1.按照设计要求编写TeamView类,逐一实现各个方法,并编译
2.执行main方法中,测试软件全部功能
TeamView类的设计
说明:
>listSvc和teamSvc属性:供类中的方法使用
>enterMainMenu ()方法:主界面显示及控制方法。
>以下方法仅供enterMainMenu()方法调用:
listAllEmployees ()方法:以表格形式列出公司所有成员
getTeam()方法:显示团队成员列表操作
addMember ()方法:实现添加成员操作
deleteMember ()方法:实现删除成员操作