Java实现简易提款机
本文实例为大家分享了vue + element ui实现锚点定位的具体代码,供大家参考,具体内容如下
需求:
简易自动提款机
1.创建用户类User(包含卡号、姓名、密码、余额等属性),用户开卡时录入的姓名和密码(自动分配一个卡号、初始金额设置为0)。
2.使用ArrayList或LinkedList存储全部注册用户
形式如: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实现简易提款机】以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- Java基础知识之CharArrayReader流的使用
- PHP实现Hash环/Hash一致性原理
- JAVA人生|程序员30岁之前年薪不到40W,再不转行都晚了()
- Java|做了6年开发,工资涨不上去,怎么办?
- java|为什么使用开源软件_为什么要使用开源软件()
- java|为什么要使用开源软件()
- java|开源 非开源_在从事开源律师职业之前要了解的内容
- 剑指Offer之Java算法习题精讲二叉树与链表
- 剑指Offer之Java算法习题精讲二叉树专项解析
- 剑指Offer之Java算法习题精讲排列与N叉树