ATM系统
1.构造器
2.ATM系统
3.反转和随机排名4.随机验证码5.评委打分6.加密数字7.数组的拷贝8.抢红包9.找素数10.双色球系统11.电影系统12.this使用13.do-while循环格式14.for循环应用场景15.死循环Game16.break和continue17.嵌套18.随机数Random19.死循环3种写法20.switch21.Whlie22.方法23.void24.方法125.方法重载26.return27.类与对象的一些掌握事项28.String使用时的几个注意事项29.String验证码案例30.快速熟悉String提供的处理字符串的常用方法31.String案例32.菜品管理案例33.掌握this应用34.thisDemo35.成员变量和局部变量的区别36.包37.通过案列理解变量类型的应用场景38.类方法的用法39.掌握使用类方法、实例方法时的几点注意事项40.认识两种代码块,了解他们的特点和基本作用41.单例设计模式42.懒汉式单例设计模式43.继承:子类、父类44.继承的好处45.权限修饰符46.单继承、多层继承47.方法重写48.子类访问的特点49.子类构造器的特点50.子类构造器常见应用51.通过this(...)调用兄弟构造器的作用52.什么是多态?多态的好处53.final54.常量55.抽象类abstract56.关于模板方法设计:抽象类57.接口58.接口的好处59.接口:综合案例60.从JDK.8开始接口新增的方法61.接口注意事项62.内部类63.静态内部类,局部内部类64.匿名内部类65.匿名内部类详细写法66.认识枚举67.枚举的常见应用场景68.泛型69.泛型类70.泛型接口71.泛型方法、泛型通配符、上下限72.泛型的注意事项:擦除问题、基本数据类型73.API介绍74.toString 和equals方法75.克隆:浅克隆和深克隆76.Objects类:常见方法77.包装类78.StringBuilder79.StringBuilder拼接案例80.StringJoiner81.System82.Runtime83.BigDecmal84.时间日期类85.SimpleDateFormat86.秒杀案例87.传统时间:Calendar88.JDK 8 新增时间89.JDK 8 新时间LocalDate、LocalTime、LocalDateTime90.JDK 8 新时间Zoneld、ZonedDateTime91.JDK 8 新时间Instant92.JDK 8 新时间 DateTimeFormatter93.JDK 8 新时间 Period、Duration94.Arrays类:基本使用95.Arrays类:自定义排序规则的方式一96.Arrays:自定义排序规则的方式二97.认识Lambda表达式98.JDK 8 新特性:Lambda表达式省略99.JDK 8 新特性:方法引用:静态方法和实例方法100.JDK 8 新特性:特定类型方法的引用package com.ATMdemo; public class Test { public static void main(String[] args) { ATM atm=new ATM(); atm.start(); } }
package com.ATMdemo; public class Account { private String carId; private String userName; private char sex; private String passWord; private double money; private double limit;//限额 public String getCarId() { return carId; } public void setCarId(String carId) { this.carId = carId; } public String getUserName() { return userName + (sex=='男'?"先生":"女士"); } public void setUserName(String userName) { this.userName = userName; } 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; } }
package com.ATMdemo; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class ATM { private ArrayList<Account> accounts=new ArrayList<>(); private Account loginAcc;//记住登录后的用户账户 private Scanner sc=new Scanner(System.in); //启动ATM系统 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 (command){ case 1: login(); break; case 2: createAccount(); break; default: System.out.println("没有该操作"); } } } //用户登录操作 private void login(){ System.out.println("===系统登录==="); //判断系统中是否存在账户用户对象,存在才能登录,如果不存在,我们直接结束登录操作 if (accounts.size()==0){ return;//跳出登录 } //系统中存在账户对象,可以开始操作’ while (true) { System.out.println("请您输入您的登录卡号:"); String carId=sc.next(); //判断卡号是否存在 Account acc=getAccountByCardId(carId); if (acc==null){ //返回null说明卡号不存在 System.out.println("卡号不存在"); }else { while (true) { //卡号存在,接着输入密码 System.out.println("请您输入登录密码:"); String passWord=sc.next(); //判断密码是否正确 if (acc.getPassWord().equals(passWord)){ loginAcc=acc; //密码正确登录成功 System.out.println("恭喜您,"+acc.getUserName()+"成功登录系统,您的卡号是:"+acc.getCarId()); //展示登录后的页面了 showUserCommand(); return;//结束当前登录方法 }else { System.out.println("您输入密码不正确"); } } } } } //展示登陆后的操作界面 private void showUserCommand(){ while (true) { System.out.println(loginAcc.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.注销当前账户"); System.out.println("请选择:"); int command=sc.nextInt(); switch (command){ case 1: showLoginAccount();//查询当前账户 break; case 2: depositMoney();//存钱 break; case 3: drawmoney();//取款 break; case 4: transferMoney();//转账 break; case 5: upadtePassWord();//修改密码 return; case 6: System.out.println(loginAcc.getUserName()+"您退出系统成功。");//退出 return;//跳出 case 7: if (deleteAccount()) { //销户成功返回欢迎界面 return; } break; default: System.out.println("您当前选择的操作不存在"); } } } //修改密码 private void upadtePassWord() { System.out.println("===修改密码操作==="); //提醒用户认证当前密码 while (true) { System.out.println("请您输入当前账户密码:"); String passWord=sc.next(); //认证当前密码是否正确 if (loginAcc.getPassWord().equals(passWord)){ //认证通过 //开始修改密码 while (true) { System.out.println("请您输入新密码:"); String newPassWord=sc.next(); System.out.println("请您确认一次新密码:"); String okpassWord=sc.next(); //判断2次密码是否一致 if (okpassWord.equals(newPassWord)){ //可以修改密码 loginAcc.setPassWord(okpassWord); System.out.println("恭喜您,密码修改成功"); return; }else { System.out.println("您输入的两次的密码不一致"); } } }else { System.out.println("您当前输入的密码不正确"); } } } //注销账户 private boolean deleteAccount() { System.out.println("===进行销户操作==="); System.out.println("请问您确认销户吗?y/n"); String command=sc.next(); switch (command){ case "y": //确认要销户 //判断是否账户有钱 if (loginAcc.getMoney()==0){ //直接销户 accounts.remove(loginAcc); System.out.println("您好,您的账户已经成功销户"); return true; }else { System.out.println("对不起,您的账户中存有金额,不允许销户"); return false; } default: System.out.println("好的,您的账户保留"); return false; } } //转账 private void transferMoney() { System.out.println("===转账操作==="); //判断系统中是否存在其他账户 if (accounts.size()<2){ System.out.println("当前系统中只有你一个账户,无法为其他账户转账"); return; } //判断账户中是否有钱 if (loginAcc.getMoney()==0){ System.out.println("账户没钱可转"); return; } //可以转钱 while (true) { System.out.println("请输入对方的卡号:"); String carID=sc.next(); //判断卡号是否存在 Account acc=getAccountByCardId(carID); if (acc==null){ System.out.println("您输入卡号不存在"); }else { //对方卡号存在,让用户认证 String name="*"+acc.getUserName().substring(1); System.out.println("请您输入【"+name+"】姓氏"); String paeName=sc.next(); if (acc.getUserName().startsWith(paeName)){ //认证通过 while (true) { 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("===取款操作==="); //判断账户余额是否达到了100元 if (loginAcc.getMoney()<100){ System.out.println("您的账户余额不足100元,不允许取钱"); return; } //让用户输入取款金额 while (true) { System.out.println("请您输入取款金额:"); double money=sc.nextDouble(); //判断账户余额是否足够 if (loginAcc.getMoney()>=money){ //账户中金额足够 //判断当前取款金额是否超过了每次限额 if (money>loginAcc.getLimit()){ System.out.println("您当前取款金额超过了每次限额,您每次最多可取:"+loginAcc.getLimit()); }else { //可以开始取钱 loginAcc.setMoney(loginAcc.getMoney()-money); System.out.println("您取款"+money+"成功,取款后的金额剩余:"+loginAcc.getMoney()); break; } }else { System.out.println("账户余额不足,您的账户中的余额是:"+loginAcc.getMoney()); } } } //存款 private void depositMoney() { System.out.println("===存款操作==="); System.out.println("请您输入存款金额:"); double money=sc.nextDouble(); //更新账户余额 loginAcc.setMoney(loginAcc.getMoney()+money); System.out.println("恭喜您,您存钱:"+money+"成功,存钱后余额为:"+loginAcc.getMoney()); } //展示当前登录的账户信息 private void showLoginAccount(){ System.out.println("===当前您的账户信息如下==="); System.out.println("卡号:"+loginAcc.getCarId()); System.out.println("户主:"+loginAcc.getUserName()); System.out.println("性别:"+loginAcc.getSex()); System.out.println("余额:"+loginAcc.getMoney()); System.out.println("每次取现额度:"+loginAcc.getLimit()); } //完成用户开户操作 private 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);//"男" 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 (okpassWord.equals(passWord)){ acc.setPassWord(okpassWord); break; }else { System.out.println("您输入的2次密码不一致,请重新输入"); } } System.out.println("请您输入您的取现额度:"); double limit=sc.nextDouble(); acc.setLimit(limit); //重点:我们需要为这个账户生成一个卡号(由系统自动生成,8位数字表示,不能与其他账户的卡号重复) String newCarId=createCarId(); acc.setCarId(newCarId); //把这个账户的对象,存入到账户集合中去 accounts.add(acc); System.out.println("恭喜您,"+acc.getUserName()+"开户成功,您的卡号是:"+acc.getCarId()); } //返回一个8位数字的卡号,而且这个卡号不能与其他账户重复 private String createCarId(){ //定义一个String类型的变量记住8位数字作为一个卡号 while (true) { String carId=""; //使用循环、循环8次,每次产生一个随机数给carId连接起来 Random r=new Random(); for (int i = 0; i < 8; i++) { int data=r.nextInt(10);//0-9 carId+=data; } //判断carId中记住的卡号,是否与其他账户卡号重复,没有重复才可以作为一个新卡号 Account acc=getAccountByCardId(carId); if (acc==null){ //没有找到账户对象,没有重复,可以作为新卡号 return carId; } } } //根据卡号查询账户对象返回 private Account getAccountByCardId(String cardId){ //遍历全部账户对象 for (int i = 0; i < accounts.size(); i++) { Account acc=accounts.get(i); //判断这个账户对象acc中的卡号是否是我们要找的卡号 if (acc.getCarId().equals(cardId)){ return acc; } } return null;//查无此账户,这个卡号不存在 } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现