Java实现简易提款机

网友投稿 218 2022-09-01


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 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小时内删除侵权内容。

上一篇:2022年B 题 5G 网络环境下应急物资配送问题附参考代码(2022年白露是几月几号)
下一篇:使用Pycharm将项目上传到github
相关文章

 发表评论

暂时没有评论,来抢沙发吧~