教你用Java Swing實(shí)現(xiàn)自助取款機(jī)系統(tǒng)
一、系統(tǒng)介紹
系統(tǒng)功能
- 1.登錄系統(tǒng)
- 2.查詢余額
- 3.取款
- 4.存款
- 5.轉(zhuǎn)賬
- 6.修改密碼
- 7.退出系統(tǒng)
JDK版本:1.8
存儲(chǔ)數(shù)據(jù)形式:TXT存儲(chǔ)數(shù)據(jù)
二、系統(tǒng)展示
1.登錄頁

2.主頁

3.取款

4.存款

5.轉(zhuǎn)賬

6.修改密碼

三、部分代碼
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機(jī)");
// 設(shè)置窗體可關(guān)閉
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 設(shè)置組件
init();
// 界面可視化
setVisible(true);
}
// 初始化界面
private void init() {
// 創(chuàng)建面板對(duì)象,并定義為空布局
JPanel jp = new JPanel(null);
// 添加標(biāo)簽
JLabel jl1 = new JLabel("賬號(hào):");
JLabel jl2 = new JLabel("密碼:");
// 設(shè)置標(biāo)簽字體
jl1.setFont(FONT_SIZE_20);
jl2.setFont(FONT_SIZE_20);
// 設(shè)置標(biāo)簽在面板中的位置
jl1.setBounds(100, 100, 70, 70);
jl2.setBounds(100, 250, 70, 70);
// 添加文本框
JTextField jtf = new JTextField(20);
// 添加密碼文本框
JPasswordField jpf = new JPasswordField(20);
// 設(shè)置文本框位置
jtf.setBounds(200, 115, 200, 40);
jpf.setBounds(200, 265, 200, 40);
// 添加按鈕
JButton jb = new JButton("登錄");
// 設(shè)置按鈕文字大小
jb.setFont(FONT_SIZE_20);
// 設(shè)置按鈕位置及大小
jb.setBounds(250, 400, 100, 50);
// 設(shè)置面板背景顏色
jp.setBackground(Color.YELLOW);
// 內(nèi)部類進(jìn)行事件處理
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 獲取輸入的賬號(hào)和密碼
String userName = jtf.getText();
String userPassword = new String(jpf.getPassword());
// 驗(yàn)證是否正確
boolean aBoolean = atm.login(userName, userPassword);
if (aBoolean) {
// 登錄成功
dispose();// 關(guān)閉登錄界面
// 打開功能界面
new WorkingJFrame();
} else
showMessageDialog("賬號(hào)或密碼錯(cuò)誤");// 調(diào)用父類彈窗方法
}
});
// 添加組件
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();// 先創(chuàng)建登錄界面
}
}
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;
//中間窗口,存錢、取錢、轉(zhuǎn)賬、修改密碼界面的父類
public class CentreJFrame extends MyJFrame {
// 空布局面板,自己設(shè)置組件位置及大小
protected JPanel jp = new JPanel(null);
// 輸入金額標(biāo)簽
protected JLabel jl = new JLabel("請(qǐng)輸入金額:");
// 輸入金額文件框
protected JTextField jtf = new JTextField(20);
// 確認(rèn)、取消按鈕
protected JButton jb1 = new JButton("確認(rèn)");
protected JButton jb2 = new JButton("取消");
// 轉(zhuǎn)賬時(shí)轉(zhuǎn)賬賬號(hào)標(biāo)簽
protected JLabel jLabel = new JLabel("請(qǐng)輸入轉(zhuǎn)賬賬號(hào):");
// 轉(zhuǎn)賬時(shí)轉(zhuǎn)賬賬號(hào)文本框
protected JTextField jTextField = new JTextField(20);
// 修改密碼時(shí)新密碼標(biāo)簽
protected JLabel jLabelCP = new JLabel("請(qǐng)輸入新密碼(只能為數(shù)字):");
// 修改密碼時(shí)新密碼文本框
protected JTextField jTextFieldCP = new JTextField(20);
// 提醒用戶輸入金額為100的倍數(shù)
private JLabel jle = new JLabel("( 提示:只能輸入100的倍數(shù) )");
public CentreJFrame(String str) {
super(str);
// 判斷要進(jìn)行的操作
if (str.equals("轉(zhuǎn)賬"))
init1();
else if (str.equals("修改密碼"))
init2();
else
init();
one();// 最后調(diào)用共有
}
// 取錢和取錢特有組件
private void init() {
// 輸入金額標(biāo)簽,設(shè)置字體,位置及大小
jl.setFont(FONT_SIZE_25);
jl.setBounds(100, 100, 200, 100);
// 輸入金額文本框
jtf.setBounds(300, 250, 200, 50);
// 添加輸入金額標(biāo)簽和輸入金額文本框
jp.add(jl);
jp.add(jtf);
setJLE();
}
// 轉(zhuǎn)賬特有組件
private void init1() {
init();
// 輸入賬戶標(biāo)簽
jLabel.setFont(FONT_SIZE_25);
jLabel.setBounds(100, 10, 200, 40);
// 輸入賬戶文本
jTextField.setBounds(300, 80, 200, 50);
// 添加輸入賬戶標(biāo)簽和輸入賬戶文本
jp.add(jLabel);
jp.add(jTextField);
}
// 修改密碼特有組件
private void init2() {
// 輸入新密碼標(biāo)簽
jLabelCP.setFont(FONT_SIZE_25);
jLabelCP.setBounds(50, 100, 400, 70);
// 輸入新密碼文本框
jTextFieldCP.setBounds(300, 215, 200, 40);
// 添加輸入新密碼標(biāo)簽和輸入新密碼文本框
jp.add(jLabelCP);
jp.add(jTextFieldCP);
}
// 共有組件及操作
private void one() {
// 按鈕設(shè)置
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);
}
// 設(shè)置提示
private void setJLE() {
jle.setFont(FONT_SIZE_10);
jle.setBounds(100, 180, 300, 50);
jp.add(jle);
}
// 創(chuàng)建監(jiān)聽器
private ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {// 按鈕被點(diǎn)擊后
String actionCommand = e.getActionCommand();// 獲取按鈕上的字
switch (actionCommand) {
case "確認(rèn)":
change();
break;
case "取消":
new WorkingJFrame();// 創(chuàng)建功能界面
dispose();// 關(guān)閉此界面
break;
}
}
};
// 點(diǎn)擊確認(rèn)按鈕執(zhí)行的操作,子類重寫覆蓋實(shí)現(xiàn)各自功能
protected void change() {
}
// 正則表達(dá)式判斷輸入是否為數(shù)字
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;
//轉(zhuǎn)賬界面
public class GiveMoneyJFrame extends CentreJFrame {
public GiveMoneyJFrame() {
super("轉(zhuǎn)賬");
}
protected void change() {
String s = jTextField.getText();
boolean b = atm.anotherUser(s);
if (b) {
// 獲取輸入金額
String s1 = jtf.getText();
if (isNumber(s1)) {// 如果輸入是數(shù)字
Double money = Double.parseDouble(s1);
atm.giveMoney(money);
showMessageDialog("錢已轉(zhuǎn)入\n您的賬戶余額為:" + atm.getMoney1());
} else
showMessageDialog("您輸入有誤");
} else
showMessageDialog("您輸入有誤");
new WorkingJFrame();// 創(chuàng)建功能界面
dispose();// 關(guān)閉此界面
}
}
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("請(qǐng)收好您的錢\n您的賬戶余額為:" + atm.getMoney1());
} else
showMessageDialog("您輸入有誤");
} else
showMessageDialog("您輸入有誤");
jtf.setText("");
}
}
到此這篇關(guān)于教你用Java Swing實(shí)現(xiàn)自助取款機(jī)系統(tǒng)的文章就介紹到這了,更多相關(guān)Java Swing自助取款機(jī)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
親測(cè)SpringBoot參數(shù)傳遞及@RequestBody注解---踩過的坑及解決
這篇文章主要介紹了親測(cè)SpringBoot參數(shù)傳遞及@RequestBody注解---踩過的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
kafka運(yùn)維consumer-groups.sh消費(fèi)者組管理
這篇文章主要為大家介紹了kafka運(yùn)維consumer-groups.sh消費(fèi)者組管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Java實(shí)現(xiàn)整合文件上傳到FastDFS的方法詳細(xì)
FastDFS是一個(gè)開源的輕量級(jí)分布式文件系統(tǒng),對(duì)文件進(jìn)行管理,功能包括:文件存儲(chǔ)、文件同步、文件上傳、文件下載等,解決了大容量存儲(chǔ)和負(fù)載均衡的問題。本文將提供Java將文件上傳至FastDFS的示例代碼,需要的參考一下2022-02-02
mybatisPlus實(shí)現(xiàn)倒序拼接字符串
這篇文章主要介紹了mybatisPlus實(shí)現(xiàn)倒序拼接字符串方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Java中獲取類路徑classpath的簡(jiǎn)單方法(推薦)
下面小編就為大家?guī)硪黄狫ava中獲取類路徑classpath的簡(jiǎn)單方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09
springboot項(xiàng)目實(shí)現(xiàn)斷點(diǎn)續(xù)傳功能
這篇文章主要介紹了springboot項(xiàng)目實(shí)現(xiàn)斷點(diǎn)續(xù)傳,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08
java并發(fā)學(xué)習(xí)之Executor源碼解析
這篇文章主要為大家介紹了java并發(fā)學(xué)習(xí)之Executor源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07

