Eclipse+Java+Swing+Mysql实现自助存取款机(ATM)系统(下)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Eclipse+Java+Swing+Mysql实现自助存取款机(ATM)系统

BalanceDAO.java

package dao;
import java.sql.ResultSet;
import db.DBUtil;
import entity.Account;
public class BalanceDAO {
  public void balanceDao(int accountNo) throws Exception {
    DBUtil db = new DBUtil();
    // 连接数据库
    db.getConnection();
    // 查询语句:根据账户查询余额
    String sql = "SELECT balance FROM account WHERE accountNo=" + accountNo;
    // 执行查询语句并且保存结果集
    ResultSet rs = db.executeQuery(sql, null);
    // 遍历输出查询结果
    while (rs.next()) {
      System.out.println("您好!您的账户目前余额为:" + rs.getDouble(1) + "元!");
    }
    // 关闭数据库连接,释放资源
    db.closeAll();
  }
  // 查询余额返回daoUI界面,返回String类型的值
  public String balanceDaoForUI(Account account) throws Exception {
    DBUtil db = new DBUtil();
    // 连接数据库
    db.getConnection();
    // 查询语句:根据账户查询余额
    String sql = "SELECT balance FROM account WHERE accountNo=" + account.getAccountNo();
    // 执行查询语句并且保存结果集
    ResultSet rs = db.executeQuery(sql, null);
    String balance = null;
    // // 遍历输出查询结果
    while (rs.next()) {
      // System.out.println("您好!您的账户目前余额为:" + rs.getDouble(1) + "元!");
      balance = rs.getDouble(1) + "";
    }
    // 关闭数据库连接,释放资源
    db.closeAll();
    return balance;
  }
}

LoginFrame.java

package view;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import dao.AccountDAO;
import entity.Account;
//import com.qst.dms.entity.User;
//import com.qst.dms.service.UserService;
//登录窗口
public class LoginFrame extends JFrame {
  // 主面板
  private JPanel p;
  // 标签
  private JLabel lblName, lblPwd;
  // 用户名,文本框
  private JTextField txtAccount;
  // 密码,密码框
  private JPasswordField txtPwd;
  // 确认、取消和注册,按钮
  private JButton btnOk, btnCancle, btnRegist;
  // 登录用户
  private static Account account;
  public static Account getAccount() {
    return account;
  }
  public static void setAccount(Account account) {
    LoginFrame.account = account;
  }
  // 账户DAO类
  private AccountDAO accountDao;
  // 构造方法
  public LoginFrame() {
    super("ATM自助存取款机");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // 实例化用户业务类对象
    accountDao = new AccountDAO();
    // 实例化组件
    p = new JPanel();
    // 使用null布局
    p.setLayout(null);
    lblName = new JLabel("账户:");
    lblPwd = new JLabel("密码:");
    txtAccount = new JTextField(20);
    txtPwd = new JPasswordField(20);
    txtPwd.setEchoChar('*');
    btnOk = new JButton("登录");
    btnOk.addActionListener(new LoginListener());
    btnCancle = new JButton("重置");
    btnCancle.addActionListener(new ResetListener());
    btnRegist = new JButton("注册");
    btnRegist.addActionListener(new RegistListener());
    lblName.setBounds(30, 40, 95, 25);
    lblPwd.setBounds(30, 105, 83, 40);
    txtAccount.setBounds(140, 40, 250, 35);
    txtPwd.setBounds(140, 108, 250, 35);
    btnOk.setBounds(75, 191, 75, 35);
    btnCancle.setBounds(211, 191, 75, 35);
    btnRegist.setBounds(351, 191, 75, 35);
    p.add(lblName);
    p.add(txtAccount);
    p.add(lblPwd);
    p.add(txtPwd);
    p.add(btnOk);
    p.add(btnCancle);
    p.add(btnRegist);
    // 主面板放入窗体中
    getContentPane().add(p);
    // 设置窗体大小和位置
    this.setSize(488, 343);
    // 设置窗口在屏幕中央
    this.setLocationRelativeTo(null);
    // 设置窗体初始可见
    this.setVisible(true);
  }
  // 监听类,负责处理登录按钮
  public class LoginListener implements ActionListener {
    // 重写actionPerFormed()方法,事件处理逻辑
    public void actionPerformed(ActionEvent e) {
      // 根据账户查询用户
      account = accountDao.findAccByNo(Integer.parseInt(txtAccount.getText().trim()));
      // 判断用户是否存在
      if (account != null) {
        // 判断输入的密码是否正确
        if (account.getPwd() == Integer.parseInt(new String(txtPwd.getPassword()))) {
          // 登录成功,隐藏登录窗口
          LoginFrame.this.setVisible(false);
          // 显示主窗口
          new MainFrame(account).setVisible(true);
        } else {
          // 输出提示信息
          // System.out.println("密码错误!请重新输入!");
          JOptionPane.showMessageDialog(null, "密码错误!请重新输入!", "错误提示", JOptionPane.ERROR_MESSAGE);
          // 清空密码框
          txtPwd.setText("");
        }
      } else {
        // 输出提示信息
        // System.out.println("该用户不存在,请先注册!");
        JOptionPane.showMessageDialog(null, "该用户不存在,请先注册!", "错误提示", JOptionPane.ERROR_MESSAGE);
      }
    }
  }
  // 监听类,负责处理重置按钮
  public class ResetListener implements ActionListener {
    // 重写actionPerFormed()方法,事件处理方法
    @Override
    public void actionPerformed(ActionEvent e) {
      // 清空文本框
      txtAccount.setText("");
      txtPwd.setText("");
    }
  }
  // 监听类,负责处理注册按钮
  public class RegistListener implements ActionListener {
    // 重写actionPerFormed()方法,事件处理方法
    public void actionPerformed(ActionEvent e) {
      // 创建注册窗口
      new RegistFrame().setVisible(true);
    }
  }
  // 主程序,整个应用程序的入口
  public static void main(String[] args) {
    new LoginFrame();
  }
}

RegistFrame.java

package view;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.plaf.synth.SynthSeparatorUI;
import dao.AccountDAO;
import dao.RegisterDAO;
import entity.Account;
public class RegistFrame extends JFrame {
  private JPanel contentPane;
  private JTextField textAccount;
  private JPasswordField textPwd;
  private JPasswordField textPwd1;
  private JTextField textName;
  /**
   * Launch the application.
   */
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      public void run() {
        try {
          RegistFrame frame = new RegistFrame();
          frame.setVisible(true);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });
  }
  /**
   * Create the frame.
   */
  public RegistFrame() {
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    setFont(new Font("宋体", Font.PLAIN, 12));
    setTitle("注册");
    // setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 561, 414);
    setLocationRelativeTo(null);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    contentPane.setLayout(new BorderLayout(0, 0));
    setContentPane(contentPane);
    JPanel panel = new JPanel();
    contentPane.add(panel, BorderLayout.CENTER);
    panel.setLayout(null);
    JLabel label = new JLabel("账 户:");
    label.setFont(new Font("宋体", Font.PLAIN, 18));
    label.setBounds(50, 35, 81, 21);
    panel.add(label);
    textAccount = new JTextField();
    textAccount.setBounds(146, 30, 243, 32);
    panel.add(textAccount);
    textAccount.setColumns(10);
    JLabel label_1 = new JLabel("密 码:");
    label_1.setFont(new Font("宋体", Font.PLAIN, 18));
    label_1.setBounds(50, 147, 81, 21);
    panel.add(label_1);
    JLabel label_2 = new JLabel("确认密码:");
    label_2.setFont(new Font("宋体", Font.PLAIN, 18));
    label_2.setBounds(50, 206, 101, 32);
    panel.add(label_2);
    JButton btnNewButton = new JButton("注册");
    btnNewButton.setFont(new Font("宋体", Font.PLAIN, 18));
    btnNewButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        String accountNo = textAccount.getText();
        String name = textName.getText();
        String pwd = new String(textPwd.getPassword());
        String pwd1 = new String(textPwd1.getPassword());
        if (null == accountNo || "".equals(accountNo)) {
          JOptionPane.showMessageDialog(null, "账户不能为空!", "输入错误", JOptionPane.ERROR_MESSAGE);
          return;
        }
        if (null == name || "".equals(name)) {
          JOptionPane.showMessageDialog(null, "账户姓名不能为空!", "输入错误", JOptionPane.ERROR_MESSAGE);
          return;
        }
        if (null == pwd || "".equals(pwd) || null == pwd1 || "".equals(pwd1)) {
          JOptionPane.showMessageDialog(null, "密码不能为空!", "输入错误", JOptionPane.ERROR_MESSAGE);
          return;
        } else if (!(pwd.equals(pwd1))) {
          JOptionPane.showMessageDialog(null, "两次输入密码不一样!", "输入错误", JOptionPane.ERROR_MESSAGE);
          return;
        }
        // 进行数据库注册
        Account account1 = new Account(Integer.parseInt(accountNo), Integer.parseInt(pwd), name, 0);
        // 创建注册账户DAO对象
        RegisterDAO rs = new RegisterDAO();
        // 调用注册方法registerDao(),进行数据库中的新增账户操作
        try {
          // DAO方法返回true才提示注册成功
          boolean temp = rs.registerDao(account1);
          if (temp) {
            JOptionPane.showMessageDialog(null, "注册成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
            // 注册成功,关闭注册窗口
            dispose();
          } else {
            JOptionPane.showMessageDialog(null, "账户已经存在!注册失败!", "错误提示", JOptionPane.ERROR_MESSAGE);
          }
        } catch (Exception e1) {
          e1.printStackTrace();
        }
      }
    });
    btnNewButton.setBounds(60, 280, 123, 29);
    panel.add(btnNewButton);
    JButton button = new JButton("重置");
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        textAccount.setText(null);
        textPwd.setText(null);
        textPwd1.setText(null);
      }
    });
    button.setFont(new Font("宋体", Font.PLAIN, 18));
    button.setBounds(300, 280, 123, 29);
    panel.add(button);
    textPwd = new JPasswordField();
    textPwd.setBounds(148, 144, 243, 32);
    panel.add(textPwd);
    textPwd1 = new JPasswordField();
    textPwd1.setBounds(148, 209, 243, 32);
    panel.add(textPwd1);
    JLabel label_3 = new JLabel("\u59D3 \u540D\uFF1A");
    label_3.setFont(new Font("宋体", Font.PLAIN, 18));
    label_3.setBounds(50, 90, 81, 21);
    panel.add(label_3);
    textName = new JTextField();
    textName.setColumns(10);
    textName.setBounds(146, 87, 243, 32);
    panel.add(textName);
  }
}


四、其他


1.其他系统实现


1.JavaWeb系统系列实现


Java+JSP实现学生图书管理系统


Java+JSP实现学生信息管理系统


Java+JSP实现用户信息管理系统


Java+Servlet+JSP实现航空订票系统


Java+Servlet+JSP实现学生选课管理系统


Java+Servlet+JSP实现学生成绩管理系统-1


Java+Servlet+JSP实现学生成绩管理系统-2


Java+Servlet+JSP实现宠物诊所管理系统


Java+SSM+Easyui实现网上考试系统


Java+SSH+Bootstrap实现在线考试系统(含论文)


Java+Springboot+Mybatis+Bootstrap+Maven实现网上商城系统


2.JavaSwing系统系列实现


Java+Swing实现斗地主游戏


Java+Swing实现图书管理系统


Java+Swing实现医院管理系统


Java+Swing实现仓库管理系统-1


Java+Swing实现仓库管理系统-2


Java+Swing实现考试管理系统


Java+Swing实现通讯录管理系统


Java+Swing实现停车场管理系统


Java+Swing实现学生信息管理系统


Java+Swing实现学生宿舍管理系统


Java+Swing实现学生选课管理系统


Java+Swing实现学生成绩管理系统


Java+Swing实现学校教材管理系统


Java+Swing实现学校教务管理系统


Java+Swing实现企业人事管理系统


Java+Swing实现电子相册管理系统


Java+Swing实现超市管理系统-TXT存储数据


Java+Swing实现自助取款机系统-TXT存储数据


Java+Swing实现宠物商店管理系统-TXT存储数据


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
72 26
|
15天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
25天前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
25 2
|
1月前
|
Java Android开发
Eclipse Java 构建路径
Eclipse Java 构建路径
33 3
|
1月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
11天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
80 15
|
5天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
|
12天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
16天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
24天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据

推荐镜像

更多
下一篇
DataWorks