/**
* 请用枚举方式实现如下应用:
* 客户去旅店住房,
* 客户分普通客户,和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. Vulhub Docker环境部署

    1:安装Linux 2:安装Docker : curl -s https://get.docker.com/ | sh 3:安装Docker-compose curl -s https://boots ...

  2. XCTF-WEB-高手进阶区-Web_python_template_injection-笔记

    Web_python_template_injection o(╥﹏╥)o从这里开始题目就变得有点诡谲了 网上搜索相关教程的确是一知半解,大概参考了如下和最后的WP: http://shaobaoba ...

  3. JS 与 jQery 的区别主要在于 DOM

    //目前正在学习前端阶段,把知识点整理.保存下来以便日后查看 首先引入jQery: 需要先引入css,再引入js: jQery需要在js前引入,再引入框架,最后才是js的引入:css也相同,先引入框架 ...

  4. C#LeetCode刷题-脑筋急转弯

    脑筋急转弯篇 # 题名 刷题 通过率 难度 292 Nim游戏   62.5% 简单 319 灯泡开关   31.8% 中等 777 在LR字符串中交换相邻字符   21.9% 中等

  5. [算法入门]——深度优先搜索(DFS)

    深度优先搜索(DFS) 深度优先搜索叫DFS(Depth First Search).OK,那么什么是深度优先搜索呢?_? 样例: 举个例子,你在一个方格网络中,可以简单理解为我们的地图,要从A点到B ...

  6. Shiro+SpringBoot认证

    该博客以Web为基础 一.引入依赖 shiro-all包含shiro所有的包.shiro-core是核心包.shiro-web是与web整合.shiro-spring是与spring整合.shiro- ...

  7. 二、JAVA 的了解与安装

    1.java了解 1.1.java三大版本 javaSE:标准版(桌面程序,控制台开发...) javaME:嵌入式开发(手机.小家电...)[可以忽略] javaEE:企业版开发(web端,服务器开 ...

  8. Java中的注解及自定义注解你用的怎么样,能不能像我这样应用自如?

    Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...

  9. JavaScript设计模式之命令模式【命令解耦】

    在讲解命令模式之前我们先来了解一个生活中的命令模式场景: 场景1: 医院看病抓药: 当你因为肾虚到医院看医生,医生一番操作之后得出结论:要吃个疗程[夏桑菊].[小柴胡](药名纯属虚构,真的肾虚就找医生 ...

  10. 【转】python调用youtube-dl实现视频下载

    youtube-dl是一个命令行程序,用于从YouTube.com和更多网站下载视频.它需要Python解释器,版本2.6,2.7或3.2+,并且支持Unix,Windows或Mac OS X中运行. ...