首页 > 编程语言 >Java超市收银系统(五、收银统计)

Java超市收银系统(五、收银统计)

时间:2024-08-13 20:55:32浏览次数:14  
标签:Java String java Sale 超市 收银 sql import public

引言

        收银统计功能,显示“请输入销售日期(yyyy-mm-dd):”,如果日期格式不正确,则显示“你输入的日期格式不正确,请重新输入”,输入正确后,查询统计当前日期所有的销售信息,输出显示格式如下:

功能实现

        首先,收银统计和前面介绍的Java超市收银系统(四、收银功能)-CSDN博客原理一致,收银功能用了两个表,商品表和销售明细表,那我们可以在他的数据库基础之上继续写收银统计功能,并且收银统计只要用到销售明细表即可(在大项目系统中,我们可以直接组合这两个功能),所以我们重点看主函数的功能实现及调用。

        程序提供了一个基于命令行的界面,允许用户输入销售日期,查询该日期的销售记录,并显示销售数据和统计信息。用户可以选择继续查询其他日期或退出程序。

获取用户输入的日期:

        SimpleDateFormat 用于格式化日期。

        通过 Scanner 获取用户输入的日期字符串。

        使用 Timestamp.valueOf 方法将日期字符串转换为 Timestamp 对象。如果输入格式不正确,会抛出 IllegalArgumentException 异常,提示用户重新输入。

封装销售数据:

        创建一个 Sale 对象并设置销售时间。

查询销售记录:

        调用 SaleDAO.query(sale) 方法获取销售记录列表。

显示销售记录:

        使用 SimpleDateFormat 格式化日期以显示。

        输出表头和销售记录,使用 printf 方法格式化输出。

计算和显示统计信息:

        计算销售总数、商品总件和销售总金额。

        输出统计信息。

继续查询或退出:

        提示用户是否继续查询。根据用户输入决定继续查询或退出程序。如果输入错误,提示错误信息。 

结果展示

完整代码

ui—Driver

package ui;

import dao.SaleDAO;
import vo.Sale;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Scanner;

public class Driver {
    public static void main(String[] args) {
        query();
    }

    public static void query() {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            Timestamp date = null;
            boolean validDate = false;

            while (!validDate) {
                System.out.println("请输入销售日期(yyyy-MM-dd):");
                String dateString = scanner.nextLine();
                try {
                    date = Timestamp.valueOf(dateString + " 00:00:00"); // 将日期字符串转换为 Timestamp 类型
                    validDate = true;
                } catch (IllegalArgumentException e) {
                    System.out.println("日期格式不正确,请重新输入。");
                }
            }

            // 将用户输入的日期包装到 Sale 对象中
            Sale sale = new Sale();
            sale.setSaleTime(date);

            // 调用查询函数并输出结果
            List<Sale> saleList = SaleDAO.query(sale);

            // 输出销售信息的标题
            String formattedDate = new SimpleDateFormat("yyyy年 MM月 dd日").format(date);
            System.out.println(formattedDate + "销售如下:");
            System.out.println("流水号\t商品名称\t单价\t数量\t金额\t时间\t收银员");
            System.out.println("=========================================");

            // 输出销售信息
            for (Sale s : saleList) {
                System.out.printf("%s\t%s\t%.2f\t%d\t%.2f\t%tT\t%s%n",
                        s.getLsh(), s.getProductName(), s.getPrice(), s.getCount(),
                        s.getPrice() * s.getCount(), s.getSaleTime(), s.getOperator());
            }

            // 计算销售总数、商品总件和销售总金额
            int totalSales = 0;
            int totalItems = 0;
            float totalAmount = 0;
            for (Sale s : saleList) {
                totalSales++;
                totalItems += s.getCount();
                totalAmount += s.getPrice() * s.getCount();
            }

            // 输出统计信息
            System.out.printf("销售总数:%d 商品总件:%d 销售总金额:%.2f%n日期:%s%n",
                    totalSales, totalItems, totalAmount, formattedDate);

            System.out.println("是否继续查询(y/n:)");
            String output = scanner.nextLine();
            if(output.equals("y")) {
                continue;
            }else if (output.equals("n")) {
                System.out.println("程序成功退出");
                System.exit(0);
            }else {
                System.out.println("错误");
            }
        }

    }
}

vo—Sale

package vo;

import java.sql.Timestamp;

public class Sale {
    private String lsh;
    private String barCode;
    private String productName;
    private float price;
    private int count;
    private String operator;
    private Timestamp saleTime;

    public Sale() {
    }

    public Sale(String lsh, String barCode, String productName, float price, int count, String operator, Timestamp saleTime) {
        this.lsh = lsh;
        this.barCode = barCode;
        this.productName = productName;
        this.price = price;
        this.count = count;
        this.operator = operator;
        this.saleTime = saleTime;
    }

    public String getLsh() {
        return lsh;
    }

    public void setLsh(String lsh) {
        this.lsh = lsh;
    }

    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 int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public String getOperator() {
        return operator;
    }

    public void setOperator(String operator) {
        this.operator = operator;
    }

    public Timestamp getSaleTime() {
        return saleTime;
    }

    public void setSaleTime(Timestamp saleTime) {
        this.saleTime = saleTime;
    }
}

dao—SaleDAO

package dao;

import util.DBUtil;
import vo.Sale;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class SaleDAO {
    public static List<Sale> query(Sale sale) {
        Connection con = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        List<Sale> saleList = new ArrayList<>();
        try {
            con = DBUtil.getConnection();
            StringBuilder sql = new StringBuilder("SELECT * FROM t_shouyinmingxi WHERE 1 = 1");

            // 根据 Sale 对象中的条件构建 SQL 查询语句

            if (sale.getSaleTime() != null) {
                sql.append(" AND DATE(xiaoshoushijian) = ?");
            }

            pst = con.prepareStatement(sql.toString());

            // 设置查询参数
            int paramIndex = 1;

            if (sale.getSaleTime() != null) {
                pst.setDate(paramIndex++, new java.sql.Date(sale.getSaleTime().getTime()));
            }

            rs = pst.executeQuery();
            while (rs.next()) {
                Sale s = new Sale();
                s.setLsh(rs.getString("liushuihao"));
                s.setBarCode(rs.getString("tiaoma"));
                s.setProductName(rs.getString("mingcheng"));
                s.setPrice(rs.getFloat("danjia"));
                s.setCount(rs.getInt("shuliang"));
                s.setOperator(rs.getString("shouyinyuan"));
                s.setSaleTime(rs.getTimestamp("xiaoshoushijian"));
                saleList.add(s);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            DBUtil.close(con, pst);
        }
        return saleList;
    }
}

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);
            }
        }
    }

}

mysql

详见Java超市收银系统(四、收银功能)-CSDN博客

标签:Java,String,java,Sale,超市,收银,sql,import,public
From: https://blog.csdn.net/m0_74325713/article/details/141069932

相关文章

  • 基于springboot的电商购物在线商城系统-JAVA.VUE【全套源码论文】
     博主介绍:......
  • 【JavaEE初阶】文件内容的读写—数据流
    ......
  • vue使用JavaScript运算符
    第一:加法运算符{{变量+n}}<p>num参与运算{{num+12}}</p>letvm=newVue({el:"#app",data:{num:101,isOK:true,message:'你......
  • TIOBE 8月编程排行榜出炉!Python 正在追赶 Java 的 TIOBE 指数记录
    2024年8月的TIOBE编程语言排行榜出炉了!对于开发者而言,这份排行榜不仅仅是编程语言的简单排序,更是行业趋势的风向标。而今年,Python的表现格外引人注目,它正在一步步逼近Java的TIOBE指数记录。让我们一起看看这两大编程巨头在本月的激烈角逐吧。为什么Python在这几年的排行榜中节节......
  • 【JAVA_Mysql】JAVA连接Mysql基本步骤
    ......
  • Java中类与对象的学习下
    Java中类与对象的学习下对象的创建和使用创建对象语法:类名对象名=new类名()使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)//这是我们定义的Person类classPerson{**上一个代码块的内容;**}//具体使用publicclassPersonTest{publicstati......
  • 我们常用的地铁卡/银行卡,竟然运行着一个 Java 虚拟机
    我们日常使用NFC卡可以用来刷地铁,进出门禁,但是你有没有想过,当我们使用一个NFC的IC卡刷卡进入地铁的时候,此时系统是如何知道我这个卡上有多少充值余额的?这个薄薄的NFC卡到底有什么魔力,除了可以刷卡进地铁,还可以去银行取钱,进出小区门禁。今天我在看到一些物联网的知识时,......
  • 解密Java中介者模式:代码实例带你深入理解
    1.引言:中介者模式的重要性在软件设计的世界里,模块间的相互依赖往往会导致系统的复杂性和维护难度的增加。中介者模式(MediatorPattern)作为一种行为设计模式,它的出现就是为了解决这一问题。通过引入一个中介者对象,它能够协调各个模块之间的通信,从而实现模块间的解耦,提高系......
  • javase-day06
    aFile_FileDemo01packagecom.se.aFile;/***绝对路径与相对路径的说明:*1.当前工作空间是/home/user/michael/**需求1:访问/home/user/michael/file1.txt*相对路径:file1.txt*绝对路径:/home/user/michael/file1.txt**需求2:访问/home/user/mi......
  • java 读取文件夹文件
    以下是多种不同的Java实现方法来读取文件夹中的文件:方法一:使用File类importjava.io.File;publicclassReadFilesInFolder{publicstaticvoidmain(String[]args){Filefolder=newFile("folderPath");File[]files=folder.listFiles();......