当前位置: 首页 > news >正文

JAVA-案列练习-ATM项目

        在JAVA入门学习后进行的项目练习——模拟ATM系统。

目录

1.设计内容和要求

 2.代码实现

(1)ATM账号类的定义

(2)ATM类中的操作

(3)操作说明

3.总结


6b654bbdc6bb4b388bdf961499992ae0.png

1.设计内容和要求

01  系统架构搭建,欢迎页设计

02  开户功能实现

03  登录功能实现
04 操作页展示,查询账户,退出账户
05 存款,取款功能实现
06 转账功能实现
07 销户功能实现
08 用户密码修改

 2.代码实现

(1)ATM账号类的定义

package ATM;public class Account {private String id;private String name;private char sex;private String password;private double money;private double limit; //限额public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name + (sex == '男'? "先生":"女士");}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char 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 getLimit() {return limit;}public void setLimit(double limit) {this.limit = limit;}public Account() {}
}

(2)ATM类中的操作

package ATM;import javax.accessibility.AccessibleContext;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class ATM {private ArrayList<Account> list = new ArrayList<>();private Scanner sc= new Scanner(System.in);Account loginacc;private void creatAccount(){System.out.println("==系统开户操作==");Account account = new Account();System.out.println("请您输入您的账户名称");String name = sc.next();account.setName(name);while(true) {System.out.println("请您输入您的性别");char sex = sc.next().charAt(0);if(sex == '男' || sex == '女'){account.setSex(sex);break;}else{System.out.println("输入错误,只能是男或者女");}}while(true) {System.out.println("请您输入您的密码");String password = sc.next();System.out.println("请您确认您的密码");String password1 = sc.next();if(password.equals(password1)){account.setPassword(password);break;}else{System.out.println("您输入的两次密码不相同,请重新输入");}}System.out.println("请您输入每次取款限额");double limit = sc.nextDouble();account.setLimit(limit);//生成一个卡号 8位数字(卡号且不能重复)String id = createCardid();account.setId(id);//list.add(account);System.out.println("恭喜您"+account.getName()+ "开户成功");System.out.println("您的卡号为" + account.getId());return;}private String createCardid(){while(true){String id ="";Random r = new Random();for (int i = 0; i < 8; i++) {int data = r.nextInt(10);id += data;}Account acc = getAccountbyId(id);if(acc == null){ return id;}}}private Account getAccountbyId(String id){for (int i = 0; i < list.size(); i++) {Account acc = list.get(i);if(acc.getId().equals(id)){return acc;}}return null;}private void login(){System.out.println("==系统登录操作==");if(list.size() == 0){System.out.println("系统内无用户 请开户");return;}while(true) {System.out.println("请您输入您的登录卡号");String id = sc.next();Account acc = getAccountbyId(id);if (acc == null) {System.out.println("该卡号不存在");}while(true) {System.out.println("请你输入您的密码");String password = sc.next();if (acc.getPassword().equals(password)) {loginacc = acc;System.out.println("恭喜您," + acc.getName());System.out.println("成功登录系统,您的卡号是"+acc.getId());showUserCommand();return;}else {System.out.println("密码不正确 请确认");}}}}private void showUserCommand(){while(true) {System.out.println(loginacc.getName());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:showLoginacc();break;case 2:depositMoney();break;case 3:drawMoney();break;case 4:transferMoney();break;case 5:updatePassword();return;case 6:System.out.println(loginacc.getName()+"您已经成功退出系统");return;case 7:if(deleteAccount()){return;}break;default:System.out.println("操作不存在");}}}private void showLoginacc(){System.out.println("==当前您的账户信息==");System.out.println("卡号:" + loginacc.getId());System.out.println("姓名:" + loginacc.getName());System.out.println("性别:" + loginacc.getSex());System.out.println("余额:" + loginacc.getMoney());System.out.println("取现额度:3"+ loginacc.getLimit());}private void depositMoney(){System.out.println("==存款操作==");System.out.println("请您输入存款金额");double money = sc.nextDouble();loginacc.setMoney(loginacc.getMoney()+money);System.out.println("==存款成功==");}private void transferMoney(){System.out.println("用户转账");if(list.size() < 2){System.out.println("系统中只有一个用户,无法转账");return;}if(loginacc.getMoney() == 0){System.out.println("您账户内余额为0");return;}while(true) {System.out.println("请您输入对方的卡号");String id = sc.next();Account acc = getAccountbyId(id);if (acc == null) {System.out.println("您输入的对方卡号不存在");}else {String name ="*"+acc.getName().substring(1);System.out.println( "请您输入【"+name+"】的姓氏");String prename = sc.next();if(acc.getName().startsWith(prename)){System.out.println("清输入转账金额");double money = sc.nextDouble();if(loginacc.getMoney() >= money){loginacc.setMoney(loginacc.getMoney() - money);acc.setMoney(acc.getMoney() + money);return;}else{System.out.println("余额不足,您的余额为"+loginacc.getMoney());}}else{System.out.println("您认证的姓氏有问题");}}}}private void drawMoney(){System.out.println("==取款操作==");if(loginacc.getMoney() < 100){System.out.println("您的余额不足100 无法取款");return;}while(true) {System.out.println("请您输入取款金额");double money = sc.nextDouble();if (loginacc.getMoney() < money) {System.out.println("余额不足 您账户中的余额为:" + loginacc.getMoney());break;}else {if (money > loginacc.getLimit()) {System.out.println("您当前取款金额超过限额,您每次最多取款" + loginacc.getLimit());break;} else {loginacc.setMoney(loginacc.getMoney() - money);System.out.println("==取款成功==");System.out.println("取款后剩余" + loginacc.getMoney());return;}}}}private boolean deleteAccount(){System.out.println("==销户操作==");System.out.println("请问您确认销户嘛");String command = sc.next();switch (command){case "y":if(loginacc.getMoney() == 0){list.remove(loginacc);System.out.println("您好 您的账户已经成功销户");return true;}else {System.out.println("对不起 您的账户中存在金额 不允许销毁");return false;}default:System.out.println("好的,您的账户保留!!");return false;}}private void updatePassword(){System.out.println("==账号密码修改==");System.out.println("请您输入当前账户密码");String pass = sc.next();if(loginacc.getPassword().equals(pass)){while(true) {System.out.println("请您输入新密码");String newpass = sc.next();System.out.println("请您确认新密码");String newpass1 = sc.next();if (newpass.equals(newpass1)) {loginacc.setPassword(newpass);System.out.println("您的密码修改成功");return;}else {System.out.println("您输入的两次密码不一致");}}}else{System.out.println("密码错误");}}public void start(){while(true){System.out.println("==欢迎您进入到ATM系统==");System.out.println("==    1.用户登录   ==");System.out.println("==    2.用户开户   ==");System.out.println("请选择");int n = sc.nextInt();switch(n){case 1:login();break;case 2:creatAccount(); break;case 0: return;default:System.out.println("输出有误 重新输入");}}}
}
package ATM;public class Text {public static void main(String[] args) {ATM a = new ATM();a.start();}
}

(3)操作说明

 

 

 

3.总结

        关于这个案例实际并不复杂,功能的实现和代码思路和C语言学习时是一致的,只是JAVA提供了API,更快捷的实现了一些原本要自己手写的功能。主要还是对于面向对象编程,把功能交给对象自己去完成,以及集合这种存储数据的容器的学习和理解,目前这个案例算是对前面入门的知识一个小的复习。后续就可以进行比较系统深入的学习了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • DDOS攻击有哪些攻击手段?
  • linux内核,中断上下文,中断下半部的处理2种方法: tasklet_schedule,工作队列workqueue
  • docker安装与container基本使用
  • android 音频播放器,(一)SoundPool音频播放实例
  • linux 原子操作,信号量,互斥锁mutex,自旋锁splock
  • 嵌入式数据库 sqlite3
  • 中央处理器CPU
  • 力扣第五十题——Pow(x,n)
  • Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
  • 【Linux】-----进度条小程序
  • 计算机毕业设计选题推荐-课程教学辅助系统-Java/Python项目实战
  • 【教程】Python语言的地球科学常见数据——植被指数数据-GIMMS NDVI的处理
  • Python基础教程(二)字符串和函数
  • CSS学习 01 利用鼠标悬停制造文本隐藏效果
  • 【大模型从入门到精通2】openAI api的入门介绍2
  • CentOS7 安装JDK
  • Iterator 和 for...of 循环
  • JavaScript创建对象的四种方式
  • JavaScript类型识别
  • Laravel 中的一个后期静态绑定
  • Linux快速复制或删除大量小文件
  • mongo索引构建
  • MySQL几个简单SQL的优化
  • React组件设计模式(一)
  • Sequelize 中文文档 v4 - Getting started - 入门
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 高性能JavaScript阅读简记(三)
  • 机器学习 vs. 深度学习
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 每天一个设计模式之命令模式
  • 设计模式走一遍---观察者模式
  • 微信公众号开发小记——5.python微信红包
  • 用Canvas画一棵二叉树
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 通过调用文摘列表API获取文摘
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • # 达梦数据库知识点
  • #数据结构 笔记一
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $GOPATH/go.mod exists but should not goland
  • (02)Hive SQL编译成MapReduce任务的过程
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (26)4.7 字符函数和字符串函数
  • (二)hibernate配置管理
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (四)js前端开发中设计模式之工厂方法模式
  • (四)linux文件内容查看
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .form文件_SSM框架文件上传篇
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .Net Winform开发笔记(一)
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .so文件(linux系统)