抽象轻松的java——简单的购物车系统

news2025/1/13 13:13:41

public class GoodsShop {
    public static void main(String[] args) {
        System.out.println("欢迎来到购物车管理系统");
        obj [] arr = new obj[50];//obj[50]为购物车的数量上限
        obj obj = new obj();//调用obj
        Scanner scanner = new Scanner(System.in);//输入

        while (true) {
            System.out.println("输入1进入增加页面");
            System.out.println("输入2进入查看页面");
            System.out.println("输入3进入修改页面");
            System.out.println("输入4进入删除页面");
            System.out.println("输入5进入结算页面");
            double shuzi = scanner.nextDouble();

            switch ((int) shuzi) {
                case 1 : obj.add();break;//调用增
                case 2 : obj.cha();break;//调用查
                case 3 : obj.del();break;//调用删
                case 4 : obj.gai();break;//调用改
                case 5 : obj.sum();break;//调用结算
                default:
                    System.out.println("请重新输入");
            }
        }
    }
}

class obj {
    String name;//商品名
    int numb;//商品数量
    int id;//商品编码
    double money;//商品价格

    public static void add(){
        System.out.println("欢迎来到增加页面");
        
    }
    public static void cha(){
        System.out.println("欢迎来到查看商品页面");
    }
    public static void del(){
        System.out.println("欢迎来到删除页面");
    }
    public static void gai(){
        System.out.println("欢迎来到修改页面");
    }
    public static void sum(){
        System.out.println("欢迎来到结算页面");
    }
}

上面部分的图片与代码配合来看更容易理解

正式进入个个部分的具体内容编程

第一部分:添加商品页面

这一模块的作用,使用者通过键盘输入内容,将内容以一个数组存放

我们就要传入两个值,一个是键盘输入,一个是数组

    public static void add(obj[]arr,Scanner scanner){//传值
        System.out.println("欢迎来到增加页面");
        System.out.println("输入商品名");
        String name1 = scanner.next();
        System.out.println("输入商品ID");
        int id1 = scanner.nextInt();
        System.out.println("输入商品数量");
        int shuliang1 = scanner.nextInt();
        System.out.println("输入商品价格");
        double money1 = scanner.nextDouble();

    }

提示与输入值顺带的也写好

将输入的值,封装成goods对象

        //封装成一个对象
        obj goods = new obj();
        goods.id = id1;
        goods.money = money1;
        goods.name = name1;
        goods.numb = shuliang1;

然后封装的对象用循环挨个装进数组中

       //挨个装进去
        for (int i = 0; i < arr.length; i++)
        {
            arr[i] = goods;
        }
        System.out.println("成功将"+ goods.name + "装入购物车");

第二个模块,查看商品

商品是用一个数组装着的,那么怎么查看数组就是怎么查看商品

所以,需要给cha()方法传入一个数组

 public static void cha(obj [] arr){//传入方法
        System.out.println("欢迎来到查看商品页面");
        System.out.println("===========================");
        System.out.println("ID" + "\t" + "\t" +"商品名" + "\t" + "商品数量" + "\t" + "商品价格");
    }

然后输出数组

        for (int i = 0 ; i < arr.length ; i++)
        {
            obj good = arr[i];
            if (arr[i] != null)
            {
                System.out.println(good.id + "\t" + good.name + "\t" + "\t" +good.numb +"\t"+"\t" + good.money);
            }
            else 
                break;
        }
    }

为什么要用选择语句?看看不用的情况

没错,他直接把整个购物车充满了,我们定义了数组的数量为50,又因为传址,直接将全部值变成了一样

这个选择语句的作用是,当arr[i] 无值的时候跳出程序,这样就不会有多余的数组了

当你用了if判断的时候,又出现bug了,还是一直输出怎么办!

回过头来看看

//挨个装进去
        for (int i = 0; i < arr.length; i++)
        {
            if (arr[i] == null) {
                arr[i] = goods;
                break;
            }
        }

应该要在挨个添加进数组的时候进行一个选择,这样就可以防止传址

大致的介绍一下

他们用的是同一个东西,A改B改,B改A改

第三个模块——删除商品

前面介绍了null这个值,就是当数组是空的时候会显示bull

现在数组不是空的,就让它变成空的

先完成一个简单,传入一个数组

    public static void del(obj [] arr){
        System.out.println("欢迎来到删除页面");
    }

用循环将每个数组输出,如果有值就将值变成null,没值就跳出


        for (int i = 0;i < arr.length;i++)
        {
            obj goods = arr[i];
            if (arr[i] != null)
            {
                arr[i] = null;
            }
            else
                break;
        }
    

第四个模块——修改商品数量

 商品是数组,修改要输入,所以需要传入一个数组,一个输入

    public static void gai(obj [] arr , Scanner scanner){
        System.out.println("欢迎来到修改页面");
    }

第二步,要进行一个选择,判断它到底是不是购物车里面的值

为了区分修改和重复使用改功能,我们另外声明一个方法

传入两个值,一个商品,一个商品值,根据id会简单点,因为id在现实中是很难进行改变的

    public static obj getID(obj [] arr,int id)
    {

    }

还是通过循环,将对象的值传给数组,进行选择,如果等于返回对象

        for (int i = 0 ; i < arr.length ; i++)
        {
            obj goods = arr[i];
            if (goods.id == id)
                return goods;
            else 
                return null;
        }
        return null;//遍历50次还是空

正式的开始写修改

先来点简单的——来个提示和输入

        System.out.println("欢迎来到修改页面");
        System.out.println("输入修改商品的ID");
        int nub = scanner.nextInt();

用封装对象调用刚刚的方法

obj goods = getID(arr,nub);

根据那个方法,如果我们输入的值,符合购物车里的id,就会将与这个id相同的数组返回

进入选择语句,如果等于就修改,不等于就输入提示

数字的交换,如何将A,b的值交换,就能完成修改

        while (true) {
            System.out.println("输入修改商品的ID");
            int nub = scanner.nextInt();
            obj goods = getID(arr, nub);
            if (nub != goods.id) {
                System.out.println("没有该商品");
            } else {
                System.out.println("修改" + goods.name + "的数量");
                int nub1 = scanner.nextInt();
                goods.numb = nub1;
                System.out.println("修改成功");
                cha(arr);
                break;
            }
        }

因为不可能只用一次,可能会进行多次修改,所以使用一个循环

为了更好的看出来,我们调用一次cha()方法

哎!到这里为什么会变成删除,那是因为我在开始的代码中把3和4的提示打错字了!!!

第五个模块——结算金额

给个思路,自己写

因为是结算购物车的金额,所以需要传入一个数组

传入完数组后,通过循环,将封装对象挨个传入数组

进行IF选择语句,当数组的值不为空,就调用个数,金额进行一个乘法运算

*

*

*

*

*

*

*

全代码

import java.util.Scanner;

public class GoodsShop {
    public static void main(String[] args) {
        System.out.println("欢迎来到购物车管理系统");
        obj [] arr = new obj[50];//obj[50]为购物车的数量上限
        obj obj = new obj();//调用obj
        Scanner scanner = new Scanner(System.in);//输入

        while (true) {
            System.out.println("输入1进入增加页面");
            System.out.println("输入2进入查看页面");
            System.out.println("输入3进入删除页面");
            System.out.println("输入4进入修改页面");
            System.out.println("输入5进入结算页面");
            double shuzi = scanner.nextDouble();

            switch ((int) shuzi) {
                case 1 : obj.add(arr,scanner);break;//调用增
                case 2 : obj.cha(arr);break;//调用查
                case 3 : obj.del(arr);break;//调用删
                case 4 : obj.gai(arr,scanner);break;//调用改
                case 5 : obj.sum(arr);break;//调用结算
                default:
                    System.out.println("请重新输入");
            }
        }
    }
}

class obj {
    String name;//商品名
    int numb;//商品数量
    int id;//商品编码
    double money;//商品价格

    public static void add(obj[]arr,Scanner scanner){//传值
        System.out.println("欢迎来到增加页面");
        System.out.println("输入商品名");
        String name1 = scanner.next();
        System.out.println("输入商品ID");
        int id1 = scanner.nextInt();
        System.out.println("输入商品数量");
        int shuliang1 = scanner.nextInt();
        System.out.println("输入商品价格");
        double money1 = scanner.nextDouble();
        //封装成一个对象
        obj goods = new obj();
        goods.id = id1;
        goods.money = money1;
        goods.name = name1;
        goods.numb = shuliang1;

        //挨个装进去
        for (int i = 0; i < arr.length; i++)
        {
            if (arr[i] == null) {
                arr[i] = goods;
                break;
            }
        }
        System.out.println("成功将"+ goods.name + "装入购物车");
    }
    public static void cha(obj [] arr){
        System.out.println("欢迎来到查看商品页面");
        System.out.println("===========================");
        System.out.println("ID" + "\t" + "\t" +"商品名" + "\t" + "商品数量" + "\t" + "商品价格");
        for (int i = 0 ; i < arr.length ; i++)
        {
            obj good = arr[i];
            if (arr[i] != null)
            {
                System.out.println(good.id + "\t" + good.name + "\t" + "\t" +good.numb +"\t"+"\t" + good.money);
            }
            else
                break;
        }
    }
    public static void del(obj [] arr){
        System.out.println("欢迎来到删除页面");
        for (int i = 0;i < arr.length;i++)
        {
            obj goods = arr[i];
            if (arr[i] != null)
            {
                arr[i] = null;
            }
            else
                break;
        }
    }
    public static void gai(obj [] arr , Scanner scanner){
        System.out.println("欢迎来到修改页面");
        while (true) {
            System.out.println("输入修改商品的ID");
            int nub = scanner.nextInt();
            obj goods = getID(arr, nub);
            if (nub != goods.id) {
                System.out.println("没有该商品");
            } else {
                System.out.println("修改" + goods.name + "的数量");
                int nub1 = scanner.nextInt();
                goods.numb = nub1;
                System.out.println("修改成功");
                break;
            }
        }

    }
    public static obj getID(obj [] arr,int id)
    {
        for (int i = 0 ; i < arr.length ; i++)
        {
            obj goods = arr[i];
            if (goods.id == id)
                return goods;
            else
                return null;
        }
        return null;//遍历50次还是空
    }
    public static void sum(obj[]arr){
        System.out.println("欢迎来到结算页面");
        for (int i = 0 ; i < arr.length ; i++)
        {
            obj goods = arr[i];
            if (arr[i] != null)
            {
                System.out.println(goods.numb * goods.money + "元");
            }
            else
                break;
        }
    }
}

其中用的最多的语句是迭代语句和选择语句

其次就是封装的使用

本质上就是通过不同的语句对封装对象的操作

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

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

相关文章

【C++14保姆级教程】数位分割符、函数返回值推导

文章目录 前言一、数位分割符&#xff08;Digit Separators&#xff09;1.1 数位分割符是什么&#xff1f;1.2 作用1.3 示例代码11.4 示例代码21.5 数位分隔符的优势 二、函数返回值推导&#xff08;Function Return Type Deduction&#xff09;2.1 函数返回值推导是什么&#…

[NOIP2011 提高组] 铺地毯

[NOIP2011 提高组] 铺地毯 题目描述 为了准备一个独特的颁奖典礼&#xff0c;组织者在会场的一片矩形区域&#xff08;可看做是平面直角坐标系的第一象限&#xff09;铺上一些矩形地毯。一共有 n n n 张地毯&#xff0c;编号从 1 1 1 到 n n n。现在将这些地毯按照编号从小…

【LeetCode热题100】--142.环形链表II

142.环形链表II 使用哈希表&#xff1a; 遍历链表中的每个节点&#xff0c;并将它记录下来&#xff0c;一旦遇到了此前遍历过的节点&#xff0c;就可以判定链表中存在环 /*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* …

Unity Urp无线延申的网格效果

无线延申的网格 该项目必须是再Urp项目 shader代码实现 Shader "Unlit/infTutorial1" {Properties{_Alpha ("Alpha", Range(0, 0.5)) 0.5}SubShader{Tags{"RenderPipeline""UniversalRenderPipeline""RenderType""…

操作系统监控工具

在当今复杂、动态的网络环境中&#xff0c;服务器管理员根据其要求在各种操作系统上工作&#xff0c;操作系统是管理硬件和软件资源的基本系统软件&#xff0c;它是硬件与您运行的不同应用程序之间的接口&#xff0c;保持操作系统更新至关重要&#xff0c;最重要的是&#xff0…

SDI-12协议与STM32 进行uart通信

场景是用stm32与一款温湿度传感器通信&#xff0c;不过是基于SDI-12协议&#xff0c;SDI-12时序和UART类似&#xff0c;故采用UART传输&#xff0c;原理图如下 其中DIR_OUT_SDI是一个IO引脚&#xff0c;控制UART_TX_SDI是否使能&#xff0c;U10是三态门IC&#xff0c;即拉低DIR…

测试网页调用本地可执行程序(续1:解析参数中的中文编码)

学习测试网页调用本地可执行程序还遗留一个问题&#xff0c;即网页中调用带中文参数的命令时&#xff0c;本地可执行程序接收到的参数字符串里的中文都转换成了编码模式&#xff0c;看起来如下所示&#xff1a; <a href TestPageCall:-a你好>启动测试程序</a><…

destoon根据查询标题小于5个字符的数据进行删除

最近客户有个需求&#xff0c;就是他采集的时候&#xff0c;标题有些小于5字符的短标题的垃圾数据&#xff0c;进行清空处理&#xff0c;让我进行批量删除。废话不多说&#xff0c;接着干。 首先在dt根目录新建delmysql.php文件&#xff0c;代码如下&#xff1a; <?php r…

机器学习——KNN算法流程详解(以iris为例)

目 录 前情说明 问题陈述 数据说明 KNN算法流程概述 代码实现 前情说明 本书基于《特征工程入门与入门与实践》庄家盛 译版P53也K最近邻&#xff08;KNN&#xff09;算法进行讲解 问题陈述 Iris 鸢尾花数据集内包含 3 类分别为山鸢尾&#xff08;Iris-setosa&#xff09…

99%的亚马逊运营都不知道爆单小技巧——社媒促销代码

社交媒体促销代码是促进产品在亚马逊上销售的最有效推广方式之一&#xff0c;有了这个营销工具&#xff0c;卖家可以在社交媒体上宣传您的产品&#xff0c;并通过社交媒体和网红营销内容将促销代码分享给买家&#xff0c;进行更具针对性的促销。 一、什么是社交媒体促销代码 社…

BoxUVMap处理参考

该Shader的目标是让物体的位置作为UV&#xff0c;在物体自身UV没有正确展开的情况下保证物体各个面能够避免贴图拉伸&#xff0c;比较适合Box型的物体。本来Position节点和Normal Vector节点应该选择Object选项&#xff0c;但是当时选择了World选项&#xff0c;主要是应对项目的…

在亚马逊云科技Amazon SageMaker上部署构建聊天机器人的开源大语言模型

开源大型语言模型&#xff08;LLM&#xff09;已经变得流行起来&#xff0c;研究人员、开发人员和组织都可以使用这些模型来促进创新和实验。这促进了开源社区开展合作&#xff0c;从而为LLM的开发和改进做出贡献。开源LLM提供了模型架构、训练过程和训练数据的透明度&#xff…

超大表格组件滚动渲染优化

引用自 摸鱼wiki 背景 业务中需要渲染一个最多有100列的表格&#xff0c;由于表格使用原生dom实现&#xff0c;因此会出现同屏有近1000个单元格同时绘制&#xff0c;在快速滑动时页面会产生卡顿&#xff0c;影响用户体验。 方案 如下图所示&#xff0c;由于用户显示屏区域有…

LeetCode算法二叉树—222. 完全二叉树的节点个数

目录 222. 完全二叉树的节点个数 - 力扣&#xff08;LeetCode&#xff09; 代码&#xff1a; 运行结果&#xff1a; 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能…

opencv开发环境配置

一、下载安装 打开opencv官方网站&#xff0c;opencv管网地址&#xff0c;选择下载的版本 双击安装包&#xff0c;选择安装路径&#xff0c;进行安装 安装完毕后&#xff0c;打开 注意&#xff1a;环境变量配置的bin路径不是build/bin&#xff0c;而是build/x64/vc16/bin …

chrome扩展程序开发请求接口报错

解决HTTPS站点请求HTTP接口服务后报错&#xff1a;the content must be served over HTTPS Mixed Content: The page at <URL> was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint <URL>. This content should also be served over HTTPS…

网络知识:内网、外网、宽带、带宽、流量、网速之间的联系?

相信很多人都不知道内网、外网、宽带、带宽、流量、网速之间的区别与联系&#xff0c;今天小编给大家介绍一下&#xff0c;希望对大家能有所帮助&#xff01; 一.带宽与宽带的区别是什么&#xff1f; 带宽是量词&#xff0c;指的是网速的大小&#xff0c;比如1Mbps的意思是一兆…

数据库系统课设——基于python+pyqt5+mysql的酒店管理系统(可直接运行)--GUI编程(2)

几个月之前写的一个项目&#xff0c;通过这个项目&#xff0c;你能学到关于数据库的触发器知识&#xff0c;python的基本语法&#xff0c;python一些第三方库的使用&#xff0c;包括python如何将前后端连接起来&#xff08;界面和数据&#xff09;&#xff0c;还有界面的设计等…

Guava限流器原理浅析

文章目录 基本知识限流器的类图使用示例 原理解析限流整体流程问题驱动1、限流器创建的时候会初始化令牌吗&#xff1f;2、令牌是如何放到桶里的&#xff1f;3、如果要获取的令牌数大于桶里的令牌数会怎么样4、令牌数量的更新会有并发问题吗 总结 实际工作中难免有限流的场景。…

振弦采集仪结合无线中继扩展应用岩土工程监测的解决方案

振弦采集仪结合无线中继扩展应用岩土工程监测的解决方案 岩土工程监测是现代工程建设不可或缺的一部分&#xff0c;其目的是确保工程安全和稳定。然而&#xff0c;在进行监测时常常面临许多挑战。传统的岩土工程监测方法需要大量的人力、物力和时间&#xff0c;而且往往难以采…