Java详解实现ATM机模拟系统

目录
  • 一、概述
  • 二、程序概要设计
  • 三、程序详细设计
  • 四、程序演示

一、概述

(1)选题分析

(2) 开发环境

开发环境,选择IDEA这一Java开发软件,基于JDK1.8版本,在本机window上开发本ATM模拟程序。

二、程序概要设计

(1) 功能模块设计

经过对题目的分析,把本ATM模拟程序分为管理员端和用户模式两大模块。其中,管理员具有查询所有账户、导出所有账户信息到文件、注销功能。用户模块具有查询余额、ATM转账、ATM存款、ATM取款、修改密码、查询交易记录、导出记录、退卡等功能。

系统的总功能模块图如下:

(2) 流程图

系统的总流程为:用户通过主界面选择管理员登录或者用户模式登录,然后输入系统设定的账号密码进行登录。登录成功后,进入到相应的主功能页面进行相关操作。

管理员登录后台时,判断密码和账号是否正确,正确则进行登录,否则提示失败。登录进入后台,可以操作查看所有用户功能,然后系统将查询所有设定的用户信息并进行输出到控制台面板。点击导出记录功能,将把所有账户信息输出到当前jar程序同级目录下的txt文件。

用户登录时,判断账户密码是否正确,不正确,则账户错误次数+1,当次数达到3时,该账户将被锁定,不能登录。输入的账密正确时,判断账户是否被锁定,没有锁定则进行登录,跳转用户主界面,并进行相关操作功能。

管理员模块流程图如下:

用户模块总流程图如下:

(3) 文件结构和类的设计

本ATM模拟程序使用idea编辑软件开发。项目分为admin(管理员)、customer(用户)、data(ATM数据)三个包。

其中admin包下编写了AdminManage类,负责初始化管理员界面,同时实现管理员的所有功能。Customer包下的customer类实现了用户模块的界面,定义了相关操作按钮,以及实现了各自监听的功能,为了减少界面的设计,在用户界面中间使用了输出信息面板,如此功能结果在面板中打印出来,模拟了atm机的界面信息。

Data包下分别有ATMData类、Card类和CustomerAccount类。Card类是用户的银行卡的代码体现,把银行卡的相关信息封装成一个基本Java对象,符合Java面向对象的特性。其中customerAccount是card类的子类,在card的基础上,添加了许多用户行为,比如说存款、取款、查询余额等。ATMData类是本程序十分重要的类,它封装了本程序的所有初始账户信息,还有转账、获取所有账户、登录等操作。这样设计,可以把数据处理和界面的设计分离来,避免用户界面的代码过多过长。

文件结构如下图,其中resource文件夹下存放了本程序需要的图片信息:

三、程序详细设计

本系统功能模块不在此一一详写,列举了几个主要的功能进行描述:

(1) 取款功能

取款功能的代码设计在customerAccount类中,传入参数为取款的金额。先判断金额是否为100的倍数,然后判断是否大于5000(题目要求单次取款不得大于5000),再判断当前账户的余额是否大于等于被取得金额。这些条件都满足后,重新计算当前账户的金额,并添加取款记录到当前账户的交易记录里。

核心代码逻辑如下:

if (money % 100 != 0) {
     return false;
}
if (money > 5000) {
  return false;
}
int currentMoney = getMoney();
if (currentMoney < money) {
  return false;
}
//取款
int result = currentMoney - money;
setMoney(result);
//添加交易记录
List<String> operationRecod = getOperationRecod();
operationRecod.add("【" + LocalDateTime.now().format(dateTimeFormatter) + "】 ATM 取款 [" + money + "]元,当前余额[" + result + "]元");

(2) 存款功能

该方法参数为存入的金额,首先判断金额是否为100的倍数,验证通过则重新计算当前账户的余额,然后添加交易记录在当前的账户上。

核心代码逻辑如下:

 if (money % 100 != 0) {
 	return false;
}
//余额
int countMoney = getMoney() + money;
setMoney(countMoney);
//记录交易记录
List<String> operationRecod = getOperationRecod();
operationRecod.add("【" + LocalDateTime.now().format(dateTimeFormatter) + "】 ATM 存款 [" + money + "]元,当前余额[" + countMoney + "]元");
return true;

(3) 用户登录功能

用户登录方法的入参为账户和密码,首先判断账户是否存在,将入参与系统设定好的所有账户进行匹配,如果没有,则失败。如果有则判断该账户是否被锁定,被锁定不能登录,没被锁定则判断密码是否正确,不正确则使当前的账户的错误次数+1(如果账户错误次数=3,则锁定账户)。密码正确则登录成功跳转主界面。

核心代码如下:

//是否存在账号

if (allAccount.containsKey(number)) {
  CustomerAccount account = allAccount.get(number);
  //判断账号是否被锁定
  if (account.getErrorCount() >= 3) {
    JOptionPane.showMessageDialog(null, "登录失败!该账号疑似已被锁定", "提示消息", JOptionPane.WARNING_MESSAGE);
    return null;
    //密码是否一致
  } else if (account.getPassword().equals(pwd)) {
    //重置错误次数
    account.setErrorCount(0);
    return account;
  }
  account.setErrorCount(account.getErrorCount() + 1);
  if (account.getErrorCount() >= 3) {
   //锁定账户
    account.setStatus(1);
  }
} else {
   //提示错误消息
  JOptionPane.showMessageDialog(null, "登录失败!卡号或密码错误", "提示消息", JOptionPane.WARNING_MESSAGE);
}

四、程序演示

功能居多,不一一在此记录。这里只记录针对几个主要功能的测试。

(1) ATM取款

测试取款功能如下图所示。初始金额为10000元。分别取款3000、6000、5000。其中后两个为错误数据。单次取款不能超5000元,后面当余额3000时取款5000,测试取款不能透支功能。

测试结果:

由此可知,该功能正常,输入合法以及不合法的数据测试的结果均与预期相符合。

(2) ATM转账

转账测试,目标账户必须存在,同时余额要大于要转账的金额,不能透支。测试数据为输入一个不存在的账户、以及大于当前余额的转账金额。

输入不存在账户测试结果如下:

输入正常账户和金额测试结果如下,此时登录目标账户,查询交易记录可知转账已经成功到达目标账户。

输入大于当前余额的错误数据,测试结果如下,可知转账功能测试正常。

(3) 修改密码

修改密码必须输入原始密码,相同才能修改。新密码必须大于6位,同时6位不能完全相同。第三次输入的密码为确认新密码,需和第二次输入的密码相同。

原始密码都是123456,输入错误数据111111,测试如下:

输入小于6位的数据,以及正确输入正常数据的测试结果分别如下:

到此这篇关于Java详解实现ATM机模拟系统的文章就介绍到这了,更多相关Java ATM机模拟内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

    本文实例为大家分享了Java实现简单控制台版ATM系统的具体代码,供大家参考,具体内容如下 ATM系统项目 ATM系统要实现的功能 1.查询:账号必须存在,密码(三次机会,不对就锁卡) 2.取款:账号必须存在,密码(三次机会,不对就锁卡),取款金额不能大于存款 3.存款:账号必须存在,存款金额不能低于0 4.转帐:你的账户,转款账户都必须存在,密码(三次机会,不对就锁卡),转账金额不能超过余额 5.锁卡:账号必须存在,使用密码冻结 6.解卡:账号必须存在,只能使用身份证号进行解锁 7.补卡:使用

  • Java基于控制台界面实现ATM系统

    本文实例为大家分享了Java实现ATM系统的具体代码,供大家参考,具体内容如下 这应该算最基础的Javase项目了,但其中逻辑还是得想想的. 功能还算完善,只是对输入数据的校验没做全,之后做web时再加上. 没有数据库. 完整代码在最后. 流程图 登录 想模拟提款机插卡登录的,因此没做注册账号的功能,手动先塞了三个账号.有三次输入密码机会. 查询 取款 存款 转账 修改密码 退出 代码 文件结构 下面两个类复制过去放到ATM文件夹下就能运行. package ATM; import java.t

  • java模拟实现银行ATM机操作

    java模拟银行ATM机操作(基础版),供大家参考,具体内容如下 实现的功能需求: 修改密码之后,就会自动退出登录,再重新登录,若登录成功才能验证修改密码成功,这里用到 [跳出指定循环], 其他功能都是基本操作,作为入门入手程序. 准备两个实体类(一个银行类,一个用户类),一个测试类,注意,这里暂且存储了两个用户,这里可以优化,暂且不优化了 Blank.java package com.demo2; public class Blank {     /*数组模拟数据库后台,并初始化*/    

  • Java实现ATM银行管理系统(控制台版本)

    目录 前言介绍 创建抽象类Card类 创建普通银行类继承Card 创建普通信用卡继承Card 创建普通医保卡继承Card ATM主要方法业务类逻辑实现 main方法测试启动类 控制台打印 前言介绍 最近很多同学找我帮忙做一些课程设计或Web前端大作业.其中控制台项目应该是初学者必须经历的一个过程.作为java初学者这个控制台版本的模拟ATM银行管理系统十分合适.用到的技术也是最简单的JavaList集合.变量的声明.对象的创建.一些基本的while语句.switch语句.循环遍历等基础语法.一个

  • Java实现ATM机操作系统

    本文实例为大家分享了Java实现ATM机操作系统的具体代码,供大家参考,具体内容如下 用IO流操作txt文件作为数据库模拟实现一个ATM业务操作系统---->网上银行,实现登录,查询余额,存款,取款,转账,开户,销户等业务功能看代码 1.用户类----->User: package atm; import java.io.Serializable; public class User implements Serializable{          //建议除了私有属性  无参数有参数构造方

  • java实现银行ATM管理系统

    本文实例为大家分享了java实现银行ATM管理系统的具体代码,供大家参考,具体内容如下 功能 账户类.首页设计 分析 ① 每个用户一个账户对象,需要设计账户类,账户类至少包含(卡号.用户名.余额.取现额度.密码) ② 需要定义一个ArrayList的集合用于存储账户对象. ③ 需要展示欢迎页包含2个功能:注册开户.登录账户. 用户开户功能实现 ① 开户功能应该独立定义成方法,并传入当前集合对象给该方法. public static void register(ArrayList<Account>

  • Java简单实现银行ATM系统

    实现步骤: 定义账户类,用于后期创建账户对象封装用户的账户信息. 账户类中的信息至少需要包含(卡号.姓名.密码.余额.取现额度) 需要准备一个ArrayList的集合,用于存储系统用户的账户对象. 定义一个系统启动类ATMSystem需要展示欢迎页包含2个功能:开户功能.登录账户. 账户类 Account package test;/*账户类*/public class Account {    private String cardId; //卡号    private String user

  • Java实现基础银行ATM系统

    目录 一.前言 二.使用步骤 三.运行效果图: 本文实例为大家分享了Java实现银行ATM系统的具体代码,供大家参考,具体内容如下 一.前言 银行ATM系列简单操作 二.使用步骤 1.创建用户信息类Account.java 代码如下(示例): package ATM; public class Account {         private String id;         private String name;         private double balance;    

  • java实现简单银行ATM系统

    本文实例为大家分享了java实现简单银行ATM系统的具体代码,供大家参考,具体内容如下 #ATM系统 ##功能 模拟银行ATM机系统,具有注册.登录功能用户登录后可实现以下功能:1)存款 2)取款 3)转账 4)查询 5)退出 ##设计思路 首先,要进行ATM机操作应该具有银行卡和ATM,所以我们要设计一个ATM类和Bankcard类,ATM具有存取款等操作,Bankcard用来记录用户存取款等操作后的越,其次因为ATM同时为多个用户服务,所以我们应该识别每张卡,这里增加一个Bank类来记录银行

  • Java详解实现ATM机模拟系统

    目录 一.概述 二.程序概要设计 三.程序详细设计 四.程序演示 一.概述 (1)选题分析 (2) 开发环境 开发环境,选择IDEA这一Java开发软件,基于JDK1.8版本,在本机window上开发本ATM模拟程序. 二.程序概要设计 (1) 功能模块设计 经过对题目的分析,把本ATM模拟程序分为管理员端和用户模式两大模块.其中,管理员具有查询所有账户.导出所有账户信息到文件.注销功能.用户模块具有查询余额.ATM转账.ATM存款.ATM取款.修改密码.查询交易记录.导出记录.退卡等功能. 系

  • Java 详解如何获取网络接口信息

    前言 查看本机的网络接口信息,本文有详细的介绍哦. 代码 不废话,上代码. package com.hy.csdn.tools; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; /** * @Program: hy-utils @ClassName: StuNetworkInterface @A

  • Java详解ScriptEngine接口动态执行JS脚本

    目录 简介 Eval(String script) 描述 实例代码 Put() and Get() 描述 实例代码 CompiledScript 描述 实例代码 Bindings 描述 实例代码 大多的方法描述都来自于jdk11API帮助文档,由于是机翻,可能有些难以理解,大家多多担待 简介 首先来看一下JDK11API文档中对ScriptEngine的描述 模块 java.scripting 软件包 javax.script Interface ScriptEngin public inter

  • java 详解类加载器的双亲委派及打破双亲委派

    java 详解类加载器的双亲委派及打破双亲委派 一般的场景中使用Java默认的类加载器即可,但有时为了达到某种目的又不得不实现自己的类加载器,例如为了达到类库的互相隔离,例如为了达到热部署重加载功能.这时就需要自己定义类加载器,每个类加载器加载各自的类库资源,以此达到资源隔离效果.在对资源的加载上可以沿用双亲委派机制,也可以打破双亲委派机制. 一.沿用双亲委派机制自定义类加载器很简单,只需继承ClassLoader类并重写findClass方法即可.如下例子: ①先定义一个待加载的类Test,它

  • Java 详解单向加密--MD5、SHA和HMAC及简单实现实例

    Java 详解单向加密--MD5.SHA和HMAC及简单实现实例 概要: MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法. MD5 MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.MD5是输入不定长度信息,输出固定长度128-bits的算法. MD5算法具有以下特点: 1.压缩性:任意长度的数据,算出的MD5值长度都是固定的. 2.容易计算:从原数据计算出MD5值很容易. 3.抗修改性:对原数据进行任何

  • Java使用嵌套循环模拟ATM机取款业务操作示例

    本文实例讲述了Java使用嵌套循环模拟ATM机取款业务操作.分享给大家供大家参考,具体如下: 代码: package com.jredu.ch03; import java.util.Scanner; public class Work4 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan = new Scanner(System.in); for (int i =

  • 详解Gotorch多机定时任务管理系统

    前言 先介绍下问题: 组内有十来台机器,上面用 cron 分别定时执行着一些脚本和 shell 命令,一开始任务少的时候,大家都记得哪台机器执行着什么,随着时间推移,人员几经变动,任务也越来越多,再也没人能记得清哪些任务在哪些机器上执行了,排查和解决后台脚本的问题也越来越麻烦. 解决这个问题也不是没有办法: 维护一个 wiki,一旦任务有变动就更新 wiki,但一旦忘记更新 wiki,任务就会变成孤儿,什么时候出了问题更不好查. 布置一台机器,定时拉取各机器的 cron 配置文件,进行对比统计,

  • Java详解线上内存暴涨问题定位和解决方案

    前因: 因为REST规范,定义资源获取接口使用GET请求,参数拼接在url上. 如果按上述定义,当参数过长,超过tomcat默认配置 max-http-header-size :8kb 会报一下错误信息: Request header is too large 可以修改springboot配置,调整请求头大小 server: max-http-header-size: xxx 后果: 如果max-http-header-size设置过大,会导致接口吞吐下降,jvm oom,内存泄漏. 因为tom

  • Java 详解异常的处理机制

    目录 1.异常概述与异常体系结构 1.1异常概述 1.2运行时异常与编译时异常 1.3异常体系结构 2.常见异常 1. ArrayIndexOutOfBoundsException 2.NullPointerException 3.ArithmeticException 4.ClassCastException 3.异常处理机制 3.1异常的抛出与捕获 3.2异常处理机制:try-catch-finally 5.用户自定义异常类 6.异常处理5个关键字 1.异常概述与异常体系结构 1.1异常概述

  • Java 详解循环屏障CyclicBarrier如何实现多线程分段等待执行完成

    前言 工作中是否有这样的场景,多个线程任务,如果所有线程完成到某个阶段,你希望知道所有线程均完成该阶段.当然你使用线程计数可以实现,只是不够优雅. 所以我即:Java 多线程等待优雅的实现方式之Phaser同步屏障 之后再提供一个循环屏障,CyclicBarrier,更优雅的实现工具. Maven依赖 可以依赖,也可以不依赖,只是代码要稍微多一些,最好添加. <dependency> <groupId>org.projectlombok</groupId> <ar

随机推荐