问题描述
练习15 奕昊玩具公司可以提供玩具租赁的服务,出租玩具的信息如表15-2所示。
玩具类型 | 具体信息 | 日租金(元) | 折扣 |
---|---|---|---|
布艺类 | 洋娃娃(2kg,1岁以上) | 10 | 8~60天9折,大于60天8折 |
布艺类 | 毛绒狗(3kg,2岁以上) | 15 | 8~60天9折,大于60天8折 |
布艺类 | 玩具沙发(5kg,4岁以上) | 20 | 8~60天9折,大于60天8折 |
电动类 | 电动车(7kg,八成新) | 50 | 30~60天8折,大于60天7折 |
电动类 | 电动船(9kg,六成新) | 60 | 30~60天8折,大于60天7折 |
编写程序完成玩具租赁,程序执行效果如下:
********欢迎光临奕昊玩具公司********
1. 布艺类, 2. 电动类
请选择您需要的玩具类型:1
请选择您的孩子年龄:1. 1岁, 2. 2岁, 3. 3岁, 4. 4岁以上 2
请输入您要租赁的天数:20
适合您孩子的玩具为:毛绒狗
您需要支付的费用是:270.0
********欢迎光临奕昊玩具公司********
1. 布艺类, 2. 电动类
请选择您需要的玩具类型:2
请选择您需要的玩具的新旧程度:1. 六成新, 2. 八成新 1
请输入您要租赁的天数:15
适合您孩子的玩具为:电动船
您需要支付的费用是:900.0
********欢迎光临奕昊玩具公司********
1. 布艺类, 2. 电动类
请选择您需要的玩具类型:-1
思路解析
这个玩具租赁系统实现的基本思路,就是用Scanner类读取用户输入,然后System.out.println()输出信息。同时,需要建立几个类:
- abstract class Toy # 适用所有玩具的抽象类,包含
玩具名称
、玩具重量
、玩具属性
、日租金
四个属性,以及计算租金
的抽象方法。 - class Puppet extends Toy # 布艺类玩具,继承Toy类,重写
计算租金
方法。 - class EToy extends Toy # 电动类玩具,继承Toy类,重写
计算租金
方法。
在main()方法中实例化这些类的对象,然后根据用户输入的信息,选择适合的玩具,以及计算租金。
源代码
为了方便,把所有的类都写在了Main.java中。Main.java文件的全部代码如下:
package cn.minimal.ComputerManage;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Puppet p1 = new Puppet("洋娃娃", 2, "1岁以上", 10);
Puppet p2 = new Puppet("毛绒狗", 3, "2岁以上", 15);
Puppet p3 = new Puppet("玩具沙发", 5, "4岁以上", 20);
EToy e1 = new EToy("电动车", 7, "八成新", 50);
EToy e2 = new EToy("电动船", 9, "六成新", 60);
Toy[] toys = new Toy[5];
toys[0] = p1; toys[1] = p2; toys[2] = p3;
toys[3] = e1; toys[4] = e2;
while(true) {
System.out.println("********欢迎光临奕昊玩具公司********");
System.out.println("1. 布艺类, 2. 电动类");
System.out.print("请选择您需要的玩具类型:");
int toyType = scanner.nextInt();
if (toyType == 1) {
System.out.print("请选择您的孩子年龄:1. 1岁, 2. 2岁, 3. 3岁, 4. 4岁以上 ");
} else if (toyType == 2) {
System.out.print("请选择您需要的玩具的新旧程度:1. 六成新, 2. 八成新 ");
} else if (toyType == -1) {
break;
} else {
System.out.print("玩具类型选择错误!");
continue;
}
int Years = scanner.nextInt();
if (toyType == 1) {
if (Years < 1 || Years > 4) {
System.out.print("玩具属性选择错误!");
continue;
}
}
else {
if (Years < 1 || Years > 2) {
System.out.print("玩具属性选择错误!");
continue;
}
}
System.out.print("请输入您要租赁的天数:");
int days = scanner.nextInt();
if(days <= 0) {
System.out.print("租赁天数输入错误!");
continue;
}
String t = getToy(toys, toyType, Years);
double q = getRents(toys, t, days);
System.out.println("适合您孩子的玩具为:" + t);
System.out.println("您需要支付的费用是:" + q);
}
}
public static String getToy(Toy[] toys, int toyType, int Years) {
if (toyType == 1) {
// 把用户输入的选项转换成玩具id
int tid = Years - 1;
if (Years > 2) { tid--; }
return toys[tid].name;
} else if (toyType == 2) {
// 把用户输入的选项转换成玩具id
int tid = Years;
if (Years == 2) { tid = 0; }
tid += 3;
return toys[tid].name;
}
return "";
}
public static double getRents(Toy[] toys, String name, int days) {
for(Toy t : toys) {
if(t.name.equals(name)) {
return t.getMoney(days);
}
}
return 0;
}
}
abstract class Toy {
String name;
int weight;
String type;
double rent;
public Toy(String name, int weight, String type, double rent) {
this.name = name;
this.weight = weight;
this.type = type;
this.rent = rent;
}
public abstract double getMoney(int days);
}
class Puppet extends Toy {
public Puppet(String name, int weight, String type, double rent) {
super(name, weight, type, rent);
}
public double getMoney(int days) {
if(days >= 8 && days <= 60) {
return this.rent * days * 0.9;
}
else if (days > 60) {
return this.rent * days * 0.8;
}
else if (days < 8 && days > 0) {
return this.rent * days;
}
else {
return -1;
}
}
}
class EToy extends Toy {
public EToy(String name, int weight, String type, double rent) {
super(name, weight, type, rent);
}
public double getMoney(int days) {
if(days >= 30 && days <= 60) {
return this.rent * days * 0.8;
}
else if (days > 60) {
return this.rent * days * 0.7;
}
else if (days < 30 && days > 0) {
return this.rent * days;
}
else {
return -1;
}
}
}
在IDE中运行代码
找到Main.java文件中main子程序左边的绿色箭头,点击即可运行代码,如图所示
参考资料
- 夏昊 编著. 极简Java. 中国水利水电出版社. 2021.6