Java 案例十二 酒店管理系統
阿新 • • 發佈:2018-12-20
1.案例介紹
某五星級酒店,資金雄厚,要招聘多名員工(經理、廚師、服務員)。入職的員工需要記錄個人資訊(姓名、工號、經理特有獎金屬性)。他們都有自己的工作要做。
本案例要完成如下需求:
- 獲取酒店幸運員工;
- 酒店開設VIP服務,酒店的廚師與服務員可以提供VIP服務。(廚師做菜加量、服務員給顧客倒酒)。
- 編寫測試類
- 向酒店中,增加多名員工(其中包含1名經理,1名廚師、2名服務員);
- 呼叫酒店員工的工作功能
- 呼叫酒店員工的VIP服務功能
2.案例分析
- 根據“某五星級酒店,資金雄厚……都有自己的工作要做。”分析出,該題目中包含酒店,可以把它封裝成類,多名員工)。
class 員工 {
屬性:姓名
屬性:工號
方法:工作
}
class 廚師 extends 員工{}
class 服務員 extends 員工{}
class 經理 extends 員工 {
屬性:獎金
}
員工的型別有經理、廚師、服務員,它們有共同的屬性(姓名、工號、),經理額外屬性(獎金)。
- 根據“向酒店中,增加多名員工(其中包含1名經理,1名廚師、2名服務員)”。分析出,要建立一個酒店物件,並新增4名員工到酒店物件的員工集合中。
酒店員工集合新增新員工: 經理物件
酒店員工集合新增新員工: 廚師物件
酒店員工集合新增新員工: 服務員物件
酒店員工集合新增新員工: 服務員物件
- 根據“獲取酒店幸運員工”。分析出,從酒店員工集合隨機得到一名員工物件。
1. 從酒店員工集合長度範圍內,隨機產生一個隨機數
2. 使用該隨機數作為集合的索引,返回該索引處對應的員工物件
- 根據“酒店開設VIP服務,酒店的廚師與服務員可以提供VIP服務。(廚師做菜加量、服務員給顧客倒酒)”。分析出,這是要增加一個VIP的介面,介面中提供個VIP服務的方法。讓廚師與服務員實現該介面。
interface VIP服務{
抽象方法:服務
}
class 廚師 extends 員工 implements VIP服務{ 重寫服務方法 }
class 服務員 extends 員工 implements VIP服務{ 重寫服務方法 }
3.案例的實現
1.VIP介面類
package cn.hotel;
/*
* 酒店的VIP功能
* 只有廚師和服務員有
*/
public interface VIP {
public void vip();
}
2.員工抽象類
package cn.hotel;
/*
* 酒店的員工類
* 員工共性,姓名,工號,工作方法
*/
public abstract class Employee {
private String name;
private String ID;
public abstract void work();
/*
* 要定義兩套構造器
* 滿引數和空引數的
*/
public Employee(){
super();
}
public Employee(String name ,String ID){
super();
this.name = name;
this.ID = ID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
}
3.廚師類
package cn.hotel;
/*
* 定義廚師類
* 屬於員工一種,具有額外的服務功能
* 繼承Employee,實現VIP介面
*/
public class Cook extends Employee implements VIP{
//空參構造方法
public Cook(){
super();
}
//有引數構造方法
public Cook(String name, String ID){
super(name,ID);
}
/*
* 抽象方法重寫
*/
public void work() {
System.out.println("員工號為"+getID()+"的"+getName()+"員工負責炒菜");
}
public void vip(){
System.out.println("廚師為VIP提供加量服務");
}
}
4.服務員類
package cn.hotel;
/*
* 定義服務員
* 屬於員工一種,具有額外的服務功能
* 繼承Employee,實現VIP介面
*/
public class Waiter extends Employee implements VIP{
//空引數構造方法
public Waiter(){
super();
}
//滿引數構造方法
public Waiter(String name,String ID){
super(name,ID);
}
//抽象方法重寫
@Override
public void work() {
System.out.println("員工號為"+getID()+"的"+getName()+"員工負責提供服務");
}
public void vip(){
System.out.println("服務員為VIP顧客倒酒");
}
}
5.經理類
package cn.hotel;
/*
* 定義經理類
* 屬於員工一種,沒有VIP功能
* 自己有獎金屬性
*
*/
public class Manager extends Employee {
//定義獎金屬性
private double bonus;
//空參構造方法
public Manager(){
super();
}
//滿參構造方法
public Manager(String name,String ID,double bonus){
super(name,ID);
this.bonus = bonus;
}
//抽象方法重寫
public void work() {
System.err.println("員工號為"+getID()+"的"+getName()+"員工負責管理酒店");
}
//私有成員都需要get 和set
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
}
6.測試類
package cn.hotel;
import java.util.ArrayList;
import java.util.Random;
public class Test {
public static void main(String[] args) {
//定義集合ArrayList,儲存員工Employee類
ArrayList<Employee> array = new ArrayList<Employee>();
addEmployee(array);
printEmployee(array);
randomEmployee(array);
}
public static void randomEmployee(ArrayList<Employee> array){
Random r = new Random();
Employee s = array.get(r.nextInt(array.size()));
System.out.println(s.getName());
}
/*
* 定義方法,總覽員工資訊
* 遍歷集合
*/
public static void printEmployee(ArrayList<Employee> array){
for(int i =0 ; i < array.size() ; i++){
Employee e = array.get(i);
e.work();
}
}
/*
* 定義方法,儲存員工物件到集合中
*/
public static void addEmployee(ArrayList<Employee> array){
Cook cook = new Cook("張三", "0001");
Waiter waiter = new Waiter("李四", "0002");
Manager manager = new Manager("王五","0003",500);
array.add(cook);
array.add(waiter);
array.add(manager);
}
}
測試類上面還存在著問題:
子類的呼叫上還不夠完善。