/**
* 请用枚举方式实现如下应用:
* 客户去旅店住房,
* 客户分普通客户,和vip客户,vip分白金和钻石客户
* 不同的客户有不同的折扣
* 入住的房间分单人房,双人房和套房
* 不同的房间房费不同
* 入住的时间分一周七天,每天费用也不同
* 请设计代码实现某客户住房一天,计算出应付房费.
* 可以尝试计算连续N天的房费如何计算
**/ 根据题意客户有普通客户,白金客户,钻石客户,则可以建一个枚举类,内容如下:
 public enum Customer {
common("普通", 0),
WhiteGold("白金", 0.8),
diamond("钻石", 0.9);
private String name;
private double discount; Customer(String name, double discount) {
this.name = name;
this.discount = discount;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public double getDiscount() {
return discount;
} public void setDiscount(double discount) {
this.discount = discount;
}
}

之后是一周每一天也有不同价格折扣

 public enum Week {
DAY1("周一", 0.9),
DAY2("周二", 0.9),
DAY3("周三", 0.8),
DAY4("周四", 0.8),
DAY5("周五", 0.5),
DAY6("周六", 0.6),
DAY7("周日", 0.6); private String name;//获取每周的名字
private double per; Week(String name, double per) {
this.name = name;
this.per = per;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public double getPer() {
return per;
} public void setPer(double per) {
this.per = per;
}
}

房间也有单人房间、双人房间和套房

 public enum Room {
SINGLE("单人房间", 100),
DUETBED("双人房间", 150),
SUITE("套房", 180);
private String roomName;
private int f; Room(String roomName, int f) {
this.roomName = roomName;
this.f = f;
} public String getRoomName() {
return roomName;
} public void setRoomName(String roomName) {
this.roomName = roomName;
} public int getF() {
return f;
} public void setF(int f) {
this.f = f;
}
}

如果是住一天的话,调用getPrice方法,传来星期、顾客以及房间等级并将对应的价格累加。

 public class Util {
private static Week wk;
private static Customer customer;
private static Room room; static double total = 0; /**
* 客户住一天
*
* @param week
* @param customer 顾客
* @param room 房间类别
*/
public static void getPrice(Week week, Customer customer, Room room) {
if (customer != Customer.common) {
total = (room.getF() * week.getPer() * customer.getDiscount());
} else {
total = (room.getF() * week.getPer());
}
System.out.println("客户类型:" + customer.getName() +
"\n======================\n" +
"日期:" + week.getName() + "\n" +
"今日折扣:" + week.getPer() + "\n" +
"房间类型:" + room.getRoomName() + "\n"
+ "房间价格:" + room.getF() + "元");
System.out.println("房价;" + total + "元");
}

如果是连续住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天。

 public class Water {
public static void main(String[] args) {
Week wk = Week.DAY5; //星期3
Customer customer = Customer.diamond; //钻石客户
Room room = Room.DUETBED; //双人房间 //默认住1天
Util.getPrice(wk, customer, room);
System.out.println("\n===========================================\n");
//住N天
Util.getPrice(wk, customer, room, 3);
}
}

运行效果如下:

Java的枚举简单应用的更多相关文章

  1. 简单认识java enum枚举

    什么是枚举 枚举是java5中新增的特性,他是一个特殊的数据类型,他的特殊性在于他既是一种类类型,又比类类型多了安全性,简洁性,便捷性.java枚举类型是功能十分强大齐全的类,功能比其他语言中的对等物 ...

  2. 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题(转)

    写在前面: Java SE5 提供了一种新的类型 Java的枚举类型,关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能 ...

  3. 深度分析Java的枚举类型—-枚举的线程安全性及序列化问题

    原文:深度分析Java的枚举类型--枚举的线程安全性及序列化问题 枚举是如何保证线程安全的 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和clas ...

  4. Java enum枚举类型

    java的枚举类型详解: 简单示例: public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN } 复杂示例(带自定义构造方法与类型) public enum En ...

  5. (转)java enum枚举

    转载自: 原理:http://singleant.iteye.com/blog/686349 应用:http://www.cnblogs.com/happyPawpaw/archive/2013/04 ...

  6. Java基础—枚举

    定义 枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示. 为什么要用枚举 在java语言中还没有引入枚举类型之前,表示枚 ...

  7. Java Enum枚举的用法(转)

    说明:Java的枚举比dotnet的枚举好用,至少支持的方式有很多. 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以 ...

  8. Java 异步处理简单实践

    Java 异步处理简单实践 http://www.cnblogs.com/fangfan/p/4047932.html 同步与异步 通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异 ...

  9. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

随机推荐

  1. java方法与方法的重载

    一 方法 1.方法的概述 在java中,方法就是用来完成解决某件事情或实现某个功能的办法. 方法实现的过程中,会包含很多条语句用于完成某些有意义的功能——通常是处理文本, 控制输入或计算数值.我们可以 ...

  2. 2020-07-28:已知sqrt (2)约等于 1.414,要求不用数学库,求sqrt (2)精确到小数点后 10 位。

    福哥答案2020-07-28: 1.二分法.2.手算法.3.牛顿迭代法.基础是泰勒级数展开法.4.泰勒级数法.5.平方根倒数速算法,卡马克反转.基础是牛顿迭代法. golang代码如下: packag ...

  3. 2020-04-06:为什么HashMap不一直使用红黑树?

    红黑树的阈值是8,当链表大于等于8时链表变成了红黑树结构,大大减少了查找的时间. 当长度低于6时会由红黑树转成链表,TreeNodes占用空间是普通Nodes的两倍,所以只有当bin包含足够多的节点时 ...

  4. Linux系统安装Nginx(Centos7)

    Nginx是一款轻量级的网页服务器.反向代理服务器.它最常的用途是提供反向代理服务,还可以做负载均衡.相较于Apache.lighttpd具有占有内存少,稳定性高等优势.服务端很多场景都需要使用,这篇 ...

  5. matlab使用libsvm入门教程——使用matlab安装配置libsvm以及一个svm分类实例

    前言 此教程专注于刚入门的小白, 且博客拥有时效性, 发布于2019年3月份, 可能后面的读者会发现一些问题, 欢迎底下评论出现的问题,我将尽可能更新解决方案. 我开始也在如何安装libsvm上出现了 ...

  6. Python参数解析工具ArgumentParser

    通过命令行运行Python脚本时,可以通过ArgumentParser来高效地接受并解析命令行参数. 流程 新建一个ArgumentParser类对象,然后来添加若干个参数选项,最后通过parse_a ...

  7. OptaPlanner的新约束表达方式 Constraint Streams

    有好些时间没有写过关于OptaPlanner的东西了,其实近半年来,OptaPlanner还是推出了不少有用.好用的新特性.包括本文讲到的以Stream接口实现评分编程.关于OptraPlanner的 ...

  8. 解决QT5移植报错:This application failed to start because no Qt platform plugin could be initialized

    今天自己基于Pyqt5开发了一个软件,打包成exe后在自己的电脑上运行正常,在其他机器上提示: This application failed to start because no Qt platf ...

  9. Scala的安装和配置

    1.Windows下搭建Scala开发环境 1)Scala需要Java运行时库,安装Scala需要首先安装JVM虚拟机并配置好,推荐安装JDK1.8 2)在http://www.scala-lang. ...

  10. Go语言 | CSP并发模型与Goroutine的基本使用

    今天是golang专题的第13篇文章,我们一起来聊聊golang当中的并发与Goroutine. 在之前的文章当中我们介绍完了golang当中常用的使用方法和规范,在接下来的文章当中和大家聊聊gola ...