java GUI實(shí)現(xiàn)ATM機(jī)系統(tǒng)(3.0版)
寫個(gè)小項(xiàng)目了解一下GUI。用java GUI實(shí)現(xiàn)銀行ATM自動(dòng)取款機(jī),實(shí)現(xiàn)登錄界面、登錄成功界面、各個(gè)操作功能實(shí)現(xiàn)界面。
用java GUI實(shí)現(xiàn)一個(gè)ATM機(jī)系統(tǒng)(3.0版)
設(shè)計(jì)思路
設(shè)計(jì)兩個(gè)包(bank包,atmJFrame包)
1、bank包:
(1)、ATM類:實(shí)現(xiàn)用戶各種操作;
(2)、Data類:從user文件中獲取所有用戶信息,并返回要找的用戶,再將修改完之后的用戶信息寫入user文件中;
(3)、user文件儲(chǔ)存所有用戶信息。
2、atmJFrame包:
(1)、MyJFrame類:自己創(chuàng)建的界面父類;
(2)、LoginJFrame:登錄界面;
(3)、WorkingJFrame:登錄成功后顯示的功能界面;
(4)、CentreJFrame:中間窗口,存錢、取錢、轉(zhuǎn)賬、修改密碼界面的父類;
(5)、QuMoneyJFrame:取錢界面;
(6)、CunMoneyJFrame:存錢界面;
(7)、GiveMoneyJFrame:轉(zhuǎn)賬界面;
(8)、ChangePasswordJFrame:修改密碼界面。
源碼
bank包
package bank; //ATM類 public class ATM { //有一個(gè)類操作數(shù)據(jù)的類 private Data data = new Data(); //ATM機(jī)里的數(shù)據(jù) private String userName;//用戶賬號(hào)且唯一 private String userPassword;//用戶密碼 private double userMoney;//用戶賬戶里的錢 private String user;//使用該臺(tái)ATM機(jī)的用戶全部信息 private String antherUser;//被轉(zhuǎn)賬用戶 //登錄方法 public boolean login(String userNameString,String userPassword1){ boolean b= false; String x = data.backUser(userNameString); //判斷賬戶是否存在 if(!x.equals("null")){ user = x;//獲取用戶所有信息 String[] str = user.split("\\*");//將用戶信息分割 userName = str[0];//用戶名 userPassword = str[1];//用戶密碼 userMoney = Double.parseDouble(str[2]);//用戶余額 //密碼正確 if(userPassword.equals(userPassword1)) b = true; } return b; } //獲取賬戶余額 public Double getMoney1(){ return userMoney; } //存錢 public boolean saveMoney(Double money1){ boolean b = false; if(money1%100 == 0) { //如果存的錢正確 userMoney = userMoney + money1;//存上 b = true; } return b; } //取錢 public boolean quMoney(Double money1){ boolean b = false; if(money1%100 == 0 && money1 <= userMoney){ userMoney = userMoney - money1; b = true; } return b; } //只判斷用戶賬戶是否存在 public boolean anotherUser(String userName1){ boolean b = false; String inUserName = userName1; String str = data.backUser(inUserName); //如果該賬戶存在 if(!str.equals("null")) { antherUser = str;//獲取被轉(zhuǎn)賬賬戶所有信息 b = true; } return b; } //進(jìn)行轉(zhuǎn)賬 public void giveMoney(Double money1){ String[] str1 = antherUser.split("\\*");//分割 Double x = Double.parseDouble(str1[2]);//獲取被轉(zhuǎn)賬賬戶余額 x = x + money1; userMoney = userMoney - money1; antherUser = changeUser(str1[0], str1[1], x);//改變被轉(zhuǎn)賬賬戶信息 data.saveData(antherUser,false);//將用戶信息傳給Data類保存被轉(zhuǎn)賬賬戶信息 } //修改密碼實(shí)現(xiàn) public void changePassword(String newPassword){ userPassword = newPassword; } //辦完業(yè)務(wù)后修改用戶信息 private String changeUser(String n,String w,Double d){ String str = n + "*" + w + "*" + d; return str; } //辦完所有業(yè)務(wù) public void over(){ user = changeUser(userName,userPassword,userMoney); data.saveData(user,true); } }
package bank; import java.io.*; import java.util.HashMap; import java.util.Map; import java.util.Set; //數(shù)據(jù)類是文件和ATM機(jī)之間操作用戶信息的橋梁 public class Data { //Map儲(chǔ)存數(shù)據(jù)庫(kù)里所有用戶的全部信息 Map<String,String> userData = new HashMap(); //返回用戶的信息 private String user; //創(chuàng)建數(shù)據(jù)類加載所有用戶信息 public Data(){ getUsers(); } private void getUsers(){ String str; String[] string; File file = new File("src\\bank\\user"); FileReader fileReader = null; BufferedReader bufferedReader = null; try{ fileReader = new FileReader(file); bufferedReader = new BufferedReader(fileReader); while((str = bufferedReader.readLine())!=null){ string = str.split("\\*",2); userData.put(string[0],string[1]); } }catch(Exception e){ e.printStackTrace(); if((fileReader!=null)&&(bufferedReader!=null)){ try { bufferedReader.close(); fileReader.close(); } catch (IOException e1) { e1.printStackTrace(); } } } } //告訴用戶名,如果找到返回該用戶所有信息,沒(méi)找到返回null public String backUser(String userName){ String str = "null"; if(userData.containsKey(userName)) str = userName + "*" + userData.get(userName); user = str; return user; } //修改用戶數(shù)據(jù)并儲(chǔ)存在userData圖里 public void saveData(String user,boolean aBoolean){ String[] string = user.split("\\*",2); userData.remove(string[0]); userData.put(string[0],string[1]); if(aBoolean)//判斷用戶是否操作結(jié)束 changeUser(); } //用戶操作完,將userData里所有的用戶再寫入文件里 private void changeUser(){ String str,string=""; Set<String> keys = userData.keySet(); for(String key : keys){ str = key + "*" + userData.get(key); string = string + str + "\n"; } File file = new File("src\\bank\\user"); FileWriter out = null; try { out = new FileWriter(file); out.write(string); out.flush(); } catch (IOException e) { e.printStackTrace(); }finally{ if(out != null){ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
//user文件 //需要注意文件位置"src\\bank\\user" 李四*234*7500.0 張三*123*13100.0 王五*123*1100.0
atmJFrame包
package atmJFrame.myJFrame; import bank.ATM; import javax.swing.*; import java.awt.*; //自己創(chuàng)造的界面的父類 public class MyJFrame extends JFrame { //設(shè)置字體供子類使用 public static final Font FONT_SIZE_10 = new Font("宋體",Font.PLAIN,18); public static final Font FONT_SIZE_20 = new Font("宋體",Font.PLAIN,20); public static final Font FONT_SIZE_25 = new Font("宋體",Font.PLAIN,25); //給一個(gè)靜態(tài)公共不可改變的ATM對(duì)象作為屬性,供子類使用 public static final ATM atm = new ATM(); //創(chuàng)建窗體 public MyJFrame(String title){ super(title); //設(shè)置窗體不可改變 setResizable(false); //設(shè)置窗體大小 setSize(600,600); //設(shè)置窗體居中 setLocationRelativeTo(null); } //無(wú)參構(gòu)造,創(chuàng)建無(wú)標(biāo)題窗體 public MyJFrame(){ this(""); } //設(shè)置彈窗方法供子類使用(傳入字符串并顯示出) protected void showMessageDialog(String str){ JOptionPane.showMessageDialog(this,str); } }
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)建登錄界面 } }
package atmJFrame.myJFrame; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; //功能界面 public class WorkingJFrame extends MyJFrame { public WorkingJFrame(){ super("功能界面"); init(); setVisible(true); } //初始化功能界面 private void init(){ //設(shè)置第一個(gè)面板對(duì)象 JPanel jp1 = new JPanel(); //創(chuàng)建標(biāo)簽,將標(biāo)簽添加到第一個(gè)面板上 JLabel jb = new JLabel("請(qǐng)選擇要進(jìn)行的操作:"); jb.setFont(FONT_SIZE_25);//設(shè)置標(biāo)簽字體大小 jp1.add(jb); jp1.setBackground(Color.CYAN); //將第一個(gè)面板添加到窗體上方(JFrame窗體是邊界布局) add(jp1, BorderLayout.NORTH); //創(chuàng)建第二個(gè)面板對(duì)象(空布局,自己設(shè)置按鈕位置及大?。?,然后將按鈕添加 JPanel jp2 = new JPanel(null); //字符串?dāng)?shù)組存儲(chǔ)各個(gè)按鈕名字,然后循環(huán)設(shè)置按鈕名字 String[] str = {"1、余額查詢","2、取錢","3、存錢","4、轉(zhuǎn)賬","5、修改密碼","6、退出系統(tǒng)"}; //int二維數(shù)組儲(chǔ)存各個(gè)按鈕位置及大小信息,循環(huán)設(shè)置 int[][] xy = new int[][]{{50,100,200,50},{350,100,200,50},{50,200,200,50},{350,200,200,50},{50,300,200,50},{350,300,200,50}}; for(int i = 0;i < str.length;i ++){ JButton jButton = new JButton(str[i]);//創(chuàng)建按鈕 jButton.setFont(FONT_SIZE_20);//設(shè)置按鈕字體大小 jButton.setBounds(xy[i][0],xy[i][1],xy[i][2],xy[i][3]);//設(shè)置按鈕位置及大小 jButton.addActionListener(listener);//按鈕注冊(cè)監(jiān)聽器 jp2.add(jButton);//將按鈕添加 } //設(shè)置jp2背景顏色 jp2.setBackground(Color.GRAY); //將第二個(gè)面板添加到窗體(JFrame窗體中間) add(jp2); } //創(chuàng)建事件監(jiān)聽器 private ActionListener listener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String actionCommand = e.getActionCommand();//獲取按鈕上的字 //switch選擇功能,且每次功能結(jié)束回到該界面,關(guān)閉已操作完的功能界面 switch(actionCommand){ case "1、余額查詢": getMoney(); break; case "2、取錢": quMoney(); break; case "3、存錢": cunMoney(); break; case "4、轉(zhuǎn)賬": giveMoney(); break; case "5、修改密碼": changePassword(); break; case "6、退出系統(tǒng)": over(); break; } } }; //查詢余額功能 private void getMoney(){ showMessageDialog("您的賬戶余額為:" + atm.getMoney1());//調(diào)用父類方法彈窗 } //取錢功能 private void quMoney(){ new QuMoneyJFrame();//創(chuàng)建取錢界面 dispose();//關(guān)閉該界面 } //存錢功能 private void cunMoney(){ new CunMoneyJFrame(); dispose(); } //轉(zhuǎn)賬功能 private void giveMoney(){ new GiveMoneyJFrame(); dispose(); } //修改密碼功能 private void changePassword(){ new ChangePasswordJFrame(); dispose(); } //退出系統(tǒng)功能 private void over(){ atm.over();//調(diào)用方法操作文件 dispose(); } }
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; } }
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(""); } }
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(""); } }
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)閉此界面 } }
package atmJFrame.myJFrame; //修改密碼界面 public class ChangePasswordJFrame extends CentreJFrame{ public ChangePasswordJFrame(){ super("修改密碼"); } protected void change(){ String s = jTextFieldCP.getText(); if(isNumber(s)){ atm.changePassword(s); showMessageDialog("密碼修改成功"); } else showMessageDialog("您輸入有誤" ); new WorkingJFrame();//創(chuàng)建功能界面 dispose();//關(guān)閉此界面 } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java實(shí)現(xiàn)銀行ATM管理系統(tǒng)
- Java實(shí)現(xiàn)基礎(chǔ)銀行ATM系統(tǒng)
- Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng)
- Java簡(jiǎn)單實(shí)現(xiàn)銀行ATM系統(tǒng)
- 用Java實(shí)現(xiàn)簡(jiǎn)單ATM機(jī)功能
- java實(shí)現(xiàn)ATM機(jī)系統(tǒng)(2.0版)
- Java模擬實(shí)現(xiàn)ATM機(jī)
- Java項(xiàng)目實(shí)現(xiàn)模擬ATM機(jī)
- Java使用嵌套循環(huán)模擬ATM機(jī)取款業(yè)務(wù)操作示例
- Java實(shí)現(xiàn)ATM機(jī)操作系統(tǒng)
相關(guān)文章
SpringBoot項(xiàng)目啟動(dòng)時(shí)如何讀取配置以及初始化資源
這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目啟動(dòng)時(shí)如何讀取配置以及初始化資源的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Spring security基于數(shù)據(jù)庫(kù)中賬戶密碼認(rèn)證
這篇文章主要介紹了Spring security基于數(shù)據(jù)庫(kù)中賬戶密碼認(rèn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03SpringBoot集成ShedLock實(shí)現(xiàn)分布式定時(shí)任務(wù)流程詳解
ShedLock是一個(gè)鎖,官方解釋是他永遠(yuǎn)只是一個(gè)鎖,并非是一個(gè)分布式任務(wù)調(diào)度器。一般shedLock被使用的場(chǎng)景是,你有個(gè)任務(wù),你只希望他在單個(gè)節(jié)點(diǎn)執(zhí)行,而不希望他并行執(zhí)行,而且這個(gè)任務(wù)是支持重復(fù)執(zhí)行的2023-02-02解決springboot啟動(dòng)失敗的問(wèn)題('hibernate.dialect'?not?set)
這篇文章主要介紹了解決springboot啟動(dòng)失敗的問(wèn)題('hibernate.dialect'?not?set),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Java?入門圖形用戶界面設(shè)計(jì)之事件處理下
圖形界面(簡(jiǎn)稱GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對(duì)于用戶來(lái)說(shuō)在視覺(jué)上更易于接受,本篇精講Java語(yǔ)言中關(guān)于圖形用戶界面的事件處理2022-02-02