Java实现简单控制台版ATM系统

Java实现简单控制台版ATM系统攻略

1. 需求分析

控制台版ATM系统主要需要实现以下功能:

  • 用户登录、注册
  • 存款、取款、查询余额
  • 转账功能

2. 技术选型

本篇攻略使用Java语言实现控制台版ATM系统,使用了Java IO、集合等基础知识进行编写。在框架上,本篇攻略并未用到任何框架。

3. 代码实现

代码实现主要分为以下几个部分:

3.1 用户登录、注册

用户登录需要输入合法的用户账号和密码,如果输入的账号或密码错误,程序需要提示用户重新输入,最多只能尝试三次。在登录成功后,程序需要提供用户的基本信息,如用户名、账户余额等。

用户注册需要输入合法的用户名和密码,经过简单的输入校验后,将用户的信息存储在一个文件中,以备后续登录使用。

示例代码:

public class User {
    private String name;
    private String password;
    private double balance;

    // 省略 getter 和 setter 方法

    public User(String name, String password, double balance) {
        this.name = name;
        this.password = password;
        this.balance = balance;
    }

    // 登录方法
    public boolean login(String name, String password, int maxRetry) {
        Scanner scanner = new Scanner(System.in);
        int retry = 0;
        while (retry < maxRetry) {
            if (!name.equals(this.name) || !password.equals(this.password)) {
                System.out.println("用户名或密码错误,请重新输入。");
                System.out.print("用户名: ");
                name = scanner.next();
                System.out.print("密码: ");
                password = scanner.next();
                retry++;
            } else {
                System.out.println("登录成功,您的账户余额为" + this.balance + "元。");
                return true;
            }
        }
        System.out.println("您已连续输入错误" + maxRetry + "次,程序已退出。");
        return false;
    }

    // 注册方法
    public static void register() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名和密码进行注册。");
        System.out.print("用户名: ");
        String name = scanner.next();
        System.out.print("密码: ");
        String password = scanner.next();

        // 假设用户信息保存在 users.txt 中
        try {
            FileWriter fileWriter = new FileWriter("users.txt", true);
            fileWriter.write(name + " " + password + " 0.00\n");
            fileWriter.close();
            System.out.println("注册成功!");
        } catch (IOException e) {
            System.out.println("注册失败,未能成功保存您的信息。");
        }
    }

}
3.2 存款、取款、查询余额

存款、取款、查询余额等功能都需要在用户登录后才能够使用。存款功能和取款功能需要输入金额,而查询余额功能则直接输出当前账户余额信息。

示例代码:

public class Bank {
    public static void main(String[] args) {
        // 登录功能
        User.getUserByNameAndPassword(name, password).login(name, password, 3);

        // 存款功能
        System.out.print("请输入存款金额: ");
        double depositAmount = scanner.nextDouble();
        user.setBalance(user.getBalance() + depositAmount);
        System.out.println("存款成功,您的账户余额为" + user.getBalance() + "元。");

        // 取款功能
        System.out.print("请输入取款金额: ");
        double withdrawAmount = scanner.nextDouble();
        if (user.getBalance() >= withdrawAmount) {
            user.setBalance(user.getBalance() - withdrawAmount);
            System.out.println("取款成功,您的账户余额为" + user.getBalance() + "元。");
        } else {
            System.out.println("余额不足,取款失败。");
        }

        // 查询余额功能
        System.out.println("当前账户余额为" + user.getBalance() + "元。");
    }
}
3.3 转账功能

转账功能需要输入转账金额以及对方的账号信息。转账的过程中需要进行账户余额检查,如果转账金额超过了当前用户的账户余额,则需要提醒用户转账失败。转账结束后,需要分别更新当前用户和目标用户的账户余额。

示例代码:

public class Bank {
    public static void main(String[] args) {
        // 转账功能
        System.out.print("请输入目标账户: ");
        String targetUsername = scanner.next();
        User targetUser = User.getUserByName(targetUsername);
        if (targetUser != null) {
            System.out.print("请输入转账金额: ");
            double transferAmount = scanner.nextDouble();
            if (user.getBalance() >= transferAmount) {
                user.setBalance(user.getBalance() - transferAmount);
                targetUser.setBalance(targetUser.getBalance() + transferAmount);
                System.out.println("转账成功,您的账户余额为" + user.getBalance() + "元。");
            } else {
                System.out.println("余额不足,转账失败。");
            }
        } else {
            System.out.println("目标账户不存在,转账失败。");
        }
    }
}

4. 使用说明

使用控制台版ATM系统,需要先注册一个账号。程序会将您的账号信息存储在当前目录下的 users.txt 文件中。注册完成后,可以使用自己的账号登录系统。登录完成后,您可以进行存款、取款、查询余额以及转账等操作。

其中,输入的密码是不可见的,程序会自动将用户输入的密码转换成 * 号进行遮挡。

5. 总结

本篇攻略实现了Java控制台版ATM系统的基本功能。在实际的开发过程中,还需要考虑更多的用户交互、输入检查、数据校验等功能,以确保该系统的稳定性和安全性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现简单控制台版ATM系统 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • 解决springboot整合cxf启动报错,原因是版本问题

    确认版本兼容性 在整合 Spring Boot 和 CXF 的过程中,经常会遇到版本兼容性问题,此时需要确认 Spring Boot 和 CXF 的版本兼容性是否一致。 建议使用 Maven 进行管理,使用 Maven 的 Dependency Management 协调版本。在 pom.xml 中添加 Spring Boot Starter Parent …

    Java 2023年5月19日
    00
  • Java Objects工具类原理及用法详解

    Java Objects工具类原理及用法详解 什么是Java Objects工具类? Java Objects工具类是Java编程语言中一个常用的工具类。它提供了一些静态方法,用于对Java对象进行类型转换、属性读取、对象比较、hashcode计算等操作。 Java Objects工具类的用法 引入Java Objects工具类 Java Objects类是…

    Java 2023年5月26日
    00
  • java学生管理系统界面简单实现(全)

    下面是“java学生管理系统界面简单实现(全)”的完整攻略。 简介 “java学生管理系统界面简单实现(全)”是一篇教程,它详细介绍了如何使用Java语言实现一个学生信息管理系统。该教程包含的内容主要涉及Java Swing图形界面编程、MySQL数据库使用以及Java与MySQL之间的数据交互等方面。 步骤 下面是实现这个系统的主要步骤: 1. 创建项目并…

    Java 2023年5月19日
    00
  • Java将文件夹保留目录打包为 ZIP 压缩包并下载的教程详解

    下面是关于“Java将文件夹保留目录打包为 ZIP 压缩包并下载的教程详解”的完整攻略。 前言 在Java程序中,我们有时会需要将一个文件夹以及其中的文件打包成ZIP格式的压缩文件并下载。本文将介绍如何实现这个功能。 代码实现 Java提供了ZipOutputStream类和ZipEntry类,可以轻松地打包一个文件夹中的所有文件并生成ZIP文件。我们可以使…

    Java 2023年5月19日
    00
  • 谈谈为JAXB和response设置编码,解决wechat4j中文乱码的问题

    针对“谈谈为JAXB和response设置编码,解决wechat4j中文乱码的问题”,我为你提供以下攻略: 如何为JAXB设置编码 1. 设置XML文件头部 在编写JAXB应用程序时,首先需要设置XML文件头部,以确保正确解析XML内容。通常在XML文件头部加上<?xml version=”1.0″ encoding=”UTF-8″ standalon…

    Java 2023年5月20日
    00
  • 使用AJAX(包含正则表达式)验证用户登录的步骤

    下面我将详细讲解使用AJAX验证用户登录的步骤。 步骤一:前端页面设计 首先,我们需要在前端页面中添加一个用户名输入框、一个密码输入框和一个“登录”按钮,使用Bootstrap框架可以更快速的搭建出界面。在用户输入完用户名和密码之后,点击“登录”按钮触发AJAX请求发送给后端服务器。 示例代码: <form id="login-form&qu…

    Java 2023年6月15日
    00
  • 关于kafka消费不到远程bootstrap-server 数据的问题

    针对关于kafka消费不到远程bootstrap-server数据的问题,我整理了以下完整攻略: 1. 验证Bootstrap server是否配置正确 1.1 查看Producer的bootstrap-server配置,确认正确,示例代码如下: #Producer properties bootstrap.servers=remote-kafka-host…

    Java 2023年5月20日
    00
  • 深入解析Spring Boot 的SPI机制详情

    深入解析Spring Boot 的SPI机制详情 在Spring Boot中,SPI是一种Java的扩展机制,它让应用程序可以在运行时动态加载一个类或多个类实现的接口,并执行相应的操作。下面我们将深入探究Spring Boot的SPI机制的实现细节。 什么是SPI机制 SPI,全称为Service Provider Interface,是一种Java的扩展机…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部