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

news2025/1/12 13:20:37

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

  • 一、系统介绍
    • 1.系统功能
    • 2.环境配置
    • 3.数据库
    • 4.工程截图
  • 二、系统展示
    • 1.登录页
      • 1.1登录成功
    • 2.注册系统
    • 3.取款
      • 3.1取款成功
    • 4.存款
      • 4.1 存款成功
    • 5.转账
    • 6.余额查询
    • 7.退出系统
  • 三、部分代码
    • DBUtil.java
    • LoginFrame.java
    • Account.java
  • 四、其他
    • 获取源码


一、系统介绍

1.系统功能

1.登录系统
2.注册系统
3.取款
4.存款
5.转账
6.余额查询
7.退出系统

2.环境配置

JDK版本:1.8
Mysql:5.7

3.数据库

/*
SQLyog Enterprise v12.09 (64 bit)
MySQL - 5.7.14 : Database - swing_atm
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`swing_atm` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `swing_atm`;

/*Table structure for table `account` */

DROP TABLE IF EXISTS `account`;

CREATE TABLE `account` (
  `accountNo` int(11) NOT NULL,
  `pwd` int(1) NOT NULL,
  `aName` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `balance` double(255,2) DEFAULT NULL,
  PRIMARY KEY (`accountNo`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;

/*Data for the table `account` */

insert  into `account`(`accountNo`,`pwd`,`aName`,`balance`) values (1,1,'张三',99.00),(2,2,'李四',346.00),(3,3,'xx',0.00);

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;



4.工程截图

在这里插入图片描述

二、系统展示

1.登录页

在这里插入图片描述

1.1登录成功

在这里插入图片描述

2.注册系统

在这里插入图片描述

3.取款

在这里插入图片描述

3.1取款成功

在这里插入图片描述

4.存款

在这里插入图片描述

4.1 存款成功

在这里插入图片描述

5.转账

在这里插入图片描述

6.余额查询

在这里插入图片描述

7.退出系统

在这里插入图片描述

三、部分代码

DBUtil.java

package cn.com.cdp.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class DBUtil {
    private static String driverName = "com.mysql.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/swing_atm?characterEncoding=utf8";
    private static String userName = "root";
    private static String password = "root";
    private Connection conn;
    private Statement stmt;
 
    public DBUtil() {
        try {
            Class.forName(driverName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
 
    /**
     * 连接数据库
     * 
     * @return
     * @throws SQLException
     */
    public Connection getConnection() throws SQLException {
        conn=DriverManager.getConnection(url, userName, password);
        return conn;
    }
    
 
    /**
     * @param sql 查询语句
     * @param conn 连接名
     * @param params 设置的字段
     * @return 返回结果集
     * @throws SQLException
     */ 
    public ResultSet executeQuery(String sql,Object[] params) throws SQLException {
    	 //获取预处理对象
        PreparedStatement ps = conn.prepareStatement(sql);
        //设置参数
        for (int i = 0; i < params.length; i++) {
            ps.setObject(i+1,params[i]);
        }
        return ps.executeQuery();
    	
    }
    
    /**
    *
    * @param sql cud语句
    * @param conn 连接名
    * @param params 设置的字段
    * @throws SQLException
    */
    public int executeUpdate(String sql,Object[] params) throws SQLException {
    	 //获取预处理对象
        PreparedStatement ps = conn.prepareStatement(sql);
        //设置参数
        for (int i = 0; i < params.length; i++) {
            ps.setObject(i+1,params[i]);
        }
        return ps.executeUpdate();
    }
    /**
     * 释放资源
     */
    public void closeAll() {
        try {
            if (conn != null) {
                conn.close();
            }
            if (stmt != null) {
                stmt.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
 
}

LoginFrame.java

package cn.com.cdp.view;


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 cn.com.cdp.model.Account;
import cn.com.cdp.dao.AccountDao;
 
//登录窗口
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) {
			System.out.println("==========="+txtAccount.getText());
			
			if("".equals(txtAccount.getText())) {
				JOptionPane.showMessageDialog(null, "账户不能为空", "错误提示", JOptionPane.WARNING_MESSAGE);
				return;
			}
			
			
			
			// 根据账户查询用户
			account = accountDao.findAccByNo(Integer.parseInt(txtAccount.getText().trim()));
			// 判断用户是否存在
			if ( null!= account) {
				
				
				
				// 判断输入的密码是否正确
				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();
	}
}




Account.java

package cn.com.cdp.model;

public class Account {
	private int accountNo;
	
	private int pwd;
	
	private String aName;
	
	private double balance;
	
	

	public Account() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Account(int accountNo, int pwd, String aName, double balance) {
		super();
		this.accountNo = accountNo;
		this.pwd = pwd;
		this.aName = aName;
		this.balance = balance;
	}

	public int getAccountNo() {
		return accountNo;
	}

	public void setAccountNo(int accountNo) {
		this.accountNo = accountNo;
	}

	public int getPwd() {
		return pwd;
	}

	public void setPwd(int pwd) {
		this.pwd = pwd;
	}

	public String getaName() {
		return aName;
	}

	public void setaName(String aName) {
		this.aName = aName;
	}

	public double getBalance() {
		return balance;
	}

	public void setBalance(double balance) {
		this.balance = balance;
	}
	
	
	
}




四、其他

获取源码

点击以下链接获取源码,数据库文件在swing_atm.sql文件里面。

Java+Swing+Mysql自助存取款机系统

Java+Swing+mysql5实现学生成绩管理系统(带分页)

Java+Swing+Mysql实现超市商品管理系统源码

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

Java+Swing+Mysql实现图书管理系统源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/86046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python编程 for循环注意点与大写转换案例

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 range方法 一for循环表达式 for循环表达式 与数字有关 与单位有关 前言…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java基于信息安全的无锡旅游服务系统5l83d

面对老师五花八门的设计要求&#xff0c;首先自己要明确好自己的题目方向&#xff0c;并且与老师多多沟通&#xff0c;用什么编程语言&#xff0c;使用到什么数据库&#xff0c;确定好了&#xff0c;在开始着手毕业设计。 1&#xff1a;选择课题的第一选择就是尽量选择指导老师…

MHA的故障切换你掌握了吗?

MHA的概述 什么是MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程…

用Python构建Amazon产品推荐系统!这项目价值能有2000吗?

引言 该项目的目标是部分重建Amazon电子类产品的推荐系统。 现在是十二月&#xff01;你是什么类型的购物者&#xff1f;双十二都购买了吗&#xff1f;你是把当天想购买的所有产品都保存起来&#xff0c;还是宁愿打开网站&#xff0c;查看带有巨大折扣的现场优惠呢&#xff1…

从单服务器模式到负载均衡设计

从单服务器模式到负载均衡设计 作者&#xff1a;Grey 原文地址&#xff1a; 博客园&#xff1a;从单服务器模式到负载均衡设计 CSDN&#xff1a;从单服务器模式到负载均衡设计 单服务器模型是最简单的一种架构&#xff0c;参考如下图 用户访问一个 URL&#xff0c;URL 会…

java计算机毕业设计基于安卓Android的校园外卖点餐APP

项目介绍 餐饮行业是一个传统的行业。根据当前发展现状,网络信息时代的全面普及,餐饮行业也在发生着变化,单就点餐这一方面,利用手机点单正在逐步进入人们的生活。传统的点餐方式,不仅会耗费大量的人力、时间,有时候还会出错。Android系统伴随智能手机为我们提供了新的方向。手…

基于转换器 (MMC) 技术和电压源转换器 (VSC) 的高压直流 (HVDC) 模型(MatlabSimulink实现)

目录 1 概述 2 主要模块说明 2.1 简化电网 2.2 转换器 1 2.3 直流电路 2.4 控制器 2.5 示波器和测量 3 讲解 3.1 参数设置 3.2 SPS 比较 3.3 结果比较 3.4 参考文献 4 Matlab代码实现 1 概述 1000 MW HVDC-MMC 互连的 SPS 模型。本文基于模块化多电平转换器 (MMC)…

计算机网络-数据链路层:以太网协议、ARP协议、MAC、MTU

目录 一、以太网协议 1. 认识以太网 2. 协议格式 二、 MAC地址 1. 认识MAC地址 2. 对比MAC地址与IP地址 三、ARP协议 1. 认识ARP协议 2. ARP协议的作用 3. ARP协议的工作流程 4. ARP欺骗攻击 四、MTU 1. 认识MTU 2. MTU对IP协议的影响&#xff08;了解&#xff…

在线教育系统源码讲解与代码分析

目前&#xff0c;许多行业已经开始向直播领域靠拢&#xff0c;例如直播带货、教育直播、娱乐直播等领域&#xff0c;想要在此分一杯羹&#xff0c;以在线教育系统来说&#xff0c;在2020年以后便进入了“白热化”&#xff0c;更多的直播、教育展现在大众视野中。在粉丝经济的时…

Linux的进程空间管理

用户态和内核态的划分 进程的虚拟地址空间&#xff0c;其实就是站在项目组的角度来看内存&#xff0c;所以我们就从task_struct出发来看。这里面有一个struct mm_struct结构来管理内存。 struct mm_struct *mm; 在struct mm_struct里面&#xff0c;有这样一个成员变量&#…

如何利用ArcGIS实现电子地图可视化表达?分析空间数据?提升SCI论文的层次?探究环境与生态因子对水体、土壤、大气污染物等影响?

查看原文>>>如何利用ArcGIS探究环境与生态因子对水体、土壤、大气污染物等影响 如何利用ArcGIS实现电子地图可视化表达&#xff1f;如何利用ArcGIS分析空间数据&#xff1f;如何利用ArcGIS提升SCI论文的层次&#xff1f;制图是地理数据展现的直观形式&#xff0c;也是…

ARM存储模型(数据存储、指令存储)

目录 1、ARM数据存储 (1) ARM数据类型 (2) ARM数据存储的方式 2、ARM的指令存储 (1) 指令集的分类 (2) 为什么ARM指令集的PC值与低2位无关&#xff1f; 1、ARM数据存储 (1) ARM数据类型 ARM采用32位架构&#xff0c;即ARM一次可以处理32bit的数据&#xff0c;基本的数据…

Linux--进程间通信(2)--共享内存--1126

1.共享内存的原理 进程A先申请一段内存空间&#xff0c;其页表映射到物理空间&#xff0c;进程B通过A的页表映射&#xff0c;将B的页表也同样映射到同一块物理空间。 释放共享内存 各自修改各自的页表指向并释放共享内存 2.共享内存的建立过程 头文件 comm.hpp #pragma o…

Windows系统dos命令之cmd

目录1. 使用cd命令快速切换到指定的盘符中1.1 参数说明1.2 cd 切换盘符2. 使用cd命令切换到指定的目录中2.1 切换指定目录3. 使用cd命令退回到上一层目录3.1 使用命令 ”cd ..“4. 使用cd命令直接退回到当前根目录下4.1 使用命令cd \1. 使用cd命令快速切换到指定的盘符中 cd 是…

JUC并发编程第十一篇,Java对象的内存布局

JUC并发编程第十一篇&#xff0c;Java对象的内存布局一、对象在堆内存中的存储布局1、对象头对象标记Mark Word类元信息&#xff08;类型指针&#xff09;2、实例数据3、对齐填充二、对象标记&#xff08;MarkWord&#xff09;布局与验证代码验证&#xff08;JOL&#xff09;一…

重点| 系统集成项目管理工程师考前50个知识点(4)

本文章总结了系统集成项目管理工程师考试背记50个知识点&#xff01;&#xff01;&#xff01; 帮助大家更好的复习&#xff0c;希望能对大家有所帮助 比较长&#xff0c;放了部分&#xff0c;需要可私信&#xff01;&#xff01; 26、编制范围管理计划的输出&#xff1a; 范…

Flink Window Function

窗口函数定义了要对窗口中收集的数据做的计算操作&#xff0c;根据处理的方式可以分为两类&#xff1a;增量聚合函数和全窗口函数。 文章目录1.增量聚合函数1.1 ReduceFunction1.2 AggregateFunction2.全窗口函数2.1 WindowFunction2.2 ProcessWindowFunction3.增量聚合和全窗口…

【MySQL】用户管理

文章目录用户管理用户信息创建用户删除用户修改用户密码用户权限用户赋权回收权限用户管理 如果我们只能使用root用户,这样存在安全隐患,因为root可以访问所有的数据库和表,这时,就需要使用MySQL的用户管理,从而限制某个特定的用户只能访问特定的数据库和表,并且对其权限作出一…

【51-订单模块-资源整合-整合SpringSession-订单中心核心逻辑-认证拦截-订单提交-订单生成逻辑-接口幂等性处理-接口幂等性解决方案】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

若依上面添加layui组件

1.因为若依本身有layui&#xff0c;所以不需要在引layui的css与js 2.下面是需要添加的 <div className"layui-btn-container" style"margin-top: 30px;"><button data-method"setTop" οnclick"sjhdekjshd()">多窗口模式…