2020Java-第1次任务-面向对象设计(购物车)
第1次任务-面向对象设计(购物车)
本次的作业内容:
要求体验商城的商品搜索、购物车中商品的加入和删除操作以及下单等功能。在观察各大网络商城的购物车之后,根据其特点自制一个购物车小程序。
作业来源:https://www.cnblogs.com/zhrb/p/9678707.html
目标:
- 学会使用讲故事的方式找到系统中可能包含的类与属性
- 理解封装
1.编码规范:
在编写该程序的代码时,我始终使用驼峰命名法,没有拼音,全部都是在英文字典或360翻译寻找到的名称并且类和他们的属性、方法的名称都是根据它们自身的作用或意义来进行命名。变量名也以靠近自身作用的方向进行命名。而类的命名都是根据讲故事的方法分离出来的“名词”,我们在这篇博客的下文就会讲到“讲故事来解决问题”的方法。
2.前期调查与功能设计:
特:关联关系与依赖关系:https://blog.csdn.net/zhuyu714997369/article/details/51983871
我们以淘宝商城为例来进行探讨,首先,进入商城主界面时,我们可以看到许多商城中的物品,而上方的搜索栏可以帮助我们搜索想要的物品。


点击物品图标,我们可以看到物品的详细信息,还可以执行“加入购物车“这一操作。

用户进入购物车时,我们能够看到自己购买了什么东西、购买多少个,以及预估的结算价格,而且我们可以在购物车中执行删除操作,能够删除任意商品、任意数量。

最后,当我们结算时,系统会发送电子账单,显示购买的物品以及他们的数量、总价格。

从以上观察的情况来看,购物车程序所需要实现的功能大致有:
1.需要有商品的搜索功能(可能需要一个用户类来识别并执行用户操作)
2.需要有购物车中物品的添加功能和删除功能(需要一个购物车类来存放购买物品的数量和总价)
3.在购物车中需要有显示结算总价的程序(需要一个账单类来打印支付凭条)
4.由于个人设计的程序中的商品不会像网络商场一样多的数不过来,所以可以考虑做出一个可以显示商城中所有商品的商品清单功能。(需要一个商品类来存储商品的基本信息,还可能有全部商品信息输出的功能)
3.面向对象设计:
运用讲故事的方法来解决问题:
购物的故事:(用户)在商城中可以[搜索]、[浏览](商品),看到想买的商品可以将商品[放入](购物车),可以放进多个,并且可以对购物车中的物品进行[添加]和[删减]。可以在购物车中获得所有商品价格,最后选择[结算]可以生成并打印(账单)。
在上面的故事中,我们用圆括号圈住了一些重点名词,这些名词可以作为类,用户类、商品类、购物车类等,用方括号圈住的动词就是各个类里面的方法,比如搜索,我们可以把它当作(用户类)中的[搜索方法],再比如[添加]可以当作(购物车)类的[添加方法],这样,通过讲故事的方法,我们就可以思路清晰的找出一个程序所需要的类和其中的方法。
4.程序功能介绍:
主界面:可以输入数字选项进行功能的实现

1)商品清单(打印商城中所有的物品的相关信息)

2)商品查询(ID)(通过输入商品ID来查询物品)

3)商品查询(Name)(通过输入商品名称来查询物品)

4)商品购买(通过输入购买商品的ID和购买数量将对应数量的该商品放入购物车;ID不存在则显示添加失败)

5)商品删除(输入删除商品的ID和数量来将对应数量的该商品拿出购物车;ID不存在则显示删除失败;当所删除的数量大于了该商品在购物车中的已有数量时,系统默认为该商品在购物车中有0个)

6)查看购物车(可以看到购物车中已有的物品、数量、应付款额)(这里我之前添加了3个牙刷,又拿出了1个牙刷,所以购物车中只有两个牙刷)

7)购物车预结算(根据购物车中的信息生成电子账单)

5.源代码
码云入口:https://gitee.com/dong-juzheng/java-code2020/tree/master/chpt02
1.用户类
package Shopping;
import java.util.*;
public class user {
public static void main(String[] args) {
goods.list();//加载商品
@SuppressWarnings("resource")
Scanner choose = new Scanner(System.in);//引入参数
@SuppressWarnings("resource")
Scanner goodsId = new Scanner(System.in);//引入参数
@SuppressWarnings("resource")
Scanner pause = new Scanner(System.in);//暂停参数
while(true) {
UI.main();
System.out.print("请输入选项:");
int Choose = choose.nextInt();
switch (Choose) {
case 1:
goods.showGoods();//显示商品
@SuppressWarnings("unused")
String Pause = pause.next();
break;
case 2:
if(goods.searchGoodsFromId()==0)System.out.println("没有找到该商品!");
Pause = pause.next();
break;
case 3:
if(goods.searchGoodsFromName()==0)System.out.println("没有找到该商品!");
Pause = pause.next();
break;
case 4:
System.out.println();
System.out.println("请输入您需要的商品的对应ID:");
int choiceGoods = goodsId.nextInt();
System.out.println("请输入您需要的商品的数量:");
int choiceAddNumber = goodsId.nextInt();
if(ShoppingCart.addGoods(choiceGoods, choiceAddNumber)==1)System.out.println("添加成功!");//在购物车单中添加商品
else System.out.println("添加失败!");//判断输入参数是否有效
Pause = pause.next();
break;
case 5:
System.out.println("请输入您需要删除的商品的对应ID:");
int choiceGoods11 = goodsId.nextInt();
System.out.println("请输入您需要减少的商品的数量:");
int choiceSubNumber = goodsId.nextInt();
if(ShoppingCart.subGoods(choiceGoods11, choiceSubNumber)==1)System.out.println("删除商品成功!");//在购物车单中添加商品
else System.out.println("删除商品失败!");//判断输入参数是否有效
Pause = pause.next();
break;
case 6:
ShoppingCart.showCart();
Pause = pause.next();
break;
case 7:
Order.showPay();
Pause = pause.next();
break;
case 0:
break;
}
for(int i=0;i<25;i++)
System.out.println();
if(Choose == 0)break;
}
UI.end();
}
}
2.商品类
package Shopping;
import java.util.*;
public class user {
public static void main(String[] args) {
goods.list();//加载商品
@SuppressWarnings("resource")
Scanner choose = new Scanner(System.in);//引入参数
@SuppressWarnings("resource")
Scanner goodsId = new Scanner(System.in);//引入参数
@SuppressWarnings("resource")
Scanner pause = new Scanner(System.in);//暂停参数
while(true) {
UI.main();
System.out.print("请输入选项:");
int Choose = choose.nextInt();
switch (Choose) {
case 1:
goods.showGoods();//显示商品
@SuppressWarnings("unused")
String Pause = pause.next();
break;
case 2:
if(goods.searchGoodsFromId()==0)System.out.println("没有找到该商品!");
Pause = pause.next();
break;
case 3:
if(goods.searchGoodsFromName()==0)System.out.println("没有找到该商品!");
Pause = pause.next();
break;
case 4:
System.out.println();
System.out.println("请输入您需要的商品的对应ID:");
int choiceGoods = goodsId.nextInt();
System.out.println("请输入您需要的商品的数量:");
int choiceAddNumber = goodsId.nextInt();
if(ShoppingCart.addGoods(choiceGoods, choiceAddNumber)==1)System.out.println("添加成功!");//在购物车单中添加商品
else System.out.println("添加失败!");//判断输入参数是否有效
Pause = pause.next();
break;
case 5:
System.out.println("请输入您需要删除的商品的对应ID:");
int choiceGoods11 = goodsId.nextInt();
System.out.println("请输入您需要减少的商品的数量:");
int choiceSubNumber = goodsId.nextInt();
if(ShoppingCart.subGoods(choiceGoods11, choiceSubNumber)==1)System.out.println("删除商品成功!");//在购物车单中添加商品
else System.out.println("删除商品失败!");//判断输入参数是否有效
Pause = pause.next();
break;
case 6:
ShoppingCart.showCart();
Pause = pause.next();
break;
case 7:
Order.showPay();
Pause = pause.next();
break;
case 0:
break;
}
for(int i=0;i<25;i++)
System.out.println();
if(Choose == 0)break;
}
UI.end();
}
}
3.购物车类
package Shopping;
public class ShoppingCart {
public static int[] payNumber = new int[100];
public static int addGoods(int goodsId,int goodsAddNumber) {//增加商品
for(int i = 0;i < goods.goodsNumber;i++) {
if(i == goodsId) {
payNumber[i] = goodsAddNumber;
return 1;
}
}
return 0;
}
public static int subGoods(int goodsId,int goodsSubNumber) {//减少商品
for(int i = 0;i < goods.goodsNumber;i++) {
if(i == goodsId) {
payNumber[i] = payNumber[i] - goodsSubNumber;
if(payNumber[i] < 0)payNumber[i] = 0;//保证数字不小于0
return 1;
}
}
return 0;
}
public static void showCart() {//显示购物车中的商品
double cartPay = 0;
System.out.println("———————————— 您的购物车 ————————————");
System.out.println("商品ID"+" "+"商品名"+" "+"商品单价"+" "+"购买数量");
System.out.println();
for(int i = 0;i < goods.goodsNumber;i++) {
if( ShoppingCart.payNumber[i] != 0) {
System.out.println(goods.goodsId[i]+" "+goods.goodsName[i]+" "+goods.goodsPrice[i]+" * "+ShoppingCart.payNumber[i]);
}
cartPay = cartPay + (ShoppingCart.payNumber[i] * goods.goodsPrice[i]);
}
System.out.println();
System.out.println(" 您的账单估算 : "+String.format("%.2f", cartPay));
}
}
订单类
package Shopping;
public class Order {
public static void showPay() {//显示购物车中的商品
double willPay = 0;
System.out.println("");
System.out.println("——————————————————————————————————");
System.out.println("商品ID"+" "+"商品名"+" "+"商品单价"+" * "+"购买数量");
System.out.println("==================================");
for(int i = 0;i < goods.goodsNumber;i++) {
if( ShoppingCart.payNumber[i] != 0) {
System.out.println(goods.goodsId[i]+" "+goods.goodsName[i]+" "+goods.goodsPrice[i]+" * "+ShoppingCart.payNumber[i]);
}
willPay = willPay + (ShoppingCart.payNumber[i] * goods.goodsPrice[i]);
}
System.out.println("==================================");
System.out.println(" 实 际 应 付 : "+String.format("%.2f", willPay));
System.out.println("——————————————————————————————————");
}
}
UI类
package Shopping;
public class UI {
public static void main() {
System.out.println("选项表");
System.out.println("1)商品清单");
System.out.println("2)商品查询(ID)");
System.out.println("3)商品查询(Name)");
System.out.println("4)商品购买");
System.out.println("5)商品删除");
System.out.println("6)查看购物车");
System.out.println("7)购物车预结算");
System.out.println("0)退出");
}
public static void end() {
System.out.println(" ==================================");
System.out.println("(( 感谢您的使用,谢谢惠顾! ))");
System.out.println(" ==================================");
}
}

浙公网安备 33010602011771号