/**
* 请用枚举方式实现如下应用:
* 客户去旅店住房,
* 客户分普通客户,和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. Kerberos认证原理及基于Kerberos认证的NFS文件共享

    目录 Kerberos认证原理 简介 client访问server过程 一.Authentication Service Exchange (AS Exchange) 二.Ticket Grantin ...

  2. 序列化流(ObjectOutputStream、ObjectInputStream)

    1.序列化流(ObjectOutputStream) package demo10.objstream; /* java.io.ObjectOutputStream extends OutputStr ...

  3. FIRST集合、FOLLOW集合及LL(1)文法求法

    FIRST集合 定义 可从α推导得到的串的首符号的集合,其中α是任意的文法符号串. 规则 计算文法符号 X 的 FIRST(X),不断运用以下规则直到没有新终结符号或 ε可以被加入为止 : (1)如果 ...

  4. windows下RocketMQ的安装部署

    一.预备环境 1.系统 Windows 2. 环境 JDK1.8.Maven.Git 二. RocketMQ部署 1.下载 1.1地址:http://rocketmq.apache.org/relea ...

  5. 简单的股票信息查询系统 1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环) 2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来 3 允许按股票价格、涨跌幅、换手率这几列来筛选信息, 比如输入“价格>50”则把价格大于50的股票都打印,输入“市盈率<50“,则把市盈率小于50的股票都打印,不用判断等于。

    '''需求:1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环)2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来3 允许按股票价格 ...

  6. go chan 缓存与阻塞

    原文链接:Go语言第十一课 并发(三)Channel缓存与阻塞 Channel的缓存 前面介绍过channel的创建方法: channel_test := make(chan string) 其实它完 ...

  7. 微服务项目整合Ocelot+IdentityServer4

    项目搭建肯定少不了认证和授权,传统的单体应用基于cookie和session来完成的. 因为http请求是无状态的,每个请求都是完全独立的,服务端无法确认当前请求之前是否登陆过.所以第一次请求(登录) ...

  8. 数字货币比特币以太坊买卖五档行情数据API接口

    数字货币比特币以太坊买卖五档行情数据API接口       数字货币一般包含比特币BTC.以太坊ETH.瑞波币XRP.泰达币USDT.比特币现金BCH.比特币SV.莱特币LTC.柚子币EOS.OKB. ...

  9. Federated Machine Learning: Concept and Applications

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Qiang Yang, Yang Liu, Tianjian Chen, and Yongxin Tong. 2019. Federate ...

  10. 学习一下 JVM (二) -- 学习一下 JVM 中对象、String 相关知识

    一.JDK 8 版本下 JVM 对象的分配.布局.访问(简单了解下) 1.对象的创建过程 (1)前言 Java 是一门面向对象的编程语言,程序运行过程中在任意时刻都可能有对象被创建.开发中常用 new ...