前言
1、小商品自动贩卖机程序,要求功能示例:
请输入你要购买的商品:
1、面包(豆沙、抹茶),2、茶(红茶、绿茶),3、可乐,4、口香糖(西瓜、哈密瓜),5、纸巾
1
请输入你需要的面包的信息:1、豆沙,2、抹茶
2
请输入商品数量:
1
你还需要其他商品么:1、继续,2、结算
1
请输入你要购买的商品:
1、面包(豆沙、抹茶),2、茶(红茶、绿茶),3、可乐,4、口香糖(不同的口味),5、纸巾
。。。。
2
您购买了***********,共计10元,请支付多少10元:
5
请继续投币5元
100
找你90元,请注意收好购买的产品,谢谢惠顾!
10
请注意收好购买的产品,谢谢惠顾!
提示:以下是本篇文章正文内容,下面案例可供参考
一、创建类: customer , goods , shopping
三个文件:
1.customer类,主入口函数
import java.util.Scanner;
public class customer {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
shopping shop =new shopping();
while (true){
System.out.println();
System.out.println("*******------*******--------*******------*******------********-------*******-----*");
System.out.println("-------------------------------欢迎使用购物系统------------------------------------~~");
System.out.println("请输入你要购买的商品:(按以下序号选择)");
System.out.println("1、面包(豆沙、抹茶),2、茶(红茶、绿茶),3、可乐,4、口香糖(西瓜、哈密瓜),5、纸巾----6、退出");
System.out.println("---------------------------------------------------------------------------------");
int select = scanner.nextInt();
if (select == 6){
System.out.println("欢迎下次光临!!再见");
break;
}
else {
shop.shop(select);
}
}
}
}
2.goods类 (算作商品父类,子类我也写在里面的)
public class goods {
String goodsname;
double price;
String test;
public goods(){
//构造器,初始化商品
}
//含参构造器,一次性构造完成
public goods(String goodsname,double price){
this.goodsname=goodsname;
this.price=price;
}
public static class bread extends goods{
String test1;
String test2;
public bread(String goodsname,double price,String test1,String test2){
this.goodsname=goodsname;
this.price=price;
this.test1=test1;
this.test2=test2;
}
}
// 1、面包(豆沙、抹茶),2、茶(红茶、绿茶),3、可乐,4、口香糖(西瓜、哈密瓜),5、纸巾
public static class tea extends goods{
String test1;
String test2;
public tea(String goodsname,double price,String test1,String test2){
this.goodsname=goodsname;
this.price=price;
this.test1=test1;
this.test2=test2;
}
}
// 1、面包(豆沙、抹茶),2、茶(红茶、绿茶),3、可乐,4、口香糖(西瓜、哈密瓜),5、纸巾
public static class gum extends goods{
String test1;
String test2;
public gum(String goodsname,double price,String test1,String test2){
this.goodsname=goodsname;
this.price=price;
this.test1=test1;
this.test2=test2;
}
}
}
3.shopping类,业务逻辑处理
import java.util.*;
public class shopping {
// 1、面包(豆沙、抹茶),2、茶(红茶、绿茶),3、可乐,4、口香糖(西瓜、哈密瓜),5、纸巾
goods.bread bread = new goods.bread("面包",10,"豆沙","抹茶");
goods.tea tea = new goods.tea("茶",5,"红茶","绿茶");
goods coke = new goods("可乐",3);
goods.gum gum = new goods.gum("口香糖",4,"西瓜","哈密瓜");
goods tissue = new goods("纸巾",4);
Map good =new HashMap<>();
Map<String, Double> goodsmap=new HashMap<String, Double>();
String test;
public void shop(int choose) {
switch (choose) {
case 1:
System.out.println("【*****请输入你需要的商品信息*****】:");
System.out.println("选择口味:" + "1: " + bread.test1 + " 2: " + bread.test2);
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
if (num == 1) {
test = bread.test1;
} else if (num == 2) {
test = bread.test2;
} else {
System.out.println("请选择已有口味:" + "1:" + bread.test1 + "2:" + bread.test2);
scanner = new Scanner(System.in);
num = scanner.nextInt();
if (num == 1) {
test = bread.test1;
} else if (num == 2) {
test = bread.test2;
}
}
int e = goodnumAdd();
goodsmap.put(bread.goodsname,e * bread.price);
good =goodsmap;
otherneed(goodsmap, test, e * bread.price);
break;
// 1、面包(豆沙、抹茶),2、茶(红茶、绿茶),3、可乐,4、口香糖(西瓜、哈密瓜),5、纸巾
case 2:
System.out.println("【*****请输入你需要的商品信息*****】:");
System.out.println("选择口味:" + "1:" + tea.test1 + "2:" + tea.test2);
scanner = new Scanner(System.in);
num = scanner.nextInt();
if (num == 1) {
test = tea.test1;
} else if (num == 2) {
test = tea.test2;
} else {
System.out.println("请选择已有口味:"+"1:" + tea.test1 + "2:" + tea.test2);
scanner = new Scanner(System.in);
num = scanner.nextInt();
if (num == 1) {
test = tea.test1;
} else {
test = tea.test2;
}
}
int a = goodnumAdd();
goodsmap.put(tea.goodsname,a * tea.price);
good =goodsmap;
otherneed( goodsmap,test ,a * tea.price);
break;
// 1、面包(豆沙、抹茶),2、茶(红茶、绿茶),3、可乐,4、口香糖(西瓜、哈密瓜),5、纸巾
case 3:
int i = goodnumAdd();
goodsmap.put(coke.goodsname,i * coke.price);
good =goodsmap;
otherneed(goodsmap, "原味",i * coke.price);
break;
// 1、面包(豆沙、抹茶),2、茶(红茶、绿茶),3、可乐,4、口香糖(西瓜、哈密瓜),5、纸巾
case 4:
System.out.println("【*****请输入你需要的商品信息*****】:");
System.out.println("选择口味:" + "1:" + gum.test1 + "2:" + gum.test2);
scanner = new Scanner(System.in);
num = scanner.nextInt();
if (num == 1) {
test = gum.test1;
} else if (num == 2) {
test = gum.test2;
} else {
System.out.println("请选择已有口味:" + "1:" + gum.test1 + "2:" + gum.test2);
scanner = new Scanner(System.in);
num = scanner.nextInt();
if (num == 1) {
test = gum.test1;
} else {
test = gum.test2;
}
}
int p = goodnumAdd();
goodsmap.put(gum.goodsname,p * gum.price);
good =goodsmap;
otherneed(goodsmap, test,p * gum.price);
break;
// 1、面包(豆沙、抹茶),2、茶(红茶、绿茶),3、可乐,4、口香糖(西瓜、哈密瓜),5、纸巾
case 5:
int k = goodnumAdd();
goodsmap.put(tissue.goodsname,k * tissue.price);
good =goodsmap;
otherneed(goodsmap, "原味",k * tissue.price);
break;
case 6:
System.out.println("欢迎下次光临!!");
break;
default:
System.out.println("没有此商品,请重新选择!!");
break;
}
// System.out.println(goodsmap);
}
private void otherneed(Map goodsname,String test,double goodprice) {
Scanner scanner=new Scanner(System.in);
System.out.println("【*******你还需要其它商品吗*******】! 1、继续,2、结算 ");
int input = scanner.nextInt();
if(input == 1){
System.out.println("---------------------------------------------------------------------------------");
System.out.println("请输入你要购买的商品:(按以下序号选择)");
System.out.println("1、面包(豆沙、抹茶),2、茶(红茶、绿茶),3、可乐,4、口香糖(西瓜、哈密瓜),5、纸巾----6、退出");
System.out.println("---------------------------------------------------------------------------------");
int choose = scanner.nextInt();
shop(choose);//又跳转到商品购物的界面
}
else if(input ==2){
//success(goodsname,test,goodprice);
System.out.println("您购买了:"+good.keySet());
System.out.println("明细:"+good);
double sum=0.0;
Object[] obj=good.values().toArray();
for (int i=0;i<obj.length;i++){
Double d=(Double) obj[i];
sum+=d;
}
System.out.println(sum);
System.out.println("共计"+sum+"请支付:"+sum+"元");//系统提示语
Scanner sc = new Scanner(System.in);
int pay = sc.nextInt();
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>");
if (pay < sum) {
double money = sum-pay;
System.out.println("请继续投"+money+"币");
int cpay =sc.nextInt();
if (cpay==money){
System.out.println("请注意收好购买的产品,谢谢惠顾!");
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>");
}
}
else if(pay > sum) {
double money = pay-sum;
System.out.println("找你"+money+"元,请注意收好购买的产品,谢谢惠顾!");
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
}
else {
System.out.println("请注意收好购买的产品,谢谢惠顾!");
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>");
}
good.clear();
}
else {
System.out.println("******点错了!!只有两项选择*******: 1、继续,2、结算");
Scanner sca=new Scanner(System.in);
int put= sca.nextInt();
if(put == 1){
System.out.println("---------------------------------------------------------------------------------");
System.out.println("请输入你要购买的商品:(按以下序号选择)");
System.out.println("1、面包(豆沙、抹茶),2、茶(红茶、绿茶),3、可乐,4、口香糖(西瓜、哈密瓜),5、纸巾----6、退出");
System.out.println("---------------------------------------------------------------------------------");
int choose = scanner.nextInt();
shop(choose);//又跳转到商品购物的界面
}
else{
double sum=0.0;
Object[] obj=good.values().toArray();
for (int i=0;i<obj.length;i++){
Double d=(Double) obj[i];
sum+=d;
}
//success(goodsname,test,goodprice);
System.out.println("您购买了:"+good.keySet());
System.out.println("明细:"+good);
System.out.println("共计"+sum+"请支付:"+sum+"元");//系统提示语
Scanner sc = new Scanner(System.in);
int pay = sc.nextInt();
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>");
if (pay < sum) {
double money = sum-pay;
System.out.println("请继续投"+money+"币");
int cpay =sc.nextInt();
if (cpay==money){
System.out.println("请注意收好购买的产品,谢谢惠顾!");
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>");
}
}
else if(pay > sum) {
double money = pay-sum;
System.out.println("找你"+money+"元,请注意收好购买的产品,谢谢惠顾!");
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
}
else {
System.out.println("请注意收好购买的产品,谢谢惠顾!");
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>");
}
good.clear();
}
}
}
private int goodnumAdd() {
System.out.println("请输入商品数量:");
Scanner scanner =new Scanner(System.in);
int goodsnum = scanner.nextInt();
return goodsnum;
}
}
二、功能展示
1.购物
2.结算
总结
- 怎么让系统自动循环
我给入口函数写了一个while循环,布尔条件true,一直为真,一直执行,退出就在循环里再写个判断,如果用户输入6,也就是触发break的if条件,它就退出了。
- 怎么把曾选择的商品放入一个容器里,最后结算时从容器里获取要结算的商品名字,价格
我本来一开始是想用数组存,后来换成Map,不仅可以存名字,还可以存价格,
把Map名.put(String,Double)放入每个case条件中,方便一入条件就触发添加。
运行期间,发生map的size始终为1,也就是说出了case它就又重新开始了。我尝试把Map定义为全局的,试来试去,最后的样子是,定义了两个map, map1负责case里添加, map2负责添加map1,要使用的是map2。(理想化是说map2里面是堆叠的每个进入过case的map1)
- 怎么把map里的value取出来累加
Map.values()得到商品价格的集合,Map.values().toArray()可以将它转化成数组,但是是Object型的。涉及到取Object型数组元素,进行类型转化,上网查阅,形如Double d=(Double) obj[i]; 让单个元素强制转化就好了。累加使用for循环