Java课程设计之购物车管理系统

一、项目准备

1、开发工具:JDK、Eclipse

2、需求分析:

包括商品管理和购物车管理。

1)商品管理主要功能

  • 商品信息导入

  • 显示所有商品信息

2)购物车主要功能

  • 添加商品到购物车

  • 修改购物车中的商品数量

  • 显示购物车中的所有商品信息

  • 结算

    4、详细设计

    包括如下类的设计:

  • 商品类(Goods)

  • 商品管理类(GoodsManage)

  • 购物车中的商品信息类(GoodsInCart)

  • 购物车类(ShoppingCart)

  • 测试类 (TestDemo)

  • 下面分别对各个类进行介绍:

    1)商品类(Goods),包括如下属性和方法

    方法:

    -构造方法

    -getter和setter方法

    -hashCode()和equals()方法

    -toString()方法

    2)商品管理类(GoodsManage)

    属性:存放商品的容器(goodsSet):Set类型

    方法:

    -构造方法

    -getter和setter方法

    -商品信息导入:public void importGoods();

    -显示所有商品信息:public void displayAllGoods();

    3)购物车中的商品信息类(GoodsInCart)

    属性:

    - 商品信息(goods):Goods类型

     -  商品数量(num):int类型

    方法:

    -构造方法

    -getter和setter方法

    4)购物车类(ShoppingCart)

    属性:

    - 购物车(shoppingCart):Map类型,其中key为String类型,value为GoodsInCart类型

    方法:

    -添加商品到购物车:

       public void addGoodsToCart(GoodsManage gm);

    -修改购物车中的商品数量:public void updateNumInCart();如果购物车中没有商品,需要给出提示信息

     - 显示购物车中的所有商品:public void displayAllInCart();如果购物车中没有商品,需要给出提示信息

     - 结算:public void settleAccounts();结算后购物车要清空。

     - 构造方法及getter和setter方法

    5)测试类(TestDemo)

     - 根据需求设计完成主流程实现

     代码实现:

  • 商品类(Goods):

    package pers.szl.shopping;
    
    public class Goods {
    
    
        private String goodsId;
        private String goodsName;
        private double price;
        private String goodDes;
    
    
        @Override
        public boolean equals(Object o) {
            if(o==this){
                return true;
            }
            if(o instanceof Goods){
                    Goods goods=(Goods) o;
                    if(this.getGoodsId().equals(goods.goodsId)&&this.goodsName.equals(goods.goodsName)&&this.price==goods.price&&this.goodDes.equals(goods.goodDes)) {
                   return true;
                    }
                }
            return false;
            }
    
        @Override
        public int hashCode() {
            return (goodsId.hashCode()+goodsName.hashCode()+goodDes.hashCode()+(int)price)*31;
        }
    
        public Goods() {
        }
    
        public Goods(String goodsId, String goodsName, double price, String goodDes) {
            this.goodsId = goodsId;
            this.goodsName = goodsName;
            this.price = price;
            this.goodDes = goodDes;
        }
    
        /**
         * 获取
         * @return goodsId
         */
        public String getGoodsId() {
            return goodsId;
        }
    
        /**
         * 设置
         * @param
         */
        public void setGoodsId(String goodsId) {
            this.goodsId = goodsId;
        }
    
        /**
         * 获取
         * @return goodsName
         */
        public String getGoodsName() {
            return goodsName;
        }
    
        /**
         * 设置
         * @param
         */
        public void setGoodsName(String goodsName) {
            this.goodsName = goodsName;
        }
    
        /**
         * 获取
         * @return price
         */
        public double getPrice() {
            return price;
        }
    
        /**
         * 设置
         * @param price
         */
        public void setPrice(double price) {
            this.price = price;
        }
    
        /**
         * 获取
         * @return goodDes
         */
        public String getGoodDes() {
            return goodDes;
        }
    
        /**
         * 设置
         * @param goodDes
         */
        public void setGoodDes(String goodDes) {
            this.goodDes = goodDes;
        }
        public String toString() {
            return "商品编号:" + goodsId + ",商品名称:" + goodsName + ",商品单价:" + price+"元" + ",商品描述:" + goodDes;
        }
    }
    

    商品管理类(GoodsManage):

    package pers.szl.shopping;
    
    import java.util.HashSet;
    
    public class GoodManage {
        HashSet<Goods> goodsSet = new HashSet<>();
    
        public GoodManage() {
        }
    
        public void importGoods() {//商品信息导入
            Goods g1 = new Goods("goods001", "水杯", 56.0, "不锈钢");
            Goods g2 = new Goods("goods002", "电脑", 5556.0, "笔记本电脑");
            Goods g3 = new Goods("goods003", "手机", 2556.0, "智能手机");
            Goods g4 = new Goods("goods004", "饮水机", 556.0, "智能饮水机");
            Goods g5 = new Goods("goods005", "篮球", 256.0, "专业篮球");
            goodsSet.add(g1);
            goodsSet.add(g2);
            goodsSet.add(g3);
            goodsSet.add(g4);
            goodsSet.add(g5);
            System.out.println("商品信息导入成功!");
        }
    
        public void displayAllGoods() {//显示所有商品信息
            System.out.println("显示所有商品信息:");
            for (Object object : goodsSet) {
                System.out.println(object);
            }
        }
    }
    

    购物车中的商品信息类(GoodsInCart):

    package pers.szl.shopping;
    
    public class GoodsInCart {
         private   Goods goods;
         private    int num;
    
        public GoodsInCart() {
        }
    
        public Goods getGoods() {
            return goods;
        }
    
    
        public void setGoods(Goods goods) {
            this.goods = goods;
        }
    
    
        public int getNum() {
            return num;
        }
    
    
        public void setNum(int num) {
            this.num = num;
        }
    
        public String toString() {
            return   goods + ",商品数量:" + num +";";
        }
    }
    

    购物车类(ShoppingCart):

  • package pers.szl.shopping;
    import java.util.*;
    
    public class ShoppingCart {
        Map<String, GoodsInCart> shoppingCart = new HashMap<>();
        Scanner sc=new Scanner(System.in);
        public ShoppingCart() {
        }
        public void addGoodsToCart(GoodManage gm ){//添加商品到购物车
            GoodsInCart goods=new GoodsInCart();
            if(gm.goodsSet.isEmpty()){
                System.out.println("商品信息未导入,请先导入商品信息!");
                return ;
            }
            gm.displayAllGoods();
            System.out.println("请输入商品编号:");
            String goodId=sc.next();
            Set <String> keys=shoppingCart.keySet();
            for(String key:keys){
                if(key.equals(goodId))
                {
                    System.out.println("该商品已添加到购物车,请重新输入商品编号!");
                    addGoodsToCart(gm );
                }
            }
    
            for (Goods object : gm.goodsSet) {
                if(object.getGoodsId().equals(goodId)){
                       goods.setGoods( object);
                    System.out.println("请输入商品数量:");
                    int num=sc.nextInt();
                    while(num<=0){
                        System.out.println("商品数量不能为负,请重新输入商品数量:");
                        num=sc.nextInt();
                    }
                    goods.setNum(num);
                    shoppingCart.put(goods.getGoods().getGoodsId(),goods);
                    System.out.println("添加商品到购物车成功!");
                    return;
                }
            }
                System.out.println("商品信息中不存在该编号的商品,请重新输入商品编号!");
                addGoodsToCart( gm );
        }
        public  void updateNumInCart(){//修改购物车中的商品数量
            GoodsInCart goods=new GoodsInCart();
            if(shoppingCart!=null&&shoppingCart.isEmpty()){
                System.out.println("购物车没有添加商品,请先进行添加商品操作!");
                return;
            }
            System.out.println("请输入修改商品编号:");
            String goodId=sc.next();
            Set <String> keys=shoppingCart.keySet();
            for(String key:keys){
                if(key.equals(goodId))
                {
                  Goods goods1=  shoppingCart.get(key).getGoods();
                    goods.setGoods(goods1);
                    System.out.println("请输入修改商品数量:");
                    int num=sc.nextInt();
                    if(num==0){
                        shoppingCart.remove(key);
                        System.out.println("商品数量为零,已从购物车中删除!");
                        return;
                    }
                    while(num<0){
                        System.out.println("商品数量不能为负,请重新输入商品数量:");
                        num=sc.nextInt();
                    }
                    goods.setNum(num);
                    goods.getGoods().setGoodsId(goodId);
                    shoppingCart.put(goods.getGoods().getGoodsId(),goods);
                    System.out.println("修改购物车中的商品数量成功!");
                    return;
                }
            }
                System.out.println("购物车中不存在该编号的商品,请重新输入商品编号!");
                updateNumInCart();
        }
        public  void displayAllInCart() {//显示购物车中的商品信息
            if(shoppingCart!=null&&shoppingCart.isEmpty()){
                System.out.println("购物车没有添加商品,请先进行添加商品操作!");
                return;
            }
            System.out.println("购物车商品信息如下:");
            Set <String> keys=shoppingCart.keySet();
            for(String key:keys){
                System.out.println(shoppingCart.get(key).getGoods()+",商品数量:"+shoppingCart.get(key).getNum());
            }
        }
        public void settleAccounts(){//结算
            if(shoppingCart!=null&&shoppingCart.isEmpty()){
                System.out.println("购物车没有添加商品,请先进行添加商品操作!");
                return;
            }
            Set <String> keys=shoppingCart.keySet();
            double sumPrice=0;
            for(String key:keys){
                GoodsInCart value=shoppingCart.get(key);
               sumPrice+= value.getGoods().getPrice()*value.getNum();
            }
            System.out.println("结算成功,您一共需要支付"+sumPrice+"元。");
            displayAllInCart();
            shoppingCart.clear();
            System.out.println("支付成功,购物车已清空!");
        }
    }
    

    测试类(TestDemo):

    package pers.szl.shopping;
    
    import java.util.Scanner;
    
    public class TestDemo {
    
        public static  void main(String[]args){
            Menu menu=new Menu();
            Scanner input= new Scanner(System.in);
            while(true){
                menu.home();
                switch(input.next()){
                    case "1":
                        menu.shoppingHome();
                      break;
                    case "2":
                        menu.goodsHome();
                        break;
                    case "0":
                        System.out.println("成功退出系统!");
                        System.exit(0);
                        break;
                    default:
                        System.out.println("没有此操作,请重新输入!");
                }
            }
        }
    }
    
    

    菜单类Menu:

  • package pers.szl.shopping;
    
    import java.util.Scanner;
    
    public class Menu {
        Scanner input = new Scanner(System.in);
        ShoppingCart shoppingCart = new ShoppingCart();
        GoodManage gm = new GoodManage();
    
        public void home() {
            System.out.println("        ************************");
            System.out.println("                **主菜单**");
            System.out.println("              1--商品管理");
            System.out.println("              2--购物车");
            System.out.println("              0--退出");
            System.out.println("        ************************");
            System.out.println("请输入对应数字进行操作:");
        }
    
        public void shoppingHome() {
            boolean flag = true;
            while (flag) {
                System.out.println("       **************************");
                System.out.println("              **商品管理**");
                System.out.println("             1--商品信息导入");
                System.out.println("             2--显示所有商品信息");
                System.out.println("             9--返回上一级菜单");
                System.out.println("       **************************");
                System.out.println("请输入对应数字对商品进行管理:");
                switch (input.next()) {
                    case "1":
                        gm.importGoods();
                        break;
                    case "2":
                        gm.displayAllGoods();
                        break;
                    case "9":
                        System.out.println("成功返回上一级菜单!");
                        flag = false;
                        break;
                    default:
                        System.out.println("输入错误,请重新输入!");
                }
            }
        }
    
        public void goodsHome() {
            boolean flag = true;
            while (flag) {
                System.out.println("      ************************");
                System.out.println("           **购物车管理**");
                System.out.println("         1--添加商品到购物车");
                System.out.println("         2--修改购物车中的商品数量");
                System.out.println("         3--显示购物车中的所有商品");
                System.out.println("         4--结算");
                System.out.println("         9--返回上一级菜单");
                System.out.println("      ***********************");
                System.out.println("请输入对应的数字对购物车进行管理:");
                switch (input.next()) {
                    case "1":
                        shoppingCart.addGoodsToCart(gm);
                        break;
                    case "2":
                        shoppingCart.updateNumInCart();
                        break;
                    case "3":
                        shoppingCart.displayAllInCart();
                        break;
                    case "4":
                        shoppingCart.settleAccounts();
                        break;
                    case "9":
                        System.out.println("成功返回上一级菜单!");
                        flag = false;
                        break;
                    default:
                        System.out.println("输入错误,请重新输入!");
                }
            }
        }
    }
    
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/26108.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MockServer 服务框架设计

【摘要】 大部分现有的 mock 工具只能满足 HTTP 协议下简单业务场景的使用。但是面对一些复杂的业务场景就显得捉襟见肘&#xff0c;比如对 socket 协议的应用进行 mock&#xff0c;或者对于支付接口的失败重试的定制化 mock 场景。为解决上述问题&#xff0c;霍格沃兹测试学院…

pdf怎么合并成一个文件?高效工具分享

PDF是一种非常常用的文档格式&#xff0c;许多人经常需要合并多个PDF文件为一个文件。这是因为有时候我们需要将多个PDF文件打包成一个文件&#xff0c;以便于共享或归档。在本文中&#xff0c;我们将介绍如何使用电脑或手机合并PDF文件。 以下是常见的合并PDF的软件&#xff1…

Java中的this、package、import

this 在Java中&#xff0c;this的作用和其词义很接近。 它在方法内部使用&#xff0c;即这个方法所属对象的引用&#xff1b; 它在构造器内部使用&#xff0c;表示该构造器正在初始化的对象。 this 可以调用类的属性、方法和构造器 什么时候使用this关键字呢&#xff…

Socket(七)

文章目录 1. 单文件服务器2. 重定向器Redirector3. 功能完备的HTTP服务器 1. 单文件服务器 要研究HTTP服务器&#xff0c;先从一个简单的服务器开始&#xff0c;无论接受什么请求&#xff0c;这个服务器都始终发送同一个文件。这个单文件服务器名为SingleFileHTTPServer&#…

车辆CAN信号,依据DBC文件解析流程

CAN信号解析流程 1.车辆CAN对应dbc文件 DBC文件是一种用于描述CAN&#xff08;Controller Area Network&#xff09;数据通信协议的文件格式&#xff0c;DBC文件中包含了CAN数据的信号定义、编码方式、单位、范围等信息&#xff0c;可以用于解析和生成CAN数据帧。 一个DBC文件…

ChatGPT的4个不为人知却非常实用的小功能

重点介绍四个ChatGPT很实用的小功能。 一、停止生成 如果在ChatGPT输出内容的过程中&#xff0c;我们发现结果不是自己想要的&#xff0c;可以直接点击“Stop generating”按钮&#xff0c;这样它就会立即停止输出。 二、复制功能 在ChatGPT返回对话的右侧&#xff0c;有三个图…

MySQL主存复制

介绍 配置-主库master 第一步&#xff1a;修改MySQL数据库的配置文件/etc/my.cnf [mysqld] log-binmysql-bin #[必须]启用二进制日志 server-id100 #[必须]服务器唯一id第二部&#xff1a;重启MySQL服务 systemctl restart mysqld第三步&#xff1a;登录MySQL操作&#x…

Linux:软件管理器yum编辑器vim

软件管理器yum&&编辑器vim &#x1f506;软件管理器yum软件包是什么rzsz网络通畅性验证查看软件包怎么安装软件安装yum扩展源怎么卸载软件 &#x1f506;编辑器vim基本概念基本操作正常模式指令集末行模式指令集简单配置vim配置文件的位置常用配置选项使用插件参考资料…

DVWA——Brute Force

文章目录 Brute Force&#xff08;暴力&#xff08;破解&#xff09;&#xff09;&#xff08;1&#xff09;Low等级&#xff08;2&#xff09;Medium等级&#xff08;3&#xff09;High等级&#xff08;4&#xff09;Impossible Brute Force&#xff08;暴力&#xff08;破解&…

chatgpt赋能python:Python如何快速复制上一行?

Python 如何快速复制上一行&#xff1f; 在编写Python代码时&#xff0c;经常需要快速复制上一行代码进行修改。如果只是简单的手动复制粘贴&#xff0c;会造成不必要的时间浪费并且容易出错。本文将介绍三种快速复制上一行代码的方法。 方法一&#xff1a;使用快捷键 在Pyt…

Apache的配置与应用(构建web、日志分割及AWStats分析系统)

Apache的配置与应用 一、构建虚拟Web主机二、httpd服务支持的三种虚拟机类型1、基于域名的虚拟主机2、基于IP地址的虚拟主机3、基于端口的虚拟主机 三、构建web虚拟目录与用户授权限制1、创建用户认证数据文件2、添加用户授权配置3、验证用户访问权限4、在客户机中浏览器访问 四…

Jenkins+GitLab+Docker搭建前端自动化构建镜像容器部署

前言 &#x1f680; 需提前安装环境及知识点&#xff1a; 1、Docker搭建及基础操作 2、DockerFile文件描述 3、Jenkins搭建及基础点 &#x1f680; 目的&#xff1a; 将我们的前端项目打包成一个镜像容器并自动发布部署&#xff0c;可供随时pull访问 一、手动部署镜像及容器 1…

校园高校共享单车管理系统nodejs+vue+express

设计的管理员的详细功能见下图&#xff0c;管理员登录进入本人后台之后&#xff0c;管理单车和区域&#xff0c;审核租赁订单和还车订单&#xff0c;收取租赁费用&#xff0c;查看单车租赁统计信息。 vue的文件结构其实就是一个index.html 中间的内容&#xff0c;用的是vue&am…

同步阻塞与异步非阻塞

同步阻塞消息处理 假如有这样一个系统功能&#xff0c;客户端提交Event至服务器&#xff0c;服务器接收到客户请求之后开辟线程处理客户请求&#xff0c;经过比较复杂的业务计算后将结果返回给客户端 以上设计存在几个显著的缺陷&#xff0c;具体如下。同步Event提交&#xf…

Python学习36:文本分析与加密

类型&#xff1a;字符串‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 描述‪‬‪…

Vue.js 中的路由是什么?如何使用路由?

Vue.js 中的路由是什么&#xff1f;如何使用路由&#xff1f; 在 Vue.js 中&#xff0c;路由是指为不同的 URL 地址提供不同的页面内容或视图的机制。Vue.js 中的路由可以使用 Vue Router 库来实现&#xff0c;它是 Vue.js 官方提供的路由管理库。 Vue Router 简介 Vue Route…

海绵城市智慧监测系统功能、适用范围有哪些?

一、海绵城市在线监测系统拓扑图 海绵城市在线监测系统是通过RTU使用3G/4G信号进行无线传输等方式&#xff0c;将温度、水位、风速、风向、雨量、色度、浊度等数据传输到在线监测平台。经过软件平台的系统性处理后再通过LED显示屏直观、快捷的展现给用户。用户也可以通过电脑、…

如何使用Node.js REPL

目录 1、Nodejs REPL 2、_特殊变量 3、向上箭头键 4、点命令 5、从JavaScript文件运行REPL 1、Nodejs REPL REPL代表Read-Evaluate-Print-Loop&#xff0c;是交互式解释器。 node命令是我们用来运行Node.js脚本的命令&#xff1a; node script.js 如果我们运行node命令…

Unity WebGL打包配置本地服务器

第一步打包 1&#xff09;、先对Player Setting进行设置 2&#xff09;、设置打包的窗口大小 3&#xff09;、遇到异常以及压缩格式 第一个启用异常&#xff0c;指用户指定在运行时意外的代码行为&#xff08;通常被认为错误&#xff09;如何被处理&#xff0c;有三个选项…

3.java高级之GUI编程

1.gui (graphical user interface) awt sun公司最早的gui,不美观,不兼容各平台swing : awt升级2.顶层容器(只有一个)(其他的只能放这里)Jframe Jdialog对话框 Jwindow(x) //在main方法写fnew Jframe(); f.setSize(300,300); //设置大小f.setTitle("hello"); //设置…