zoukankan      html  css  js  c++  java
  • 第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;
    	}
    }
    
    
  • 相关阅读:
    Web Components
    读《代码整洁之道》之我思
    JavaScript设计模式
    Vue项目一些常见问题的解决方案
    Vue中的样式穿透
    如何提升CSS性能
    script标签中,async和defer的区别?
    第二章:整车发动机激励--快速傅里叶变换
    第一章:整车发动机激励--之载荷分解(第一节)
    多点约束MPC-nastran
  • 原文地址:https://www.cnblogs.com/ww-yy/p/15366305.html
Copyright © 2011-2022 走看看