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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 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存储数据


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
存储 Java 关系型数据库
个人成绩信息管理系统【GUI/Swing+MySQL】(Java课设)
个人成绩信息管理系统【GUI/Swing+MySQL】(Java课设)
19 0
|
17天前
|
存储 Java 关系型数据库
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
24 1
|
17天前
|
存储 Java 关系型数据库
实验室设备管理系统【GUI/Swing+MySQL】(Java课设)
实验室设备管理系统【GUI/Swing+MySQL】(Java课设)
16 0
|
17天前
|
存储 Java 关系型数据库
冬奥会传统文化管理系统【GUI/Swing+MySQL】(Java课设)
冬奥会传统文化管理系统【GUI/Swing+MySQL】(Java课设)
8 0
|
17天前
|
存储 Java 关系型数据库
学生宿舍管理系统【GUI/Swing+MySQL】(Java课设)
学生宿舍管理系统【GUI/Swing+MySQL】(Java课设)
18 0
|
Java Android开发 Windows
Java Eclipse解决中文字体太小
解决方式有两种: 一、把字体设置为Courier New   操作步骤:打开Elcipse,点击菜单栏上的“Windows”——点击“Preferences”——点击“Genneral”——点击“Appearance”——点击“Colors and Font”——在右侧框展开“Basic”...
947 0
|
9天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
9天前
|
安全 Java 开发者
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第9天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将详细解析Java中的同步机制,包括synchronized关键字、Lock接口以及并发集合等,并探讨它们如何影响程序的性能。此外,我们还将讨论Java内存模型,以及它如何影响并发程序的行为。最后,我们将提供一些实用的并发编程技巧和最佳实践,帮助开发者编写出既线程安全又高效的Java程序。
22 3
|
11天前
|
Java
Java 并发编程:深入理解线程池
【4月更文挑战第8天】本文将深入探讨 Java 中的线程池技术,包括其工作原理、优势以及如何使用。线程池是 Java 并发编程的重要工具,它可以有效地管理和控制线程的执行,提高系统性能。通过本文的学习,读者将对线程池有更深入的理解,并能在实际开发中灵活运用。
|
9天前
|
算法 Java 开发者
Java中的多线程编程:概念、实现与性能优化
【4月更文挑战第9天】在Java编程中,多线程是一种强大的工具,它允许开发者创建并发执行的程序,提高系统的响应性和吞吐量。本文将深入探讨Java多线程的核心概念,包括线程的生命周期、线程同步机制以及线程池的使用。接着,我们将展示如何通过继承Thread类和实现Runnable接口来创建线程,并讨论各自的优缺点。此外,文章还将介绍高级主题,如死锁的预防、避免和检测,以及如何使用并发集合和原子变量来提高多线程程序的性能和安全性。最后,我们将提供一些实用的性能优化技巧,帮助开发者编写出更高效、更稳定的多线程应用程序。

推荐镜像

更多