Java+Swing实现自助取款机(ATM)系统-TXT存储数据

简介: Java+Swing实现自助取款机(ATM)系统-TXT存储数据

一、系统介绍


系统功能

1.登录系统

2.查询余额

3.取款

4.存款

5.转账

6.修改密码

7.退出系统

JDK版本:1.8

存储数据形式:TXT存储数据


二、系统展示


1.登录页


20210609230617962.jpg


2.主页


image.jpeg


3.取款


20210609230647845.jpg


4.存款


20210609230702216.jpg


5.转账


20210609230715144.jpg


6.修改密码


20210609230726561.jpg


三、部分代码


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机");
    // 设置窗体可关闭
    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();// 先创建登录界面
  }
}

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;
//中间窗口,存钱、取钱、转账、修改密码界面的父类
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;
  }
}

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;
//转账界面
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();// 关闭此界面
  }
}

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("请收好您的钱\n您的账户余额为:" + atm.getMoney1());
      } else
        showMessageDialog("您输入有误");
    } else
      showMessageDialog("您输入有误");
    jtf.setText("");
  }
}


四、其他


1.其他系统实现


JavaWeb系统系列实现

Java+JSP实现图书管理系统

Java+JSP实现学生信息管理系统

Java+Servlet+JSP实现学生成绩管理系统

Java+Servlet+JSP实现宠物诊所管理系统

Java+SSM+Easyui实现网上考试系统

Java+Springboot+H-ui实现营销管理系统

Java+Springboot+Mybatis+Bootstrap实现网上商城系统


JavaSwing系统系列实现

Java+Swing实现医院管理系统

Java+Swing实现仓库管理系统

Java+Swing实现学生信息管理系统

Java+Swing实现学生宿舍管理系统

Java+Swing实现学生选课管理系统

Java+Swing实现电子相册管理系统

Java+Swing实现图书管理系统

Java+Swing实现斗地主游戏

Java+Swing实现宠物商店管理系统-TXT存储信息

Java+Swing实现学生成绩管理系统

Java+Swing实现企业人事管理系统

Java+Swing实现学校教材管理系统

Java+Swing实现学校教务管理系统

Java+Swing实现超市管理系统-TXT存储信息

Java+Swing实现考试管理系统


相关文章
|
4天前
|
Java
排课系统【JSP+Servlet+JavaBean】(Java课设)
排课系统【JSP+Servlet+JavaBean】(Java课设)
18 5
|
1天前
|
数据采集 前端开发 Java
基于Java爬取微博数据(一)
【5月更文挑战第9天】讲述如何通过 Java 爬取微博数据,以及相应的注意点
|
2天前
|
消息中间件 关系型数据库 网络安全
实时计算 Flink版操作报错合集之Flink sql-client 针对kafka的protobuf格式数据建表,报错:java.lang.ClassNotFoundException 如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
12 1
|
2天前
|
数据采集 监控 安全
java数字工厂MES系统全套源码Java+idea+springboot专业为企业提供智能制造MES解决方案
"MES" 指的是制造执行系统(Manufacturing Execution System)。MES在制造业中扮演着至关重要的角色,它是位于企业资源计划(ERP)系统和车间控制系统之间的系统,用于实时收集、管理、分析和报告与制造过程相关的数据。
9 0
|
2天前
|
移动开发 监控 供应链
JAVA智慧工厂制造生产管理MES系统,全套源码,多端展示(app、小程序、H5、台后管理端)
一开始接触MES系统,很多人会和博主一样,对MES细节的应用不了解,这样很正常,因为MES系统相对于其他系统来讲应用比较多!
14 1
JAVA智慧工厂制造生产管理MES系统,全套源码,多端展示(app、小程序、H5、台后管理端)
|
2天前
|
存储 运维 Java
java云his系统源码一站式诊所SaaS系统Java版云HIS系统 八大特点
HIS系统采用面向技术架构的分析与设计方法,应用多层次应用体系架构设计,运用基于构件技术的系统搭建模式与基于组件模式的系统内核结构。通过建立统一接口标准,实现数据交换和集成共享,通过统一身份认证和授权控制,实现业务集成、界面集成。
28 1
|
4天前
|
监控 前端开发 Java
Java公立医院绩效考核管理系统 医院绩效考核系统的优势有哪些? 
医院绩效管理系统解决方案紧扣新医改形势下医院绩效管理的要求,以“工作量为基础的考核方案”为核心思想,结合患者满意度、服务质量、技术难度、工作效率、医德医风等管理发展目标的考核体系,形成医院的内部绩效考核与分配机制,通过信息化手段为绩效考评管理人员实施医院绩效考评工作提供了有效工具,扩展了信息管理范围,增加了信息分析的广度与深度。这不仅使绩效评价工作更加科学化、规范化和自动化,而且从根本上改变了绩效评估工作方式,实现了绩效评价数据网络化采集,评价结果透明化管理,奖金分配数据自动化生成,极大地提高了绩效评估的全面性、准确性、时效性、公正性。从而推进医院绩效管理的专业化、规范化和精细化管理,充分发挥
14 0
|
4天前
|
数据采集 前端开发 Java
Java医院绩效考核系统源码maven+Visual Studio Code一体化人力资源saas平台系统源码
医院绩效解决方案包括医院绩效管理(BSC)、综合奖金核算(RBRVS),涵盖从绩效方案的咨询与定制、数据采集、绩效考核及反馈、绩效奖金核算到科到组、分配到员工个人全流程绩效管理;将医院、科室、医护人员利益绑定;全面激活人才活力;兼顾质量和效益、长期与短期利益;助力医院降本增效,持续改善、优化收入、成本结构。
17 0
|
4天前
|
SQL Java
java处理数据查看范围
java处理数据查看范围
|
4天前
|
Java
Java Swing猜英文单词游戏(java+面向对象编程+swing+awt+io流)
Java Swing猜英文单词游戏(java+面向对象编程+swing+awt+io流)