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

news2024/9/24 5:29:29

《JAVA编程基础》项目说明

一、项目名称:

   基于JAVA控制台版本银行自动取款机

项目要求:

    实现银行自动取款机的以下基本操作功能:读卡、取款、查询。(自动取款机中转账、修改密码不作要求)

具体要求:

    读卡:因不能使用真正的银行卡,要求用户输入虚拟账号,输入密码,程序判断账号密码是否匹配,如果用户输入账号密码不匹配,提示用户输入不正确;如果用户连续三次输入错误,提示用户账号冻结。此时程序退出。

图1:

    进入主界面:当用户输入正确的账号密码后,进入主取款机服务主界面。界面提示用户可以使用的服务,如查询、取款、转账(功能无需实现)、退卡。用户可以选择对应的服务编号,进入相应的操作界面。

图2:

    取款:当用户选择取款,进入取款界面,提示用户输入取款金额。用户输入完毕回车,程序应该进行判断用户取款金额,如果取款金额在存款金额范围之内,取款成功,并且将用户存款更新;否则提示用户余额不足,取款失败。

图3:

图4:

    查询:当用户选择余额查询,显示用户当前可用余额。

图5:

    退卡:用户选择退卡,则感谢用户使用该服务,程序退出。

图6:

其他要求:用户在账号密码正确进入主界面后,只要不退卡,可以循环操作。具体循环操作次数不固定;用户每选择一项服务并操作完后,给出相应的提示,并提示用户返回主界面。

二、测试代码如下:

(1)用户类:

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(accountNum.equals(user.accountNumber)&&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 (select == 2) {
                    System.out.println("********欢迎使用中国民生银行自动取款服务********");
                    System.out.println("**       请输入您要取款的金额:");
                    double sum = sc.nextDouble();
                    System.out.println("******** 取款成功!!        ********");
                    System.out.println("您的账号余额还剩:" + (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 (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) + "元");
                    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 (select == 4) {
                    System.out.println("********欢迎使用中国民生银行自动取款服务********");
                    System.out.println("******** 退卡成功!!        ********");
                    return;
                }
            }
        }
    }
}

三、代码运行结果:

(1) 当我们的用户输入的账号与ATM里实际已经注册好的账号不匹配时:会提示输入账号有误。(当然肯定还能更细节一点,此处可以随项目需求去补充和删改)而且当我们输入的密码错误三次,就会自动冻结账号。(也就是结束程序运行的进程)

(2)其他测试,四种ATM取款机提供的服务均可以使用。

 

接着上面:

 

当我们的用户选择退卡时:就可以提示退卡成功,并结束进程。 

四、后期还可以对它进行改善,比如需求变更、简化代码、异常的捕获处理、安全权限等等很多问题。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS实现三角形

CSS实现三角形 前言第一种:bordertransparent第二种borderrgb使用unicode字符 前言 本文讲解三种实现三角形的方式,并且配有图文以及代码解说。那么好,本文正式开始。 第一种:bordertransparent border是边框,而transparent是透明的颜色&a…

计数排序+桶排序+基数排序 详讲(思路+图解+代码详解)

文章目录 计数排序桶排序基数排序一、计数排序概念:写法一:写法二: 二、桶排序概念代码 三、基数排序概念1.LSD排序法(最低位优先法)2.MSD排序法(最高位优先法) 基数排序VS基数排序VS桶排序 计数…

C++语法知识点-vector+子数组

C语法知识点-vector子数组 一维数组定义无参数有参数迭代器扩容操作reserve 二维数组 vector 定义创建m*n的二维vectorvector< vector<int> > v(m, vector<int>(n) ) 初始化定义vector常用函数的实例分析访问操作resize 函数push _back ( )pop_back()函数siz…

宣传技能培训1——《新闻摄影技巧》光影魔法:理解不同光线、角度、构图的摄影效果,以及相机实战操作 + 新闻摄影实例讲解

新闻摄影技巧 写在最前面摘要 构图与拍摄角度景别人物表情与叙事远景与特写 构图与拍摄角度案例 主体、陪体、前景、背景强调主体利用前景和背景层次感的创造 探索新闻摄影中的构图技巧基本构图技巧构图技巧的应用实例实例分析1. 黄金分割和九宫格2. 三角型构图3. 引导线构图4.…

2 使用React构造前端应用

文章目录 简单了解React和Node搭建开发环境React框架JavaScript客户端ChallengeComponent组件的主要结构渲染与应用程序集成 第一次运行前端调试将CORS配置添加到Spring Boot应用使用应用程序部署React应用程序小结 前端代码可从这里下载&#xff1a; 前端示例 后端使用这里介…

unity shaderGraph实例-可交互瀑布

不要问我水在哪里&#xff0c;你自己相像这是一个瀑布&#xff0c;瀑布的效果我还不会做 效果展示 整体结构 这里片元着色器最后输出的baseColor应该是黑色&#xff0c;白色为错误。 各区域内容 区域1 计算球到瀑布的距离&#xff0c;然后减去一个值&#xff0c;实现黑色区域…

【小黑送书—第九期】>>重磅!这本30w人都在看的Python数据分析畅销书:更新了!

想学习python进行数据分析&#xff0c;这本《利用python进行数据分析》是绕不开的一本书。目前该书根据Python3.10已经更新到第三版。 Python 语言极具吸引力。自从 1991 年诞生以来&#xff0c;Python 如今已经成为最受欢迎的解释型编程语言。 pandas 诞生于2008年。它是由韦…

【亚太杯前两问论文】2023年第十三届APMCM亚太地区大学生数学建模竞赛——(文末领取方式)

2023年第十三届APMCM亚太地区大学生数学建模竞赛——论文无偿分享&#xff01;&#xff01;&#xff01; C题前两问论文代码已出&#xff0c;其他赛题及后续论文代码会持续更新。 祝各位小伙伴都能在比赛中发挥出色&#xff0c;取得心仪的成绩呦&#xff01;一起加油&#xff…

使用Arrays.Sort并定制Comparator排序解决合并区间

合并区间-力扣算法题56题 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&am…

姿态传感器——MPU6050

1、MPU6050介绍 MPU6050是由三个陀螺仪和三个加速度传感器组成的6轴运动处理组件&#xff0c;是一款六轴&#xff08;三轴加速度三轴角速度&#xff08;陀螺仪&#xff09;&#xff09;传感器。 内部主要结构 陀螺仪、加速度计、数字运动处理器DMP&#xff08;Digital Moti…

uniapp 轮播图(含组件封装,自动注册全局组件)

效果预览 组件封装 src\components\SUI_Swiper.vue 可参考官网配置更多属性 swipernavigator <script setup lang"ts"> import { ref } from vue defineProps({config: Object, })const activeIndex ref(0) const change: UniHelper.SwiperOnChange (e) &…

msvcp120.dll丢失是什么意思,哪个修复方法最简单

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到msvcp120.dll”。这个错误通常发生在运行某些程序或游戏时&#xff0c;它会导致程序无法正常启动或运行。那么&#xff0c;这个错误提示到底是什么意思呢&#xff1f;为了解决这个问…

当老师应该选文科还是理科

教育不断发展和改革&#xff0c;教师职业的选择也越来越受到关注。许多人在选择专业时都会考虑成为一名教师&#xff0c;但对于选择文科还是理科却感到困惑。本文将探讨当老师应该选文科还是理科。 文科注重的是人文素养和社会科学方面的知识&#xff0c;而理科则注重自然科学和…

springcloud超市管理系统源码

技术说明&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;idea&#xff0c;vscode springcloud springboot mybatis vue elementui mysql 功能介绍&#xff1a; 后台管理&#xff1a; 统计分析&#xff1a;查看用户&#xff0c;商品&#xff0c;销售数量&#xff1b;…

王道p150 20.将给定的表达式树转化为等价的中缀表达式(通过括号反应操作符的计算次序)

本题代码如下 void btreetoexp(tree t, char deep) {if (t NULL)return;else if (t->lchild NULL && t->rchild NULL)printf("%c", t->data);//输出操作数&#xff0c;不加括号else {if (deep > 1)printf("(");btreetoexp(t->l…

职场Excel:求和家族,不简单

说到excel函数&#xff0c;很多人第一时间想到的就是求和函数sum。作为excel入门级函数&#xff0c;sum的确是小白级的&#xff0c;以至于很多人对求和函数有点“误解”&#xff0c;觉得求和函数太简单了。 但是&#xff0c;你可能不知道&#xff0c;sum只是excel求和家族里的一…

阿里入局鸿蒙!鸿蒙原生应用再添两员新丁

今日HarmonyOS微博称&#xff0c;阿里钉钉、蚂蚁集团旗下的移动开发平台mPaaS与华为达成合作&#xff0c;宣布启动鸿蒙原生应用的开发&#xff01;相关应用将以原生方式适配#HarmonyOS NEXT#系统。 #HarmonyOS#市场或迎来爆发式增长&#xff01; 阿里钉钉 阿里钉钉与华为达成合…

231123 刷题日报-动态规划

今天主要看了DP&#xff0c;前几天频繁遇到DP打击有点大。。 1. 0-1背包问题 要点&#xff1a; a. 三部曲&#xff1a; 1. 状态和选择 状态&#xff1a;物品序号、背包容量 选择&#xff1a;放、不放 2. dp数组定义、base case dp[i][w] 对于前i个物品&#xff0c;当前背包…

简单的用Python采集股票数据,保存表格后分析历史数据

前言 字节跳动如果上市&#xff0c;那么钟老板将成为我国第一个世界首富 趁着现在还没上市&#xff0c;咱们提前学习一下用Python分析股票历史数据&#xff0c;抱住粗大腿坐等起飞~ 好了话不多说&#xff0c;我们直接开始正文 准备工作 环境使用 Python 3.10 解释器Pychar…

检验LIS系统:医院信息管理的重要组成部分

检验LIS系统源码&#xff0c;云LIS系统源码 云LIS系统是医院信息管理的重要组成部分之一&#xff0c;集申请、采样、核收、计费、检验、审核、发布、质控、查询、耗材控制等检验科工作为一体的网络管理系统。LIS系统不仅是自动接收检验数据&#xff0c;打印检验报告&#xff0c…