Java基础篇案例之《开发团队调度软件》

目标

模拟实现一个基于文本界面的《开发团队调度软件》

熟悉Java面向对象的高级特性,进一步掌握编程技巧和调试技巧

主要涉及以下知识点:

  • 类的继承性和多态性
  • 对象的值传递、接口
  • static和final修饰符
  • 特殊类的使用:包装类、抽象类、内部类
  • 异常处理

需求说明

该软件实现以下功能:

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

详细说明如下:

本软件采用单级菜单方式工作。当软件运行时,主界面显示公司成员的列表。

-------------------------------------开发团队调度软件--------------------------------------

ID 姓名 年龄 工资 职位 状态 奖金 股票 领用设备

1 马 云 22 3000.0

2 马化腾 32 18000.0 架构师 FREE 15000.0 2000 联想T4(6000.0)

3 李彦宏 23 7000.0 程序员 FREE 戴尔(NEC17寸)

4 刘强东 24 7300.0 程序员 FREE 戴尔(三星 17寸)

5 雷军 28 10000.0 设计师 FREE 5000.0 佳能 2900(激光)

……

----------------------------------------------------------------------------------------------

1-团队列表 2-添加团队成员 3-删除团队成员 4-退出 请选择(1-4): _

当选择“添加团队成员”菜单时,将执行从列表中添加指定(通过ID)成员到开发团队的功能。

1-团队列表 2-添加团队成员 3-删除团队成员 4-退出 请选择(1-4):2

---------------------添加成员---------------------

请输入要添加的员工ID:2

添加成功

按回车键继续…

添加成功后,按回车键将重新显示主界面。

开发团队人员组成要求:最多一名架构师、最多两名设计师、最多三名程序员。

如果添加操作因某种原因失败,将显示类似以下信息(失败原因视具体原因而不同):

1-团队列表 2-添加团队成员 3-删除团队成员 4-退出 请选择(1-4):2

---------------------添加成员---------------------

请输入要添加的员工ID:2

添加失败,原因:该员工已是某团队成员

按回车键继续…

失败信息包含以下几种:

  • 成员已满,无法添加
  • 该成员不是开发人员,无法添加
  • 该员工已在本开发团队中
  • 该员工已是某团队成员
  • 该员正在休假,无法添加
  • 团队中至多只能有一名架构师
  • 团队中至多只能有两名设计师
  • 团队中至多只能有三名程序员

当选择“删除团队成员”菜单时,将执行从开发团队中删除指定(通过TeamID)成员的功能:

1-团队列表 2-添加团队成员 3-删除团队成员 4-退出 请选择(1-4):3

---------------------删除成员---------------------

请输入要删除员工的TID:1

确认是否删除(Y/N):y

删除成功

按回车键继续…

删除成功后,按回车键将重新显示主界面。

当选择“团队列表”菜单时,将列出开发团队中的现有成员,例如:

1-团队列表 2-添加团队成员 3-删除团队成员 4-退出 请选择(1-4):1

--------------------团队成员列表---------------------

TDI/ID 姓名 年龄 工资 职位 奖金 股票

2/4 刘强东 24 7300.0 程序员

3/2 马化腾 32 18000.0 架构师 15000.0 2000

4/6 任志强 22 6800.0 程序员

5/12 杨致远 27 600.0 设计师 4800.0

-----------------------------------------------------

UML类图

Java基础篇案例之《开发团队调度软件》_第1张图片

编码实现

略。

Java基础篇案例之《开发团队调度软件》_第2张图片

总结

  1. 通过重写toString()方法可以控制输出格式;
  2. 子类构造器的定义,通过super先调用父类的构造器;
  3. 注意封装性,类属性利用private修饰,通过get/set方法赋值或取值;
  4. 字符串—>整形:Integer.parseInt(“123”);
  5. 多类别重复判断时,switch-case代替if-else;
  6. 对于数组固定值,可以提前用变量进行存储,使用时更加简洁和直观;
  7. 出现错误时,抛出自定义异常(throw new…);调用当前代码的方法就可以用try-catch捕获刚才抛出的异常并处理;
  8. 利用team[i] instanceof Designer,来判断当前对象是否属于某类;
  9. 父类的引用不能直接调用子类的方法,需要强制转换后才可以调用;
  10. 删除数组中某一元素:
for (int i = n + 1; i < total; i++) {
     team[i - 1] = team[i];
     }
team[--total] = null;
//子类构造器
public Architect(int id, String name, int age, double salary, Equipment equipment, int stock,double bouns) {
        super(id, name, age, salary,equipment,bouns);
        this.stock = stock;
    }
//简单的自定义异常
public class TeamException extends Exception {

    public TeamException() {
    }

    public TeamException(String message) {
        super(message);
    }
}
//抛出
throw new TeamException("当前员工信息不存在!");
//这个异常如果被捕获并处理,且若此时catch语句中没有抛出新的异常,上述语句之后的代码继续执行;如果这个异常没有被捕获,这段代码将产生编译时错误。
//若在一个条件语句中抛出异常,则程序能被编译,但后面的语句不会被执行。

你可能感兴趣的:(Java)