写一个java茶叶销售系统,链接数据库MYSQL,GUI程序

时间: 2023-08-16 07:08:03 浏览: 45
好的,以下是一个简单的Java茶叶销售系统的代码,使用了MySQL数据库和Swing GUI库。请注意,这只是一个示例,您可以根据自己的需求进行更改和调整。 首先,您需要设置MySQL数据库并创建一个名为“tea_sales”的数据库。在该数据库中,您需要创建一个名为“sales”的表格,具有以下字段: - id (INT, PRIMARY KEY, AUTO_INCREMENT) - name (VARCHAR(50)) - price (DOUBLE) - quantity (INT) - total (DOUBLE) 然后,您需要添加一些茶叶销售记录到该表中,以便程序可以显示和处理它们。 接下来,是Java代码: ```java import java.sql.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TeaSalesSystem extends JFrame implements ActionListener { JLabel nameLabel, priceLabel, quantityLabel, totalLabel; JTextField nameField, priceField, quantityField, totalField; JButton addButton, clearButton, refreshButton; JTable salesTable; JScrollPane scrollPane; DefaultTableModel model; public TeaSalesSystem() { super("茶叶销售系统"); // 初始化GUI组件 nameLabel = new JLabel("茶叶名称:"); priceLabel = new JLabel("单价:"); quantityLabel = new JLabel("数量:"); totalLabel = new JLabel("总价:"); nameField = new JTextField(20); priceField = new JTextField(10); quantityField = new JTextField(10); totalField = new JTextField(10); totalField.setEditable(false); addButton = new JButton("添加"); clearButton = new JButton("清空"); refreshButton = new JButton("刷新"); model = new DefaultTableModel(); salesTable = new JTable(model); model.addColumn("ID"); model.addColumn("茶叶名称"); model.addColumn("单价"); model.addColumn("数量"); model.addColumn("总价"); scrollPane = new JScrollPane(salesTable); // 设置GUI布局 JPanel inputPanel = new JPanel(new GridLayout(4, 2)); inputPanel.add(nameLabel); inputPanel.add(nameField); inputPanel.add(priceLabel); inputPanel.add(priceField); inputPanel.add(quantityLabel); inputPanel.add(quantityField); inputPanel.add(totalLabel); inputPanel.add(totalField); JPanel buttonPanel = new JPanel(new FlowLayout()); buttonPanel.add(addButton); buttonPanel.add(clearButton); buttonPanel.add(refreshButton); setLayout(new BorderLayout()); add(inputPanel, BorderLayout.NORTH); add(scrollPane, BorderLayout.CENTER); add(buttonPanel, BorderLayout.SOUTH); // 添加事件监听器 addButton.addActionListener(this); clearButton.addActionListener(this); refreshButton.addActionListener(this); // 显示GUI界面 setSize(600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource() == addButton) { // 处理添加按钮事件 String name = nameField.getText(); String priceStr = priceField.getText(); String quantityStr = quantityField.getText(); if (name.isEmpty() || priceStr.isEmpty() || quantityStr.isEmpty()) { JOptionPane.showMessageDialog(this, "请填写完整信息!", "错误", JOptionPane.ERROR_MESSAGE); } else { try { double price = Double.parseDouble(priceStr); int quantity = Integer.parseInt(quantityStr); double total = price * quantity; Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/tea_sales", "username", "password"); PreparedStatement stmt = conn.prepareStatement("INSERT INTO sales (name, price, quantity, total) VALUES (?, ?, ?, ?)"); stmt.setString(1, name); stmt.setDouble(2, price); stmt.setInt(3, quantity); stmt.setDouble(4, total); stmt.executeUpdate(); model.addRow(new Object[] { null, name, price, quantity, total }); salesTable.setModel(model); nameField.setText(""); priceField.setText(""); quantityField.setText(""); totalField.setText(""); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(this, "价格或数量格式不正确!", "错误", JOptionPane.ERROR_MESSAGE); } catch (SQLException ex) { JOptionPane.showMessageDialog(this, ex.getMessage(), "数据库错误", JOptionPane.ERROR_MESSAGE); } } } else if (e.getSource() == clearButton) { // 处理清空按钮事件 nameField.setText(""); priceField.setText(""); quantityField.setText(""); totalField.setText(""); } else if (e.getSource() == refreshButton) { // 处理刷新按钮事件 try { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/tea_sales", "username", "password"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM sales"); model.setRowCount(0); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); double price = rs.getDouble("price"); int quantity = rs.getInt("quantity"); double total = rs.getDouble("total"); model.addRow(new Object[] { id, name, price, quantity, total }); } salesTable.setModel(model); nameField.setText(""); priceField.setText(""); quantityField.setText(""); totalField.setText(""); } catch (SQLException ex) { JOptionPane.showMessageDialog(this, ex.getMessage(), "数据库错误", JOptionPane.ERROR_MESSAGE); } } } public static void main(String[] args) { new TeaSalesSystem(); } } ``` 在上面的代码中,您需要将“username”和“password”替换为您的MySQL数据库的用户名和密码。 该程序中的GUI界面包括四个文本字段和三个按钮。每当用户单击“添加”按钮时,程序将从文本字段中读取茶叶的名称,单价和数量,并将它们插入到MySQL数据库的“sales”表中。程序还会计算总价并将其添加到表中。每当用户单击“清空”按钮时,程序将清除文本字段。每当用户单击“刷新”按钮时,程序将从MySQL数据库中检索所有现有的销售记录,并将它们添加到表中。 请注意,该程序仅是一个示例,您可以根据自己的需求进行更改和调整。

相关推荐

最新推荐

recommend-type

如何在Java程序中访问mysql数据库中的数据并进行简单的操作

在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据并进行简单的操作,具体详情请看下文。 创建一个javaProject,并输入如下java代码: package ...
recommend-type

MySQL 修改数据库名称的一个新奇方法

主要介绍了MySQL 修改数据库名称的一个新奇方法,MySQL 修改数据库名的一个变通方法,需要的朋友可以参考下
recommend-type

某景点门票销售管理系统数据库系统设计

景点门票销售管理系统,其实现功能主要是景点售票、退票、查询、统计及票务管理等,同时还可以对优惠活动及门票类型进行设置。使售票员操作简单,便于理解。该系统能够实现景点售票管理的系统化、规范化和自动化;...
recommend-type

Java+mysql本地图片上传数据库及下载示例

本篇文章主要介绍了Java+mysql本地图片上传数据库及下载示例,具有一定的参加价值,有兴趣的可以了解一下。
recommend-type

如何基于java向mysql数据库中存取图片

主要介绍了如何基于java向mysql数据库中存取图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】MATLAB用遗传算法改进粒子群GA-PSO算法

![MATLAB智能算法合集](https://static.fuxi.netease.com/fuxi-official/web/20221101/83f465753fd49c41536a5640367d4340.jpg) # 2.1 遗传算法的原理和实现 遗传算法(GA)是一种受生物进化过程启发的优化算法。它通过模拟自然选择和遗传机制来搜索最优解。 **2.1.1 遗传算法的编码和解码** 编码是将问题空间中的解表示为二进制字符串或其他数据结构的过程。解码是将编码的解转换为问题空间中的实际解的过程。常见的编码方法包括二进制编码、实数编码和树形编码。 **2.1.2 遗传算法的交叉和
recommend-type

openstack的20种接口有哪些

以下是OpenStack的20种API接口: 1. Identity (Keystone) API 2. Compute (Nova) API 3. Networking (Neutron) API 4. Block Storage (Cinder) API 5. Object Storage (Swift) API 6. Image (Glance) API 7. Telemetry (Ceilometer) API 8. Orchestration (Heat) API 9. Database (Trove) API 10. Bare Metal (Ironic) API 11. DNS
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。