Java实战案例————ATM

需求分析

首先ATM银行系统包括两个基础大功能:开户和登陆账户(当然在系统中没有一个账户时不能登录,需要先开户)。

一名用户有6项基本信息描述:姓名、性别、银行卡号、银行卡密码、账户余额、取款限额。

在登录账户后又有7项功能:查询账户信息、存款、取款、转账、修改密码、退出、注销账户。

代码展示

// ATM.javapublic class ATM {private int id;private String name;private char sex;private double moneyLeft;private double moneyCon;private String code;public ATM() {}public ATM(int id, String name, char sex, double moneyLeft, double moneyCon, String code) {this.id = id;this.name = name;this.sex = sex;this.moneyLeft = moneyLeft;this.moneyCon = moneyCon;this.code = code;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public double getMoneyLeft() {return moneyLeft;}public void setMoneyLeft(double moneyLeft) {this.moneyLeft = moneyLeft;}public double getMoneyCon() {return moneyCon;}public void setMoneyCon(double moneyCon) {this.moneyCon = moneyCon;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}
}
// ATMOperator.javapublic class ATMOperator {ArrayList<ATM> ATMlist = new ArrayList<>();//开户public void register() {ATM user = new ATM();Scanner sc = new Scanner(System.in);System.out.println("请输入你的用户名");String name = sc.next();user.setName(name);while (true) {System.out.println("请输入你的性别,‘男’ 或 ‘女’ ");String tmp = sc.next();char sex = tmp.charAt(0);if (sex != '男' && sex != '女') {System.out.println("请输入‘男’ 或 ‘女’");} else {user.setSex(sex);break;}}while (true) {System.out.println("请输入你的密码");String code = sc.next();System.out.println("请确认你的密码");String confirmCode = sc.next();if (code.equals(confirmCode)) {user.setCode(code);break;} else {System.out.println("两次密码不一致,请重新输入密码");}}System.out.println("请输入你的每次取款限额");double moneyCon = sc.nextDouble();user.setMoneyCon(moneyCon);String id = "";Random r = new Random();for (int i = 0; i < 7; i++) {int num = r.nextInt(10);id += num;}System.out.println("恭喜你,开户成功!卡号是:" + id);int id1 = Integer.parseInt(id);user.setId(id1);ATMlist.add(user);}//查询打印账户信息public void print(int n) {System.out.println("----------" + ATMlist.get(n).getName() + "先生的账户信息----------");System.out.println("账户卡号:" + ATMlist.get(n).getId());System.out.println("账户名:" + ATMlist.get(n).getName());System.out.println("性别:" + ATMlist.get(n).getSex());System.out.println("余额:" + ATMlist.get(n).getMoneyLeft());System.out.println("取款限额:" + ATMlist.get(n).getMoneyCon());System.out.println("--------------------------------");}//展示登录界面public void showLogon(int user) {Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入你需要办理的业务号");System.out.println("1、查询打印账户信息");System.out.println("2、存款");System.out.println("3、取款");System.out.println("4、转账");System.out.println("5、修改密码");System.out.println("6、退出");System.out.println("7、注销账户");String n = sc.next();switch (n) {case "1":print(user);break;case "2":saveMoney(user);break;case "3":getMoney(user);break;case "4":transforAccounts(user);break;case "5":changePassword(user);break;case "6":return;case "7":unsubscribe(user);break;default:System.out.println("请输入正确的指令");break;}}}//登录账户public int logon() {if (ATMlist.size() == 0) {System.out.println("您还未开户,请先开户");throw new RuntimeException("Exception occurred");}Scanner sc = new Scanner(System.in);System.out.println("请输入你的卡号");int id = sc.nextInt();int tmp = -1;for (int i = 0; i < ATMlist.size(); i++) {if (ATMlist.get(i).getId() == id) {System.out.println(ATMlist.get(i).getName() + "先生,您已经成功登录账户");tmp = i;break;}}if (tmp == -1) {System.out.println("您输入的卡号不存在");throw new RuntimeException("Exception occurred");} else {showLogon(tmp);return tmp;}}//存款public void saveMoney(int user) {Scanner sc = new Scanner(System.in);System.out.println("请输入你要存的金额");double saveMoney = sc.nextDouble();double rs = saveMoney + ATMlist.get(user).getMoneyLeft();System.out.println("存钱成功!您的余额为:" + rs);ATMlist.get(user).setMoneyLeft(rs);}//取款public void getMoney(int user) {Scanner sc = new Scanner(System.in);System.out.println("请输入你要取的金额");double money = sc.nextDouble();if (money > ATMlist.get(user).getMoneyLeft()) {System.out.println("余额不足,取款失败");} else {double rs = ATMlist.get(user).getMoneyLeft() - money;ATMlist.get(user).setMoneyLeft(rs);System.out.println("取款成功!你的余额为:" + ATMlist.get(user).getMoneyLeft());}}//转账public void transforAccounts(int user) {Scanner sc = new Scanner(System.in);System.out.println("请输入你的转账对象的卡号");int id = sc.nextInt();for (int i = 0; i < ATMlist.size(); i++) {if (id == ATMlist.get(i).getId()) {System.out.println("请问是要给*" + ATMlist.get(i).getName().substring(1) + "转账吗?");String tmp = sc.next();char answer = tmp.charAt(0);if (answer == (ATMlist.get(i).getName().charAt(0))) {System.out.println("请输入你要转账的金额");double money = sc.nextDouble();if (money > ATMlist.get(user).getMoneyLeft()) {System.out.println("你的余额不足,转账失败");return;} else {if (money > ATMlist.get(user).getMoneyCon()) {System.out.println("超出取款限额,请重试");return;} else {double rs = ATMlist.get(user).getMoneyLeft() - money;ATMlist.get(user).setMoneyLeft(rs);double otherrs = ATMlist.get(i).getMoneyLeft() + money;ATMlist.get(i).setMoneyLeft(otherrs);System.out.println("转账成功!您的余额为:" + rs);}}} else {System.out.println("你输入的对方账户姓氏不正确,请重试");return;}}else System.out.println("卡号输入有误,请重试");}}//修改密码public void changePassword(int user) {Scanner sc = new Scanner(System.in);System.out.println("确认为本人,请输入你的新密码");String newcode = sc.next();System.out.println("请确认新密码");String confirmCode = sc.next();if (newcode.equals(confirmCode)) {ATMlist.get(user).setCode(newcode);System.out.println("修改密码成功!请牢记密码");} else {System.out.println("两次密码不一致,请重试");return;}}//退出public void exit() {;}//注销账户public void unsubscribe(int user) {Scanner sc = new Scanner(System.in);while (true) {System.out.println("你确定要注销该账户?y/n");String answer = sc.next();if (answer.equals("y")) {System.out.println("你已成功注销账户");ATMlist.remove(user);break;} else if (answer.equals("n")) {System.out.println("你选择了保留账户");break;} else {System.out.println("请输入 y/n");}}}public void start() {Scanner sc = new Scanner(System.in);while (true){System.out.println("请选择你要进行的操作");System.out.println(("1、开户"));System.out.println("2、登录账户");System.out.println("0、退出系统");String num = sc.next();switch (num) {case "0":return;case "1":register();break;case "2":int user = logon();break;default:System.out.println("请输入正确的指令");break;}}}
}
// Test.java (测试用例)public class Test {public static void main(String[] args) {ATMOperator ts = new ATMOperator();ts.start();}
}

场景测试

1、首先是在未开户情况下的登录账户操作:

2、开户

(一)性别乱填

(二)密码输入不一致

(三)正常开户

3、登录账户,但是登录密码错误

4、成功登录账户

a. 查询打印账户信息

b. 存款取款

c.转账(这里转账卡号输错情况写错了,截图懒得改了....)

转账需要2个用户,我先开2个用户,并给梨花存2000元:

现在我用梨花的账户给小王’转账2500:

余额不足,那我转1500:

超出梨花转账限额,那我转100:

 成功!

d.修改密码

e.注销账户

以上就是所有基本功能!

感谢阅读!!

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

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

相关文章

QNX常用调试方法

QNX常用调试方法 1. top 查询系统状态最常用的工具是top&#xff0c;它可以显示系统资源的使用情况。我们最关心的通常是系统可用内存和CPU使用率。如果CPU使用率过高可能是因为某些应用存在bug&#xff0c;重点关注下面显示的占用CPU资源最多的几个线程。如果可用内存太少&am…

基本计算器[困难]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个字符串表达式s&#xff0c;请你实现一个基本计算器来计算并返回它的值。注意:不允许使用任何将字符串作为数学表达式计算的内置函数&#xff0c;比如eval()。 示例 1&#xff1a; 输入&#xff1a;s "1 1" 输出…

Python 内置异常

目录 异常上下文 从内置异常继承 基类 具体异常 OS 异常 警告 异常组 异常层次结构 在 Python 中&#xff0c;所有异常必须为一个派生自 BaseException 的类的实例。 在带有提及一个特定类的 except 子句的 try 语句中&#xff0c;该子句也会处理任何派生自该类的异常类…

oops-framework框架 之 资源管理(四)

引擎&#xff1a; CocosCreator 3.8.0 环境&#xff1a; Mac Gitee: oops-game-kit 注&#xff1a; 作者dgflash的oops-framework框架QQ群&#xff1a; 628575875 简介 在CocosCreator中&#xff0c;资源可以分为两大类&#xff1a; 静态引用资源动态引用资源&#xff0c;包…

瞥一眼 FAT32,手撸文件系统

FAT 32 FAT(File Allocation Table)&#xff0c;最早在DOS v1.0 中被引入&#xff0c;是一种极简的文件系统&#xff0c;占用空间&#xff0c;是目前最常见的文件系统之一。 发展历程 FATX系列文件系统的不同版本都是针对不同的文件存储介质&#xff08;storage media&#…

Fisher信息理论与应用

一、概念介绍 Fisher信息量&#xff0c;是一次观测值所能提供的关于未知参数θ的信息量期望值的一种度量。 Fisher信息矩阵&#xff0c;是用利用最大似然函数估计来计算方差矩阵&#xff0c;表示随机变量的一个样本所能提供的关于状态参数在某种意义下的平均信息量。 Fisher…

node.js express路由和中间件

目录 路由 解释 使用方式 中间件 解释 使用方式 中间件类型 路由注册和中间件注册 代码 app全局路由接口请求以及代码解析 示例1 示例2 示例3 示例4 中间件req继承 嵌套子路由 解释 代码 示例1 路由 解释 在 Express 中&#xff0c;路由&#xff08;Route&…

【Qt开发流程】之事件系统3:键盘事件

序章 以下链接是拖放事件介绍和使用示例&#xff1a; 【Qt开发流程】之拖放操作1:介绍链接: https://blog.csdn.net/MrHHHHHH/article/details/134626484 【Qt开发流程】之拖放操作2:使用链接: https://blog.csdn.net/MrHHHHHH/article/details/134632006 以下链接是事件系统…

百度智能云推出“千帆AI原生应用开发工作台” 助力开发者创新

在这个智能互联的世界&#xff0c;每一次技术的飞跃都预示着无限可能。你是否曾梦想&#xff0c;一款产品能够打破创新的边界&#xff0c;让开发不再是高门槛的技术挑战&#xff1f;12月20日&#xff0c;百度云智大会智算大会将为你揭开这幕神秘面纱——“千帆AI原生应用开发工…

orvibo旗下的VS30ZW网关分析之一

概述 从官网的APP支持的智能中枢来看,一共就两种大类: MixPad系列和网关系列 排除MixPad带屏网关外,剩余的设备如下图: 目前在市场上这四种网关已经下市,官方已经宣布停产。所以市场上流通的也几乎绝迹。 从闲鱼市场上可以淘到几个,拿来分析一下,这里我手头有如下的两…

配置typroa上传图片到gitee

在typora这个位置下载插件 在picgo.exe文件夹下输入cmd 打开命令行输入如下命令安装相关插件 .\picgo install gitee-uploader .\picgo install super-prefix 之后按照官方文档更改相关配置 官方文档参考 https://picgo.github.io/PicGo-Core-Doc 博客参考&#xff1a;…

抑郁症中西医治疗对比?

抑郁症是一种常见的心理障碍&#xff0c;治疗方法包括中医和西医两种。下面就抑郁症中西医治疗进行对比&#xff1a; 治疗方法&#xff1a;中医治疗抑郁症强调整体观念和辨证论治&#xff0c;通过调理身体各部分的功能&#xff0c;达到治疗抑郁症的目的。中医治疗抑郁症多采用天…

矩阵的条件数及病态方程组的处理

对 A x b Axb Axb,如果A或者b有轻微的变动,会使得求解出的 x x x发生巨变,这种矩阵就是病态的 A x b Axb Axb 真实情况 A ( Δ x x ) Δ b b A(\Delta xx)\Delta bb A(Δxx)Δbb 代入误差的扰动情况 Δ x A − 1 Δ b \Delta xA^{-1}\Delta b ΔxA−1Δb 取范数后有 ∣…

人体姿态估计算法

人体姿态估计算法 1 什么是人体姿态估计2 基于经典传统和基于深度学习的方法2.1 基于经典传统的人体姿态估计算法2.2 基于深度学习的人体姿态估计算法OpenPoseAlphaPose (RMPE) 3 算法应用4 Paper 人体姿态估计在现实中的应用场景很丰富&#xff0c;如下 动作捕捉&#xff1a;三…

Android String.xml 设置加粗字体/修改字体颜色/动态设置修改文案

之前经常使用Spannable 这次主要在String.xml使用&#xff1a;<![CDATA[和]]> 效果&#xff1a; <resources><string name"str_bianse"><![CDATA[变色 <font color"#ff0000">曲项向天歌</font> 白毛浮绿水]]></st…

idea新建spring boot starter

什么是spring boot starter Spring Boot Starter 是一种 Maven 或 Gradle 依赖&#xff0c;它能够轻松地将相关库和框架集成到 Spring Boot 应用程序中。Starter 是一种对常见依赖项和设置的易于复用的封装&#xff0c;它们通常被开发人员用于创建可插拔的 Spring Boot 应用程序…

信息学奥赛一本通1190:上台阶

1190&#xff1a;上台阶 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 69016 通过数: 23589 【题目描述】 楼梯有n(0<n<71)阶台阶,上楼时可以一步上1阶,也可以一步上2阶,也可以一步上3阶&#xff0c;编程计算共有多少种不同的走法。 【输入】 输入的每一行…

SCAU:各位数字

各位数字 Time Limit:1000MS Memory Limit:65535K 题型: 编程题 语言: G;GCC 描述 从键盘输入一个3位数的正整数&#xff0c;要求先后输出该数的百位数字与个位数字&#xff0c;各占一行输入格式 一个三位整数输出格式 输出该数的百位数字与个位数字输入样例 123输出…

报考公务员简历(精选8篇)

想要成功进入公务员队伍&#xff0c;一份出色的个人简历是必不可少的。本文为大家精选了8篇报考公务员的个人简历案例&#xff0c;无论是应届毕业生还是有工作经验的求职者&#xff0c;都能从中汲取灵感&#xff0c;提升简历质量。找到心仪的公务员岗位。 报考公务员简历模板下…

迭代器模式-C++实现

题外话&#xff1a; 设计模式是在1994年提出的&#xff0c;当时还没有C的STL库和泛型编程&#xff0c;所以人们为了提供一种有效的方法来访问一个聚合对象&#xff08;例如列表、集合、数组等&#xff09;中的元素&#xff0c;而又不暴露该对象的内部表示&#xff0c;于是想到了…