Java超市收银系统(七、商品修改和删除)

news2024/12/27 16:04:36

引言

        当选择1时,显示 “输入商品编码:”,输入商品表中条码,若条码存在则删除商品表中的数据信息;若条码不存在,则显示 “你输入的编码不存在,请重新输入”。当选择2时,显示 “输入商品编码:”,输入商品表中条码,若条码不存在,则显示 “你输入的编码不存在,请重新输入”。若条码存在,显示 “输入商品编码:”,然后开始修改“商品名称、商品单价、商品供应商”,若不修改则直接回车即可。当选择3时,退出系统。

功能实现

        Driver 类是一个简单的控制台应用程序,用于管理超市的商品。它提供了删除和修改商品的功能,使用 ProductDAO 进行数据库操作,并通过 Product 类表示商品数据。而在最开始我们已经简单介绍了dao、vo、util的主要功能(Java超市收银系统(一、用户登录)_如何制作一个简单的收银系统-CSDN博客),所以这里主要介绍ui界面包的代码实现。

        这里提一嘴,dao作为功能函数包,主要是用来实现对数据库的操作,而数据库的基本操作就是增加、删除、修改、查询(增删改查),且Java实现主要过程如下:

1. 加载MySQL驱动

2. 建立与MySQL服务器的连接(前两条已经在util包中DBUtil类实现,直接调用该类中的连接函数即可)

3. 创建语句对象

4. 执行语句

5. 处理结果

6. 关闭连接

        main 方法运行一个无限循环,显示一个菜单供用户选择操作。 用户读取一个整数值来选择操作。程序根据用户选择调用相应的方法(deleteProduct 或 updateProduct)。如果用户选择退出,则调用 System.exit(0) 退出应用程序。

        根据商品编码删除商品。首先提示用户输入商品编码,使用 ProductDAO.queryByBarcode 查询数据库中的商品,检查编码是否与数据库中获取的商品的编码匹配。 如果匹配,使用ProductDAO.delete 删除商品,并确认删除成功。 如果不匹配,提示用户编码不存在。

        根据商品编码修改商品的详细信息。提示用户输入商品编码,使用 ProductDAO.queryByBarcode 查询数据库中的商品,检查商品是否存在,并且编码是否匹配。如果商品存在,提示用户更新商品的名称、单价和供应商。只有在提供了新的值时才会更新,调用 ProductDAO.update 保存修改,并确认修改成功。 如果商品不存在,提示用户编码不存在。

结果展示

完全代码

dao—ProductDAO

package dao;

import util.DBUtil;
import vo.Product;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ProductDAO {

    public static Product queryByBarcode(String barcode) {
        Connection con = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        Product product = null;
        try {
            con = DBUtil.getConnection();
            String sql = "SELECT * FROM t_shangping WHERE tiaoma = ?";
            pst = con.prepareStatement(sql);
            pst.setString(1, barcode);
            rs = pst.executeQuery();
            if (rs.next()) {
                product = new Product();
                product.setBarCode(rs.getString("tiaoma"));
                product.setProductName(rs.getString("mingcheng"));
                product.setPrice(rs.getFloat("danjia"));
                product.setSupply(rs.getString("gongyingshang"));
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            DBUtil.close(con, pst);
        }
        return product;
    }
    public static boolean update(Product product) {
        Connection con = null;
        PreparedStatement pst = null;
        boolean success = false;
        try {
            con = DBUtil.getConnection();
            String sql = "UPDATE t_shangping SET mingcheng = ?, danjia = ?, gongyingshang = ? WHERE tiaoma = ?";
            pst = con.prepareStatement(sql);
            pst.setString(1, product.getProductName());
            pst.setFloat(2, product.getPrice());
            pst.setString(3, product.getSupply());
            pst.setString(4, product.getBarCode());
            int rowsAffected = pst.executeUpdate();
            if (rowsAffected > 0) {
                success = true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(con, pst);
        }
        return success;
    }

    //delete 删除商品信息
    public static boolean delete(Product product) {
        Connection con = null;
        PreparedStatement pst = null;
        boolean success = false;
        try {
            con = DBUtil.getConnection();
            String sql = "DELETE FROM t_shangping WHERE tiaoma = ?";
            pst = con.prepareStatement(sql);
            pst.setString(1, product.getBarCode());
            int rowsAffected = pst.executeUpdate();
            if (rowsAffected > 0) {
                success = true;
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            DBUtil.close(con, pst);
        }
        return success;
    }

}

ui—Driver

package ui;

import dao.ProductDAO;
import vo.Product;

import java.util.Scanner;

public class Driver {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("===****超市商品管理维护====");
            System.out.println("1、删除商品");
            System.out.println("2、修改商品");
            System.out.println("3、退出");
            System.out.println("请选择(1-3):");
            int choice = scanner.nextInt();
            switch (choice) {
                case 1:
                    deleteProduct();
                    break;
                case 2:
                    updateProduct();
                    break;
                case 3:
                    System.exit(0);
                    break;
                default:
                    System.out.println("错误");
            }
        }
    }
    private static void deleteProduct() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入商品编码:");
        String barCode = scanner.nextLine();
        Product product = ProductDAO.queryByBarcode(barCode);
        if (barCode.equals(product.getBarCode())) {
            ProductDAO.delete(product);
            System.out.println("你成功删除该商品");
        }else {
            System.out.println("你输入的编码不存在,请重新输入");
        }
    }
    private static void updateProduct() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入商品编码:");
        String barCode = scanner.nextLine();
        Product product = ProductDAO.queryByBarcode(barCode);
        if (product != null && barCode.equals(product.getBarCode())) {
            System.out.println("商品名称(" + product.getProductName() + "):");
            String name = scanner.nextLine();
            if (!name.isEmpty()) {
                product.setProductName(name);
            }

            System.out.println("商品单价(" + product.getPrice() + "):");
            String priceStr = scanner.nextLine();
            if (!priceStr.isEmpty()) {
                float price = Float.parseFloat(priceStr);
                product.setPrice(price);
            }

            System.out.println("商品供应商(" + product.getSupply() + "):");
            String supplier = scanner.nextLine();
            if (!supplier.isEmpty()) {
                product.setSupply(supplier);
            }

            ProductDAO.update(product);
            System.out.println("成功修改该商品");
        } else {
            System.out.println("你输入的编码不存在,请重新输入");
        }
    }



}

util—DBUtil

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DBUtil {

    //驱动加载,只需执行一次
    static{
        String driveName = "com.mysql.cj.jdbc.Driver";
        try {
            Class.forName(driveName);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    //获取链接
    public static Connection getConnection(){
        String url = "jdbc:mysql://localhost:3306/sale?useUnicode=true&characterEncoding=utf-8";
        String user = "root";
        String password = "123456";
        Connection con = null;
        try {
            con = DriverManager.getConnection(url,user,password);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return con;
    }

    //关闭资源
    public static void close(Connection con, PreparedStatement pst){
        if(con!=null) {
            try {
                con.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        if(pst!=null) {
            try {
                pst.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }

}

vo—Product

package vo;

public class Product {
    private String barCode;
    private String productName;
    private float price;
    private String supply;

    public Product() {
    }

    public Product(String barCode, String productName, float price, String supply) {
        this.barCode = barCode;
        this.productName = productName;
        this.price = price;
        this.supply = supply;
    }

    public String getBarCode() {
        return barCode;
    }

    public void setBarCode(String barCode) {
        this.barCode = barCode;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public float getPrice() {
        return price;
    }

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

    public String getSupply() {
        return supply;
    }

    public void setSupply(String supply) {
        this.supply = supply;
    }
}

mysql—workbench/Navicat

/*
Navicat MySQL Data Transfer

Source Server         : localhost_3306
Source Server Version : 80032
Source Host           : localhost:3306
Source Database       : xiaoshou

Target Server Type    : MYSQL
Target Server Version : 80032
File Encoding         : 65001

Date: 2023-05-11 10:27:07
*/

SET FOREIGN_KEY_CHECKS=0;
use sale;
-- ----------------------------
-- Table structure for t_shangping
-- ----------------------------
DROP TABLE IF EXISTS `t_shangping`;
CREATE TABLE `t_shangping` (
  `tiaoma` varchar(255) NOT NULL,
  `mingcheng` varchar(255) DEFAULT NULL,
  `danjia` decimal(10,2) DEFAULT NULL,
  `gongyingshang` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`tiaoma`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
select * from t_shangping;

-- ----------------------------
-- Records of t_shangping
-- ----------------------------
INSERT INTO `t_shangping` VALUES ('100001', '手机', '4500.00', '华为');
INSERT INTO `t_shangping` VALUES ('100002', '鼠标', '61.00', '华为');
INSERT INTO `t_shangping` VALUES ('100003', '矿泉水', '2.50', '农夫山泉');
INSERT INTO `t_shangping` VALUES ('100004', '香烟', '20.00', '武汉卷烟厂');
INSERT INTO `t_shangping` VALUES ('100005', '牙膏', '4.50', '中华牙膏厂');
INSERT INTO `t_shangping` VALUES ('200001', '电脑', '4300.00', 'dell');
INSERT INTO `t_shangping` VALUES ('200002', '小明同学', '5.50', '武汉饮料集团');

-- ----------------------------
-- Table structure for t_shouyinmingxi
-- ----------------------------
DROP TABLE IF EXISTS `t_shouyinmingxi`;
CREATE TABLE `t_shouyinmingxi` (
  `liushuihao` varchar(255) NOT NULL,
  `tiaoma` varchar(255) DEFAULT NULL,
  `mingcheng` varchar(255) DEFAULT NULL,
  `danjia` decimal(10,0) DEFAULT NULL,
  `shuliang` int DEFAULT NULL,
  `shouyinyuan` varchar(255) DEFAULT NULL,
  `xiaoshoushijian` datetime DEFAULT NULL,
  PRIMARY KEY (`liushuihao`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
select * from t_shouyinmingxi;
-- ----------------------------
-- Records of t_shouyinmingxi
-- ----------------------------

-- ----------------------------
-- Table structure for t_yonghu
-- ----------------------------
DROP TABLE IF EXISTS `t_yonghu`;
CREATE TABLE `t_yonghu` (
  `yonghuming` varchar(255) NOT NULL,
  `mima` varchar(255) DEFAULT NULL,
  `xingming` varchar(255) DEFAULT NULL,
  `juese` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`yonghuming`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
select * from t_yonghu;
-- ----------------------------
-- Records of t_yonghu
-- ----------------------------
INSERT INTO `t_yonghu` VALUES ('mk', 'mk123', '明空', '管理员');
INSERT INTO `t_yonghu` VALUES ('jx', 'jx123', '瑾熙', '收银员');

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

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

相关文章

【等保测评】Mysql测评中使用的命令汇总

一、身份鉴别 a) 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换; mysql -uroot -p 查看登录是否需要输入口令鉴别用户身份 select user,host from mysql.user 查看是否存在相同账户…

OpenCV图像滤波(17)计算图像梯度函数Sobel()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 Sobel()函数用于计算图像的一阶、二阶、三阶或混合导数。它使用扩展的Sobel算子来执行这一任务。 在所有情况下,除了一种情况之外&am…

微信小程序 ==== 半屏打开小程序

目录 打开半屏小程序 调用流程 打开半屏小程序 半屏小程序环境判断 返回原小程序 使用限制 wx.openEmbeddedMiniProgram 功能描述 参数 wx.navigateBackMiniProgram 功能描述 示例代码 Object wx.getEnterOptionsSync() 功能描述 返回值 返回有效 referrerInfo…

数据可视化之旅,从数据洞察到图表呈现,可视化的产品设计

图表作为数据可视化的重要工具,是对原始数据进行深度加工与解读的有效手段,它助力我们洞悉数据背后的真相,使我们能更好地适应这个由数据驱动的世界。无论是工作汇报、项目实施、产品设计、后台界面还是数据大屏展示,图表都扮演着…

Transformer目标检测 | DETR论文解读

0. 前言 DETR是首个将Transformer应用到2D目标检测任务中的算法,由Facebook于2020年在论文《End-to-End Object Detection with Transformers》中提出。与传统目标检测算法不同的是,DETR将目标检测任务视为一个直接的集合预测问题,采用基于集…

Java同城宠物兼职遛狗系统小程序源码

🐾【同城新宠】遛狗兼职大揭秘!一键解锁“遛狗系统”,狗狗开心你也赚!✨ 🐾 开篇:告别孤单,狗狗也需要社交圈!👭 Hey小伙伴们,你家的小毛球是不是总在家里闷…

周杰伦又救了腾讯音乐一次

文丨郭梦仪 “一个周杰伦撑起了半个腾讯音乐”,近十年前对腾讯音乐的调侃,如今依然成立。 作为中国乐坛霸主,腾讯音乐(简称TME,1698.HK)过去打下的音乐版权江山,似乎已成其取之不尽的金矿&…

Github-vscode联合使用保姆及教程

Github-VScode联合使用保姆及教程 update: 2024/8/10 _Karen bluu 文章目录 Github-VScode联合使用保姆及教程1.Git 和 Github分别是什么2.安装2.1 git安装2.2 vscode安装 3. 使用Github3.1 拉取项目3.1.1 拉取方法3.1.2 注意事项 3.2 寻找合适的项目3.3 创建自己的github仓库3…

【Python学习-UI界面】PyQt5 小部件12-QStackedWidget 多页显示

功能和 QTabWidget 类似,它也有助于高效利用窗口的客户区域。 QStackedWidget 提供了一个窗口堆栈,每次只能查看一个窗口。它是建立在 QStackedLayout 之上的一个有用的布局。 样式如下: 右键可以变型为QTabWidget

养生生活视频素材去哪里找?养生系列视频素材网站分享

如何寻找高质量的养生视频素材。无论您是刚入行的新手,还是拥有众多粉丝的资深创作者,优质的养生视频素材都是吸引观众的关键。接下来,我将介绍一些顶级平台,帮助您轻松获取各类养生视频素材。 蛙学网 首先推荐的平台是蛙学网。这…

redisssion分布式锁

分布式锁的问题 基于setnx的分布式锁实现起来并不复杂,不过却存在一些问题。 锁误删问题 第一个问题就是锁误删问题,目前释放锁的操作是基于DEL,但是在极端情况下会出现问题。 例如,有线程1获取锁成功,并且执行完任…

Vue2 和 Vue3中EventBus使用差异

目录 前言一、EventBus 和 mitt 的对比二、Vue 2 中的 EventBus 使用实例2.1 创建 EventBus2.2 在组件中使用 EventBus2.2.1 组件 A - 发送事件2.2.2 组件 B - 监听事件 2.3 注意事项 三、Vue 3 中的 mitt 使用实例3.1 安装 mitt3.2 创建 mitt 实例3.3 在组件中使用 mitt3.3.1 …

【笔记】MSPM0G3507开发环境搭建——MSPM0G3507与RT_Thread(一)

环境搭建大体过程就不再赘述了,本文记录一下我刚开始搭建环境时踩过的坑以及一些不太懂的地方。后边会出MSPM0G3507RT-Thread 3.1.5相关的教程,感兴趣记得点点关注。 本篇使用立创地猛星MSPM0G3507开发板 参考文章: 【学习笔记一】搭建MSPM…

几种Word Embedding技术详解

NLP 中的词嵌入是一个重要术语,用于以实值向量的形式表示用于文本分析的单词。这是 NLP 的一项进步,提高了计算机更好地理解基于文本的内容的能力。它被认为是深度学习在解决具有挑战性的自然语言处理问题方面最重要的突破之一。 在这种方法中&#xff…

视觉SLAM中的数学基础:李群与李代数

在视觉SLAM(Simultaneous Localization and Mapping)中,理解和应用李群(Lie Group)与李代数(Lie Algebra)是非常关键的。李群与李代数为描述和处理空间中的连续变换(如旋转和平移&am…

【OCR 学习笔记】二值化——局部阈值方法

二值化——局部阈值方法 自适应阈值算法Niblack算法Sauvola算法 自适应阈值算法 自适应阈值算法1用到了积分图(Integral Image)的概念。积分图中任意一点 ( x , y ) (x,y) (x,y)的值是从图左上角到该点形成的矩形区域内所有值的和。即: I (…

逻辑回归之鸢尾花数据集多分类任务

目录 1.导入数据 2.定义多分类模型 3.准备测试数据 4.绘制决策边界 对于多分类任务,其实就是多个二分类任务。 先分黑色(标签为1)和其他(标签为0),在这个基础上再去分红色和绿色,此时就将红色标签设置为1,其他设置为0&#x…

关于 Lora中 Chirp Spread Spectrum(CSS)调制解调、发射接收以及同步估计的分析

本文结合相关论文对CSS信号的数学形式、调制解调、发射接收以及同步估计做了全面分析,希望有助于更好地理解lora信号 long-range (LoRa) modulation, also known as chirp spread spectrum (CSS) modulation, in LoRaWAN to ensure robust transmission over long d…

Unity(2022.3.38LTS) - 页面介绍

目录 A. 创建项目 B.Unity 编辑器页面 C. 自己点点 A. 创建项目 有多个编辑器版本的选择编辑器. 3D和2D的区别就是初始化的包不同,这些包打开项目之后都可以在自行下载,随意切换, B.Unity 编辑器页面 Unity 编辑器页面是一个高度集成且功能丰富的开发环境,为游…

ISE14.7后仿真、烧录教程

ISE14.7后仿真、烧录教程 ISE14.7后仿真、烧录教程 系统版本:win10,EDA工具版本:ISE14.7,modelsim SE 10.4,本文主要包含两部分内容,首先是基于ISE的后仿真,基于ISE和modelsim的联合后仿真&am…