当前位置: 首页 > 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.hskmm.com/?act=detail&tid=34430

相关文章:

  • 对话式AI竞赛决赛队伍揭晓
  • 2025年粉末涂料厂家推荐排行榜,广东粉末,绝缘粉,钣金粉,烤漆粉,专业品质与市场口碑深度解析!
  • Boids算法
  • Spring Cloud RabbitMQ 详解:从基础概念到秒杀实战 - 详解
  • 2025年安装厂家权威推荐榜单:管道/电气/生物医药工厂机电/暖通空调/空压系统/纯水系统/厂房通风/车间配电/机械设备/工业设备安装公司精选
  • 35跬步本手@数学学习+计算机学习+语言学习@20251019
  • 【容器日志采集】【 四】消费kafka保存到es
  • 嵌入式实验3串口通信---任务二串口传输文件实验
  • 2025年润滑油厂家推荐排行榜,工业润滑油,汽车润滑油,发动机润滑油,甲醇发动机润滑油,全合成润滑油,长效发动机润滑油公司推荐!
  • 题解:loj6703 小 Q 的序列
  • 【容器日志采集】【二】fluent-bit配置文件
  • 【容器日志采集】【三】创建daemonsets采集日志发送到kafka
  • 2025年保洁公司权威推荐榜单:驻场/钟点/开荒/外包/商场/办公楼/工厂/医院/企业保洁服务优选指南
  • 2025年电源适配器厂家推荐排行榜,电脑/手机/平板电源适配器,高品质充电解决方案!
  • 解题报告-洛谷SCP2025T2 P14254 分割(divide)
  • 深入解析:Spring Cloud Netflix Eureka:从微服务基础到高可用集群实战
  • 2025.10.19——1绿1蓝
  • 别看我只是一只羊
  • 10.19 —— (VP)2022icpc西安
  • 2025年储罐源头厂家推荐排行榜,钢衬塑/钢塑复合/化工/防腐/PE/盐酸/硫酸/聚丙烯/不锈钢/次氯酸钠储罐公司精选!
  • 26-wsl-nginx-chinese-encoding-fix
  • win10-减少广告的三个操作
  • java方法
  • 变量名越怪,JVM 越快?
  • 深入解析:CPU调度算法简记
  • 2025年TYPE-C母座厂家推荐排行榜,防水/板上/沉板/立插/立贴/侧插/立式/插座/接口/插头/5A大电流/高速/TID认证公司精选
  • 在AI技术唾手可得的时代,挖掘用户真实需求成为制胜关键——某知名系统工具需求探索
  • 2025年通风气楼/通风天窗厂家推荐排行榜,圆拱型/电动/一字型/钢结构/流线型/屋顶自然/三角型/排烟/采光/启闭式/薄型/成品/消防联动/工厂/屋面/开敞式/启闭式排烟/通风设备公司推荐!
  • 科技领域导师制度与因果分析方法解析
  • 比赛与好题记录(2025 9-10)