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

news2024/11/23 1:16:05

一、项目准备

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("输入错误,请重新输入!");
                }
            }
        }
    }
    
    

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运维小白必学篇之基础篇第六集:权限实验

权限实验 实验作业&#xff1a; 1、创建1.txt文件&#xff0c;修改1.txt文件权限为属主最大&#xff0c;属组读写&#xff0c;其他人无权限 2、单独为1.txt文件的属组赋予执行权限 3、修改1.txt的属组为a1 4、修改用户a2的登录shell为/bin/bash 5、创建a1用户&#xff0c;设置…

chatgpt赋能python:Python内置函数求和

Python内置函数求和 Python是一种易学易用的编程语言&#xff0c;是许多开发人员和数据分析师的首选语言。Python提供了多种内置函数来处理不同的任务&#xff0c;其中包括求和函数。本文将介绍Python中的内置求和函数以及如何使用它们。 Python内置求和函数 在Python中&…

【51单片机】AT24C20数据帧(I2C总线)

&#x1f38a;专栏【51单片机】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Love Story】 &#x1f970;大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 小吉先向大家道个歉&#xff0c;因为最近在期末…

“微商城”项目(4首页)

1.显示轮播图 首页和商品详情页都有图片轮播图展示&#xff0c;考虑到Vue组件代码的复用性&#xff0c;把轮播图相关代码单独放置在src\components\swiper.vue文件中。 在src\pages\Home.vue文件中&#xff0c;编写HTML结构代码&#xff0c;示例代码如下。 <template>…

大数据AI课程更新——6月AI绘画入门小课

在这个课程中&#xff0c;我们将探索人工智能在绘画领域的应用&#xff0c;学习如何利用AI技术创造出令人惊叹的艺术作品。无论你是对绘画有兴趣的初学者&#xff0c;还是已经有一定绘画基础的学生&#xff0c;本训练营都将为你提供一个展示创造力和实践技巧的平台。 2022年是A…

永远年轻,永远在路上的AI TIME

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 在2019年的智源人工智能大会上&#xff0c;我第一次接触AI TIME&#xff0c;时至今日&#xff0c;加入AI TIME已经四年了。在过去的四年里&#xff0c;AI技术、产业发生了翻天覆地的变化&#xff0c;我自己的思…

80后程序员涛哥的童年

博主&#xff1a;爱码叔 个人博客站点&#xff1a; icodebook 公众号&#xff1a;漫话软件设计 微博&#xff1a;程序员涛哥 专注于软件设计与架构、技术管理。擅长用通俗易懂的语言讲解技术。对技术管理工作有自己的一定见解。文章会第一时间首发在个站上&#xff0c;欢迎大家…

态路小课堂丨交换机堆叠—简化组网结构,增强网络可靠性

TARLUZ态路 01、什么是交换机堆叠 交换机堆叠是指将多台支持堆叠特性的交换机通过堆叠线缆连接起来&#xff0c;从逻辑上虚拟成一台交换设备&#xff0c;该交换机中的所有交换机共享相同的配置信息和路由信息。当向逻辑交换机增加和减少单体交换机时不会影响其性能。 02、有什么…

新鲜出炉

最近发现了一爆款APP重新来袭&#xff0c;心中不由感叹“经典永不过时”&#xff01;它可是能节省真金白银的&#xff0c;尤其是几年前&#xff0c;流量真是不便宜&#xff0c;出门到了哪里都是赶紧寻找wifi和密码&#xff0c;直到它的出现&#xff0c;可以完全自动化&#xff…

除了降价,阿里云还有王炸

1. 写本文的前因 最近业内多家云厂商都找到了简单的宣传方法&#xff0c;那就是跟风降列表价。我并不反对这种常规宣传&#xff0c;我那篇科普谈降价的文章&#xff0c;据说也让某些云参透了敲锣不要钱&#xff0c;宣传没损失。 在阵阵锣声中&#xff0c;我随口和朋友们发牢骚&…

盘点一个Python自动化办公需求,实现数据自动填充(上篇)

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 临别殷勤重寄词&#xff0c;词中有誓两心知。 大家好&#xff0c;我是皮皮。 一、前言 前几天遇到了一个小需求&#xff0c;粉丝自己在实际工作中的需求…

牛叉,一行代码不写,就可以开发系统

如今AI和低代码越来越火&#xff0c;可以瞬间完成一个系统的开发。 不用一行代码&#xff0c;轻松实现业务数字化&#xff0c;是怎么做到的&#xff1f; 前面小孟开发了大量的系统&#xff0c;很多时候不是我写代码多么快&#xff0c;也不是我技术多么的厉害&#xff0c;而是…

GPU与CPU

1 什么是GPU&#xff1f; GPU的英文全称Graphics Processing Unit&#xff0c;图形处理单元。通俗来说&#xff0c;GPU是一款专门的图形处理芯片&#xff0c;做图形渲染、数值分析、金融分析、密码破解&#xff0c;以及其他数学计算与几何运算的。GPU可以在PC、工作站、游戏主…

chatgpt赋能python:Python如何关闭对话框?

Python如何关闭对话框&#xff1f; 如果你是一名Python编程经验丰富的工程师&#xff0c;你一定已经遇到过需要在Python中关闭对话框的场景。在这篇文章中&#xff0c;我将详细介绍如何处理这个问题&#xff0c;并提供一些有用的技巧和建议。 什么是对话框&#xff1f; 在编…

跨境电商平台支持后台采集商城PC+WAP+小程序+APP,Java

跨境电商系统概述 跨境电商系统是一种在全球范围内开展电子商务的技术平台。它能够帮助企业建立贸易关系、实现商品销售、支付和物流配送等功能&#xff0c;提高企业的市场竞争力和盈利能力。该系统支持自营和招商入驻的电商模式&#xff0c;多终端交互&#xff0c;有PC、APP、…

【Springboot实用功能开发】发送QQ邮件以及邮件验证码对话框

文章目录 参考博客1. 发送一封QQ邮件添加Maven依赖QQ邮箱开启POP服务配置application.properties文件Controller层编写 vue前端&#xff08;也可以直接省略使用PostMan测试接口&#xff09; 2. 做一个发送邮件验证的对话框 参考博客 vue实现验证码倒计时功能SpringBoot实现邮箱…

会讲ppt的技术人,平均薪资多30%以上!

一场好的技术分享&#xff0c;可以用“有趣有料”四个字来形容&#xff0c;那么如何才能做到有趣又有料呢&#xff1f;结合我的经历&#xff0c;做了一些总结。 2015年&#xff0c;我出版《技术管理之巅》以后&#xff0c;先后收到QCon、CSDN、IT168等业界知名技术大会的邀请担…

大手笔!吴恩达一口气开放了 3 个 AIGC 教程。。

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 一个月前&#xff0c;DeepLearning.ai 创始人吴恩达与 OpenAI 开发者 Iza Fulford 联手推出了一门面向开发者的技术教程&#xff1a;《ChatGPT 提示工程》。 该教程总共分为 9 个章节&…

编码器-解码器 | 基于 Transformers 的编码器-解码器模型

基于 transformer 的编码器-解码器模型是 表征学习 和 模型架构 这两个领域多年研究成果的结晶。本文简要介绍了神经编码器-解码器模型的历史&#xff0c;更多背景知识&#xff0c;建议读者阅读由 Sebastion Ruder 撰写的这篇精彩 博文。此外&#xff0c;建议读者对 自注意力 (…

PYtriton:从Python提供的Triton Inference Server

env sudo docker run -it --shm-size 8gb --rm --gpusall -p 8126:8000 -v ${PWD}:/test nvcr.io/nvidia/pytorch:23.04-py3 bash sudo docker run -it --shm-size 8gb --rm --gpusall -v ${PWD}:/test nvcr.io/nvidia/pytorch:23.04-py3 bash 服务端Docker : sudo docker ru…