一篇文章让你精通:java集合讲解(七,项目“购物车”实现)

相信大家通过前面的学习已经对集合有了一定的了解,下面就是需要练习来多多实验自己学习到的东西,废话不多说,下面让我们来简单做一个粗糙的Java购物车吧!

项目架构:

项目目的:实现对集合的运用和加深集合的了解。

目录

项目架构:

前台:

实体类:商品实体类(Javabean,存储商品信息,前台与后台传递数据)与购物车实体类

商品实体类:

购物车实体类:

后台:面向接口编程(完成商品操作)

商品定义接口 

商品接口实现类

购物车接口

购物车接口实现类

收获:


前台:

主函数(菜单的设置)

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class TextShop {
    public static void main(String[] args){
        Scanner input =new Scanner(System.in);
        do{
            System.out.println("\t\t********欢迎加入商城********");
            System.out.println("\t1: 添加商品");
            System.out.println("\t2: 查看全部商品");
            System.out.println("\t3: 查看指定编号的商品信息");
            System.out.println("\t4: 删除商品" );
            System.out.println("\t5: 添加到购物车");
            System.out.println("\t6: 显示我的购物车商品");
            System.out.println("\t7: 删除购物车商品");
            System.out.println("\t8: 退出程序");
            System.out.println("***********************************************");

            System.out.println("请输入您的选择:");
            int choice=input.nextInt();
//            TextShop textShop = new TextShop();
            switch (choice){
                case 1:
                    addProduct();
                    break;
                case 2:
                    showall();
                    break;
                case 3:
                    System.out.println("请输入商品编号:");
                    showbyid();
                    break;
                case 4:
                    removeProduct();
                    break;
                case 5:

                    addCartItem();
                    break;
                case 6:
                    System.out.println("显示我的购物车商品");

                    showcart();
                    break;
                case 7:

                    removeItem();
                    break;

                case 8:
                    System.out.println("欢迎您的下次使用");
                    return;
                default:
                    System.out.println("输入错误(没有该选项!!!)");
                    System.out.println("请重新输入!!!");

            }
        }while (true);
    }

    //添加商品
    private static void addProduct() {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入商品id");
        int id = input.nextInt();
        System.out.println("请输入商品名称");
        String name = input.next();
        System.out.println("请输入商品价格");
        double price = input.nextDouble();
        System.out.println("请输入商品颜色");
        String color = input.next();
        System.out.println("请输入商品尺寸");
        int size = input.nextInt();
        System.out.println("请输入商品库存");
        int stock = input.nextInt();

        Product product=new Product(id,name,price,color,size,stock);
        ProductDao productDao=new ProductDaoImpl();
        productDao.add(product);
    }
    private static void removeProduct(){
        Scanner input = new Scanner(System.in);
        System.out.println("请输入商品id");
        int id = input.nextInt();
        ProductDao productDao=new ProductDaoImpl();
        productDao.removeid(id);
    }

    //  获取后台商品信息并输出
    public static void showall(){
        //获取后台商品信息
        ProductDao productDao=new ProductDaoImpl();
        List productList=productDao.findall();

        //输出菜单
        System.out.println("编号 \t商品名称\t\t价格\t颜色\t尺寸\t库存 ");
        for (Product product:productList) {
            System.out.println(product.getId()+"\t"+product.getName()+"\t\t"+product.getPrice()+"\t"+product.getColor()+"\t"+product.getSize()+"\t"+product.getStock());

        }
    }

    //查找商品
    public static void showbyid(){
        //输入商品编号
        Scanner input=new Scanner(System.in);
        int id=input.nextInt();

        //获取后台商品信息
        ProductDao productDao=new ProductDaoImpl();
        Product product =productDao.findid(id);


        //比较输出
        System.out.println("编号 \t商品名称\t\t价格\t颜色\t尺寸\t库存 ");
        if (product==null){
            System.out.println("此商品不存在");
        }else {
            System.out.println(product.getId()+"\t"+product.getName()+"\t"+product.getPrice()+"\t"+product.getColor()+"\t"+product.getSize()+"\t"+product.getStock());
        }

    }

    //购物车
//    CartItemDao itemDao = new CartItemDaoImpl();
    //展示购物车
    public static void showcart(){
        //获取条目
        CartItemDao itemDao = new CartItemDaoImpl();
        Map shop=itemDao.findCart();

        //输出
        Collection items = shop.values();
        System.out.println("编号 \t商品名称\t\t价格\t颜色\t数量\t合计 ");
        //实现总计1,给定初始值
        double total = 0;
        for (CartItem item:items) {
            //输出条目信息
            System.out.println(item.getId()+"\t"+item.getName()+"\t\t"+item.getPrice()+item.getColor()+"\t"+item.getAmount()+"\t"+item.getPrice()*item.getAmount());
            //实现总计2:计算总计
            total=total+item.getAmount()*item.getPrice();
        }
        //实现总计3:输出
        System.out.println("总计:"+total);
    }

    //添加购物车
    public static void  addCartItem(){
        //输入购买商品编号
        Scanner input= new Scanner(System.in);
        System.out.println("请输入商品的编号");
        int id = input.nextInt();

        //输入商品数量
        System.out.println("请输入商品的数量");
        int amount = input.nextInt();

        //根据编号获取其他信息
        ProductDao productDao = new ProductDaoImpl();
        Product product =productDao.findid(id);

        //构建购物车条目
        CartItem item = new CartItem();
        item.setId(id);
        item.setName(product.getName());
        item.setPrice(product.getPrice());
        item.setColor(product.getColor());
        item.setAmount(amount);
        //后台添加
        CartItemDao itemDao=new CartItemDaoImpl();
        itemDao.addCartItem(item);
    }

    //删除购物车
    public static void  removeItem(){
        //输入购买商品编号
        Scanner input= new Scanner(System.in);
        System.out.println("请输入商品的编号");
        int id = input.nextInt();

        //输入商品数量
        System.out.println("请重写输入商品的数量");
        int amount = input.nextInt();

        //根据编号获取其他信息
        ProductDao productDao = new ProductDaoImpl();
        Product product =productDao.findid(id);

        //构建购物车条目
        CartItem item = new CartItem();
        item.setId(id);
        item.setName(product.getName());
        item.setPrice(product.getPrice());
        item.setColor(product.getColor());
        item.setAmount(amount);

        //后台删除
        CartItemDao itemDao=new CartItemDaoImpl();
        itemDao.removeCartItem(item);
    }

}

实体类:商品实体类(Javabean,存储商品信息,前台与后台传递数据)与购物车实体类

商品实体类:

import java.util.Objects;

/**设置商品类
 * 这就是一个标准的Javabean
 * Javabean:实体类,用来存储数据
 *  (1,通过私有属性
 *   2,公共构造方法(并且还有一个无参构造)
 *   3,所有的取值通过set与git方法)
 *  equals与hashCode方法:可以存储哈希表结构的集合
 *  compareTo方法:可以比较排序(要实现Comparable接口)
 *  成为Javabean条件
 *      1,类public修饰
 *      2,属性private修饰
 *      3,通过public的set与git方法
 *      4,通过无参构造
 *
 */

public class Product implements Comparable {
    private int id;//编号
    private String name;//名称
    private  double price;//价格
    private String color;//颜色
    private int size; //尺寸
    private int stock;//库存

    public Product() {
    }

    public Product(int id, String name, double price, String color, int size, int stock) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.color = color;
        this.size = size;
        this.stock = stock;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    public String getColor() {
        return color;
    }

    public int getSize() {
        return size;
    }

    public int getStock() {
        return stock;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public void setStock(int stock) {
        this.stock = stock;
    }

    @Override
    public String toString() {
        return "Product{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", color='" + color + '\'' +
                ", size=" + size +
                ", stock=" + stock +
                '}';
    }
    //方便存储进集合(HashSet,HashMap中生成equals与hashCode方法)

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Product product = (Product) o;
        return id == product.id &&
                Double.compare(product.price, price) == 0 &&
                size == product.size &&
                stock == product.stock &&
                Objects.equals(name, product.name) &&
                Objects.equals(color, product.color);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, price, color, size, stock);
    }

    //方便存储进集合(二叉树)
    @Override
    public int compareTo(Product o) {
        return this.id-o.id;
    }

}

购物车实体类:

import java.util.LinkedHashMap;
import java.util.Objects;

//购物车实体类
public class CartItem implements Comparable{
    private int id;//编号
    private String name;//名称
    private  double price;//价格
    private String color;//颜色
    private int amount; //数量



    public CartItem() {
    }

    public CartItem(int id, String name, double price, String color, int amount) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.color = color;
        this.amount = amount;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    public String getColor() {
        return color;
    }

    public int getAmount() {
        return amount;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public void setAmount(int amount) {
        this.amount = amount;
    }

    @Override
    public String toString() {
        return "CartItem{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", color='" + color + '\'' +
                ", amount=" + amount +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        CartItem cartItem = (CartItem) o;
        return id == cartItem.id &&
                Double.compare(cartItem.price, price) == 0 &&
                amount == cartItem.amount &&
                Objects.equals(name, cartItem.name) &&
                Objects.equals(color, cartItem.color);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, price, color, amount);
    }

    @Override
    public int compareTo(CartItem o) {
        return this.id-o.id;
    }
}

后台:面向接口编程(完成商品操作)

商品定义接口 

import java.util.List;

public interface ProductDao {
    public void add(Product pr);
    public List findall();
    public Product findid(int id);
    public Product removeid(int id);

}

商品接口实现类

商品选择:

Arraylist:商品应该是使用数据库进行存储,小项目就使用Arraylist进行实现(查找方便,商品添加在尾部,实现还方便)

import java.util.ArrayList;
import java.util.List;

/**定义实现接口
 * 分层编程思想
 *
 */
public class ProductDaoImpl implements ProductDao {
    /**
     * 功能添加
     * add()添加商品
     * findall() 显示商品
     * findid() 查找指定商品
     * removeid() 删除商品
     */
    //存储商品信息,所有商品列表只有一个 static
    private static List productList=new ArrayList();
    //static 静态代码块,第一次加载的时候执行,只执行一次,一般是静态变量进行初始化
    static {
        productList.add(new Product(1000,"手机",2999,"蓝色",250,100));
        productList.add(new Product(1001,"电脑",12999,"蓝色",250,10));
        productList.add(new Product(1002,"充电器",9.9,"蓝色",250,1000));
    }
    public void add(Product pr){
        boolean flag=false;
        for (int i = 0; i  findall(){

        return productList;
    }
    public Product findid(int id){
        //比较查找编号
        for (int i = 0; i 

购物车接口

import java.util.LinkedHashMap;

public interface CartItemDao {
    public void addCartItem(CartItem item);
    public LinkedHashMap findCart();
    public void removeCartItem(CartItem item);
}

购物车接口实现类

购物车选择:

ArrayList : (购物车的删除与修改频繁,不推荐使用)

Linklist : (满足删除与添加,查看也有序,可以考虑)

HashSet : (无序,并且不好数量统计,不推荐)

linkhashSet : (有序(添加顺序),数量不好统计)

TreeSet  : (希望按照添加顺序进行排列,数量不好统计,不推荐)

HashMap : (无序,可以考虑)

linkhashSet : (有序(添加顺序),推荐(根据判读key值进行数量增加))

TreeSet  : (希望按照添加顺序进行排列,不推荐)

import java.util.LinkedHashMap;

public class CartItemDaoImpl implements CartItemDao {
    //购物车实现,不能static修饰,每个人购物车不一样。

    private static LinkedHashMap shoppingCart=new LinkedHashMap<>();


    public void addCartItem(CartItem item){
        //判断指定商品是否存在(存在修改数量,不存在添加在购物车)
        //获取key
        CartItem item2=shoppingCart.get(item.getId());
        //判断商品是否存在
        if (item2==null){
            //不存在直接添加
            shoppingCart.put(item.getId(),item);
        }else {
            //获取原来数量
            int num=item2.getAmount();
            //获取现在数量
            int num1=item.getAmount();
            //数量增加
            int num2=num1+num;
            //修改数量
            item2.setAmount(num2);
        }
        shoppingCart.put(item.getId(),item);
    }
    //显示购物车全部物品
    public LinkedHashMap findCart(){
//        shoppingCart.put(1111,new CartItem(1111,"libai",120,"ns",2));

        return shoppingCart;
    }
    //删除购物车条目
    public void removeCartItem(CartItem item){
        //获取key
        CartItem item2=shoppingCart.get(item.getId());
        //判断商品是否存在
        if (item2 == null || item2.getAmount()==0 ){
            //不存在
            System.out.println("不存在该商品");
        }else {
            //获取原来的数量
            int num=item2.getAmount();
            //获取要删除的数量
            int num1=item.getAmount();
            //减少的数量
            int num2=num-num1;
            //修改数量
            item2.setAmount(num2);
        }
        shoppingCart.put(item.getId(),item);
    }

}

收获:

1,复习集合选择与使用。

2,理解关于Javabean私有属性的选择。

3,了解到了分层开发(接口与接口实现类的使用);

3,扩展实现删除商品与删除购物车的代码,增加自己的编程逻辑能力。

你可能感兴趣的:(Java,集合,练习,java,开发语言,后端)