Java的枚举简单应用
/**
* 请用枚举方式实现如下应用:
* 客户去旅店住房,
* 客户分普通客户,和vip客户,vip分白金和钻石客户
* 不同的客户有不同的折扣
* 入住的房间分单人房,双人房和套房
* 不同的房间房费不同
* 入住的时间分一周七天,每天费用也不同
* 请设计代码实现某客户住房一天,计算出应付房费.
* 可以尝试计算连续N天的房费如何计算
**/
根据题意客户有普通客户,白金客户,钻石客户,则可以建一个枚举类,内容如下:
1 public enum Customer { 2 common("普通", 0), 3 WhiteGold("白金", 0.8), 4 diamond("钻石", 0.9); 5 private String name; 6 private double discount; 7 8 Customer(String name, double discount) { 9 this.name = name; 10 this.discount = discount; 11 } 12 13 public String getName() { 14 return name; 15 } 16 17 public void setName(String name) { 18 this.name = name; 19 } 20 21 public double getDiscount() { 22 return discount; 23 } 24 25 public void setDiscount(double discount) { 26 this.discount = discount; 27 } 28 }
之后是一周每一天也有不同价格折扣
1 public enum Week { 2 DAY1("周一", 0.9), 3 DAY2("周二", 0.9), 4 DAY3("周三", 0.8), 5 DAY4("周四", 0.8), 6 DAY5("周五", 0.5), 7 DAY6("周六", 0.6), 8 DAY7("周日", 0.6); 9 10 private String name;//获取每周的名字 11 private double per; 12 13 Week(String name, double per) { 14 this.name = name; 15 this.per = per; 16 } 17 18 public String getName() { 19 return name; 20 } 21 22 public void setName(String name) { 23 this.name = name; 24 } 25 26 27 public double getPer() { 28 return per; 29 } 30 31 public void setPer(double per) { 32 this.per = per; 33 } 34 }
房间也有单人房间、双人房间和套房
1 public enum Room { 2 SINGLE("单人房间", 100), 3 DUETBED("双人房间", 150), 4 SUITE("套房", 180); 5 private String roomName; 6 private int f; 7 8 Room(String roomName, int f) { 9 this.roomName = roomName; 10 this.f = f; 11 } 12 13 public String getRoomName() { 14 return roomName; 15 } 16 17 public void setRoomName(String roomName) { 18 this.roomName = roomName; 19 } 20 21 public int getF() { 22 return f; 23 } 24 25 public void setF(int f) { 26 this.f = f; 27 } 28 }
如果是住一天的话,调用getPrice方法,传来星期、顾客以及房间等级并将对应的价格累加。
1 public class Util { 2 private static Week wk; 3 private static Customer customer; 4 private static Room room; 5 6 static double total = 0; 7 8 /** 9 * 客户住一天 10 * 11 * @param week 12 * @param customer 顾客 13 * @param room 房间类别 14 */ 15 public static void getPrice(Week week, Customer customer, Room room) { 16 if (customer != Customer.common) { 17 total = (room.getF() * week.getPer() * customer.getDiscount()); 18 } else { 19 total = (room.getF() * week.getPer()); 20 } 21 System.out.println("客户类型:" + customer.getName() + 22 "\n======================\n" + 23 "日期:" + week.getName() + "\n" + 24 "今日折扣:" + week.getPer() + "\n" + 25 "房间类型:" + room.getRoomName() + "\n" 26 + "房间价格:" + room.getF() + "元"); 27 System.out.println("房价;" + total + "元"); 28 }
如果是连续住N天,就要考虑一个问题,就是星期的天数的控制,如果天数大于星期天则星期要从星期一开始算起,下面代码我使用index变量来记录传来的星期参数并通过If判断后赋值,并将Week的每一天添加到数组里里,通过循环访问数组t获取每一天的金额并计算,使用一个money数组来统计每一天的金额最后通过for循环进行累加输出。
/**
* 住N天
*
* @param week 星期
* @param customer 顾客
* @param room 房间类型
* @param day 住的天数
*/
public static void getPrice(Week week, Customer customer, Room room, int day) {
double money[] = new double[day]; //用来存放每天用户的费用
int index = 0;//记录数组下标
total = 0;//总金额置为0
//将枚举类转为数组并存入Emu数组内,是用循环找下标
Week[] Emu = Week.values();
//获取是第几天(下标)
index = week.ordinal();
for (int i = 0; i < day; i++) {
if (index > 6) { //如果星期(ArrayList下标)>6
index = 0;//重新回到星期一
}
//将每天的费用加到money数组里
money[i] = Emu[index].getPer() * customer.getDiscount() * room.getF();
index++;
}
//累加money数组里的金额
for (int i = 0; i < day; i++) {
total += money[i];
}
System.out.println("客户类型:" + customer.getName() +
"\n===================\n"
+ "住" + day + "天");
System.out.println("房价共;" + total + "元");
}
}
主程序测试如下,可以默认住一天,也可以通过Util的getPrice住N天。
1 public class Water { 2 public static void main(String[] args) { 3 Week wk = Week.DAY5; //星期3 4 Customer customer = Customer.diamond; //钻石客户 5 Room room = Room.DUETBED; //双人房间 6 7 //默认住1天 8 Util.getPrice(wk, customer, room); 9 System.out.println("\n===========================================\n"); 10 //住N天 11 Util.getPrice(wk, customer, room, 3); 12 } 13 }
运行效果如下:
原创文章,转载请说明出处,谢谢合作