直接一个文件页(除了Goods和Price两个类)无封装解决需求功能粗暴版
源代码如下:
Goods类:
package org.jsoft.test2;
class Goods {
private String name;
Goods(String name) {
this.name = name;
}
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.name;
}
}
Price类:
package org.jsoft.test2;
class Price {
private double price;
Price ( double price) {
this.price = price;
}
double getPrice() {
return price;
}
void setPrice(double price) {
this.price = price;
}
public String toString() {
return this.price+"" ;//double+String类型转换成String类型,由此方便返回price数值
}
}
主要实现类ShoppingCar_List_Version:
package org.jsoft.test2;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
public class ShoppingCar_List_Version {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int number;// 下面将要用到的商品的对应号码
double amount;// 要购买对应商品的数量
double sum = 0;// 购买完成后,对应当前购物车中所有商品所有商品的金额
List l1 = new ArrayList();// 创建集合的List接口类型的实现类ArrayList类l1(L1),用以储存Goods类的对象(即为各个商品的名称)
List l2 = new ArrayList();// 创建适合的List接口类型的实现类ArrayList类l2(L2),用以储存Price类的对象(即为各类商品名称所对应的单价)
Goods g[] = new Goods[11]; // 首先创建Goods类对象数组并对其大小进行初始化,此次购物市场里将有十一类商品,则长度初始化为11
g[0] = new Goods("苹果");// 对其进行逐一的动态赋值
g[1] = new Goods("香蕉");
g[2] = new Goods("草莓");
g[3] = new Goods("鸡肉");
g[4] = new Goods("牛肉");
g[5] = new Goods("羊肉");
g[6] = new Goods("面包");
g[7] = new Goods("牛奶");
g[8] = new Goods("奶酪");
g[9] = new Goods("啤酒");
g[10] = new Goods("红酒");
Price p[] = new Price[11];// 同理
p[0] = new Price(12);// 同理,此处为对应的单价
p[1] = new Price(6);
p[2] = new Price(20);
p[3] = new Price(40);
p[4] = new Price(50);
p[5] = new Price(70);
p[6] = new Price(10);
p[7] = new Price(12);
p[8] = new Price(20);
p[9] = new Price(6);
p[10] = new Price(188);
Map m1 = new LinkedHashMap();// 创建Map接口的实现类LinkedHashMap(此处LinkedHashMap与HashMap不同的地方为,前者按存入对象的先后顺序进行排序,后者无序)
// 将在下面进行将Goods类和Price类的对象进行键、值对应的存入操作,而且将根据用户的输入所需要的商品的数量amount进行对应存入value
System.out
.println("*********************************************************");
System.out.println("欢迎来到57号超市,请问您有什么需要吗?");
System.out
.println("*********************************************************");
while (true) {// 此处为了用户能持续进行多种操作,使用死循环
System.out.println("");// 空行
System.out.println("1-开始购物/继续购物" + '\n' + "2-查看购物车" + '\n'
+ "3-清空购物车" + '\n' + "4-结算付款");
int i = in.nextInt();// 接收用户的选项
if (i > 4 || i < 1) {// 异常输入处理
System.out.println("输入有误,请您重新输入选择:");
} else if (i == 1) {// 购物开始
System.out
.println("*********************************************************");
System.out.println("");
System.out.println("商品名称" + " "
+ "单价(元/KG/瓶/包)");
for (int i1 = 0; i1 < g.length; i1++) {// 将先前创建的各种对象按数字顺序对应存入l1和l2
l1.add(g[i1]);// 此二者的[i1]数值相同即为商品名称和单价的对应
l2.add(p[i1]);
System.out.println((i1 + 1) + "-" + l1.get(i1)
+ "————————————————" + l2.get(i1));// 商品对应号码、商品名称以及商品单价的遍历
}
System.out.println("请您输入需要商品的号码以及购买数量:");// 顾客购物操作开始
number = in.nextInt();// 用以接收储存顾客需要的商品
amount = in.nextDouble();// 用以接收储存顾客需要的数量
switch (number) {// number即为顾客对商品进行的选择,由于商品种类较多,所以此处使用switch语句进行筛选和处理
case 1:
System.out.print("您选择的商品是:" + l1.get(number - 1) + "单价为:"
+ l2.get(number - 1) + '\t' + "总额为:" + amount
* p[number - 1].getPrice());// 输出确认顾客自身的选择,以及选择的商品种类、数量以及所需要支付的金额
sum += amount * p[number - 1].getPrice();// 使用sum对当前购物车金额进行储存
m1.put(g[number - 1], p[number - 1] + " " + amount);// 此处为重点,使用m1对其进行key-value的对应储存,后者的value不仅仅是单价而是单价加上当前顾客的商品选择的数量
break;// 跳出
// 下列case仅为不同的商品的种类,其余同理
case 2:
System.out.print("您选择的商品是:" + l1.get(number - 1) + "单价为:"
+ l2.get(number - 1) + '\t' + "总额为:" + amount
* p[number - 1].getPrice());
sum += amount * p[number - 1].getPrice();
m1.put(g[number - 1], p[number - 1] + " " + amount);
break;
case 3:
System.out.print("您选择的商品是:" + l1.get(number - 1) + "单价为:"
+ l2.get(number - 1) + '\t' + "总额为:" + amount
* p[number - 1].getPrice());
sum += amount * p[number - 1].getPrice();
m1.put(g[number - 1], p[number - 1] + " " + amount);
break;
case 4:
System.out.print("您选择的商品是:" + l1.get(number - 1) + "单价为:"
+ l2.get(number - 1) + '\t' + "总额为:" + amount
* p[number - 1].getPrice());
sum += amount * p[number - 1].getPrice();
m1.put(g[number - 1], p[number - 1] + " " + amount);
break;
case 5:
System.out.print("您选择的商品是:" + l1.get(number - 1) + "单价为:"
+ l2.get(number - 1) + '\t' + "总额为:" + amount
* p[number - 1].getPrice());
sum += amount * p[number - 1].getPrice();
m1.put(g[number - 1], p[number - 1] + " " + amount);
break;
case 6:
System.out.print("您选择的商品是:" + l1.get(number - 1) + "单价为:"
+ l2.get(number - 1) + '\t' + "总额为:" + amount
* p[number - 1].getPrice());
sum += amount * p[number - 1].getPrice();
m1.put(g[number - 1], p[number - 1] + " " + amount);
break;
case 7:
System.out.print("您选择的商品是:" + l1.get(number - 1) + "单价为:"
+ l2.get(number - 1) + '\t' + "总额为:" + amount
* p[number - 1].getPrice());
sum += amount * p[number - 1].getPrice();
m1.put(g[number - 1], p[number - 1] + " " + amount);
break;
case 8:
System.out.print("您选择的商品是:" + l1.get(number - 1) + "单价为:"
+ l2.get(number - 1) + '\t' + "总额为:" + amount
* p[number - 1].getPrice());
sum += amount * p[number - 1].getPrice();
m1.put(g[number - 1], p[number - 1] + " " + amount);
break;
case 9:
System.out.print("您选择的商品是:" + l1.get(number - 1) + "单价为:"
+ l2.get(number - 1) + '\t' + "总额为:" + amount
* p[number - 1].getPrice());
sum += amount * p[number - 1].getPrice();
m1.put(g[number - 1], p[number - 1] + " " + amount);
break;
case 10:
System.out.print("您选择的商品是:" + l1.get(number - 1) + "单价为:"
+ l2.get(number - 1) + '\t' + "总额为:" + amount
* p[number - 1].getPrice());
sum += amount * p[number - 1].getPrice();
m1.put(g[number - 1], p[number - 1] + " " + amount);
break;
case 11:
System.out.print("您选择的商品是:" + l1.get(number - 1) + "单价为:"
+ l2.get(number - 1) + '\t' + "总额为:" + amount
* p[number - 1].getPrice());
sum += amount * p[number - 1].getPrice();
m1.put(g[number - 1], p[number - 1] + " " + amount);
break;
default:
System.out.println("输入有误,请您重新输入");// 异常不在选择范围内输入的处理
break;
}
System.out.println('\n' + "您还要进行的操作是:");// 提示顾客可以继续进行多种选择
} else if (i == 2) {// 查看购物车内先前挑选好的商品种类、对应单价以及所选择好的数量
System.out.println("您的购物车中放置的商品情况如下:");
System.out.println("#################################");
System.out.println("商品" + " " + "单价" + " "
+ "数量(/KG/瓶/包)");
Iterator it = m1.entrySet().iterator();// 使用Iterator和entrySet()对先前顾客选择好的存入购物车(m1)中的key(商品种类)、value(商品单价和顾客选择的需要的数量)进行遍历
while (it.hasNext()) {//此处为遍历具体实行语句
Entry e = (Entry) it.next();
System.out.println(e.getKey() + "————" + e.getValue());
}//e.getKey()即为商品的种类,e.getValue()却不仅仅是商品对应的单价,还加上了顾客选择的商品的数量
System.out.println("金额为:" + sum);//再次输出购物车内商品的总金额
System.out.println("#################################");
System.out.println('\n' + "您还要进行的操作是:");
} else if (i == 3) {//此处为清空购物车操作
m1.clear();//m1即为购物车,清空购物车即为清空m1.内的所有,移除所有的key-value
sum=0;//同时对购物车内的总金额进行归零操作;
} else {//此处即为顾客输入i==4 ,结算付款
if (sum != 0) {
System.out.println("你应付的金额是:" + sum);
System.out.println("请您选择支付方式:" + '\n' + "1-支付宝支付" + '\n'
+ "2-微信支付" + '\n' + "3-现金支付");
int pay = in.nextInt();
System.out.println("支付完成,期待您的再次光临!再见~~~");
break;
} else {//如果顾客购物车为空,提醒顾客不需要付款
System.out.println("您尚未购物,不需要结算付款,请您在购物后再进行结算付款操作");
}
}
}
}
}
测试效果图如下:
完整购物流程:
清空购物车操作以及异常输入规避:
两个文件页封装版(学生感觉没有处理好,其实就是把主函数实现部分换到父类,但最终还是实现效果和上面一个文件页没有封装的实现效果一样)
源代码图:
Goods类和Price类不变
子类页:
父类页: