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

JAVA基础的ATM机存款项目

定义一些ATM机中会运用到的基本元素

package NEW;public class Account {private String userName;//用户名private String passWord;//账户密码private String ueserId;//卡号private char sex;//用户性别private double limit;//限额private double money;//余额public double getLimit() {return limit;}public void setLimit(double limit) {this.limit = limit;}public char getSex() {return this.sex;}public void setSex(char sex) {this.sex = sex;}public String getUserName() {return userName+(sex == '男' ? "先生" : "女士");}public void setUserName(String userName) {this.userName = userName;}public String getPassWord() {return passWord;}public void setPassWord(String passWord) {this.passWord = passWord;}public String getUeserId() {return ueserId;}public void setUeserId(String ueserId) {this.ueserId = ueserId;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}
}

支撑ATM机实现各种功能的方法

package NEW;import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class ATM {ArrayList<Account> accounts =  new ArrayList<>();Scanner sc = new Scanner(System.in);private Account loginac;//记录登录后的用户账户public void start() {while (true) {System.out.println("==========欢迎进入ATM系统==========");System.out.println("1.用户登录");System.out.println("2.用户开户");System.out.println("请选择");int command = sc.nextInt();//单值,考虑运用switch循环switch (command) {case 1://用户登录login();break;case 2://用户开户createAccount();break;default:System.out.println("无该操作");//用while循环去重置该界面break;}}}/*账户登录操作*/private void login(){System.out.println("====系统登录====");//判断系统之中是否有对象if(accounts.size()==0){System.out.println("当前系统中无任何账户,请先注册");return;}//存在对象,开始登录进程while(true){System.out.println("请输入您的登录卡号");String cardId = sc.next();Account acc = getAccountByCardId(cardId);if(acc==null){//该卡号不存在System.out.println("您的卡号输入错误,请确认");}else{while (true) {//卡号存在,让用户输入密码System.out.println("请输入您的账号密码");String password = sc.next();//判断密码是否正确if(acc.getPassWord().equals(password)){loginac = acc;//密码正确,登录成功System.out.println("恭喜您"+acc.getUserName()+"登录成功"+"您的卡号是"+acc.getUeserId());//展示登录后的操作界面showUserCommand();return;}else{System.out.println("您的密码输入错误,请确认");}}}}}/**展示登录后的操作界面*/private void showUserCommand(){while (true) {System.out.println(loginac.getUserName()+"您可以选择如下功能进行账户处理");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.注销当前账户");int command = sc.nextInt();switch (command) {case 1://查账户showLoginAccount();break;case 2://取款drawMoney();break;case 3://转账tranforMoney();break;case 4://存款depositMoney();break;case 5:// 密码修改updatePassWord();break;case 6://退出System.out.println(loginac.getUserName()+"您退出系统成功!");return;case 7://注销账户if(delectAccount()){//销户成功,返回欢迎界面return;}break;default:System.out.println("您的输入错误,请确认");}}}/**更改账户密码*/private void updatePassWord() {System.out.println("=====密码修改操作=====");while (true) {//让用户认证当前密码System.out.println("请输入当前账号密码");String passWord = sc.next();if(passWord.equals(loginac.getPassWord())){System.out.println("认证通过");System.out.println("请您输入新密码");String newPassWord = sc.next();System.out.println("请您在一次确认您的新密码");String confirmPassWord = sc.next();if(newPassWord.equals(confirmPassWord)){loginac.setPassWord(newPassWord);System.out.println("密码修改成功");break;}else{System.out.println("您的新密码两次输入不一致,修改失败,请确认");}}else{System.out.println("您的密码错误,请确认");}//询问用户是否继续修改密码System.out.println("您是否继续修改密码:Y/N");String c =  sc.next();if(!"Y".equalsIgnoreCase(c)){break;}}}/**销户*///销户这个操作执行到最后实际上是返回一个销户成功或失败的结果,所以这个方法的返回值应设置为booleanprivate boolean delectAccount() {System.out.println("=====销户操作=====");System.out.println("请您确定要进行对这个账户的销户:Y/N");String command = sc.next();switch (command) {case "Y"://确认要销户//进一步确认该账户中是否有钱,有钱则无法销户if(loginac.getMoney()==0){//符合销户标准,进行销户accounts.remove(loginac);System.out.println("您已成功销户");return true;}else{System.out.println("您的账户中存在余额,无法销户");return false;}default:System.out.println("您的账户保留");return false;}}/**转账*/private void tranforMoney() {System.out.println("=====转账操作=====");//首先要判断转账的两个前提//1.系统里是否有两及个以上的账户,起码有两个才能相互转账//2.转账出去的那个账户是否有余额if(accounts.size()<2){System.out.println("当前系统中只有您一个账户,无法转账,请确认");return;}if(loginac.getMoney()==0){System.out.println("您的账户中没有余额,请确认");return;}while (true) {//正式开始转账System.out.println("请您输入对方的卡号:");String cardId = sc.next();//判断这个卡号是否正确Account acc = getAccountByCardId(cardId);if(acc==null){System.out.println("对方的卡号不存在");}else{//对方的账户存在,进行姓氏认证String name ="*"+acc.getUserName().substring(1);//substring是用来将*与用户名的第一个字发生替换的System.out.println("请您输入【"+name+"】:");String personName =  sc.next();//判断该姓氏是否正确if(acc.getUserName().startsWith(personName)){while (true) {//认证通过,开始转账System.out.println("请输入您的转账金额:");double money = sc.nextDouble();//判断该金额是否超过了自己的余额,即是否转的起if(loginac.getMoney()>=money){//够的话就开始更新双方的账号余额信息了//自己的loginac.setMoney(acc.getMoney()-money);//对方的acc.setMoney(acc.getMoney()+money);System.out.println("您的余额为:"+acc.getMoney());return;//跳出转账方法}else{System.out.println("您的余额不足,请确认,您最多能转:"+loginac.getMoney());}}}else{System.out.println("您的认证错误,请确认");}}}}private void drawMoney() {System.out.println("=====取钱操作=====");//判断当前余额是否大于100,小于100则无法取出if(loginac.getMoney()<100){System.out.println("您的存款金额不足100元,无法取出");return;}//大于100可以取钱,让用户输入取款金额while (true) {System.out.println("请输入您的取款金额:");double money = sc.nextDouble();//判断余额是否充足if(money<loginac.getMoney()){//当前余额充足//还要判断是否超过了单次的取款限额,即再嵌套一个if循环if(money>loginac.getLimit()){System.out.println("您此次的取款超过了单次的限额,您的限额为:"+loginac.getLimit());}else{//若都满足要求,则正式开始取钱,即更新账户内的余额loginac.setMoney(loginac.getMoney()-money);System.out.println("您取款:"+money+"\n"+"取款之后您的余额为"+loginac.getMoney());break;}}else{//余额不足System.out.println("您的余额不足,您的余额为:"+loginac.getMoney());}}}/**存钱*/private void depositMoney() {System.out.println("======存钱操作======");System.out.println("请输入您的存款金额:");double money = sc.nextDouble();//之后更新账户的余额loginac.setMoney(money+loginac.getMoney());System.out.println("恭喜您,您此次存钱:"+money+"您存钱之后的总额为"+loginac.getMoney());}/**展现账户登录信息*/private void showLoginAccount(){System.out.println("您的账号信息如下");System.out.println("姓名"+loginac.getUserName());System.out.println("存款"+loginac.getMoney());System.out.println("卡号"+loginac.getUeserId());System.out.println("性别"+loginac.getSex());System.out.println("单次限额"+loginac.getLimit());}/**账户开户操作 */public void createAccount() {System.out.println("=====开户操作=====");Account acc = new Account();System.out.println("请输入您的姓名");String name = sc.next();acc.setUserName(name);while (true) {System.out.println("请输入你的性别");char sex = sc.next().charAt(0);//charAT的作用是获取输入的字符串的第一位因为没有提供nextchar方法if (sex == '男' || sex == '女') {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(okpassword);break;} else {System.out.println("您的两次密码输入不一致,请确认");}}System.out.println("请输入您的限额:");double limit = sc.nextDouble();acc.setLimit(limit);//重难点:为这个账户生成一个卡号,且不能与其他以存在的账户卡号重复String newCard = creatCardId();acc.setUeserId(newCard);accounts.add(acc);System.out.println("恭喜您" + acc.getUserName() + "开户成功"+"您的卡号是"+acc.getUeserId());}/*返回一个8位数的卡号,并且不能与其他账户的卡号重复*///1.首先定义一个String类型的变量去记住8个数字作为一个卡号private String creatCardId() {while (true) {String cardId = "";//2.使用循环随机生成8个数字作为新生成的卡号Random r = new Random();for (int i = 0; i < 8; i++) {int date = r.nextInt(10);//0~9cardId += date;}//3.对上一步中产生的卡号进行判断,是否与其他账户重复了Account acc = getAccountByCardId(cardId);if(acc == null){return cardId;}}}//根据卡号查询账户对象返回private Account getAccountByCardId(String cardId) {//遍历全部账户对象的卡号for (int i = 0; i <accounts.size(); i++) {Account acc = accounts.get(i);//逐个取出accounts集合里的账户集合,方便后续对比卡号//判断这个账户对象acc中的卡号是否符合不重复的要求if(acc.getUeserId().equals(cardId)){return acc;}}return null;//查无此号,即这个卡号再已有的账户卡号之中并不重复}
}

测试能否正常执行

package NEW;public class Test {public static void main(String[] args) {ATM atm = new ATM();atm.start();}
}
http://www.rkmt.cn/news/24525.html

相关文章:

  • 实用指南:Matlab通过GUI实现点云的GICP配准
  • 2025年粉末涂料厂家推荐排行榜,广东粉末,绝缘粉,钣金粉,烤漆粉,专业品质与市场口碑深度解析!
  • 【容器日志采集】【 四】消费kafka保存到es
  • 嵌入式实验3串口通信---任务二串口传输文件实验
  • 【容器日志采集】【三】创建daemonsets采集日志发送到kafka
  • 2025年保洁公司权威推荐榜单:驻场/钟点/开荒/外包/商场/办公楼/工厂/医院/企业保洁服务优选指南
  • 深入解析:Spring Cloud Netflix Eureka:从微服务基础到高可用集群实战
  • 别看我只是一只羊
  • 2025年智能照明系统/模块厂家推荐排行榜,工厂/改建/车间/高亮/高光效/泛光/免维护/投光/大功率智能照明系统/模块公司精选!
  • 2025.10.19——1绿1蓝
  • 26-wsl-nginx-chinese-encoding-fix
  • win10-减少广告的三个操作
  • 变量名越怪,JVM 越快?
  • Visual Studio Code 初步配置指南(Windows端)
  • 课上积极回答加分
  • QOJ #12313. Three Indices 题解
  • 022304105叶骋恺数据采集第一次作业
  • 2025年振动电机厂家推荐排行榜,新型/高频/防爆/低噪声/节能振动电机公司精选!
  • QT肝8天01--工程介绍
  • Java中java.util.Random的用法
  • 从汇编角度看C++优化:编译器真正做了什么 - 教程
  • 实用指南:【从零开始学习RabbitMQ】
  • Godot-C#处理节点关系
  • go 并发赋值安全性
  • 2025 年防撞钢护栏厂家推荐聊城市泰锌金属材料有限公司,桥梁,不锈钢,复合管,景观,灯光,热镀锌,河道,铝合金,绳索防撞钢护栏公司推荐
  • 三场比赛(二)
  • 2025年水产养殖设备厂家推荐排行榜,PP鱼池/微滤机/不锈钢微滤机/锦鲤池微滤机一体机/全自动污水过滤器/生物过滤器/循环水养殖系统公司推荐!
  • 预测不可预测之物的校准学习技术
  • 10.19日模考总结
  • 详细介绍:2020年美国新冠肺炎疫情数据分析与可视化