Gointerface接口声明实现及作用详解
218
2022-09-01
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 ArrayList
accounts = 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-gtUpGfenerated catch block
e.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.prtUpGfintln("------------------------------\n");
}
}
5.最后再主方法中将上一个类进行实例化并使用:
public class Demo {
public static void main(String[] args) {
UserService us = new UserService();
us.menu();
}
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~