这里使用面向对象方法构建出一个比较简易的购物车系统,系统功能拥有简单的添加商品,查看购物车,修改商品数量,和结算金额。
总体需求
模拟购物车模块的功能,需要实现添加商品到购物车中去,同时需要提供修改商品的购买数量,结算商品价格功能(请使用面向对象编程来解决)。
首先这里先声明一个商品类,构造出成员属性
package shopDemo;
public class Goods {
String name;//名称·
double price;//价格
int buynumber;//购买数量
int id;//编号
}
然后定义购物车对象,购物车使用一个数组表示
Goods[] shopCar = new Goods[100];
搭建首页框架,如需要进行那些操作使用输出语句实现,其中使用while大循环来保证可以循环操作,用户可以根据提示输入指令操作
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("没有该功能!");
}
}
构造添加购物车方法
创建Goods类的对象代表商品对象,封装用户输入的商品信息。把商品对象存入到表示购物车的数组中去
public static void addgoods(Goods[] shopCar, Scanner sc) {
//录入用户购买信息
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();
//第一 si对象里面的成员变量(属性)第二个是用户输入的信息
g.id = id;
g.name = name;
g.price = price;
g.buynumber = buynumber;
//3. 把这个商品对象添加到购物车中去
for (int i = 0; i < shopCar.length; i++) {
if (shopCar[i] == null) {
//说明此位置没有元素存入,把我们的商品添加到此处
shopCar[i] = g;
break;//商品已存入
}
}
System.out.println("您的商品:" + g.name + "添加到购物车成功!");
}
}
构造方法查询购物车方法
遍历表示购物车的数组,每遍历到一个商品对象输出其信息展示。
public static void querygoods(Goods[] shopCar) {
System.out.println("----------------------------查询购物车信息如下--------------------------------------");
System.out.println("编号\t\t名称\t\t\t价格\t\t\t购买数量");
//shopCar=[g1.g2.g3.null,null,null,...]
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;
}
}
}
构造修改数量方法
- 定义方法能够根据用户输入的id去购物车数组中查看是否存在该商品对象。存在返回该商品对象的地址,不存在返回null。
- 判断返回的对象地址是否存在,存在修改其购买数量,不存在就继续。
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.name + "新的购买数量");
int buynumber = sc.nextInt();
//将新的buynumber赋给buynumber
g.buynumber = buynumber;
System.out.println("恭喜您,修改完成");
querygoods(shopCar);
break;
}
}
}
其中判断商品id是否存在于购物车中需要另一个判断方法
该方法通过遍历购物车数组,当遍历到非空的商品信息时,判断该商品id是否等于用户输入的id
是返回该商品 g,否返回null
//判断输入商品id是否存在于购物车的 方法
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.id == id) {
return g;
} else {
return null;
}
}
}
return null;//代表遍历完数组没有找到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.price * g.buynumber;
} else {
break;
}
}
System.out.println("订单总金额是" + money);
}
测试
添加商品
修该商品购买数量
查询购物车并结算金额