Java实现简易提款机

本文实例为大家分享了vue + element ui实现锚点定位的具体代码,供大家参考,具体内容如下
需求: 简易自动提款机
1.创建用户类User(包含卡号、姓名、密码、余额等属性),用户开卡时录入的姓名和密码(自动分配一个卡号、初始金额设置为0)。
2.使用ArrayList或LinkedList存储全部注册用户
形式如:ArrayList userList = new ArrayList();
3.实现功能
(1)存款
(2)取款(如果余额不足要提示)
(3)查询余额(只能查看当前卡号的余额)
4. 技术要求,使用异常处理用户的错误输入(即程序保护容错功能)。
实例: 1.创建自定义异常:

public class OptionsException extends RuntimeException{ /*** */private static final long serialVersionUID = 6307237273922255816L; public OptionsException() {super(); // TODO Auto-generated constructor stub} public OptionsException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace); // TODO Auto-generated constructor stub} public OptionsException(String message, Throwable cause) {super(message, cause); // TODO Auto-generated constructor stub} public OptionsException(String message) {super(message); // TODO Auto-generated constructor stub} public OptionsException(Throwable cause) {super(cause); // TODO Auto-generated constructor stub}}

2.对用户信息(卡号、姓名、密码、余额、存款金额、取款金额)进行封装,并对部分属性进行异常处理:
public class User { private String cardNumber; private String userName; private int code; private int balance = 0; private int deposit; //存款金额private int withdrawMoney; //取款金额public String getCardNumber() {return cardNumber; } public void setCardNumber(String cardNumber) {this.cardNumber = cardNumber; } public String getUserName() {return userName; } public void setUserName(String userName) {this.userName = userName; } public int getCode() {return code; } public void setCode(int code) throws OptionsException{Integer temp = (Integer) code; if(temp.toString().length() == 6){this.code = code; }else{throw new OptionsException("您输入的位数有误!"); }} public int getBalance() {return balance; } public void setBalance(int balance) throws OptionsException{if(balance >= 0){this.balance = balance; }else{throw new OptionsException("余额不足!"); }} public int getDeposit() {return deposit; } public void setDeposit(int deposit) throws OptionsException{if(deposit >= 0){this.deposit = deposit; }else{throw new OptionsException("存入金额错误!"); }} public int getWithdrawMoney() {return withdrawMoney; } public void setWithdrawMoney(int withdrawMoney) throws OptionsException{if(withdrawMoney >= 0){if(this.getBalance() - withdrawMoney < 0){this.withdrawMoney = withdrawMoney; }else{throw new OptionsException("余额不足!"); }}else{throw new OptionsException("取款金额错误!"); }}}

3.新建一个类,定义用户可进行的操作方法:
import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class UserOptions { /**定义一个ArrayList来存储注册的银行卡信息*/public static ArrayListaccounts = new ArrayList(); Scanner scanner = new Scanner(System.in); /**调用User 类访问该类下封装的用户信息*/User user = new User(); //为新用户注册银行卡信息public void register() throws Exception {System.out.println("请输入您的姓名:"); user.setUserName(scanner.next()); String cardNumber = randomCardNumber(); System.out.println("您的卡号为:" + cardNumber); user.setCardNumber(cardNumber); //用户输入密码时,可能会出现密码不足或超过6位try{System.out.println("请设置您的密码(6位数字):"); int code = scanner.nextInt(); user.setCode(code); }catch(OptionsException o){o.printStackTrace(); }finally{System.out.println("您卡内目前余额为:" + user.getBalance()); accounts.add(user); }}//随机生成卡号public String randomCardNumber(){StringBuilder str=new StringBuilder(); //定义变长字符串Random random=new Random(); /**设立一个flag,* 在随机卡号生成后,用于判断生成的卡号是否已经存在。* 如果该卡号已经存在,则再进行一次该方法重新生成卡号,直到生成的卡号不存在为止* 如果该卡号不存在,则将其返回并赋给register()中的user.setCardNumber(); */boolean flag = true; //随机生成数字,并添加到字符串/**因为本人持有的银行卡号为19位,所以设置该卡号为19位*/for(int i=0; i<19; i++){str.append(random.nextInt(10)); }String cardNumber = str.toString(); /**对生成的卡号进行存在判断* 如果该卡号已经存在,则flag的值变为false,并中断循环* 如果循环结束,该卡号仍不存在,则将其返回*/for(int i = 0 ; i < accounts.size() ; i ++){if(cardNumber.equals(accounts.get(i).getCardNumber())){flag = false; break; }}/**flag的值若为true,则证明生成的卡号不存在,可以返回;* 若为false,则证明生成的卡号已经存在,需要重新生成,直到生成的卡号不存在为止*/if(flag){return cardNumber; }else{return randomCardNumber(); }}//存款public void depositMoney(){/**设立一个flag,辅助判断输入的卡号是否存在*/boolean flag = false; /**设立一个index,当卡号存在时,index 接收此时的索引值,方便存款*/int index = 0; System.out.println("请输入您的卡号:"); String cardNumber = scanner.next(); /**遍历查询accouts 中是否存在用户输入的卡号* 若存在,flag的值变为true,同时结束循环,*/for(int i = 0 ; i < accounts.size() ; i ++){if(cardNumber.equals(accounts.get(i).getCardNumber())){flag = true; index = i; break; }}/**若卡号存在,则需要用户输入密码,密码正确才可以进行操作*/if(flag){System.out.println("请输入您的密码:"); int code = scanner.nextInt(); if(code == accounts.get(index).getCode()){/**判断用户输入的金额是否大于0, 若小于0,则报错,并退出程序。* 若正确,则将金额加到余额中*/try{System.out.println("请输入您想要存储的金额:"); accounts.get(index).setDeposit(scanner.nextInt()); int newBalance = accounts.get(index).getBalance() + accounts.get(index).getDeposit(); accounts.get(index).setBalance(newBalance); }catch(OptionsException o){o.printStackTrace(); }finally{System.out.println("您目前的余额为:" + accounts.get(index).getBalance()); }}}else{System.out.println("您输入的卡号不存在,操作已结束!"); }}//取款public void withdraMoney(){/**设立一个flag,辅助判断输入的卡号是否存在*/boolean flag = false; /**设立一个index,当卡号存在时,index 接收此时的索引值,方便取款*/int index = 0; System.out.println("请输入您的卡号:"); String cardNumber = scanner.next(); /**遍历查询accouts 中是否存在用户输入的卡号* 若存在,flag的值变为true,同时结束循环,*/for(int i = 0 ; i < accounts.size() ; i ++){if(cardNumber.equals(accounts.get(i).getCardNumber())){flag = true; index = i; break; }}/**若卡号存在,则需要用户输入密码,密码正确才可以进行操作*/if(flag){System.out.println("请输入您的密码:"); int code = scanner.nextInt(); if(code == accounts.get(index).getCode()){//注意如果用户要取出的金额大于其余额,要报错/**判断用户输入的金额是否大于0, 若小于0,则报错,并退出程序。* 若正确,则将金额加到余额中*/try{System.out.println("请输入您想要取出的金额:"); accounts.get(index).setWithdrawMoney(scanner.nextInt()); int newBalance = accounts.get(index).getBalance() - accounts.get(index).getWithdrawMoney(); accounts.get(index).setBalance(newBalance); }catch(OptionsException o){o.printStackTrace(); }finally{System.out.println("您取出了" +accounts.get(index).getWithdrawMoney()); System.out.println("取出后的余额为:" + accounts.get(index).getBalance()); }}}if(!flag)System.out.println("该卡号不存在!"); }//按照卡号查询余额public void queryBalance(){/**设立一个flag,辅助判断输入的卡号是否存在*/boolean flag = false; /**设立一个index,当卡号存在时,index 接收此时的索引值,方便存款*/int index = 0; System.out.println("请输入您的卡号:"); String cardNumber = scanner.next(); /**遍历查询accouts 中是否存在用户输入的卡号* 若存在,flag的值变为true,同时结束循环,*/for(int i = 0 ; i < accounts.size() ; i ++){if(cardNumber.equals(accounts.get(i).getCardNumber())){flag = true; index = i; break; }}/**若卡号存在,则需要用户输入密码,密码正确才可以进行操作*/if(flag){System.out.println("请输入您的密码:"); int code = scanner.nextInt(); if(code == accounts.get(index).getCode()){System.out.println("您目前的余额为:" + accounts.get(index).getBalance()); }}if(!flag)System.out.println("该卡号不存在!"); }}

4.再新建一个类,在该类中写一个方法由用户选择调用上个步骤中写的各个方法(即设置菜单,进行功能选择):
* 1.开户* 2.存款* 3.取款* 4.查询余额
import java.util.Scanner; public class UserService {UserOptions uo = new UserOptions(); Scanner scanner = new Scanner(System.in); /**设置菜单,进行功能选择:* 1.开户* 2.存款* 3.取款* 4.查询余额*/@SuppressWarnings("finally")public void menu(){bulletin(); while(true){System.out.println("请选择您要使用的功能:"); int choice = scanner.nextInt(); switch(choice){case 1:try {uo.register(); } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace(); }finally{break; }case 2:uo.depositMoney(); break; case 3:uo.withdraMoney(); break; case 4:uo.queryBalance(); break; case -1:System.exit(0); }System.out.println("------------------------------\n"); }}public void bulletin(){System.out.println("欢迎使用\"不坑你坑谁\"牌自动取款机"); System.out.println("本机提供以下功能,请自助选择:"); System.out.println("1.开户"); System.out.println("2.存款"); System.out.println("3.取款"); System.out.println("4.查询余额"); System.out.println("输入-1结束操作"); System.out.println("------------------------------\n"); }}

5.最后再主方法中将上一个类进行实例化并使用:
public class Demo { public static void main(String[] args) {UserService us = new UserService(); us.menu(); }}

【Java实现简易提款机】以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读