案例:模拟购物车模块
模拟购物车模块功能,需要实现添加商品到购物车中去,同时需要提供修改商品的购买数量,结算商品价格功能(请使用面向对象编程来解决)。
1.定义商品类,用于后期创建商品对象
public class Goods {
int id;//编号
String name;//名称
double price;//价格
int buyNumber;//购买数量
}
2.定义购物车对象,这里使用一个数组对象表示。(因为购物车里存在很多商品对象,这里设置购物车上限是100个商品)
Goods[] shopCar = new Goods[100];
3.搭建操作价格:
添加商品:add | 查看商品:query |
修改数量:update | 结算价格:pay |
while (true) {//使用死循环是为了实现多次选择功能操作
System.out.println("请您选择如下命令进行操作:");
System.out.println("添加商品到购物车:add");
System.out.println("查询购物车商品:query");
System.out.println("修改商品购买数量:update");
System.out.println("结算购买商品的金额:pay");
Scanner sc = new Scanner(System.in);
System.out.print("请输入您要实现的功能命令:");
String command = sc.next();
switch (command){
case "add":
addGoods(shopCar,sc);
break;
case "query":
queryGoods(shopCar);
break;
case "update":
updateGoods(shopCar,sc);
break;
case "pay":
pay(shopCar);
break;
default:
System.out.println("没有该功能。");
}
}
- add命令:使用新方法addGoods()实现添加商品信息到购物车数组。
public static void addGoods(Goods[] shopCar,Scanner sc) {
//1.录入用户输入的购买商品信息
System.out.print("请您输入购买的商品的编号(不重复):");
int id = sc.nextInt();
System.out.print("请您输入购买商品的名称:");
String name = sc.next();
System.out.print("请您输入购买商品的数量:");
int buyNumber = sc.nextInt();
System.out.print("请您输入购买商品的价格:");
int price = sc.nextInt();
//2.把这个购买的商品信息封装成一个商品对象
Goods g = new Goods();
g.id = id;
g.name = name;
g.buyNumber = buyNumber;
g.price = price;
//3.把商品对象添加到购物车数组中去
//通过遍历购物车数组,把商品对象信息存到购物车数组空的位置上
for (int i = 0; i < shopCar.length; i++) {
if (shopCar[i] == null){
shopCar[i] = g;//存到购物车数组的是商品对应的地址,而不是商品本身
break;
}
}
System.out.println("您的商品:" + g.name + "添加到购物车完成。");
}
- query命令:使用新方法queryGoods()查询商品信息并展示出来。
public static void queryGoods(Goods[] shopCar) {
System.out.println("===============查询购物车商品信息如下===============");
System.out.println("编号\t\t名称\t\t\t价格\t\t\t购买数量");
//通过遍历购物车数组,找到不是空信息的商品信息
for (int i = 0; i < shopCar.length; i++) {
Goods g = shopCar[i];
if (g != null){
System.out.println(g.id + "\t\t" + g.name + "\t\t\t" + g.price + "\t\t\t" + g.buyNumber);
}else {
break;
}
}
}
- update命令:使用新方法updateGoods()用户通过输入商品的id对购物车商品信息进行更新(这里实质上是对商品购买数量的修改)。
public static void updateGoods(Goods[] shopCar,Scanner sc) {
//1.让用户输入要修改的购物车商品id,根据id查询出要修改的商品对象
//这里使用一个新方法用于在购物车数组中查找用户想要修改的购物车信息的id
while (true) {//死循环用于当购物车数组中不存在要找的商品id时,让用户重新输入id进行对商品信息的修改
System.out.print("请输入您要修改的商品id:");
int id = sc.nextInt();
Goods g = getGoodsById(shopCar,id);
if (g == null){
System.out.println("sorry,没有购买该商品。");
}else {
System.out.print("请您输入:" + g.name + "商品最新购买数量:");
int buyNumber = sc.nextInt();
g.buyNumber = buyNumber;
System.out.println("修改完成!!!");
queryGoods(shopCar);
break;//结束循环
}
}
}
在实现update命令功能时,要对用户查找的id进行检索,这里使用getGoodsById()新方法对id进行查找。
public static Goods getGoodsById(Goods[] shopCar,int id){
for (int i = 0; i < shopCar.length; i++) {
Goods g = shopCar[i];
//从存在商品的购物车数组中找到要找的商品id
if (g != null){
if (g.id == id){
return g;
}
}else {
return null;//找完购物车存在的商品信息都没有找到想要的id(购物车数组有存在商品信息的和不存在商品信息的)
}
}
return null;//遍历完购物车数组中所有商品信息也找不到想要的id的情况(购物车数组全部存在商品信息)
}
- pay命令:使用新方法pay()对订单总金额进行计算。
public static void pay(Goods[] shopCar) {
//1.为了方便看到商品的信息,先查一下商品信息
queryGoods(shopCar);
//2.计算订单总金额
double money = 0;
for (int i = 0; i < shopCar.length; i++) {
Goods g = shopCar[i];
if (g != null){
money += (g.price * g.buyNumber);
}else {
break;
}
}
System.out.println("订单总金额是:" + money);
}