av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

java GUI實現(xiàn)ATM機系統(tǒng)(3.0版)

瀏覽:89日期:2022-08-15 11:19:20

寫個小項目了解一下GUI。用java GUI實現(xiàn)銀行ATM自動取款機,實現(xiàn)登錄界面、登錄成功界面、各個操作功能實現(xiàn)界面。

用java GUI實現(xiàn)一個ATM機系統(tǒng)(3.0版)

設(shè)計思路

設(shè)計兩個包(bank包,atmJFrame包)

1、bank包:

(1)、ATM類:實現(xiàn)用戶各種操作;(2)、Data類:從user文件中獲取所有用戶信息,并返回要找的用戶,再將修改完之后的用戶信息寫入user文件中;(3)、user文件儲存所有用戶信息。

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 { //有一個類操作數(shù)據(jù)的類 private Data data = new Data(); //ATM機里的數(shù)據(jù) private String userName;//用戶賬號且唯一 private String userPassword;//用戶密碼 private double userMoney;//用戶賬戶里的錢 private String user;//使用該臺ATM機的用戶全部信息 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; } //進行轉(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)賬賬戶信息 } //修改密碼實現(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機之間操作用戶信息的橋梁public class Data { //Map儲存數(shù)據(jù)庫里所有用戶的全部信息 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('srcbankuser'); 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(); } } } } //告訴用戶名,如果找到返回該用戶所有信息,沒找到返回null public String backUser(String userName){ String str = 'null'; if(userData.containsKey(userName)) str = userName + '*' + userData.get(userName); user = str; return user; } //修改用戶數(shù)據(jù)并儲存在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('srcbankuser'); 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文件//需要注意文件位置'srcbankuser'李四*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); //給一個靜態(tài)公共不可改變的ATM對象作為屬性,供子類使用 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); } //無參構(gòu)造,創(chuàng)建無標題窗體 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;//登錄界面繼承MyJFramepublic class LoginJFrame extends MyJFrame { public LoginJFrame(){ super('歡迎使用ATM機'); //設(shè)置窗體可關(guān)閉 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //設(shè)置組件 init(); //界面可視化 setVisible(true); } //初始化界面 private void init(){ //創(chuàng)建面板對象,并定義為空布局 JPanel jp = new JPanel(null); //添加標簽 JLabel jl1 = new JLabel('賬號:'); JLabel jl2 = new JLabel('密碼:'); //設(shè)置標簽字體 jl1.setFont(FONT_SIZE_20); jl2.setFont(FONT_SIZE_20); //設(shè)置標簽在面板中的位置 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)部類進行事件處理 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();//關(guān)閉登錄界面 //打開功能界面 new WorkingJFrame(); } else showMessageDialog('賬號或密碼錯誤');//調(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è)置第一個面板對象 JPanel jp1 = new JPanel(); //創(chuàng)建標簽,將標簽添加到第一個面板上 JLabel jb = new JLabel('請選擇要進行的操作:'); jb.setFont(FONT_SIZE_25);//設(shè)置標簽字體大小 jp1.add(jb); jp1.setBackground(Color.CYAN); //將第一個面板添加到窗體上方(JFrame窗體是邊界布局) add(jp1, BorderLayout.NORTH); //創(chuàng)建第二個面板對象(空布局,自己設(shè)置按鈕位置及大小),然后將按鈕添加 JPanel jp2 = new JPanel(null); //字符串數(shù)組存儲各個按鈕名字,然后循環(huán)設(shè)置按鈕名字 String[] str = {'1、余額查詢','2、取錢','3、存錢','4、轉(zhuǎn)賬','5、修改密碼','6、退出系統(tǒng)'}; //int二維數(shù)組儲存各個按鈕位置及大小信息,循環(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);//按鈕注冊監(jiān)聽器 jp2.add(jButton);//將按鈕添加 } //設(shè)置jp2背景顏色 jp2.setBackground(Color.GRAY); //將第二個面板添加到窗體(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); //輸入金額標簽 protected JLabel jl = new JLabel('請輸入金額:'); //輸入金額文件框 protected JTextField jtf = new JTextField(20); //確認、取消按鈕 protected JButton jb1 = new JButton('確認'); protected JButton jb2 = new JButton('取消'); //轉(zhuǎn)賬時轉(zhuǎn)賬賬號標簽 protected JLabel jLabel = new JLabel('請輸入轉(zhuǎn)賬賬號:'); //轉(zhuǎn)賬時轉(zhuǎn)賬賬號文本框 protected JTextField jTextField = new JTextField(20); //修改密碼時新密碼標簽 protected JLabel jLabelCP = new JLabel('請輸入新密碼(只能為數(shù)字):'); //修改密碼時新密碼文本框 protected JTextField jTextFieldCP = new JTextField(20); //提醒用戶輸入金額為100的倍數(shù) private JLabel jle = new JLabel('( 提示:只能輸入100的倍數(shù) )'); public CentreJFrame(String str){ super(str); //判斷要進行的操作 if(str.equals('轉(zhuǎn)賬')) init1(); else if(str.equals('修改密碼')) init2(); else init(); one();//最后調(diào)用共有 } //取錢和取錢特有組件 private void init(){ //輸入金額標簽,設(shè)置字體,位置及大小 jl.setFont(FONT_SIZE_25); jl.setBounds(100,100,200,100); //輸入金額文本框 jtf.setBounds(300,250,200,50); //添加輸入金額標簽和輸入金額文本框 jp.add(jl); jp.add(jtf); setJLE(); } //轉(zhuǎn)賬特有組件 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(){ //按鈕設(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) {//按鈕被點擊后 String actionCommand = e.getActionCommand();//獲取按鈕上的字 switch(actionCommand){ case '確認': change(); break; case '取消': new WorkingJFrame();//創(chuàng)建功能界面 dispose();//關(guān)閉此界面 break; } } }; //點擊確認按鈕執(zhí)行的操作,子類重寫覆蓋實現(xiàn)各自功能 protected void change(){ } //正則表達式判斷輸入是否為數(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('請收好您的錢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)閉此界面 }}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 天天射网站 | 久久精品网 | 久久久精品一区 | 国产在线一区二区三区 | 日韩久草| 色综合久久天天综合网 | 天天插天天操 | 欧美人人 | 中文字幕一级毛片 | 毛片a级| 一区二区三区亚洲 | www精品美女久久久tv | 一区二区三区视频在线 | 亚洲精品在线免费看 | 欧美在线视频网站 | 亚洲精品久久久久久久不卡四虎 | 久久大| 国产精品成人在线播放 | 天堂资源视频 | 欧美一区二区三区在线观看 | 久久国产婷婷国产香蕉 | 欧美成人自拍视频 | www.99re5.com | 一区二区三区中文字幕 | 99久久久久久 | 国产精品久久久久一区二区三区 | 国产一区二区欧美 | 成人美女免费网站视频 | 99久久国产 | 黄色一级毛片 | 二区精品| 国产精品久久久久999 | 精品一区二区不卡 | 91视频精选| 亚洲一区二区在线视频 | 欧美一级片在线 | 国产成人艳妇aa视频在线 | 欧美视频免费 | 国产区精品视频 | 完全免费在线视频 | 91视频正在播放 |