饮料贩卖系统(java)
要求:接收用户输入的信息,选择购买的饮料。可供选择的饮料有:咖啡、矿泉水和可乐。其中,购买咖啡时可以选择:加糖、加奶还是什么都不加。购买可乐时可以选择:买可口可乐还是百事可乐。为了模拟的更加真实一点,我给每个饮料都增加了数量和价格。
分析:
- 共包含四个实体类,饮料为父类,其余三种饮料为子类。一个管理类,用于进行饮料的购买。
- 因为咖啡可以选择加糖加奶什么都不加,可乐又分为百事和可口,所以在主菜单下分了几个子菜单。
代码如下:
饮料类
public class Drink {
private String name;
private double prise;
private int num;
public Drink(String name, double prise,int num) {
super();
this.name = name;
this.prise = prise;
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrise() {
return prise;
}
public void setPrise(double prise) {
this.prise = prise;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
咖啡类
public class Coffee extends Drink{
public Coffee(String name, double prise, int num) {
super(name, prise, num);
}
}
矿泉水类
public class Writer extends Drink{
public Writer(String name, double prise, int num) {
super(name, prise, num);
}
}
可乐类
public class Coke extends Drink{
public Coke(String name, double prise, int num) {
super(name, prise, num);
}
}
管理类
public class BuyDrink {
Drink coffee;
Drink coco;
Drink bcoco;
Drink writer;
Scanner sc = new Scanner(System.in);
{
// 利用游离块初始化数据
coffee = new Coffee("咖啡", 10, 1);
coco = new Coke("百事可乐", 3, 1);
bcoco = new Coke("可口可乐", 3, 1);
writer = new Writer("矿泉水", 2, 1);
}
// 主菜单
public void manu() {
System.out.println("=================饮料购买系统===============");
System.out.println("[1]购买饮料================================");
System.out.println("[0]退出系统================================");
System.out.println("=========================================");
System.out.println("请输入");
int i = sc.nextInt();
switch (i) {
case 1:
// 跳到一号菜单
manu1();
break;
case 0:
return;
default:
System.out.println("输入有误,请重新输入:");
manu();
break;
}
}
private void manu1() {
System.out.println("[1]咖啡====[2]矿泉水====[3]可乐====[任意键]返回上一级");
int i = sc.nextInt();
switch (i) {
case 1:
// 判断咖啡数量是否大于零,是就跳到2号菜单,否则返回1号菜单
if (coffee.getNum() > 0)
manu2();
else {
System.out.println("咖啡已售罄,请重新选择");
manu1();
}
break;
case 2:
// 判断咖啡数量是否大于零,是就数量减一回到主菜单,不是就回到1号菜单
if (writer.getNum() > 0) {
writer.setNum(writer.getNum() - 1);
System.out.println("购买成功!");
manu();
} else {
System.out.println("矿泉水已售罄,请重新选择");
manu1();
}
break;
case 3:
manu3();
break;
default:
manu();
break;
}
}
private void manu2() {
System.out.println("[1]加奶====[2]加糖====[3]都不加====[任意键]返回上一级");
int i = sc.nextInt();
switch (i) {
// 选择123咖啡数量都是减一,所以不用break
case 1:
case 2:
case 3:
System.out.println("购买成功!");
coffee.setNum(coffee.getNum() - 1);
manu();
break;
default:
manu1();
break;
}
}
private void manu3() {
System.out.println("[1]可口可乐====[2]百事可乐====[任意键]返回上一级");
int i = sc.nextInt();
switch (i) {
case 1:
if (coco.getNum() > 0) {
coco.setNum(coco.getNum() - 1);
System.out.println("购买成功!");
manu();
} else {
System.out.println("可口可乐已售罄,请重新选择");
manu3();
}
break;
case 2:
if (bcoco.getNum() > 0) {
bcoco.setNum(bcoco.getNum() - 1);
System.out.println("购买成功!");
manu();
} else {
System.out.println("百事可乐已售罄,请重新选择");
manu3();
}
break;
default:
manu1();
break;
}
}
}
测试类
public class TestDrink {
public static void main(String[] args) {
BuyDrink b = new BuyDrink();
b.manu();
}
}
部分测试结果: