ATM

基于C++的ATM自动取款机设计 根据C++类的基本知识和类的基本性质去实现ATM自动取款机的基本功能。 阅读详情

//ATM机
public class ATMMachine {

private UserInfo[] allUsers;// ATM中的用户信息

private UserInfo theUser; // 当前操作用户

private int cash;// 现金

public final int MAX_CASH = 200000;// 最大现金额

// 构造方法
public ATMMachine() {
    this.allUsers = new UserInfo[5]; // 用一个数组来装五个用户的信息
    for (int i = 0; i < this.allUsers.length; i++) {
        this.allUsers[i] = new UserInfo("12345" + i, "12345" + i, 10000 + i * 1000); // 用循环来表示每个人的账户和密码
    }

    this.cash = 100000; // 给现金赋值
}

// 运行--控制ATM机的运行流程
public void run() {
    this.welcome(); // 调用欢迎的方法
    if (this.login()) { // 调用login方法,并判断
        System.out.println("欢迎您,登录成功!");
        while (true) { // 用一个循环来使我们可以一直操作
            switch (this.choiceMenu()) {
            case 1:
                this.query();
                break;
            case 2:
                this.getMoney();
                break;
            case 3:
                this.storeMoney();
                break;
            case 4:
                this.changePwd();
                break;
            case 5:
                this.exit();
                break;
            default:
                System.out.println("没有该选项");
            }
        }

    } else {
        System.out.println("三次登录失败,您的卡已经被没收!");
        System.out.println("请在工作日带上有效证件,到柜台处理!");
    }

}

// 欢迎
private void welcome() {
    System.out.println("***************************");
    System.out.println("**********欢**迎**********");
    System.out.println("**********使**用**********");
    System.out.println("***********ICBC***********");
    System.out.println("***************************");
}

// 登录
private boolean login() {
    for (int i = 0; i < 3; i++) { // 循环给用户三次输入的机会
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String inputName = scan.next();
        System.out.println("请输入密   码:");
        String inputPwd = scan.next();

        for (int j = 0; j < this.allUsers.length; j++) { // 嵌套一个循环判断用户输入的正误
            if (inputName.equals(this.allUsers[j].getUsername())
                    && inputPwd.equals(this.allUsers[j].getPassword())) {
                this.theUser = this.allUsers[j]; // 若正确,返回一个true
                return true;
            }
        }

        System.out.println("用户名密码有误,您还有" + (2 - i) + "次机会!");
    }
    return false;
}

// 选择菜单
private int choiceMenu() {
    while (true) {
        try { // 异常处理
            System.out.println("请选择您要执行的操作:");
            System.out.println("1、查询;2、取款;3、存款;4、修改密码;5、退出");
            Scanner scan = new Scanner(System.in);
            int choice = scan.nextInt(); // 接收选择

            return choice;
        } catch (InputMismatchException i) {
            // TODO: handle exception
            System.out.println("请输入有效数字!");
        }
    }
}

// 查询
private void query() {
    System.out.println("您当前的余额是:" + this.theUser.getAccount() + "元!"); // 调用theuser的getAccount
}

// 取款
private void getMoney() {
    try {
        System.out.println("请输入取款金额:");
        Scanner scan = new Scanner(System.in);
        int inputMoney = scan.nextInt(); // 取款金额

        if (inputMoney <= 0) { // 以下都是判断取款金额是否符合要求
            System.out.println("你见过哪家银行取负数的钱?");
        } else if (inputMoney % 100 != 0) {
            System.out.println("本ATM只支持100的整数!");
        } else if (inputMoney >= this.theUser.getAccount()) { // 要取的钱和他账户上有的钱进行判断
            System.out.println("您账户的余额不足!");
        } else if (inputMoney > this.cash) { // 要取的钱和ATM机上的钱进行判断
            System.out.println("本ATM现金不足!");
        } else {
            this.theUser.setAccount(this.theUser.getAccount() - inputMoney); // 取款成功后的账户上所剩的钱
            this.cash -= inputMoney;
            System.out.println("取款成功!现在余额是:" + this.theUser.getAccount());
        }
    } catch (InputMismatchException i) {
        // TODO: handle exception
        System.out.println("请输入有效的取款金额!");
    }
}

// 存款
private void storeMoney() {
    try {
        System.out.println("请输入存款金额:");
        Scanner scan = new Scanner(System.in);
        int inputMoney = scan.nextInt();

        if (inputMoney <= 0) { // 以下都是判断存款金额是否符合要求
            System.out.println("取款金额不能为负数!");
        } else if (inputMoney % 100 != 0) {
            System.out.println("本ATM只支持100的整数!");
        } else if (inputMoney + this.cash > this.MAX_CASH) {
            System.out.println("本ATM现金存放空间不足!");
        } else {
            this.cash += inputMoney; // 存了钱过后ATM机上的钱会增加
            this.theUser.setAccount(this.theUser.getAccount() + inputMoney); // 账户的钱也会变化
            System.out.println("存款成功!现在余额是:" + this.theUser.getAccount());
        }
    } catch (InputMismatchException i) {
        // TODO: handle exception
        System.out.println("请输入有效的存款金额!");
    }

}

// 修改密码
private void changePwd() {

    Scanner scan = new Scanner(System.in);
    System.out.println("请输入原密码:");
    String oldPwd = scan.next();

    try {
        if (oldPwd.equals(this.theUser.getPassword())) {
            System.out.println("请输入新密码:");
            String newPwd1 = scan.next();   
            int x = Integer.parseInt(newPwd1); // 将输入的string类型转换为 int类型,赋值给x,如果不能赋值一个整形变量,catch就捕捉这个异常
            System.out.println("请确认新密码:");
            String newPwd2 = scan.next();
            int y = Integer.parseInt(newPwd2);
            if (newPwd1.length() != 6 && newPwd2.length() != 6) {
                System.out.println("密码需为六位数!");
            } else if (newPwd1.equals(this.theUser.getPassword())) {
                System.out.println("新密码与原来密码一致,修改失败");
            } else if (x == y && newPwd1.length() == 6 && newPwd2.length() == 6) {
                this.theUser.setPassword(newPwd1);
                System.out.println("密码修改已经成功!");
                this.run();
            } else {
                System.out.println("两次密码不一致,不予修改!");
            }

        } else {
            System.out.println("密码输入错误!");
        }
    } catch (NumberFormatException i) {
        // TODO: handle exception
        System.out.println("密码必须是由 0—9 组成的六位数字!");
    }
}

// 退出
private void exit() {
    System.out.println("谢谢使用,期待下次光临!");
    System.exit(0);
}

}

【C++实验】模拟实现一个ATM自助存取款机 一、实验平台 Visual C++ 6.0 二、问题分析 2.1 需求分析 本次实验有如下四条需求: (1)要求程序界面友好且能对操作是否成功进行判断; (2)要求输入密码时以星号(***)显示; (3)要求存取款只能以整百金额进行,并对出现的各种情况进行判断; (4)要求转账时只能对于已有的五个账号(1234567891234567891……)操作。 根据以上四点需求,至少应有菜单(Menu)、... 阅读详情

相关推荐

ATM系统---用况图

 ATM系统-----用况图文档 实验一文档链接地址:https://blog.csdn.net/WINNER_Moo/article/details/801053841.图形文档 2.文字说明(1)用况综述此用况图说明了ATM系统、银行与用户之间的关系。用户登陆后进入主界面选择一项业务,包括取款、存款、查询余额、转账和修改密码,操作完成后选择是否打印凭条,然后取出银行卡或返回主界面。ATM技术人...

WINNER_Moo的博客 4042

ATM机器模拟(C++实现,MySQL储存)

1.新建账户2.登录账户3.删除账户4.现金存取5.余额查询6.密码修改7.明细查询8.线上转账ss<<x;string y;ss>>y;return y;num<<x;int n;num>>n;return n;可以改进的地方很多:1.我将用户信息临时储存到user,transer当中,没有考虑到并发存取的情况。2.界面不够友好,大多数界面没有退出功能。3.没有进行数据备份,没有容灾措施,可能会导致数据流失的情况。

illmagineness的博客 997

ATM案例

需求:1、有一个ATM接口,里面有查询余额、存取钱、插卡退卡等抽象方法。2、有一个银行卡类,有卡主、密码、卡内余额、卡号四个属性。3、要求写一个中国银行的ATM实现ATM接口,重写所有的抽象方法。4、写一个测试类,测试这些方法。 ATM接口: public interface ATM { void searchMoney();// 查询方法 void putMoney();// 存钱方法

終有、過去 1631

c++实现ATM机!非友元!

类 本实验中共包含两个类:Uer类和ATM类。两个类的类图如下所示: Uer类实现管理账户相关信息,方法中包含各个私有成员的get和set方法。 ATM类实现基本操作:注册,登陆,存钱,取钱,修改余额,修改密码。 注:通过使用get和set函数实现对Uer类中私有成员的访问和修改,避免使用友元,保护封装性 界面 登陆界面 操作界面 源代码 ...

维维的博客 1091

ATM机领域类图

ATM机问题域及词汇表:https://blog.csdn.net/ashdkl/article/details/80510951ATM机用况图:tps://blog.csdn.net/ashdkl/article/details/80511045一.文字说明1.     类图综述类图是对系统所抽象出来的实体的属性行为的描述以及实体与实体间的关联关系。该分析类图说明了ATM机系统的概念模型,表现了...

ashdkl的博客 5882

C++实现设计ATM机系统

这个示例实现了一个基本的ATM机系统,支持注册、登录、存款、取款、查询余额和保存数据等功能。当然,这只是一个简单的ATM机模拟,实际的ATM机系统需要更复杂的逻辑和更严格的安全措施。C++编写一个简单的ATM机系统,我将提供一个基本的实现示例,但由于ATM机系统的复杂性和安全性要求,这只是一个简单的模拟,不适合在实际环境中使用。试设计一简单模拟ATM机系统,系统以菜单方式工作,采用自定义函数设计各功能模块被主菜单调用,使之能提供以下基本选项。=========欢迎使用ATM=========

走向CTO的路上... 1243

用c++模拟ATM机

**一.题目:**用c++模拟ATM机. 二.分析: 实现ATM机,首先要创建两个类,一个为用户类,用来存储用户个人信息。另一个为ATM类, 用来实现各种功能。用户类中用户个人信息只有用户本人可以查看,所以全部为私有数据成 员,包括用户的密码、用户的卡号、用户余额、用户名字。ATM机类主要是实现登录、存款、 取款、余额查询、修改密码、退出系统等基本功能。登录时要核对账户和密码是否正确,若 密码错误...

qq_45234177的博客 9905

基于c++atm机界面程序

ATM机界面程序,实现了取款,存款,查询。中英文界面。 判断取款钱数

python ATM流程模拟

通过观察ATM机的主要业务为读卡验证、取款、存款、转账、汇款(无卡存款)、改密、余额查询等主要业务

weixin_46163831的博客 3357

ATM机程序设计课程设计报告 c++

ATM机程序设计课程设计报告 c++ 有详细代码,操作流程

Mac版Burp Suite专业版破解与汉化完整指南

在Web安全测试领域,Java应用程序的许可证验证机制与本地化实现是常见的技术课题。其原理通常涉及Java Agent技术,通过在JVM启动时动态修改字节码,实现对软件授权状态的校验逻辑进行拦截与重写,从而绕过官方验证。同时,软件界面的国际化(i18n)与本地化(l10n)则依赖于资源文件的替换与加载。从技术价值角度看,深入理解这些机制不仅能满足特定场景下的工具定制需求,更能加深对Java安全机制、软件保护与逆向工程的理解。在实际的工程实践中,安全研究人员与开发者常面临功能受限或语言障碍的挑战,尤其是在渗透

weixin_29327525的博客 1049

C++实现ATM机

ATM机设计概要本案例涉及一个银行卡和ATM机之间的“对话”。需要处理两个对象,即:ATM和银行卡,因此可以考虑定义两个类来解决这个问题。(1)ATM机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。需要实现:“核对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。可以将这些操作定义为ATM机类的成员函数。(2)银行卡类:具有“用户姓名”、“用

hxy499的博客 1万+

基于物联网技术智慧园林绿化养护管理信息平台

近几年来,随着经济不断的发展,城市面积不断的扩大,城市管理中的园林绿化工作也在这种趋势下不断的发生着深刻改变。管养企业是否按制定的管养计划严格执行?绿化事件整改是否及时到位?绿地面积是否在稳步增长?管养的效果如何?如何客观评价管养企业的管养工作?这些都是我们各级管理者需要面对的问题。   智慧园林绿化养护管理信息平台的开发思路以“考核”为核心,整个信息平台体现出“新、快、高、全、享”五个特点。   智慧园林绿化养护管理信息平台的整个开发理念为:依托五大技术手段(全球卫星定位系统技术、地理信...

Cesium的博客QQ2252224326 2459

C++实现ATM

为了方面用户的及时取款,查询,及时修改密码的方便,本课题设计并模拟银行的自动取款机使用过程中的界面和用户交互过程。实现查询银行卡余额、取款、修改密码、退出系统等功能。 卡号、密码输入最多三次,否则直接退出系统。 取款功能:取款金额受卡余额、机单笔最大取款金额及机当前剩余金额的限制。 查询功能:实现查询余额功能。 更改密码:实现密码更改功能,对于密码要有2次验证。 锁卡功能:实现卡被锁的功能。 退...

kengdaozui的博客 6966

在RStudio中使用GitHub Copilot:代码自动生成,从此告别手敲!

可以通过自定义提示词来引导Copilot生成符合自己需求的代码。再看一个做统计分析的。

Codewar的博客 333

基于注意力机制的行人重识别(Reld)模型论文解读----Relation-Aware Global Attention for Person Re-identification

任务概述:在多摄像头的复杂场景中,快速定位查找指定目标的所有结果。

qq_52053775的博客 1895

ATM系统复习材料

第一章  ATM参考模型 在ITU-T的I.321建议中定义了B-ISDN协议参考模型,如下图。它包括三个面:用户面、控制面和管理面,而在每个面中又是分层的,分为物理层、ATM层、AAL层和高层。协议参考模型中的三个面分别完成不同的功能:用户平面:采用分层结构,提供用户信息流的传送,同时也具有一定的控制功能,如流量控制、差错控制等;控制平面:采用分层结构,完成呼叫控制和连接控制

hust_wh的专栏 4606

基于深度学习的电力系统暂态稳定评估与预防控制复现

本文复现了基于深度学习的电力系统暂态稳定评估与预防控制方法。主要内容包括:(1)数据预处理环节,对IEEE 39节点系统的电压幅值、相角等特征数据进行归一化处理;(2)ACNGAT模型实现,该模型结合时间卷积网络(TCN)和图注意力网络(GAT)提取时空特征;(3)采用改进的帝企鹅优化算法进行预防控制。关键技术点包括:融合时空信息的特征提取、改进的邻接矩阵构建方法(λ_ij = E_i * E_j * B_ij)以及时空注意力机制。代码实现采用Python和PyTorch框架。

huanghm88的专栏 336

MTK ATM流程

# Android Test Mode Feature MTK_ATM_SUPPORT := yes ------------------------------- bool get_atm_enable_status(void) { bool atm_enable_flag = false; #if defined (MTK_ATM_SUPPORT) char part_nam...

guofeizhi的博客 1958

【推荐100个unity插件之8】实现多人在线联机游戏——Mirror插件的使用介绍(附项目源码)

基于Mirror的Unity多人游戏开发指南 本文介绍了使用Mirror插件开发Unity多人游戏的基本流程。Mirror是Unity的高级网络API,替代了已废弃的UNet系统。文章详细讲解了如何导入Mirror插件,创建NetworkManager网络管理器,处理常见错误,以及创建玩家角色和出生点。 主要内容包括: 创建场景NetworkManager并配置必要组件 为玩家添加NetworkIdentity和NetworkTransform组件 设置玩家初始生成位置和生成方式 常见错误及解决方法 通过M

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

基于Simulink的无线充电系统LCC补偿网络建模与控制

本文详细介绍了基于Simulink的无线充电系统LCC补偿网络建模与控制方法。首先分析了LCC补偿网络的恒流输出、软开关实现和抗偏移能力等优势,并对比了不同补偿拓扑特性。随后分步骤讲解了Simulink建模流程,包括LCC主电路构建、关键参数设计、双闭环控制系统实现等核心环节。重点阐述了移相控制策略和软开关验证方法,提供了系统效率计算和抗偏移测试的调试技巧。最后展示了仿真结果,在耦合系数变化20%时,闭环系统仍能保持输出电压稳定在±2%波动范围内。文章还探讨了工程扩展方向,并针对常见问题给出了解决方案,为无

xiaoheshang_123的博客 540

ATM 的类型

通常有三类ATM:类似单功能设备的低端ATM、具有提款功能的ATM和全功能ATM。本部分讨论这几类产品间的一些主要区别。左: 类似单功能设备的ATM。 中:具有提款功能的ATM。 右:全功能ATM。 主要特征 类似单功能设备的ATM 具有提款功能的低端ATM

1255

基于大语言模型的学术论文阅读辅助分析系统的研究与应用

本文提出了一种基于大语言模型的学术论文阅读辅助分析系统PaperMind,旨在解决传统学术阅读方式面临的三大困境:信息定位困难、跨学科知识断层和手动整理耗时。系统采用检索增强生成(RAG)架构,通过PDF文档解析、语义分割、向量嵌入与FAISS向量检索相结合的技术路线,构建了完整的文档处理流水线。实验结果表明,系统在文档加载分割、向量检索与问答生成环节均达到预期性能指标,检索命中率最高达98%。该系统为学术文献智能化处理提供了可复用的技术方案,有效解决了通用大语言模型在学术场景中的幻觉引用、归因能力不足等问

huanghm88的专栏 94

ATM(异步传输模式)

1 信元 信元实际上就是分组,只是为了区别于X.25的分组,才将ATM的信息单元叫作信元 ATM的信元具有固定的长度,即总是53个字节. 其中5个字节是信头(Header) 48个字节是信息段. 信头包含各种控制信息,主要是表示信元去向的逻辑地址,另外还有一些维护信息、优先级及信头的纠错码 信息段中包含来自各种不同业务的用户数据,这些数据透明地穿越网络.信元的格式与业务类型无关,任何业务的信息都同

一万HOURS的知识库 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ATM协议及ATM技术介绍

43.1.1  协议简介 ATM(Asynchronous Transfer Mode)是一种以信元为单位的异步转移模式。它是基于B-ISDN宽带综合服务数字网标准而设计的用来提高用户综合访问速度的一项技术。在交换形式上而言,ATM 是面向连接的链路,任何一个 ATM 终端与另一个用户通信的时候都需要建立连接,这一方面来看,ATM 拥有电路交换的特点;另一方面 ATM 采用信元(C

独自登高楼 望断天涯路 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

计算机网络中atm意思,atm是什么(atm什么意思)

1)ATM自动取款机 ATM是Automatic Teller Machine的缩写,意思是自动柜员机,因大部分用于取款,又称自动取款机。它是一种高度精密的机电一体化装置,利用磁性代.ATM: Automatic Teller Machine的缩写,即自动柜员机。它是有计算机控制的持卡人自我服务型的金融专用设备。 ATM机可以向持卡人提供提款、存款、查询余额、更改密.(1)ATM(Ao Te Ma...

weixin_28860509的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 面向对象
下一篇: 图形界面(GUI)
Xzzzzzzzcx
博客等级 码龄11年 6粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值