JAVA简单案例之ATM系统

注意:代码中的package univerisity.shanxi.atm;这一行是我自己新建的包名,每个人建的包名不一样的话这个也是不一样的,在自己新建的包下新建三个类Account、ATM、Test,然后将除了package univerisity.shanxi.atm;这一行以下的代码复制上去即可。
学习了B站上黑马程序员的JAVA入门基础视频的基础阶段写的案例:
案例分为三个类:Account:账户类,定义账户的一些基本信息,有哪些属性以及有参构造器,无参构造器,以及每个属性的get,set方法
ATM:核心部分,定义对账户的具体操作以及欢迎界面,登陆操作界面等
Test:测试类,用来测试功能能否实现
此案例适用于本科阶段的JAVA课程的课程设计

Account类:

package univerisity.shanxi.atm;public class Account {private String cardId;private String name;private String sex;private String password;private double money;private double edu;public Account() {}public Account(String cardId, String name, String sex, String password, double money, double edu) {this.cardId = cardId;this.name = name;this.sex = sex;this.password = password;this.money = money;this.edu = edu;}public String getCardId() {return cardId;}public void setCardId(String cardId) {this.cardId = cardId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return (sex.equals("男")?"先生":"女士");}public void setSex(String sex) {this.sex = sex;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}public double getEdu() {return edu;}public void setEdu(double edu) {this.edu = edu;}
}

ATM类:

package univerisity.shanxi.atm;import java.sql.SQLOutput;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class ATM {private ArrayList<Account> accounts=new ArrayList<>();private Scanner sc=new Scanner(System.in);private Account acc;private void createAccount(){Account acc=new Account();System.out.println("欢迎进入开户界面:");System.out.println("请输入姓名:");String name=sc.next();acc.setName(name);while (true) {System.out.println("请输入性别:");String sex=sc.next();if(sex.equals("男") || sex.equals("女")){acc.setSex(sex);break;}else{System.out.println("您输入的性别不对,请重新输入");}}while (true) {System.out.println("请输入密码:");String password=sc.next();System.out.println("请输入确认密码:");String okpassword=sc.next();if(password.equals(okpassword)){acc.setPassword(password);break;}else{System.out.println("两次输入的密码不一致,请重新输入");}}System.out.println("请输入取现额度:");double limit=sc.nextDouble();acc.setEdu(limit);//卡号while (true) {String cardId=createCardId();if(getAccountByCardId(cardId)==null){acc.setCardId(cardId);System.out.println(acc.getName()+acc.getSex()+"您的卡号为:"+cardId);break;}}accounts.add(acc);}private String createCardId(){String code="";Random r=new Random();for (int i = 0; i < 8; i++) {code+=r.nextInt(10);}return code;}private Account getAccountByCardId(String cardId){for (int i = 0; i < accounts.size(); i++) {Account acc=accounts.get(i);if(acc.getCardId().equals(cardId)){return acc;}}return null;}private void loginUser(){if(accounts.size()==0){System.out.println("系统中无任何账户,请先开户后再登录");return;}while (true) {System.out.println("请输入卡号:");String id=sc.next();Account acc=getAccountByCardId(id);if(acc!=null){while (true) {System.out.println("请输入密码:");String pass=sc.next();if(pass.equals(acc.getPassword())){this.acc=acc;System.out.println("恭喜您"+this.acc.getName()+"您已登录成功,您的卡号为:"+acc.getCardId());userOperator();return;}else{System.out.println("您输入的密码不正确,请重新输入:");}}}else{System.out.println("卡号不正确,请重新输入:");}}}private void userOperator(){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.注销账户");System.out.println("请选择:");int command=sc.nextInt();switch (command){case 1:     showUserInfo();break;case 2:     deposit();break;case 3:     Withdrawal();break;case 4:     transferMoney();break;case 5:     changePassword();return;case 6: return;case 7:     delAccount();return;default:System.out.println("没有这个指令请重新输入");}}}private void changePassword() {while (true) {System.out.println("=====修改密码界面======");System.out.println("请输入原来的密码:");String password=sc.next();if(this.acc.getPassword().equals(password)){while (true) {System.out.println("请输入新密码:");String newPassword=sc.next();System.out.println("请输入确认密码:");String okPassword=sc.next();if(newPassword.equals(okPassword)){this.acc.setPassword(newPassword);System.out.println("您修改密码成功,返回开始界面");return;}else{System.out.println("两次密码输入不一致,请重新输入");}}}else{System.out.println("您输入的旧密码错误");}}}private void delAccount() {System.out.println("销户操作界面");System.out.println("您确认要注销账户吗?(y/n)");String command=sc.next();switch (command){case "y":double money=this.acc.getMoney();if(money==0){accounts.remove(this.acc);System.out.println("销户成功");System.out.println("======================");return;}else{System.out.println("您账户中有余额,不允许销户");break;}default:System.out.println("您选择不注销账户,返回登录界面");break;}}private void transferMoney() {System.out.println("==转账操作==");if(accounts.size()<2){System.out.println("当前账户数目不足2个,请开户后再转账");return;}while (true) {System.out.println("请输入要转账的卡号:");String cardId=sc.next();Account acc1=getAccountByCardId(cardId);if(acc1!=null){while (true) {String name="*"+acc1.getName().substring(1);System.out.println("您当前要为"+name+"转账,请输入首字:");String prename=sc.next();if(acc1.getName().startsWith(prename)){System.out.println("请输入要转账的金额");double money=sc.nextDouble();if(acc.getMoney()>money){acc.setMoney(acc.getMoney()-money);acc1.setMoney(acc1.getMoney()+money);System.out.println("转账成功,您的当前余额为:"+acc.getMoney());return;}else{System.out.println("您的余额不足,余额为:"+acc.getMoney());}}else{System.out.println("首字母输入错误,请重新输入");}}}else{System.out.println("无此账户,请重新输入");}}}private void Withdrawal() {System.out.println("==取款操作==");if(this.acc.getMoney()>=100){while (true) {System.out.println("请输入您要取款的金额");double money=sc.nextDouble();if(money<=this.acc.getMoney()){if(money<this.acc.getEdu()){double mon1=this.acc.getMoney();this.acc.setMoney(this.acc.getMoney()-money);System.out.println("之前余额为:"+mon1+",取款:"+money+",当前余额:"+this.acc.getMoney());return;}else{System.out.println("超出当前限额,限额为:"+this.acc.getEdu()+",余额为:"+this.acc.getMoney());return;}}else{System.out.println("您要取的金额为:"+money+",您的余额不足,您的当前余额为"+this.acc.getMoney());return;}}}else{System.out.println("您的余额不足一百,您的当前余额为:"+this.acc.getMoney());}}private void deposit() {System.out.println("==存款操作==");System.out.println("请输入要存入的金额:");double depomoney=sc.nextDouble();this.acc.setMoney(this.acc.getMoney()+depomoney);System.out.println("您的当前余额为:"+this.acc.getMoney());}private void showUserInfo(){System.out.println("卡号:"+this.acc.getCardId());System.out.println("姓名:"+this.acc.getName());System.out.println("性别:"+this.acc.getSex());System.out.println("余额:"+this.acc.getMoney());System.out.println("取额度:"+this.acc.getEdu());}public void start(){while (true) {System.out.println("开始界面:");System.out.println("1.用户登录");System.out.println("2.用户开户");System.out.println("请选择:");String command=sc.next();switch (command){case "1":loginUser();break;case "2"://用户开户createAccount();break;default:System.out.println("您输入的命令不正确,请重新输入");}}}
}

Test类:

package univerisity.shanxi.atm;public class Test {public static void main(String[] args) {ATM acc=new ATM();acc.start();}
}

系统界面图片:
在这里插入图片描述
刚开始系统中无用户,因此需要开户之后才能登录,直接登录会提示先开户再登录。
在这里插入图片描述

用户开户界面:
在这里插入图片描述

用户登录界面:
在这里插入图片描述
以上功能均可实现。
查询账户:
在这里插入图片描述
存款:
在这里插入图片描述
取款:
在这里插入图片描述
转账:
转账操作需要系统中有两个及以上用户的情况
在这里插入图片描述

修改密码:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

退出:
在这里插入图片描述

注销账户:
在这里插入图片描述
无余额才能销户。

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

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

相关文章

三、Distributed DataParallel分布式数据并行原理与应用

帮up宣传一下&#xff0c;优质up值得信赖&#xff01; B站UP&#xff1a;你可是处女座啊 文章目录 原理一、 DDP二、基本概念三、分布式训练中的通信 实战初始化进程组当前 进程 到底使用哪些数据&#xff1f;模型处理启动改造 loss 打印改造准确率改造数据划分训练前数据打乱…

EmoLLM(心理健康大模型)——探索心灵的深海,用智能的语言照亮情感的迷雾。

文章目录 介绍&#xff1a;应用地址&#xff1a;模型地址&#xff1a;Github地址&#xff1a;视频介绍&#xff1a;效果图&#xff1a; 介绍&#xff1a; EmoLLM是一个基于 InternLM 等模型微调的心理健康大模型&#xff0c;它涵盖了认知、情感、行为、社会环境、生理健康、心…

揭秘货运之心:可视化技术重塑火车站未来

货运火车站作为物流的重要枢纽&#xff0c;每天都在处理着海量的货物和运输任务。然而&#xff0c;对于大多数人来说&#xff0c;货运火车站依旧是一个神秘而复杂的世界。今天让我们通过可视化技术&#xff0c;一起走进货运火车站&#xff0c;感受其中的魅力与奥秘。 一、数据的…

常用的17个运维监控系统(必备知识)

1. Zabbix Zabbix 作为企业级的网络监控工具&#xff0c;通过从服务器&#xff0c;虚拟机和网络设备收集的数据提供实时监控&#xff0c;自动发现&#xff0c;映射和可扩展等功能。 Zabbix的企业级监控软件为用户提供内置的Java应用服务器监控&#xff0c;硬件监控&#xff0c…

WebGIS开发0基础必看教程:地图瓦片在Canvas上的拼接显示

1.前言 在之前的五个章节中&#xff0c;我们在第一章节里介绍了WebGIS的基本框架和技术&#xff0c;第二章节里介绍了什么是瓦片行列号以及计算它的原因&#xff0c;第三章节里介绍了如何通过地理范围计算出这个范围内瓦片的行列号&#xff0c;第四和第五章节里介绍了在得到瓦…

LeetCode:1976. 到达目的地的方案数(spfa + 记忆化 Java)

目录 1976. 到达目的地的方案数 原题链接 题目描述&#xff1a; 实现代码与解析&#xff1a; spfa 记忆化 原理思路&#xff1a; 1976. 到达目的地的方案数 原题链接 1976. 到达目的地的方案数 题目描述&#xff1a; 你在一个城市里&#xff0c;城市由 n 个路口组成&a…

04. Nginx入门-Nginx WEB模块

测试环境 此处使用的yum安装的Nginx路径。 此处域名均在本地配置hosts。 主配置文件 路径&#xff1a;/etc/nginx/nginx.conf user nginx; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_connection…

图书推荐|Word文稿之美

让你的文档从平凡到出众&#xff01; 本书内容 《Word文稿之美》是一本全面介绍Word排版技巧和应用的实用指南。从初步认识数字排版到高效利用模板、图文配置和表格与图表的排版技巧&#xff0c;再到快速修正错误和保护文件&#xff0c;全面系统地讲解数字排版的技术和能力&…

使用git的小笔记

平时工作中使用git存储项目代码&#xff0c; 常用的命令 拉取仓库代码 git clone http://100.100.100.100:9080/my_test/test.git 拉取到以后&#xff0c; 先切换到自己的分支 git checkout my_name 一顿魔改代码 然后 add 新增的文件或者修改的文件 git add * 然后提交 并写…

(黑马出品_02)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

&#xff08;黑马出品_02&#xff09;SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术栈治理 今日目标1.Nacos配置管理1.1.统一配置管理1.1.1.在nacos中添加配置文件1.1.2.从微服务拉取配置 1.2.配置热更新1.2.1.方式一1.2.2.方式二 1.3.配…

世界的本质是旋转(6)-在复平面上借助软件无线电SDR解调BPSK波形

在上一篇文章中&#xff0c;已经完成了BPSK波形的发射。 相对于BPSK波形的生成总共就4行代码&#xff0c;接收要略微复杂一些&#xff0c;算上各种同步、锁相环&#xff0c;约80行。完整版参考Git仓库&#xff0c;这里给出其C语言核心代码如下&#xff1a; vector<char>…

宏景eHR DisplayExcelCustomReport 任意文件读取漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…