1. 程式人生 > >Java 案例十二 酒店管理系統

Java 案例十二 酒店管理系統

1.案例介紹

某五星級酒店,資金雄厚,要招聘多名員工(經理、廚師、服務員)。入職的員工需要記錄個人資訊(姓名、工號、經理特有獎金屬性)。他們都有自己的工作要做。

本案例要完成如下需求:

  1. 獲取酒店幸運員工;
  2. 酒店開設VIP服務,酒店的廚師與服務員可以提供VIP服務。(廚師做菜加量、服務員給顧客倒酒)。
  3. 編寫測試類
    1. 向酒店中,增加多名員工(其中包含1名經理,1名廚師、2名服務員);
    2. 呼叫酒店員工的工作功能
    3. 呼叫酒店員工的VIP服務功能

2.案例分析 

 

  1. 根據“某五星級酒店,資金雄厚……都有自己的工作要做。”分析出,該題目中包含酒店,可以把它封裝成類,多名員工)。

class 員工 {

     屬性:姓名

     屬性:工號

     方法:工作

}

class 廚師 extends 員工{}

class 服務員 extends 員工{}

class 經理 extends 員工 {

     屬性:獎金

}

員工的型別有經理、廚師、服務員,它們有共同的屬性(姓名、工號、),經理額外屬性(獎金)。

  1. 根據“向酒店中,增加多名員工(其中包含1名經理,1名廚師、2名服務員)”。分析出,要建立一個酒店物件,並新增4名員工到酒店物件的員工集合中。

酒店員工集合新增新員工: 經理物件

酒店員工集合新增新員工: 廚師物件

酒店員工集合新增新員工: 服務員物件

酒店員工集合新增新員工: 服務員物件

  1. 根據“獲取酒店幸運員工”。分析出,從酒店員工集合隨機得到一名員工物件。

1. 從酒店員工集合長度範圍內,隨機產生一個隨機數

2. 使用該隨機數作為集合的索引,返回該索引處對應的員工物件

  1. 根據“酒店開設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);
	}
}

測試類上面還存在著問題:

子類的呼叫上還不夠完善。