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

yizhihongxing

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日

相关文章

  • Spring Native项目实战(体验79毫秒启动springboot应用)

    Spring Native是Spring Boot的一个扩展,它可以将Spring Boot应用程序编译成本地可执行文件,从而提高应用程序的启动速度和性能。在本攻略中,我们将详细介绍如何使用Spring Native,并提供两个示例来说明其用法。 以下是两个示例,介绍如何使用Spring Native: 示例一:使用Spring Native编译Spring…

    Java 2023年5月15日
    00
  • java实现停车场系统

    Java实现停车场系统攻略 系统设计 初步确定系统需求 停车场系统需要实现两个功能,分别是车辆进入停车场和车辆离开停车场,并实现计费功能。 分析系统设计需求 系统设计需要涉及的类有停车场类 ParkingLot、车类 Car、计时器类 Timer、收费类 Fees,以及一个 main 函数。 其中停车场类需要实现车辆进入停车场、车辆离开停车场、查询剩余车位数…

    Java 2023年5月23日
    00
  • Java多线程编程基石ThreadPoolExecutor示例详解

    Java多线程编程基石ThreadPoolExecutor示例详解 简介 Java的多线程编程需要使用线程池Thread Pool。线程池是一组线程集合,可以被执行多次,且必须共享一份线程队列和一个线程池。ThreadPoolExecutor是Java中一个高级线程池,提供了许多用于线程池管理的功能。本文将详细介绍ThreadPoolExecutor的相关内…

    Java 2023年5月19日
    00
  • springboot配置mybatis和事务管理方式

    下面是一份关于配置Spring Boot中MyBatis和事务管理的完整攻略,包含两个示例。 一、配置MyBatis和数据库 首先,需要在pom.xml文件中添加MyBatis和数据库依赖 <!– MyBatis依赖 –> <dependency> <groupId>org.mybatis.spring.boot&lt…

    Java 2023年5月20日
    00
  • SpringBoot打jar包遇到的xml文件丢失的解决方案

    Spring Boot是一个快速开发应用程序的框架,它通过约定大于配置的方式规范了配置文件和代码结构,从而降低了开发复杂度,并提高了开发效率。但是在使用Spring Boot打jar包时,很容易遇到一些问题,比如xml文件丢失的问题。本文将介绍一些解决方案来解决这个问题。 问题描述 在使用Spring Boot打jar包时,可能会遇到一些xml文件丢失的问题…

    Java 2023年6月15日
    00
  • 带你入门Java的方法

    带你入门Java的方法 Java是一种广泛应用于开发Web应用、Android应用、桌面应用等领域的编程语言。Java语言易学、易用,是学习编程的好选择。以下是带你入门Java的方法,欢迎阅读和学习! 1. 学习Java基础知识 Java基础知识包括Java语言的语法、数据类型、运算符、控制语句、数组、类、对象、继承、接口等概念。要想写出Java程序,必须要…

    Java 2023年5月19日
    00
  • Sprint Boot @Component使用方法详解

    @Component是Spring Boot中的一个注解,它用于标记一个类为Spring组件。在使用Spring Boot开发应用程序时,@Component是非常有用的。本文将详细介绍@Component的作用和使用方法,并提供两个示例说明。 @Component的作用 @Component的作用是将一个类标记为Spring组件。使用@Component注…

    Java 2023年5月5日
    00
  • jsp遍历文件夹下的文件的代码

    关于JSP遍历文件夹下的文件,可以通过以下步骤实现: 1.获取文件夹路径 首先需要获取要遍历的文件夹路径,可以通过JSP页面中的request对象获取,例如: String folderPath = request.getParameter("folderPath"); //获取前端传来的文件夹路径 File folder = new F…

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