java GUI实现ATM机系统(3.0版)
写个小项目了解一下GUI。用java GUI实现银行ATM自动取款机,实现登录界面、登录成功界面、各个操作功能实现界面。
用java GUI实现一个ATM机系统(3.0版)
设计思路设计两个包(bank包,atmJFrame包)
1、bank包:
(1)、ATM类:实现用户各种操作;(2)、Data类:从user文件中获取所有用户信息,并返回要找的用户,再将修改完之后的用户信息写入user文件中;(3)、user文件储存所有用户信息。
2、atmJFrame包:
(1)、MyJFrame类:自己创建的界面父类;(2)、LoginJFrame:登录界面;(3)、WorkingJFrame:登录成功后显示的功能界面;(4)、CentreJFrame:中间窗口,存钱、取钱、转账、修改密码界面的父类;(5)、QuMoneyJFrame:取钱界面;(6)、CunMoneyJFrame:存钱界面;(7)、GiveMoneyJFrame:转账界面;(8)、ChangePasswordJFrame:修改密码界面。
源码bank包
package bank;//ATM类public class ATM { //有一个类操作数据的类 private Data data = new Data(); //ATM机里的数据 private String userName;//用户账号且唯一 private String userPassword;//用户密码 private double userMoney;//用户账户里的钱 private String user;//使用该台ATM机的用户全部信息 private String antherUser;//被转账用户 //登录方法 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;//获取被转账账户所有信息 b = true; } return b; } //进行转账 public void giveMoney(Double money1){ String[] str1 = antherUser.split('*');//分割 Double x = Double.parseDouble(str1[2]);//获取被转账账户余额 x = x + money1; userMoney = userMoney - money1; antherUser = changeUser(str1[0], str1[1], x);//改变被转账账户信息 data.saveData(antherUser,false);//将用户信息传给Data类保存被转账账户信息 } //修改密码实现 public void changePassword(String newPassword){ userPassword = newPassword; } //办完业务后修改用户信息 private String changeUser(String n,String w,Double d){ String str = n + '*' + w + '*' + d; return str; } //办完所有业务 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;//数据类是文件和ATM机之间操作用户信息的桥梁public class Data { //Map储存数据库里所有用户的全部信息 Map<String,String> userData = new HashMap(); //返回用户的信息 private String user; //创建数据类加载所有用户信息 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; } //修改用户数据并储存在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)//判断用户是否操作结束 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.*;//自己创造的界面的父类public class MyJFrame extends JFrame { //设置字体供子类使用 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); //给一个静态公共不可改变的ATM对象作为属性,供子类使用 public static final ATM atm = new ATM(); //创建窗体 public MyJFrame(String title){ super(title); //设置窗体不可改变 setResizable(false); //设置窗体大小 setSize(600,600); //设置窗体居中 setLocationRelativeTo(null); } //无参构造,创建无标题窗体 public MyJFrame(){ this(''); } //设置弹窗方法供子类使用(传入字符串并显示出) 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机'); //设置窗体可关闭 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();//先创建登录界面 }}
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(){ //设置第一个面板对象 JPanel jp1 = new JPanel(); //创建标签,将标签添加到第一个面板上 JLabel jb = new JLabel('请选择要进行的操作:'); jb.setFont(FONT_SIZE_25);//设置标签字体大小 jp1.add(jb); jp1.setBackground(Color.CYAN); //将第一个面板添加到窗体上方(JFrame窗体是边界布局) add(jp1, BorderLayout.NORTH); //创建第二个面板对象(空布局,自己设置按钮位置及大小),然后将按钮添加 JPanel jp2 = new JPanel(null); //字符串数组存储各个按钮名字,然后循环设置按钮名字 String[] str = {'1、余额查询','2、取钱','3、存钱','4、转账','5、修改密码','6、退出系统'}; //int二维数组储存各个按钮位置及大小信息,循环设置 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]);//创建按钮 jButton.setFont(FONT_SIZE_20);//设置按钮字体大小 jButton.setBounds(xy[i][0],xy[i][1],xy[i][2],xy[i][3]);//设置按钮位置及大小 jButton.addActionListener(listener);//按钮注册监听器 jp2.add(jButton);//将按钮添加 } //设置jp2背景颜色 jp2.setBackground(Color.GRAY); //将第二个面板添加到窗体(JFrame窗体中间) add(jp2); } //创建事件监听器 private ActionListener listener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String actionCommand = e.getActionCommand();//获取按钮上的字 //switch选择功能,且每次功能结束回到该界面,关闭已操作完的功能界面 switch(actionCommand){ case '1、余额查询': getMoney(); break; case '2、取钱': quMoney(); break; case '3、存钱': cunMoney(); break; case '4、转账': giveMoney(); break; case '5、修改密码': changePassword(); break; case '6、退出系统': over(); break; } } }; //查询余额功能 private void getMoney(){ showMessageDialog('您的账户余额为:' + atm.getMoney1());//调用父类方法弹窗 } //取钱功能 private void quMoney(){ new QuMoneyJFrame();//创建取钱界面 dispose();//关闭该界面 } //存钱功能 private void cunMoney(){ new CunMoneyJFrame(); dispose(); } //转账功能 private void giveMoney(){ new GiveMoneyJFrame(); dispose(); } //修改密码功能 private void changePassword(){ new ChangePasswordJFrame(); dispose(); } //退出系统功能 private void over(){ atm.over();//调用方法操作文件 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;//中间窗口,存钱、取钱、转账、修改密码界面的父类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; }}
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;//转账界面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();//关闭此界面 }}
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();//创建功能界面 dispose();//关闭此界面 }}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持好吧啦网。
相关文章: