第1次任务:购物车程序的面向对象设计

@

0. 人员分工

任务 人员
编码规范、前期调查与功能设计 曹卉潼
面向对象设计、博客制作 汪月月

1. 前期调查



2. 系统功能结构图

3. 系统描述

用户在商城中可以搜索查看,看到想买的商品可以将商品加入购物车,并且可以对购物车中的商品进行添加删除
购物车可以展示所有商品价格,名称,也可以清空购物车,最后选择结算
商场通过从文件读取数据,得到商品数据,并存在数组中

  • 菜单展示
    在这里插入图片描述

4. UML类图

在这里插入图片描述

5. 本系统体现的面向对象的封装性

对商品的属性在程序开始时就是不能改变的为了防止被改变,采用private进行修饰,可以防止其他操作改变其值,使用时只能通过getter和setter方法进行访问。

对商城中的所有商品,也是固定不变的,不论购物车中怎么删除,商品都会在商场中,所以用private进行修饰,对原有数据进行保护。
在这里插入图片描述

6. 系统功能展示

  • 查看商场的所有商品
    在这里插入图片描述

  • 按照名称搜索商品并询问是否加入购物车
    在这里插入图片描述

  • 按照类型搜索商品
    在这里插入图片描述

  • 查看购物车
    在这里插入图片描述

  • 删除购物车中某商品
    在这里插入图片描述

  • 显示当前购物车的总价格
    在这里插入图片描述

  • 清空购物车
    在这里插入图片描述

7. 项目包结构与关键代码

设计了两个包结构分别是shopping和User,目的是在后面继续不从代码时,可以对用户信息进行保护,shopping包中有商城,商品,购物车以及Main类
shopping包中Cart类

package shopping;
/*
 * Cart类
 * 存放物品的items数组
 * 加入购物车的方法:add()
 * 从购物车中删除商品的方法:delete()
 * 清空购物车的方法:clear()
 * 展示购物车内容的方法:show()
 */
import java.util.ArrayList;
public class Cart {
	private ArrayList<Commodity> items = new ArrayList<>();//存放商品的容器
	
	public Cart(ArrayList<Commodity> items) {
		this.items = items;
	}
	public ArrayList<Commodity> getItems() {
		return items;
	}
	public void setItems(ArrayList<Commodity> items) {
		this.items = items;
	}
	
	//加入购物车
	public void addCommodity(Commodity item) {
		this.items.add(item);
		this.show();
	}
	
	//删除某商品
	public boolean delete(String name) {
		for(int i=0;i<this.items.size();i++) {
			if(this.items.get(i).contain(name)){
				this.items.remove(i);
				return true;
			}
		}
		return false;
	}
	
	//清空购物车
	public void clear() {
		this.items.clear();
	}
	
	//展示购物车内容
	public void show() {
		System.out.println("当前购物车共有"+this.items.size()+"件商品");
		for (Commodity commodity : this.items) {
			System.out.printf("name: %s, price: %.2f",commodity.getName(), commodity.getPrice());
			System.out.println();
		}
	}
	//购物车总价格
	public void printSumPrice() {
		double x = 0;
		for (Commodity commodity : this.items) {
			x += commodity.getPrice();
		}
		System.out.printf("当前购物车总价格为:%.2f  ",x);
		this.show();
	}
}

shopping包中Mall类

package shopping;
/*
 * Mall类
 * 存储商场所有商品的容器 commodities
 * 初始化加载商品的方法:
 * 展示所有商品的方法:
 * 搜索功能
 * 1. 按名字搜索的方法:
 * 2. 按类型搜索的方法:
 */
import java.io.IOException;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Scanner;

public class Mall {
	static Scanner in = new Scanner(System.in);
	private static ArrayList<Commodity> commodities = new ArrayList<>();
	public ArrayList<Commodity> getCommodities() {
		return commodities;
	}
	public void setCommodities(ArrayList<Commodity> commodities) {
		Mall.commodities = commodities;
	}
	//加载商品
	public void sumCommodity() {
		try (Scanner scanner = new Scanner(Paths.get("data.csv").toFile())) {
			String DELIMITER = ",";// CSV文件分隔符
			scanner.useDelimiter(DELIMITER);// 设置分隔符
			@SuppressWarnings("unused")
			String s = scanner.nextLine();// 读取
			while (scanner.hasNext()) {
				String line = scanner.nextLine();
				String[] str = line.split(",");
				int id = Integer.parseInt(str[0]);
				String name = str[1];
				double price = Double.parseDouble(str[2]);
				String type = str[3];
				String address = str[4];
				commodities.add(new Commodity(id, name, price, type, address));
			}
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
	// 展示商场的所有商品
	public void showAll() {
		for (Commodity item : commodities) {
			System.out.println(item.toString());
		}
	}
	//按名称搜索商品
	public Commodity searchName(String name) {
		int flag=0;
		for (int i = 0; i < commodities.size(); i++) {
			if (commodities.get(i).getName().equals(name)) {
				System.out.println("名称为"+name+"的商品是:");
				System.out.println(commodities.get(i).toString());
				System.out.println("请问您是否需要加入购物车1/0:");
				int op=in.nextInt();
				if(op==1) {
					flag=1;
					
					return commodities.get(i);
				}
			}
		}
		if(flag==0) System.out.println("没有找到该商品");
		return null;
	}
	// 按类型搜索商品
	public ArrayList<Commodity> searchType(String type) {
		int i = 0;
		ArrayList<Commodity> list = new ArrayList<>();
		for (i = 0; i < commodities.size(); i++) {
			if (commodities.get(i).getType().equals(type)) {
				list.add(commodities.get(i));
			}
		}
		return list;
	}
}

posted @ 2021-10-04 14:39  w4  阅读(125)  评论(0编辑  收藏  举报