教你用Java Swing实现自助取款机系统


Posted in Java/Android onJune 11, 2021

一、系统介绍

系统功能

  • 1.登录系统
  • 2.查询余额
  • 3.取款
  • 4.存款
  • 5.转账
  • 6.修改密码
  • 7.退出系统

JDK版本:1.8
存储数据形式:TXT存储数据

二、系统展示

1.登录页

教你用Java Swing实现自助取款机系统

2.主页

教你用Java Swing实现自助取款机系统

3.取款

教你用Java Swing实现自助取款机系统

4.存款

教你用Java Swing实现自助取款机系统

5.转账

教你用Java Swing实现自助取款机系统

6.修改密码

教你用Java Swing实现自助取款机系统

三、部分代码

LoginJFrame.java

package atmJFrame.myJFrame;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//登录界面继承MyJFrame
public class LoginJFrame extends MyJFrame {
	public LoginJFrame() {
		super("欢迎使用ATM机");
		// 设置窗体可关闭
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// 设置组件
		init();
		// 界面可视化
		setVisible(true);
	}

	// 初始化界面
	private void init() {
		// 创建面板对象,并定义为空布局
		JPanel jp = new JPanel(null);
		// 添加标签
		JLabel jl1 = new JLabel("账号:");
		JLabel jl2 = new JLabel("密码:");
		// 设置标签字体
		jl1.setFont(FONT_SIZE_20);
		jl2.setFont(FONT_SIZE_20);
		// 设置标签在面板中的位置
		jl1.setBounds(100, 100, 70, 70);
		jl2.setBounds(100, 250, 70, 70);
		// 添加文本框
		JTextField jtf = new JTextField(20);
		// 添加密码文本框
		JPasswordField jpf = new JPasswordField(20);
		// 设置文本框位置
		jtf.setBounds(200, 115, 200, 40);
		jpf.setBounds(200, 265, 200, 40);
		// 添加按钮
		JButton jb = new JButton("登录");
		// 设置按钮文字大小
		jb.setFont(FONT_SIZE_20);
		// 设置按钮位置及大小
		jb.setBounds(250, 400, 100, 50);
		// 设置面板背景颜色
		jp.setBackground(Color.YELLOW);
		// 内部类进行事件处理
		jb.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// 获取输入的账号和密码
				String userName = jtf.getText();
				String userPassword = new String(jpf.getPassword());
				// 验证是否正确
				boolean aBoolean = atm.login(userName, userPassword);
				if (aBoolean) {
					// 登录成功
					dispose();// 关闭登录界面
					// 打开功能界面
					new WorkingJFrame();
				} else
					showMessageDialog("账号或密码错误");// 调用父类弹窗方法
			}
		});
		// 添加组件
		jp.add(jl1);
		jp.add(jtf);
		jp.add(jl2);
		jp.add(jpf);
		jp.add(jb);
		// 窗体添加面板
		add(jp);
	}

	public static void main(String[] args) {
		new LoginJFrame();// 先创建登录界面
	}
}

CentreJFrame.java

package atmJFrame.myJFrame;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

//中间窗口,存钱、取钱、转账、修改密码界面的父类
public class CentreJFrame extends MyJFrame {
	// 空布局面板,自己设置组件位置及大小
	protected JPanel jp = new JPanel(null);
	// 输入金额标签
	protected JLabel jl = new JLabel("请输入金额:");
	// 输入金额文件框
	protected JTextField jtf = new JTextField(20);
	// 确认、取消按钮
	protected JButton jb1 = new JButton("确认");
	protected JButton jb2 = new JButton("取消");

	// 转账时转账账号标签
	protected JLabel jLabel = new JLabel("请输入转账账号:");
	// 转账时转账账号文本框
	protected JTextField jTextField = new JTextField(20);

	// 修改密码时新密码标签
	protected JLabel jLabelCP = new JLabel("请输入新密码(只能为数字):");
	// 修改密码时新密码文本框
	protected JTextField jTextFieldCP = new JTextField(20);

	// 提醒用户输入金额为100的倍数
	private JLabel jle = new JLabel("( 提示:只能输入100的倍数 )");

	public CentreJFrame(String str) {
		super(str);
		// 判断要进行的操作
		if (str.equals("转账"))
			init1();
		else if (str.equals("修改密码"))
			init2();
		else
			init();
		one();// 最后调用共有
	}

	// 取钱和取钱特有组件
	private void init() {
		// 输入金额标签,设置字体,位置及大小
		jl.setFont(FONT_SIZE_25);
		jl.setBounds(100, 100, 200, 100);
		// 输入金额文本框
		jtf.setBounds(300, 250, 200, 50);
		// 添加输入金额标签和输入金额文本框
		jp.add(jl);
		jp.add(jtf);
		setJLE();
	}

	// 转账特有组件
	private void init1() {
		init();
		// 输入账户标签
		jLabel.setFont(FONT_SIZE_25);
		jLabel.setBounds(100, 10, 200, 40);
		// 输入账户文本
		jTextField.setBounds(300, 80, 200, 50);
		// 添加输入账户标签和输入账户文本
		jp.add(jLabel);
		jp.add(jTextField);
	}

	// 修改密码特有组件
	private void init2() {
		// 输入新密码标签
		jLabelCP.setFont(FONT_SIZE_25);
		jLabelCP.setBounds(50, 100, 400, 70);
		// 输入新密码文本框
		jTextFieldCP.setBounds(300, 215, 200, 40);
		// 添加输入新密码标签和输入新密码文本框
		jp.add(jLabelCP);
		jp.add(jTextFieldCP);
	}

	// 共有组件及操作
	private void one() {
		// 按钮设置
		jb1.setFont(FONT_SIZE_20);
		jb2.setFont(FONT_SIZE_20);
		jb1.setBounds(300, 350, 100, 50);
		jb2.setBounds(450, 350, 100, 50);
		jp.add(jb1);
		jp.add(jb2);
		jp.setBackground(Color.GREEN);
		jb1.addActionListener(listener);
		jb2.addActionListener(listener);
		// 添加到窗体
		add(jp);
		setVisible(true);
	}

	// 设置提示
	private void setJLE() {
		jle.setFont(FONT_SIZE_10);
		jle.setBounds(100, 180, 300, 50);
		jp.add(jle);
	}

	// 创建监听器
	private ActionListener listener = new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {// 按钮被点击后
			String actionCommand = e.getActionCommand();// 获取按钮上的字
			switch (actionCommand) {
			case "确认":
				change();
				break;
			case "取消":
				new WorkingJFrame();// 创建功能界面
				dispose();// 关闭此界面
				break;
			}
		}
	};

	// 点击确认按钮执行的操作,子类重写覆盖实现各自功能
	protected void change() {
	}

	// 正则表达式判断输入是否为数字
	protected boolean isNumber(String str) {
		Pattern pattern = Pattern.compile("[0-9]*");
		Matcher isNum = pattern.matcher(str);
		if (!isNum.matches())
			return false;
		return true;
	}
}

CunMoneyJFrame.java

package atmJFrame.myJFrame;

//存钱界面
public class CunMoneyJFrame extends CentreJFrame {
	public CunMoneyJFrame() {
		super("存钱");
	}

	protected void change() {
		String s = jtf.getText();
		if (isNumber(s)) {
			Double money = Double.parseDouble(s);
			boolean b = atm.saveMoney(money);
			if (b)
				showMessageDialog("您的钱钱已存入\n您的账户余额为:" + atm.getMoney1());
			else
				showMessageDialog("您输入有误");
		} else
			showMessageDialog("您输入有误");
		jtf.setText("");
	}

}

GiveMoneyJFrame.java

package atmJFrame.myJFrame;

//转账界面
public class GiveMoneyJFrame extends CentreJFrame {
	public GiveMoneyJFrame() {
		super("转账");
	}

	protected void change() {
		String s = jTextField.getText();
		boolean b = atm.anotherUser(s);
		if (b) {
			// 获取输入金额
			String s1 = jtf.getText();
			if (isNumber(s1)) {// 如果输入是数字
				Double money = Double.parseDouble(s1);
				atm.giveMoney(money);
				showMessageDialog("钱已转入\n您的账户余额为:" + atm.getMoney1());
			} else
				showMessageDialog("您输入有误");
		} else
			showMessageDialog("您输入有误");
		new WorkingJFrame();// 创建功能界面
		dispose();// 关闭此界面
	}
}

QuMoneyJFrame.java

package atmJFrame.myJFrame;

//取钱界面
public class QuMoneyJFrame extends CentreJFrame {
	public QuMoneyJFrame() {
		super("取钱");
	}

	protected void change() {
		String s = jtf.getText();
		if (isNumber(s)) {
			Double money = Double.parseDouble(s);
			boolean b = atm.quMoney(money);
			if (b) {
				showMessageDialog("请收好您的钱\n您的账户余额为:" + atm.getMoney1());
			} else
				showMessageDialog("您输入有误");
		} else
			showMessageDialog("您输入有误");
		jtf.setText("");
	}

}

到此这篇关于教你用Java Swing实现自助取款机系统的文章就介绍到这了,更多相关Java Swing自助取款机内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
分享一些Java的常用工具
Jun 11 Java/Android
Java Optional<Foo>转换成List<Bar>的实例方法
Jun 20 Java/Android
jackson json序列化实现首字母大写,第二个字母需小写
Jun 29 Java/Android
Java基础-封装和继承
Jul 02 Java/Android
java中用float时,数字后面加f,这样是为什么你知道吗
Sep 04 Java/Android
Spring-cloud Config Server的3种配置方式
Sep 25 Java/Android
Java异常处理try catch的基本用法
Dec 06 Java/Android
SSM项目使用拦截器实现登录验证功能
Jan 22 Java/Android
Android Rxjava3 使用场景详解
Apr 07 Java/Android
java开发双人五子棋游戏
May 06 Java/Android
ConditionalOnProperty配置swagger不生效问题及解决
Jun 14 Java/Android
MyBatis在注解上使用动态SQL方式(@select使用if)
Jul 07 Java/Android
springboot @ConfigurationProperties和@PropertySource的区别
总结一些Java常用的加密算法
Jun 11 #Java/Android
手把手教你用SpringBoot将文件打包成zip存放或导出
为什么在foreach循环中JAVA集合不能添加或删除元素
Jun 11 #Java/Android
源码解读Spring-Integration执行过程
浅谈Java实现分布式事务的三种方案
分享一些Java的常用工具
You might like
多php服务器实现多session并发运行
2006/10/09 PHP
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
PHP类的封装与继承详解
2015/09/29 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
JavaScript中的splice方法用法详解
2016/07/20 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
解决vue attr取不到属性值的问题
2018/09/18 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
使用Python生成随机密码的示例分享
2016/02/18 Python
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
python递归实现快速排序
2018/08/18 Python
python实现石头剪刀布小游戏
2021/01/20 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
印度民族服装购物网站:BIBA
2019/08/05 全球购物
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
干部现实表现材料
2014/02/13 职场文书
优秀管理者获奖感言
2014/02/17 职场文书
男人帮观后感
2015/06/18 职场文书
2015年教务主任工作总结
2015/07/22 职场文书
2015年高三毕业班班主任工作总结
2015/10/22 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
Python实现归一化算法详情
2022/03/18 Python