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实现考试管理系统


相关文章
|
1月前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
229 8
|
1月前
|
移动开发 监控 小程序
java家政平台源码,家政上门清洁系统源码,数据多端互通,可直接搭建使用
一款基于Java+SpringBoot+Vue+UniApp开发的家政上门系统,支持小程序、APP、H5、公众号多端互通。涵盖用户端、技工端与管理后台,支持多城市、服务分类、在线预约、微信支付、抢单派单、技能认证、钱包提现等功能,源码开源,可直接部署使用。
176 23
|
1月前
|
安全 前端开发 Java
使用Java编写UDP协议的简易群聊系统
通过这个基础框架,你可以进一步增加更多的功能,例如用户认证、消息格式化、更复杂的客户端界面等,来丰富你的群聊系统。
162 11
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
Java与生成式AI:构建内容生成与创意辅助系统
生成式AI正在重塑内容创作、软件开发和创意设计的方式。本文深入探讨如何在Java生态中构建支持文本、图像、代码等多种生成任务的创意辅助系统。我们将完整展示集成大型生成模型(如GPT、Stable Diffusion)、处理生成任务队列、优化生成结果以及构建企业级生成式AI应用的全流程,为Java开发者提供构建下一代创意辅助系统的完整技术方案。
187 10
|
1月前
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
380 4
|
1月前
|
机器学习/深度学习 分布式计算 Java
Java与图神经网络:构建企业级知识图谱与智能推理系统
图神经网络(GNN)作为处理非欧几里得数据的前沿技术,正成为企业知识管理和智能推理的核心引擎。本文深入探讨如何在Java生态中构建基于GNN的知识图谱系统,涵盖从图数据建模、GNN模型集成、分布式图计算到实时推理的全流程。通过具体的代码实现和架构设计,展示如何将先进的图神经网络技术融入传统Java企业应用,为构建下一代智能决策系统提供完整解决方案。
295 0
|
2月前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
2月前
|
安全 Cloud Native Java
Java 模块化系统(JPMS)技术详解与实践指南
本文档全面介绍 Java 平台模块系统(JPMS)的核心概念、架构设计和实践应用。作为 Java 9 引入的最重要特性之一,JPMS 为 Java 应用程序提供了强大的模块化支持,解决了长期存在的 JAR 地狱问题,并改善了应用的安全性和可维护性。本文将深入探讨模块声明、模块路径、访问控制、服务绑定等核心机制,帮助开发者构建更加健壮和可维护的 Java 应用。
255 0
|
2月前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
205 3
|
2月前
|
NoSQL Java 关系型数据库
超全 Java 学习路线,帮你系统掌握编程的超详细 Java 学习路线
本文为超全Java学习路线,涵盖基础语法、面向对象编程、数据结构与算法、多线程、JVM原理、主流框架(如Spring Boot)、数据库(MySQL、Redis)及项目实战等内容,助力从零基础到企业级开发高手的进阶之路。
285 1