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…

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;达到治疗抑郁症的目的。中医治疗抑郁症多采用天…

人体姿态估计算法

人体姿态估计算法 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 应用程序…

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

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

vite脚手架,手写实现配置动态生成路由

参考文档 vite的glob-import vue路由配置基本都是重复的代码&#xff0c;每次都写一遍挺难受&#xff0c;加个页面就带配置下路由 那就利用 vite 的 文件系统处理啊 先看实现效果 1. 考虑怎么约定路由&#xff0c;即一个文件夹下&#xff0c;又有组件&#xff0c;又有页面&am…

[数据结构]HashSet与LinkedHashSet的底层原理学习心得

我们区分list和set集合的标准是三个&#xff1a;有无顺序&#xff0c;可否重复&#xff0c;有无索引。 list的答案是&#xff1a;有顺序&#xff0c;可重复&#xff0c;有索引。这也就是ArrayList和LinkedList的共性 set的答案是&#xff1a;顺序内部再区分,不可以重复&#xf…

【数电笔记】11-最小项(逻辑函数的表示方法及其转换)

目录 说明&#xff1a; 逻辑函数的建立 1. 分析逻辑问题&#xff0c;建立逻辑函数的真值表 2. 根据真值表写出逻辑式 3. 画逻辑图 逻辑函数的表示 1. 逻辑表达式的常见表示形式与转换 2. 逻辑函数的标准表达式 &#xff08;1&#xff09;最小项的定义 &#xff08;2&am…

【JavaEE】多线程(3) -- 线程等待 wait 和 notify

目录 1. wait()⽅法 2. notify()⽅法 3. notifyAll()⽅法 4. wait 和 sleep 的对⽐&#xff08;⾯试题&#xff09; 由于线程之间是抢占式执⾏的, 因此线程之间执⾏的先后顺序难以预知. 但是实际开发中有时候我们希望合理的协调多个线程之间的执⾏先后顺序. 完成这个协调⼯…

【数电笔记】18-卡诺图化简

目录 说明&#xff1a; 用卡诺图化简逻辑函数 1. 公式法化简与卡诺图化简对比 2. 化简依据 3. 化简规律 3.1 两个小方块相邻 3.2 四个小方块相邻 3.3 八个小方块相邻 4. 卡诺图化简法步骤 4.1 例1 4.2 例2 5. 画卡诺圈规则 5.1 例1 6. 特殊情况 6.1 例1 6.2 例…

【JVM】一篇通关JVM类加载与字节码技术

目录 1. 类文件结构1-1. 魔数 版本 常量池 2. 字节码指令3. 编译期处理4. 类加载阶段5. 类加载器6. 运行期优化 类加载与字节码技术 1. 类文件结构 案例 // HelloWorld 示例 public class HelloWorld {public static void main(String[] args) {System.out.println("h…

[Linux] linux防火墙

一、防火墙是什么 防火墙&#xff08;FireWall&#xff09;&#xff1a;隔离功能&#xff0c;工作在网络或主机的边缘&#xff0c;数据包的匹配规则与由一组功能定义的操作组件处理的规则相匹配&#xff0c;根据特定规则检查网络或主机的入口和出口 当要这样做时&#xff0c;基…

C++函数模板,类模板

C函数模板&#xff0c;类模板 1.函数模板1.1函数模板的概念1.2函数模板的格式1.3函数模板的原理1.4函数模板的实例化1.5模板参数的匹配原则 2.类模板2.1类模板的定义格式2.2类模板的实例化 1.函数模板 1.1函数模板的概念 在C中&#xff0c;函数模板是一种通用的函数定义&…