java实战训练
案例 模拟购物车模块
需求
需要实现添加商品到购物车里去,查询购物车内容,同时需要提供修改商品的购买数量,结算商品的价格功能(使用面向对象编程来解决)。
public class ShopCarTest {
public static void main(String[] args) {
//1.定义商品类,用于后期创建商品对象
//2.定义购物车数量:使用一个数组表示。
Goods[] shopCar = new Goods[100];
//3.搭建操作架构
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.println("请您输入命令:");
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":
//结算金额
payGoods(shopCar);
break;
default:
System.out.println("没有该功能!");
}
}
}
public static void addGoods(Goods[] shopCar, Scanner sc) {
//商品添加到购物车
//1.录入用户输入的购买商品的信息
System.out.println("请您输入商品的编号(不重复):");
int id = sc.nextInt();
System.out.println("请您输入购买商品的名称:");
String name = sc.next();
System.out.println("请您输入购买商品的数量:");
int buyNumber = sc.nextInt();
System.out.println("请您输入购买商品的价格:");
double price = sc.nextDouble();
//2.把这些购买商品信息封装成商品对象
Goods g = new Goods();
g.setId(id);
g.setName(name);
g.setBuyNumber(buyNumber);
g.setPrice(price);
//3.把这个商品对象放到购物车里去
for (int i = 0; i < shopCar.length; i++) {
if (shopCar[i] == null) {
//说明此位置没有元素输入,把我们的商品放入此处即可,这是放入的是g的地址;
shopCar[i] = g;
break;//结束,成功存入
}
}
System.out.println("您的商品:" + g.getName() + "添加到购物车完成!");
System.out.println();
}
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.getId() + "\t\t" + g.getName() + "\t\t\t" + g.getPrice() + "\t\t\t" + g.getBuyNumber());
} else {
//遍历结束
System.out.println();
break;
}
}
}
public static void updateGoods(Goods[] shopCar, Scanner sc) {
//让用户输入要修改商品的id,根据id查询出要修改商品的对象。
while (true) {
System.out.println("请您输入要修改商品的id:");
int id = sc.nextInt();
Goods g = getGoodsById(shopCar, id);
if (g == null) {
//没有该商品信息
System.out.println("对不起,没有购买商品");
} else {
//说明存在该商品,可以修改它
System.out.println("请您输入:" + g.getName() + "商品最新购买数量。");
int buyNumber = sc.nextInt();
g.setBuyNumber(buyNumber);
System.out.println("修改完成!");
queryGoods(shopCar);
break;
}
}
}
public static Goods getGoodsById(Goods[] shopCar, int id) {
for (int i = 0; i < shopCar.length; i++) {
Goods g = shopCar[i];
if (g != null) {
//商品对象id是否我们要找的
if (g.getId() == id) {
return g;
}
} else {
return null;//找完了前面存在的商品都没有找到!
}
}
return null;//代表找完了100个商品都没有找到id一样的商品
}
public static void payGoods(Goods[] shopCar) {
queryGoods(shopCar);
//1.定义一个求和变量累加金额
double money = 0;
//2.遍历购物车数组全部商品对象累加单价*数量
for (int i = 0; i < shopCar.length; i++) {
Goods g = shopCar[i];
if (g != null) {
money += (g.getBuyNumber() * g.getPrice());
} else {
break;
}
}
System.out.println("订单总金额:" + money);
System.out.println();
}
}
public class Goods {
private int id;//编号
private String name;//名称
private double price;//价格
private int buyNumber;//购买数量
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getBuyNumber() {
return buyNumber;
}
public void setBuyNumber(int buyNumber) {
this.buyNumber = buyNumber;
}
}
总结
- 学会使用对象(面向对象--拿\使用东西)来编写程序,能封装的就封装起来,把代码逻辑性变得更强!
- 在修改金额类里面使用方法来判断用户想改的商品并返回该商品,这样做使代码可读性大大增强。
- 使用标准javabean来封装数据:javabean可以理解为一个实体类,比如车、学生这种,其对象即具体的类可以用于在程序中封装数据。
- 标准Javabean必需是如下格式:
成员变量使用private修饰;
提供每一个成员变量对应的setXxx()/getXxx();
必须提供一个无参数构造器。