Java之面向对象《ATM自动取款机》

一、前言:

  关于上次我写的博客文章中"Java之《ATM自动取款机》(面向对象)",里面还不够完善,因为在各个服务功能相互跳转时,会出现混乱问题。这次我对其进行了修改和改进,若还有其它在大家测试时出现的bug请及时评论联系,谢谢!

二、代码: 

(1)关于用户类"User"的代码基本没变。

package com.fs.demo;

public class User {
    public String accountNumber;
    public String password;
    public double sum;
    public User(){
        this.accountNumber="1234";
        this.password="5678";
        this.sum=8888.0;
    }
    public User(String accountNumber,String password,double sum){
        this.accountNumber=accountNumber;
        this.password=password;
        this.sum=sum;
    }
}

(2) 测试类发生很多变化(其实就是新添加一个功能:用它来判断当输入的服务选项不匹配时,进行提示并要求重新输入)。当然这里可以用一写方法来把它分为几个功能,这样代码能简化很多,这里交给大家去修改了哈哈!

package com.fs.test;
import com.fs.demo.*;
import java.util.*;
public class Test01 {
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        User user =new User();
        System.out.println("********欢迎使用中国民生银行自动取款服务********");
        System.out.println("**      请输入你的账号:                  **");
        String accountNum= sc.next();
        while(!accountNum.equals(user.accountNumber)){
            System.out.println("该账号输入有误,请重新输入正确账号:");
            accountNum=sc.next(); //只有当账号输入正确时,才会跳转到输入密码环节
        }
        System.out.println("**      请输入你的密码:                  **");
        String password=sc.next();
        int i=1;//记录输入错误密码次数
        while(!password.equals(user.password)){  //只要第一次输入的密码不是正确密码,就会进人循环:判断下一次输入的密码是否正确
            if(i==1||i==2) {
                System.out.println("你已连续输入错误密码" + i + "次。若连续三次密码输入错误,该账号将被冻结!");
                System.out.println("请你重新输入正确密码:");
                password = sc.next();
                if(!password.equals(user.password)) {
                    i++;
                }
            }
            if(i==3){
                System.out.println("你已连续输入错误密码3次,该账号将已被冻结!");
                break;
            }
        }
        if(password.equals(user.password)){
            System.out.println("银行卡账号登录成功!");
            System.out.println("********欢迎使用中国民生银行自动取款服务********");
            System.out.println("**     1.查询            2.取款          **");
            System.out.println("**     3.转账            4.退卡          **");
            System.out.println("请选择您需要的服务:");
            int select=sc.nextInt();
            while(true) {
                if (select == 1) {
                    System.out.println("********欢迎使用中国民生银行自动取款服务********");
                    System.out.println("******** 查询成功!!        ********");
                    System.out.println("您查询的账号的总余额为:" + user.sum + "元");
                    System.out.println();
                    System.out.println("********返回请选择5****************");
                    int flag1=sc.nextInt();
                    if(flag1==5){
                        System.out.println("********欢迎使用中国民生银行自动取款服务********");
                        System.out.println("**     1.查询            2.取款          **");
                        System.out.println("**     3.转账            4.退卡          **");
                        System.out.println("请选择您需要的服务:");
                        select=sc.nextInt();
                    }
                    if(flag1!=5){  //用来判断当输入服务不是"5"返回时,要重新输入
                        while(flag1!=5) {
                            System.out.println("抱歉!你的输入有误,返回失败!请重新输入");
                            System.out.println();
                            System.out.println("********返回请选择5****************");
                            flag1 = sc.nextInt();
                            if(flag1==5){
                                System.out.println("********欢迎使用中国民生银行自动取款服务********");
                                System.out.println("**     1.查询            2.取款          **");
                                System.out.println("**     3.转账            4.退卡          **");
                                System.out.println("请选择您需要的服务:");
                                select=sc.nextInt();
                                break;
                            }

                        }
                    }
                }
                if (select == 2) {
                    System.out.println("********欢迎使用中国民生银行自动取款服务********");
                    System.out.println("**       请输入您要取款的金额:");
                    double sum = sc.nextDouble();
                    System.out.println("******** 取款成功!!        ********");
                    System.out.println("您的账号余额还剩:" + (user.sum - sum) + "元");
                    user.sum=(user.sum-sum);
                    System.out.println();
                    System.out.println("********返回请选择5****************");
                    int flag1=sc.nextInt();
                    if(flag1==5){
                        System.out.println("********欢迎使用中国民生银行自动取款服务********");
                        System.out.println("**     1.查询            2.取款          **");
                        System.out.println("**     3.转账            4.退卡          **");
                        System.out.println("请选择您需要的服务:");
                        select=sc.nextInt();
                    }
                    if(flag1!=5){
                        while(flag1!=5) {
                            System.out.println("抱歉!你的输入有误,返回失败!请重新输入");
                            System.out.println();
                            System.out.println("********返回请选择5****************");
                            flag1 = sc.nextInt();
                            if(flag1==5){
                                System.out.println("********欢迎使用中国民生银行自动取款服务********");
                                System.out.println("**     1.查询            2.取款          **");
                                System.out.println("**     3.转账            4.退卡          **");
                                System.out.println("请选择您需要的服务:");
                                select=sc.nextInt();
                                break;
                            }

                        }
                    }
                }
                if (select == 3) {
                    System.out.println("********欢迎使用中国民生银行自动取款服务********");
                    System.out.println("**  请分别输入您要转账的目的银行卡的账号和密码:");
                    User user1 = new User(sc.next(), sc.next(), 4000.0);
                    System.out.println("**       请输入您要转账的金额:");
                    double sum = sc.nextDouble();
                    System.out.println("******** 转账成功!!        ********");
                    System.out.println("您的账号余额还剩:" + (user.sum - sum) + "元");
                    System.out.println("目的银行卡账号:" + user1.accountNumber + ",的余额还剩:" + (user1.sum + sum) + "元");
                    user.sum=(user.sum - sum);
                    System.out.println();
                    System.out.println("********返回请选择5****************");
                    int flag1=sc.nextInt();
                    if(flag1==5){
                        System.out.println("********欢迎使用中国民生银行自动取款服务********");
                        System.out.println("**     1.查询            2.取款          **");
                        System.out.println("**     3.转账            4.退卡          **");
                        System.out.println("请选择您需要的服务:");
                        select=sc.nextInt();
                    }
                    if(flag1!=5){
                        while(flag1!=5) {
                            System.out.println("抱歉!你的输入有误,返回失败!请重新输入");
                            System.out.println();
                            System.out.println("********返回请选择5****************");
                            flag1 = sc.nextInt();
                            if(flag1==5){
                                System.out.println("********欢迎使用中国民生银行自动取款服务********");
                                System.out.println("**     1.查询            2.取款          **");
                                System.out.println("**     3.转账            4.退卡          **");
                                System.out.println("请选择您需要的服务:");
                                select=sc.nextInt();
                                break;
                            }

                        }
                    }
                }
                if (select == 4) {
                    System.out.println("********欢迎使用中国民生银行自动取款服务********");
                    System.out.println("******** 退卡成功!!        ********");
                    return;
                }
                if(select != 1 && select != 2 && select != 3){  //判断进来选择服务的时候,只能是选择已有的1或者2或者3服务,或者直接退卡,不然就要重新输入选择
                    System.out.println("你选择的服务有误!请重新输入:");
                    select=sc.nextInt();
                }
            }
        }
    }
}

  补充:这里面的一些导包:是因为"User"用户类与测试类"Test01" 它们不在同一个包,要用到就要导入它这个类所在的包,当然要在声明本包的下面进行导包。且注意,银行卡账号和密码都是系统提前办理好的,也就是已经在"User"类初始化 (相当于我们测试时是要输入用户注册的账号和密码才行),所以这个项目还能进行改进就是:注册银行卡账号,并存入初始本金,然后再测试服务。

三、代码测试结果:

(1)测试当账号输入与密码输入分别错误的情景:

(2)测试当输入的账号和密码都正确时,进入选择不同的自助服务:

下面是:接着上面没有结束的进程进行测试:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/195823.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python3 Linux 安装教程

1. windows安装 去Python官网下载windows安装包,按照安装向导一直点击下一步即可,安装向导最好勾选Add Python3.x to PATH,这样就不用手动添加环境变量了。 2. linux安装 linux安装比较复杂,需要安装一些系统依赖,再…

认证授权常见方式

认证授权 认证 (Authentication) 和授权 (Authorization)的区别是什么? 说简单点就是: 认证 (Authentication): 你是谁。授权 (Authorization): 你有权限干什么。 稍微正式点(啰嗦点)的说法就是&#x…

创建JDK8版本的SpringBoot项目的方法

目录 一.通过阿里云下载 二.通过IDEA创建 1.下载安装JDK17 2.创建SpringBoot 3.X的项目 3.把JDK17改成JDK8 截止到2023.11.24,SpringBoot不再支持3.0X之前的版本,3.0X之后的版本所对应的JDK版本为JDK17,下面介绍如何在idea上继续使用JDK…

vue 表格虚拟滚动

参考未整理 1.使用vxetable实现 官网 问题&#xff1a; 实现了表格的虚拟滚动&#xff0c;但是单元格数据不自动换行了 &#xff0c;如下显示的... 然后在官网看到是这样的&#xff0c;那我不是白写。。。 解决&#xff1a; 1.包一层div2.再写个换行样式 <vxe-column …

营销软文怎么写,媒介盒子分享

企业营销落地过程中&#xff0c;高质量的营销文案创作是很多企业的难题&#xff0c;这就导致公司可能投入了大量成本却很难看到回报&#xff0c;今天媒介盒子就来分享&#xff1a;如何打造高质量营销软文。 一、 选题具有吸引力 文案选题等于支撑点&#xff0c;想要写出高质量…

【hive-design】hive架构详解:描述了hive架构,hive主要组件的作用、hsql在hive执行过程中的底层细节、hive各组件作用

文章目录 一. Hive Architecture二. Metastore1. Metastore Architecture2. Metastore Interface 三. Compiler四. hive架构小结 本文主要讨论了 描述了hive架构&#xff0c;hive主要组件的作用详细描述了hsql在hive执行过程中的底层细节描述了hive各组件作用 一. Hive Archite…

Android12之logcat日志显示颜色和时间(一百六十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

UTONMOS:元宇宙时代已经来临

当我们站在这个新的人工智能时代的十字路口&#xff0c;不可避免地要面对一个问题&#xff1a;在这个技术革新的大潮中&#xff0c;区块链技术还有没有生存和发展的空间&#xff1f;本文将深入探讨这个问题&#xff0c;分析区块链在人工智能时代的优势、挑战以及未来的可能性。…

森林防火气象监测系统守护绿色家园的智能防线

随着全球气候变暖的日益加剧&#xff0c;森林防火已经成为了刻不容缓的任务。为了更好地守护我们的绿色家园&#xff0c;WX-SL10 森林防火气象监测系统应运而生。 森林防火气象监测系统的重要性 森林防火气象监测系统是一种集成了气象观测、数据传输、数据分析与预警等多功能…

NocoBase企业级低代码开发平台有什么优势?

企业级低代码开发平台&#xff0c;作为一种新兴的技术解决方案&#xff0c;正逐渐在企业中受到越来越多的关注和青睐。它以其高效、灵活的特性&#xff0c;为企业的创新提供了更快速、更可持续的支持和推动。 低代码开发平台是一种以图形化界面为基础&#xff0c;结合拖拽式编…

稳定扩散模型的隐空间探索

生成图像模型学习视觉世界的“潜在流形”&#xff1a;每个点映射到图像的低维向量空间。 从流形上的这样一个点回到可显示的图像称为“解码”—在稳定扩散模型中&#xff0c;这是由“解码器”模型处理的。 在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器…

Redis未授权访问-CNVD-2019-21763复现

Redis未授权访问-CNVD-2019-21763复现 利用项目&#xff1a; https://github.com/vulhub/redis-rogue-getshell 解压后先进入到 RedisModulesSDK目录里面的exp目录下&#xff0c;make编译一下才会产生exp.so文件&#xff0c;后面再利用这个exp.so文件进行远程代码执行 需要p…

璞华大数据产品入选中国信通院“铸基计划”

武汉璞华大数据技术有限公司HawkEye设备数字化管理平台产品&#xff0c;凭借优秀的产品技术能力&#xff0c;通过评估后&#xff0c;入选中国信通院“铸基计划”《高质量数字化转型产品及服务全景图&#xff08;2023&#xff09;》的工业数字化领域。 “铸基计划”是中国信通院…

【阅读记录】《联邦学习》杨强

第2章 隐私、安全及机器学习 2.3 威胁与安全模型 2.3.1 隐私威胁模型 对机器学习系统的攻击可能在任何阶段发生&#xff0c;包括数据发布、模型训练和模型推理。 模型训练阶段&#xff1a;重构攻击&#xff08;避免使用寻存储显式特征值的模型&#xff0c;SVM KNN等&…

基于springboot+maven的个人理财管理系统

基于springbootmaven的个人理财管理系统,演示地址:个人理财系统登录界面 用户名:admin,密码&#xff1a;123456 共分为用户信息管理(用户信息&#xff0c;银行卡&#xff0c;个人征信)&#xff0c;理财产品管理(零钱理财&#xff0c;工资理财&#xff0c;期限理财&#xff0c…

oracle查询开始时间和结束时间之间的连续月份

SELECT TO_CHAR(ADD_MONTHS(TO_DATE(2023-01,YYYY-MM), ROWNUM - 1), YYYY-MM) AS fmonth FROM DUALCONNECT BY ROWNUM < CEIL(MONTHS_BETWEEN(TO_DATE(2023-11, YYYY-MM), TO_DATE(2023-01,YYYY-MM))1)

vue跨域请求

vue.config.js devServer:{proxy:"http://localhost:8081"}main.js中定义 import axios from "axios"; axios&#xff0c; App.vue中引用 <template><Article/> </template><script> import Article from "/components/Ar…

jq+canvas:实现图片上传+裁剪+保存等功能

效果图 上传图片之前&#xff1a; 上传图片之后&#xff0c;点击放大/缩小后的效果&#xff1a; 裁剪之后的效果&#xff1a; 代码实现如下&#xff1a; 1.html部分 <input type"file" id"fileInput" accept"image/png, image/gif, image/j…

【Bootloader学习理解学习--加强版】

笔者在接着聊一下bootloader&#xff0c;主要针对MCU的Bootloader。 笔者之前介绍过一篇Bootloader文章&#xff0c;主要是其概念、一些升级包的格式和升级流程&#xff0c;本次接着来说一下。 1、MCU代码运行方式 之前文章也介绍过&#xff0c;MCU的代码运行方式有两种&…

Nacos源码本地搭建流程及目录结构解读

下载地址 https://github.com/alibaba/nacos 目录结构 本地单机启动 首先maven编译完成之后在console下面找到Nacos 这个就是主启动类 然后再vm中配置参数-Dnacos.standalonetrue表示单机启动 当控制台没有报错 访问 http://localhost:8848/nacos 控制台界面登录进来之后显…