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("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();  }  } } } //告诉用户名,如果找到返回该用户所有信息,没找到返回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("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.*;//自己创造的界面的父类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();//关闭此界面 }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

少吃点,吃好的。

java GUI实现ATM机系统(3.0版)

相关文章:

你感兴趣的文章:

标签云: