工欲善其事必先利其器,我们对购物车模块进行模拟其最初就需要构造其商品的类。
商品的类分为以下:
商品的编号id商品的名称商品的价格商品的购买数量
package createprojection;
public class Goods {
int id; // 编号
String name;//商品名称
double price; //商品价格
int buyNumber; //购买数量
}
定义购物车对象
购物车对象用一个数组表示,这里数组的类型就是刚才定义的商品的类的类型,待会可以通过代码去理解。搭建购物车操作结构,购物车的功能初步定为:添加到购物车,查询商品,修改购买数量,结账我们需要根据初步拟定的功能,去定义相关的方法,但是如何调用方法,这时候我们需要考虑到用户是通过输入不同的指令去选择不同的功能,且有可能用户输入的是字符串类型,所以我个人觉得用switch语句是最好的,switch选择语句,然后每个选择语句后面加上一个定义的功能。
package createprojection;
import java.util.Scanner;
public class ShopCarTest {
public static void main(String[] args) {
// 定义商品类,用于后期创建对象;
// 定义购物车对象用一个数组表示;
Goods[] shopcar = new Goods[100]; //[null,null,null.....]
while (true) {
// 3.搭建操作架构
System.out.println("请输入如下命令进行操作:");
System.out.println("添加商品到购物车:add");
System.out.println("查询商品到购物车:query");
System.out.println("修改购买商品数量:updata");
System.out.println("结算购买商品的金额:pay");
Scanner sc = new Scanner(System.in);
System.out.print("请输入您的命令:");
String command = sc.next();
switch (command) {
case "add":
addGoods(shopcar);
break;
case "query":
queryGoods(shopcar);
break;
case "updata":
updateGoods(shopcar);
break;
case "pay":
pay(shopcar);
break;
default:
System.out.println("您输入的选项有错误。");
}
}
}
功能设计–添加到购物车功能
编程逻辑:
- 定义一个扫描器以方便输入输入商品的编号id输入商品的名称输入商品的价格输入商品的购买数量将输入的变量信息封装成为一个商品对象通过循环语句将这个商品对象遍历到购物车数组中
代码演示
public static void addGoods(Goods[] shopcar){
// 录入用户购买的商品的信息
Scanner sc = new Scanner(System.in);
System.out.println("请输入您购买的商品的信息(不重复):");
System.out.print("请输入商品编号:");
int id = sc.nextInt();
// System.out.println();
System.out.print("请输入商品名称:");
String name = sc.next();
// System.out.println();
System.out.print("请输入您购买的商品的数量:");
int buynum = sc.nextInt();
// System.out.println();
System.out.print("请输入您购买商品的价格:");
double price = sc.nextDouble();
// 把商品的信息封装成一个商品的对象
Goods g = new Goods();
g.id = id;
g.name = name;
g.price = price;
g.buyNumber = buynum;
// 把这个商品对象添加到购物车数组中
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("编号ttt名称ttt价格ttt数量ttt");
// shopcar = [g1,g2,g3,null,null.......]
for (int i = 0;i
代码演示
在之前我们分别调用add功能对购物车系统进行输入了手表,手机,电脑三个物品的信息,现在我们调用代码的第二个功能对其进行查询。
功能设计–修改购物车商品数量
功能逻辑:
我们对于需要修改的商品是通过商品的id去查询,为了方便我们需要先查询用户输入的商品id是否存在,如果存在那么继续执行,如果不存在则提醒用户重新输入。判断商品的id是否存在,我们需要遍历数组,并对数组中非空的元素进行比对,如果有则输入商品的id,如果无,则输出null,基于此我们定义一个方法。
方法代码:这里我们需要注意,我们方法不是void类型,是商品的类Goods类型。
// 判断这个商品是否存在
public static Goods getgoods(Goods[] shopcar, int id) {
for (int i = 0; i < shopcar.length; i++) {
Goods g = shopcar[i];
if (g != null) {
if (g.id == id) {
return g;
}
} else {
return null;
}
}
return null; // 表明找了所有也没有找到
}
}
接下来我们紧跟上面的逻辑,如果商品的id存在,那么我们调用输入器,重新输入需要修改的数量,并通过对象的类找到对象的地址,通过地址,赋值给需要改的对象并对其进行修改
代码如下:
public static void updateGoods(Goods[] shopcar){
while (true){
Scanner sc = new Scanner(System.in);
System.out.println("请输入需要修改的商品id:");
int id = sc.nextInt();
Goods g = getgoods(shopcar,id);
if(g == null){
System.out.println("您没有选择该商品,请重新输入");
}else {
// 存在该商品
System.out.println("该商品:"+g.name +"价格是:"+g.price+"数量为:"+g.buyNumber);
System.out.print("请您输入该商品的最新购买数量:");
int buyNumber = sc.nextInt();
g.buyNumber = buyNumber;
queryGoods(shopcar);
break;
}
}
}
代码演示
演示前我们还是提取输入手表,手机,电脑三个物品极其相关信息。
功能设计之付款
代码逻辑:
预先定义double类型的总价初始值设置为0,然后我们对于数组元素进行遍历,对于不为null的数组元素我们对其单价进行求和
代码如下:
public static void pay(Goods[] shopcar){
queryGoods(shopcar);
double money = 0;
// 遍历数组中全部的商品数量并对其价格进行累加
for (int i = 0; i < shopcar.length; i++) {
Goods g = shopcar[i];
if(g != null){
money = money + g.price;
}else {
break;
}
}
System.out.println("需要支付的总价格为:"+money);
}
代码演示
完整代码
类代码
package createprojection;
public class Goods {
int id; // 编号
String name;//商品名称
double price; //商品价格
int buyNumber; //购买数量
}
对象代码
package createprojection;
import java.util.Scanner;
public class ShopCarTest {
public static void main(String[] args) {
// 定义商品类,用于后期创建对象;
// 定义购物车对象用一个数组表示;
Goods[] shopcar = new Goods[100]; //[null,null,null.....]
while (true) {
// 3.搭建操作架构
System.out.println("请输入如下命令进行操作:");
System.out.println("添加商品到购物车:add");
System.out.println("查询商品到购物车:query");
System.out.println("修改购买商品数量:updata");
System.out.println("结算购买商品的金额:pay");
Scanner sc = new Scanner(System.in);
System.out.print("请输入您的命令:");
String command = sc.next();
switch (command) {
case "add":
addGoods(shopcar);
break;
case "query":
queryGoods(shopcar);
break;
case "updata":
updateGoods(shopcar);
break;
case "pay":
pay(shopcar);
break;
default:
System.out.println("您输入的选项有错误。");
}
}
}
public static void addGoods(Goods[] shopcar){
// 录入用户购买的商品的信息
Scanner sc = new Scanner(System.in);
System.out.println("请输入您购买的商品的信息(不重复):");
System.out.print("请输入商品编号:");
int id = sc.nextInt();
// System.out.println();
System.out.print("请输入商品名称:");
String name = sc.next();
// System.out.println();
System.out.print("请输入您购买的商品的数量:");
int buynum = sc.nextInt();
// System.out.println();
System.out.print("请输入您购买商品的价格:");
double price = sc.nextDouble();
// 把商品的信息封装成一个商品的对象
Goods g = new Goods();
g.id = id;
g.name = name;
g.price = price;
g.buyNumber = buynum;
// 把这个商品对象添加到购物车数组中
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("编号ttt名称ttt价格ttt数量ttt");
// shopcar = [g1,g2,g3,null,null.......]
for (int i = 0;i
参考
黑马程序员



