「会员卡管理系统」 · Java Swing + MySQL JDBC开发

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS AI 助手,专业版
简介: 「会员卡管理系统」 · Java Swing + MySQL JDBC开发

一、语言和环境


1. 实现语言:Java。

2. 开发环境:MyEclipse+MySQL。


二、实现功能


使用 Java 技术开发一个会员卡管理系统,具体实现功能如下: 1. 程序启动显示主界面,点击查询按钮,显示所有会员卡信息,如图 1 所示


7.png

图 1 会员信息列表


2. 选中某行会员卡信息,点击删除按钮,提示是否删除,如图 2 所示


8.png

图 2 删除确认


3. 如果点击是按钮,则确认删除,如果点击否或取消,则取消删除操作。删除成功后    给出对应的提示信息,如图 3 所示。

20200921111934496.png


图 3 删除成功提示


三、数据库设计


1. 创建数据库(MemberDB

2. 创建会员卡信息表(members),结构如下:


9.png



四、具体要求及推荐实现步骤


1. 按以上数据库要求建库建表,并参考图 2 添加至少 、3 条测试数据


2. 搭建系统框架

(1)编写实体类。

(2)创建数据访问层,并编写 BaseDAO 和数据访问层代码。

(3)创建窗体。


3. 创建主窗体

(1)按照图 1,创建窗体 MainFrame,并添加相应的组件

(2)表格中的数据均来源于数据库,点击查询按钮显示所有数据。

(3)实现点击“删除”按钮,删除一条选中的会员卡记录。


五、注意事项


1. 将数据库导出成 sql 脚本文件

2. 将整个项目打包提交


六、评分标准


10.png


>>>实现代码:


数据库


SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for members
-- ----------------------------
DROP TABLE IF EXISTS `members`;
CREATE TABLE `members` (
  `memberID` int(11) NOT NULL AUTO_INCREMENT,
  `phone` varchar(32) NOT NULL,
  `name` varchar(32) NOT NULL,
  `sex` varchar(5) DEFAULT NULL,
  `openDate` date DEFAULT NULL,
  `balance` decimal(6,2) DEFAULT NULL,
  PRIMARY KEY (`memberID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of members
-- ----------------------------
INSERT INTO `members` VALUES ('1', '18214217246', '杨明金', '男', '2020-10-21', '200.00');
INSERT INTO `members` VALUES ('2', '18214217244', '李韬', '男', '2020-10-21', '500.00');


com.ynavc.Bean


member.java

package com.ynavc.Bean;
public class Members {
  int memberID;
  String phone;
  String name;
  String sex;
  String openDate;
  String balance;
  public Members() {
    super();
  }
  public Members(int memberID, String phone, String name, String sex, String openDate, String balance) {
    super();
    this.memberID = memberID;
    this.phone = phone;
    this.name = name;
    this.sex = sex;
    this.openDate = openDate;
    this.balance = balance;
  }
  public int getMemberID() {
    return memberID;
  }
  public void setMemberID(int memberID) {
    this.memberID = memberID;
  }
  public String getPhone() {
    return phone;
  }
  public void setPhone(String phone) {
    this.phone = phone;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getSex() {
    return sex;
  }
  public void setSex(String sex) {
    this.sex = sex;
  }
  public String getOpenDate() {
    return openDate;
  }
  public void setOpenDate(String openDate) {
    this.openDate = openDate;
  }
  public String getBalance() {
    return balance;
  }
  public void setBalance(String balance) {
    this.balance = balance;
  }
}


com.ynavc.Controller

Select.java


package com.ynavc.Controller;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import com.ynavc.Bean.Members;
import com.ynavc.Dao.DbConnection;
public class Select {
  public Object[][] getMebers(String sql) {
    ResultSet resultSet = DbConnection.query(sql);
    ArrayList<Members> list=new ArrayList<Members>();
    try {
      while (resultSet.next()) {
        Members m=new Members();
        m.setMemberID(resultSet.getInt(1));
        m.setPhone(resultSet.getString(2));
        m.setName(resultSet.getString(3));
        m.setSex(resultSet.getString(4));
        m.setOpenDate(resultSet.getString(5));
        m.setBalance(resultSet.getString(6));
        list.add(m);
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
    Object[][] objects=new Object[list.size()][6];
    for(int i=0;i<list.size();i++) {
      objects[i][0]=list.get(i).getMemberID();
      objects[i][1]=list.get(i).getPhone();
      objects[i][2]=list.get(i).getName();
      objects[i][3]=list.get(i).getSex();
      objects[i][4]=list.get(i).getOpenDate();
      objects[i][5]=list.get(i).getBalance();
    }
    return objects;
  }
}


Updata.java

package com.ynavc.Controller;
import com.ynavc.Dao.DbConnection;
public class Updata {
  //添加数据
  public int addData(String sql) {
    return DbConnection.updataInfo(sql);
  }
}


com.ynavc.Dao

DbConnection.java


package com.ynavc.Dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import com.mysql.jdbc.Statement;
public class DbConnection {
  //驱动类的类名
  private static final String DRIVERNAME="com.mysql.jdbc.Driver";
  //连接数据的URL路径
  private static final String URL="jdbc:mysql://127.0.0.1:3306/memberdb?useSSL=true&serverTimezone=GMT";
  //数据库登录账号
  private static final String USER="root";
  //数据库登录密码
  private static final String PASSWORD="root";
  //加载驱动
  static{
    try {
      Class.forName(DRIVERNAME);
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }
    //获取数据库连接
  public static Connection getConnection() {
            try {
    return DriverManager.getConnection(URL,USER,PASSWORD);
             } catch (SQLException e) { 
    e.printStackTrace();
             }
      return null;
  }
  //查询
  public static ResultSet query(String sql) {
    System.out.println(sql);
    //获取连接
    Connection connection=getConnection();
    PreparedStatement psd;
    try {
      psd = connection.prepareStatement(sql);
      return psd.executeQuery();
    } catch (SQLException e) {
      JOptionPane.showMessageDialog(null,"执行语句出错\n"+e.toString());
      e.printStackTrace();
    }
    return null;
  }
  //增、删、改、查
    public static int updataInfo(String sql) {
      System.out.println(sql);
      //获取连接
      Connection connection=getConnection();
      try {
        PreparedStatement psd=connection.prepareStatement(sql);
        return psd.executeUpdate();
      } catch (SQLException e) {
        JOptionPane.showMessageDialog(null,"执行语句出错\n"+e.toString());
        e.printStackTrace();
      }
      return 0;
    }
  //关闭连接
  public  static  void colse(ResultSet rs,Statement stmt,Connection  conn) throws Exception{
            try { if (rs != null){ rs.close(); }
                           if (stmt != null) { stmt.cancel(); }
     if (conn != null) { conn.close(); }
     } catch (Exception e) {
       e.printStackTrace(); throw new Exception();
     }
  }
}

com.ynavc.Test

Main.java

package com.ynavc.Test;
import com.ynavc.Vive.MainJframe;
public class Main {
  public static void main(String[] args) {
    new MainJframe().setVisible(true);
  }
}


com.ynavc.Vive

MainJframe.java


package com.ynavc.Vive;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.table.DefaultTableModel;
import com.ynavc.Controller.Select;
import com.ynavc.Controller.Updata;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class MainJframe extends JFrame {
  Select select = new Select();
  Updata updata = new Updata();
  Object[] header= {"序号","手机","姓名","性别","会员日期","卡余额"};
  String sql = "SELECT memberid,phone,name,sex,openDate,balance FROM members;";
  Object[][] data= select.getMebers(sql);
  DefaultTableModel df = new DefaultTableModel(data, header);
  int v=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
  int h=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
  public MainJframe() {
    super("会员卡管理系统");
    this.setBounds(0, 0, 600, 400);
    this.setLocationRelativeTo(null);//让窗口在屏幕中间显示
    this.setResizable(false);//让窗口大小不可改变
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//用户单击窗口的关闭按钮时程序执行的操作
    getContentPane().setLayout(null);
    JTable jTable = new JTable(df);
    JScrollPane jsp=new JScrollPane(jTable,v,h);
    jsp.setBounds(10, 60, 574, 301);
    getContentPane().add(jsp);
    JButton btnNewButton_1 = new JButton("查询");
    btnNewButton_1.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        String sql = "SELECT memberid,phone,name,sex,openDate,balance FROM members;";
        Object[][] data = select.getMebers(sql);
        df.setDataVector(data, header);
      }
    });
    btnNewButton_1.setBounds(301, 23, 93, 23);
    getContentPane().add(btnNewButton_1);
    JButton btnNewButton_2 = new JButton("删除");
    btnNewButton_2.setBounds(414, 23, 93, 23);
    getContentPane().add(btnNewButton_2);
    btnNewButton_2.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        if (jTable.getSelectedColumn()<0) {
          JOptionPane.showMessageDialog(null, "请选中要删除的数据!");
        } else {
          int ok = JOptionPane.showConfirmDialog(null,"您确定要删除该会员信息吗?!","删除提示",0,1);
          if(ok == JOptionPane.OK_OPTION){
            int id = Integer.parseInt(jTable.getValueAt(jTable.getSelectedRow(), 0).toString());
            String sql="delete from members where memberid="+id;
            int result = updata.addData(sql);
            if (result>0) {
              JOptionPane.showMessageDialog(null, "该会员删除成功!");
              JOptionPane.showMessageDialog(null, "记得点一下查询哦!");
            } else {
              JOptionPane.showMessageDialog(null, "删除失败!");
            }
                  }
        }
      }
    });
  }
  public static void main(String[] args) {
    new MainJframe().setVisible(true);
  }
}



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
9月前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
8月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
8月前
|
移动开发 监控 小程序
java家政平台源码,家政上门清洁系统源码,数据多端互通,可直接搭建使用
一款基于Java+SpringBoot+Vue+UniApp开发的家政上门系统,支持小程序、APP、H5、公众号多端互通。涵盖用户端、技工端与管理后台,支持多城市、服务分类、在线预约、微信支付、抢单派单、技能认证、钱包提现等功能,源码开源,可直接部署使用。
581 24
|
8月前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
596 8
|
8月前
|
安全 前端开发 Java
使用Java编写UDP协议的简易群聊系统
通过这个基础框架,你可以进一步增加更多的功能,例如用户认证、消息格式化、更复杂的客户端界面等,来丰富你的群聊系统。
296 11
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
Java与生成式AI:构建内容生成与创意辅助系统
生成式AI正在重塑内容创作、软件开发和创意设计的方式。本文深入探讨如何在Java生态中构建支持文本、图像、代码等多种生成任务的创意辅助系统。我们将完整展示集成大型生成模型(如GPT、Stable Diffusion)、处理生成任务队列、优化生成结果以及构建企业级生成式AI应用的全流程,为Java开发者提供构建下一代创意辅助系统的完整技术方案。
398 10
|
8月前
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
1017 4
|
9月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
8月前
|
机器学习/深度学习 分布式计算 Java
Java与图神经网络:构建企业级知识图谱与智能推理系统
图神经网络(GNN)作为处理非欧几里得数据的前沿技术,正成为企业知识管理和智能推理的核心引擎。本文深入探讨如何在Java生态中构建基于GNN的知识图谱系统,涵盖从图数据建模、GNN模型集成、分布式图计算到实时推理的全流程。通过具体的代码实现和架构设计,展示如何将先进的图神经网络技术融入传统Java企业应用,为构建下一代智能决策系统提供完整解决方案。
655 0
|
9月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
352 0