Java大作业:购物车
1、小组成员以及任务分配
班级 | 姓名 | 任务 |
---|---|---|
网络2014 | 兰苏瑀 | 负责编写代码相关的工作:编码规范,面向对象设计,功能设计 |
网络2014 | 刘宇恒 | 负责编写博客相关的工作:前期调查,博客制作 |
2、前期调查(以京东商城界面为例)
2.1 主界面
2.2 商品界面
2.3购物车界面
由观察京东商城可知:主界面要有分类,使购买者更有目的性。商品展示时主要信息含商品的名称描述和单价。购物车显示的信息有:商品名称和单价,每种商品的预购数量和金额小计,所有商品的总金额。购物车的功能操作按键有:增加或者减少某种商品的预购数量,删除某种商品,清空购物车。
3、系统描述
用户进入到商城的主界面,可以看到搜索商品功能的框,以及商品的分类选项。然后点击商品,可以看到商品的名称、单价,可以选择将商品加入购物车。进入购物车,能看到商品的名称介绍、数量、某种商品的小计金额,可以进行增加或减少某种商品的数量、删除某种商品的操作,还可以直接清空购物车。
4、系统功能结构图和主要功能流程图
4.1、功能结构图
4.2、结构逻辑图
5、类的设计和UML类图
5.1类的设计
5.1.1Commodity(商品类)
5.1.2Menu(菜单交互类)
5.1.3ShopingMall(商城类)
5.1.4Cart(购物车类)
5.2UML类图
6、关键代码
6.1商城
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ShoppingMall {
// 定义List集合,用于存放所有的商品信息
public static List<Commodity> goods = new ArrayList<>();
static{//商品 id;//商品名 name;//单价price;//类别 category;//描述 description;
//Food,Electronic,Book,Clothe
goods.add(new Commodity(1,"苹果",3.50,"Food","脆甜"));
goods.add(new Commodity(2,"香蕉",2.50,"Food","香甜软糯"));
goods.add(new Commodity(3,"网红蛋糕",3.00,"Food","无糖"));
goods.add(new Commodity(4,"华为手机",3999.00,"Electronic","人气爆款"));
goods.add(new Commodity(5,"小米手表",788.0,"Electronic","开学降价"));
goods.add(new Commodity(6,"《计算机组成原理》",46.0,"Book","科学出版社 2013年第五版 2018年1月第87词印刷"));
goods.add(new Commodity(7,"《算法导论》",89.0,"Book","正品"));
goods.add(new Commodity(8,"ins风短上衣",3.0,"Clothe","换季清仓"));
goods.add(new Commodity(9,"韩版BFT恤",3.0,"Clothe","换季清仓"));
}
public static void displayAll() {
if(goods.size() == 0) {
System.out.println("抱歉亲,商品还在上架中");
}else {
for (Commodity goods : goods) {
System.out.println(goods);
}
}
}
public static Commodity searchBy(int id) {
if (id <= 0) {
System.out.println("输入错误,查无该商品,返回商城");
} else {
for (int i = 0; i < goods.size(); i++) {
if (goods.get(i).getId().equals(id)) {
System.out.println(goods.get(i));
return goods.get(i);
}
}
}
return null;
}
// public static int searchBy(String str) {
// if (str =="Food") {
// System.out.println("输入错误,返回商城");
// return 0;
// } else {
// for (int i = 0; i < goods.size(); i++) {
// if (goods.get(i).getId().equals(str))
// System.out.println(goods.get(i));
// return i;
//
// }
//
// }
// }
public static void placeOrder() {
System.out.println("请输入要购买的商品编号:");
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
ShoppingMall.searchBy(i);
System.out.println("输入商品数量");
double qty = scan.nextInt();
double money = goods.get(i-1).price * qty;
ShoppingMall.searchBy(i);
System.out.println("小计:"+money+"¥");
System.out.println("确认下单,输入1;返回商城输入0");
int choice = scan.nextInt();
switch (choice) {
case 0: {
Menu.shoppingMallMenu();
Menu.shoppingMallKeyDown(scan);
}
break;
case 1: {
System.out.println("下单成功!");
}
break;
default: {
System.out.println("输入错误!异常退出");
Menu.shoppingMallMenu();
Menu.shoppingMallKeyDown(scan);
}
break;
}
}
public static void addToCart() {
ShoppingMall.displayAll();
System.out.println("请输入要加入购物车的商品编号:");
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
System.out.println("设置要加入购物车的商品数量");
Integer qty = scan.nextInt();
System.out.println("加入购物车,输入1;返回商城输入0");
int choice = scan.nextInt();
switch (choice) {
case 0: {
Menu.shoppingMallMenu();
Menu.shoppingMallKeyDown(scan);
}
break;
case 1: {
Cart.cart.add( ShoppingMall.searchBy(i),qty);
System.out.println("成功加入购物车!");
}
break;
default: {
System.out.println("输入错误!异常退出");
Menu.shoppingMallMenu();
Menu.shoppingMallKeyDown(scan);
}
break;
}
//scan.close();
}
}
6.2购物车类
class Cart {
private static List<ItemEntry> itemList;
public static Cart cart = new Cart();
public Cart() {
itemList = new ArrayList<>();
}
// static 这些方法都是Cart类的属性 ,不属于某个cart对象。
public static boolean remove(Integer id) {
if (id == null)
return false;
int index = findById(id);
if (index == -1) {
return false;
} else {
ItemEntry entry = itemList.get(index);
if (entry.getQty() <= 1) {
itemList.remove(index);// list.remove
} else {
entry.decrease();
}
}
return true;
}
public static void add(Commodity e) {
if (e == null)
return;
int index = findById(e.getId());
if (index == -1) {
itemList.add(new ItemEntry(e));
} else {
System.out.println("购物车中存在该商品,现增加数量");
itemList.get(index).increase();
}
}
public static void add(Commodity e, Integer qty) {
if (e == null)
return;
int index = findById(e.getId());
if (index == -1) {
itemList.add(new ItemEntry(e, qty));
} else {
System.out.println("购物车中存在该商品,现增加数量");
itemList.get(index).increase();
}
}
public static void displayAll() {
if (itemList.size() == 0) {
System.out.println("您的购物车里空空如也,去逛逛商城吧");
} else {
for (ItemEntry itemEntry : itemList) {// for each
System.out.println(itemEntry);
}
}
}
public static void modifyQuantityInCart(Scanner scan) {
Cart.displayAll();
if (itemList.size() == 0)
return;
System.out.println("请输入要修改的商品编号:");
Integer i = scan.nextInt();
int index = Cart.findById(i);
if (index == -1) {
System.out.println("输入错误,购物车里没有该商品。");
return;
}
System.out.println("输入商品数量");
Integer qty = scan.nextInt();
itemList.get(index).setQty(qty);
itemList.get(index).totalPrice=itemList.get(index).item.price*qty;
System.out.println("修改成功");
Cart.displayAll();
}
public static void removeCommodity(Scanner scan) {
Cart.displayAll();
System.out.println("请输入要移除的商品编号:(大于0的整数)");
Integer id = scan.nextInt();
int index = findById(id);
if (index == -1) {
System.out.println("购物车里没有该商品");
return;
} else {
itemList.remove(index);
System.out.println("移除成功!");
System.out.println("展示购物车:");
Cart.displayAll();
}
}
public static void settleAccounts() {
Cart.displayAll();
Double total = 0.0;//合计
for (ItemEntry itemEntry : itemList) {
total += itemEntry.getTotalPrice();
}
System.out.println("合计:"+total);
}
private static int findById(Integer id) {
for (int i = 0; i < itemList.size(); i++) {
if (itemList.get(i).getItem().getId().equals(id))
return i;
}
return -1;
}
private static class ItemEntry {
Commodity item;
Integer qty;
Double totalPrice;
public Double getTotalPrice() {
return totalPrice;
}
public ItemEntry(Commodity item, Integer qty) {// 一开始加入商品初始化数量为1;
this.item = item;
this.qty = qty;
this.totalPrice ;
}
public Commodity getItem() {
return item;
}
public Integer getQty() {
return qty;
}
public void setQty(Integer qty) {
this.qty = qty;
}
@Override
public String toString() {
return " item:" + item + ",数量qty=" + qty +"小计:"+ totalPrice+"]";
}
}
}
6.3商品
public class Commodity {
public Integer id;//因为要继承不能用privata
public String name;
public Double price;
public Category category;
public String description;
private enum Category{//商品类别枚举类
Food,Electronic,Book,Clothe
};
7、总结
- 这是第一次Java面向对象设计的大作业,购物车。我们小组进行了前期调查、类与对象的设计、代码结构的设计等等工作。
- 编写代码时我们会注意变量名,函数名,类名,方法名的定义,也就是重视代码的规范性。做好代码命名规范,使得代码可读性更强,便于读者阅读。
- 在编写代码的过程中,我们不可避免的遇到各类问题,比如编写好的代码意外出现错误、对类中该包含的属性和方法不清楚等。我们通过向高手请教、百度借鉴相似的项目、一步一步尝试新思路等等方法解决问题。
- 本次的作业在多次修改以后依旧存在较多问题,我们将会在往后继续更新。