购物车小组作业

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面向对象设计的大作业,购物车。我们小组进行了前期调查、类与对象的设计、代码结构的设计等等工作。
  • 编写代码时我们会注意变量名,函数名,类名,方法名的定义,也就是重视代码的规范性。做好代码命名规范,使得代码可读性更强,便于读者阅读。
  • 在编写代码的过程中,我们不可避免的遇到各类问题,比如编写好的代码意外出现错误、对类中该包含的属性和方法不清楚等。我们通过向高手请教、百度借鉴相似的项目、一步一步尝试新思路等等方法解决问题。
  • 本次的作业在多次修改以后依旧存在较多问题,我们将会在往后继续更新。
  • 16
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值