Java基础知识综合练习_使用集合存储_高级银行系统的搭建(注册登录存取款本行转账跨行转账销户特殊操作参数多个客户对象存入到银行类的集合,多个银行对象存入总测试类集合)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础知识综合练习_使用集合存储_高级银行系统的搭建(注册登录存取款本行转账跨行转账销户特殊操作参数多个客户对象存入到银行类的集合,多个银行对象存入总测试类集合)相关的知识,希望对你有一定的参考价值。

Java基础知识综合练习_使用集合存储_高级银行系统的搭建
(注册、登录、存取款、本行转账、跨行转账、销户、特殊操作参数、
多个客户对象存入到银行类的集合,多个银行对象存入总测试类集合)

1) 定义bank类
属性有银行名称和存放客户的ArrayList集合,
有开户方法、
销户方法、
存钱方法、
取钱方法、
转账方法(本行转账、跨行转账)

2) 定义customer类
属性有账户名、密码、余额

3) 定义测试类
创建一个银行集合用于存放bank对象
创建几个bank对象:分别叫华夏银行、工商银行、招商银行
将bank对象存入银行集合
起始界面让用户选择对应的银行
然后可以登录、注册
登录后可以执行1)中的相关操作

4)支付页面
生成一个“订单”让用户进行登录、
登录后直接扣款并做相应提示,显示剩余金额
注意:在支付页面登录后不显示相应操作选择
而是直接扣除订单金额或提示余额不足


我写的这个程序相对来说强壮型比较高了,嘿嘿
输入整数及金额判断是否为数字、判断是否小于0
注册时检测用户名是否已存在
登录时密码错误可以选择重试或退出,不会一直要求登录
取款判断余额是否足够(这个应该算必须要有的吧~哈哈)
转账判断对方用户名是否存在等
当然任何一个程序没有最好只有更好
我就没设置注册时用户名和密码的长度限制~
数字也可以作为用户名等小Bug,可以根据需求自己完善一下喽~

好了不多说了 上源码~~~

 

客户类:

package Day20test;

public class TestDay20_1_Customer {

    private String userName;
    private String passWord;
    private double balance;

    public TestDay20_1_Customer() {
        super();
        // TODO Auto-generated constructor stub
    }

    public TestDay20_1_Customer(String userName, String passWord, double balance) {
        super();
        this.userName = userName;
        this.passWord = passWord;
        this.balance = balance;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    @Override
    public String toString() {
        return "TestDay20_1_Customer [userName=" + userName + ", passWord=" + passWord + ", balance=" + balance + "]";
    }
}

 

 

输入功能调用类:

package Day20test;

import java.util.ArrayList;
import java.util.Scanner;

public class TestDay20_1_Tool {

    private static ArrayList<TestDay20_1_Bank> allBank = null;

    public TestDay20_1_Tool() {
        super();
        // TODO Auto-generated constructor stub
    }

    public static ArrayList<TestDay20_1_Bank> getAllBank() {
        if (allBank == null) {
            allBank = new ArrayList<TestDay20_1_Bank>();
            allBank.add(new TestDay20_1_Bank("华夏银行"));
            allBank.add(new TestDay20_1_Bank("工商银行"));
            allBank.add(new TestDay20_1_Bank("招商银行"));
            //这里先添加了一个测试用户,username:yang   password:123
            allBank.get(0).getCustomers().add(new TestDay20_1_Customer("yang", "123", 846.72));
        }
        return allBank;
    }

    // 获取文本数据
    public static String getString(String i) {
        // 创建键盘对象
        @SuppressWarnings("resource")
        Scanner sc = new Scanner(System.in);

        // 输入提示
        System.out.println(i);
        // 赋值数据
        String x = sc.next();
        return x;
    }

    // 获取整数数据
    public static int getInt(String i) {
        // 创建键盘对象
        @SuppressWarnings("resource")
        Scanner sc = new Scanner(System.in);

        // 输入提示
        System.out.println(i);
        while (true) {
            if (sc.hasNextInt()) {
                boolean intFlag = true;
                while (intFlag) {
                    int x = sc.nextInt();
                    if (x < 0) {
                        intFlag = false;
                        System.out.println("请输入正数");
                    } else {
                        return x;
                    }
                }
            } else {
                System.out.println("请输入整数数字");
                sc = new Scanner(System.in);
            }
        }
    }

    // 获取金额数据(整数/小数)
    public static String getdouble(String i) {
        // 创建键盘对象
        @SuppressWarnings("resource")
        Scanner sc = new Scanner(System.in);

        // 输入提示
        System.out.println(i);
        while (true) {
            if (sc.hasNextDouble()) {
                boolean transferFlag = true;
                while (transferFlag) {
                    double transfer = sc.nextDouble();
                    if (transfer < 0) {
                        transferFlag = false;
                        System.out.println("请输入正数");
                    } else {
                        String x = Double.toString(transfer);
                        return x;
                    }
                }
            } else {
                System.out.println("请输入数字");
                sc = new Scanner(System.in);
            }
        }
    }
}

 

支付页面:

package Day20test;

import java.util.ArrayList;
import java.util.Random;

public class TestDay20_1_Pay {

    public static void main(String[] args) {
        ArrayList<TestDay20_1_Bank> al = TestDay20_1_Tool.getAllBank();

        while (true) {
            Random r = new Random();
            int price = r.nextInt(100);
            System.out.println("订单金额" + price + "元");
            System.out.println("=====================");
            int bankChoose;
                System.out.println("请选择您要操作的银行");
                for (int i = 0; i < al.size(); i++) {
                    System.out.println(i + "-" + al.get(i).getBankName());
                }
                System.out.println("----------");
                while (true) {
                    bankChoose = TestDay20_1_Tool.getInt("输入对应的数字(输入-1退出)");
                    if (bankChoose < -1 || bankChoose > al.size() - 1) {
                        System.out.println("对不起,请重新输入");
                    } else {
                        break;
                    }
                }
                if (bankChoose == -1) {
                    break;
                }
                TestDay20_1_Bank b = al.get(bankChoose);
                b.setOperation("付款");
                b.setOperationMoney(price);
                //上面传入了特殊操作参数和特殊操作金额后
                //可以直接调用银行后台的对应方法以便执行相关操作
                b.login();
        }
    }
}

 

最重要的银行类:

package Day20test;

import java.util.ArrayList;

public class TestDay20_1_Bank {

    private ArrayList<TestDay20_1_Customer> customers = new ArrayList<>();;
    private String bankName;
    //定义一个特殊操作参数以便执行特殊操作(例如 直接付款)
    private String operation = "";
    //定义特殊操作的金额
    private double operationMoney = 0.0;

    public TestDay20_1_Bank() {
        super();
        // TODO Auto-generated constructor stub
    }

    public TestDay20_1_Bank(String bankName) {
        super();
        this.bankName = bankName;
    }

    public ArrayList<TestDay20_1_Customer> getCustomers() {
        return customers;
    }

    public String getBankName() {
        return bankName;
    }

    public String getOperation() {
        return operation;
    }

    public void setOperation(String operation) {
        this.operation = operation;
    }

    public double getOperationMoney() {
        return operationMoney;
    }

    public void setOperationMoney(double operationMoney) {
        this.operationMoney = operationMoney;
    }

    // 起始界面
    public void begin() {
        System.out.println("====欢迎使用" + this.bankName + "====");
        while (true) {
            System.out.println("|-----------------------------|");
            System.out.println("|请选择您要执行的操作(输入数字):  |");
            System.out.println("|1.登录                                                       |");
            System.out.println("|2.注册                                                       |");
            System.out.println("|0.退出                                                       |");
            // System.out.println("|-----------------------------|");
            int operation = TestDay20_1_Tool.getInt("|-----------------------------|");
            if (operation == 1) {
                System.out.println("======请登录======");
                this.login();
            } else if (operation == 2) {
                this.register();
            } else if (operation == 0) {
                break;
            } else {
                System.out.println("请输入指定的数字");
            }
        }
        System.out.println("---------------");
        System.out.println("已退出");
    }

    // 注册方法
    public void register() {
        System.out.println("====" + this.bankName + "注册====");
        // 设置用户名
        String registerName;
        while (true) {
            registerName = TestDay20_1_Tool.getString("请设置用户名");
            // 检查用户名是否存在
            boolean userExist = false;
            for (TestDay20_1_Customer customer : customers) {
                if (customer.getUserName().equals(registerName)) {
                    userExist = true;
                }
            }
            // 如果存在
            if (userExist) {
                System.out.println("用户名已存在,请重试");
            } else {
                break;
            }
        }
        // 设置密码
        String registerPassword = TestDay20_1_Tool.getString("请设置密码");
        // 添加用户对象
        customers.add(new TestDay20_1_Customer(registerName, registerPassword, 0.0));
        System.out.println("注册成功");
    }

    // 登录方法
    public void login() {
        // 登录循环
        while (true) {
            // String id = DiyToolsaaa.DiyOperation.getString(i);
            String id = TestDay20_1_Tool.getString("请输入用户名:");
            String password = TestDay20_1_Tool.getString("请输入密码:");
            // 登录成功标记
            boolean access = false;
            for (TestDay20_1_Customer user : this.getCustomers()) {
                if (id.equals(user.getUserName()) && password.equals(user.getPassWord())) {
                    access = true;
                    if (this.getOperation().equals("付款")) {
                        this.withdraw(user);
                    } else {
                        this.loginyes(user);
                    }
                    break;
                }
            }
            if (!access) {
                // 登录密码错误执行
                int loginerrorreturn = this.loginerror();
                if (loginerrorreturn == 1) {
                    break;
                }
            } else {
                break;
            }
        }
    }

    // 登录成功执行
    public void loginyes(TestDay20_1_Customer c) {
        System.out.println("======登录成功======");
        while (true) {
            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("|5.跨行转账                                               |");
            System.out.println("|0.退出                                                       |");
            // System.out.println("|-----------------------------|");

            // 获取操作数字
            int operationnum = TestDay20_1_Tool.getInt("|-----------------------------|");
            // 判断是否退出
            if (operationnum == 0) {
                break;
            }

            // 执行操作数
            this.operationnum(c, operationnum);
        }
    }

    // 登录密码错误执行
    public int loginerror() {
        int x = 0;
        System.out.println("|------------------------------------------|");
        System.out.println("|用户名或密码错误,请选择您要执行的操作(输入数字):|");
        System.out
                .println("|1.重试                                                                                     |");
        System.out
                .println("|2.退出                                                                                     |");
        // System.out.println("|------------------------------------------|");
        int operationerror = TestDay20_1_Tool.getInt("|------------------------------------------|");
        switch (operationerror) {
        case 1:
            break;
        case 2:
            x = 1;
            break;
        default:
            System.out.println("请输入指定的数字");
            break;
        }
        return x;
    }

    // 具体操作方法
    public void operationnum(TestDay20_1_Customer c, int operationnum) {
        // 具体操作执行
        switch (operationnum) {
        case 1:
            // 输出信息
            System.out.println(this.toString(c));
            break;
        case 2:
            // 存款操作
            this.deposit(c);
            break;
        case 3:
            // 取款操作
            this.withdraw(c);
            break;
        case 4:
            // 本行转账
            this.transfer(c, this);
            break;
        case 5:
            // 跨行转账
            this.transferStride(c);
            break;
        default:
            System.out.println("请输入指定的数字");
            break;
        }
    }

    // 存款方法
    public void deposit(TestDay20_1_Customer c) {
        System.out.println("请输入存入金额");
        // 获取操作金额
        double deposit = Double.parseDouble(TestDay20_1_Tool.getdouble("==================="));
        c.setBalance(c.getBalance() + deposit);
        System.out.println("成功存入" + deposit + "元");
        System.out.println("当前总余额为:" + c.getBalance() + "元");
    }

    // 取款方法
    public void withdraw(TestDay20_1_Customer c) {
        double balance = c.getBalance();
        if (this.getOperation().equals("付款")) {
            if (this.getOperationMoney()<balance) {
                c.setBalance(balance - this.getOperationMoney());
                System.out.println("付款成功,当前余额为:" + (balance - this.getOperationMoney()));
                System.out.println("==========");
            }else {
                System.out.println("余额不足,当前余额为:" + balance);
            }
        } else {
            System.out.println("请输入取出金额");
            // 获取操作金额
            double withdraw = Double.parseDouble(TestDay20_1_Tool.getdouble("==================="));
            if (withdraw < balance) {
                c.setBalance(balance - withdraw);
                System.out.println("成功取出" + withdraw + "元");
                System.out.println("当前总余额为:" + balance + "元");
            } else {
                System.out.println("余额不足,当前余额为:" + balance);
            }
        }
    }

    // 转账方法
    public void transfer(TestDay20_1_Customer c, TestDay20_1_Bank b) {
        // 定义被转账人用户名和对象
        String transgerName;
        TestDay20_1_Customer transgerReceiveName = null;
        while (true) {
            transgerName = TestDay20_1_Tool.getString("请输入转入账户名:");
            // 检查用户名是否存在
            boolean userExist = false;// 假设不存在
            // 遍历本银行所有客户
            for (TestDay20_1_Customer customer : b.getCustomers()) {
                // 对比用户名是否相符
                if (customer.getUserName().equals(transgerName)) {
                    // 用户对象赋值
                    transgerReceiveName = customer;
                    // 修改标记
                    userExist = true;
                    // 结束遍历
                    break;
                }
            }
            // 如果不存在
            if (!userExist) {
                System.out.println("您输入的账户不存在,请重新输入");
            } else {
                break;
            }
        }
        // 获取操作金额
        double transfer = Double.parseDouble(TestDay20_1_Tool.getdouble("请输入转账金额:"));
        // 转账客户扣钱
        c.setBalance(c.getBalance() - transfer);
        // 被转账人客户加钱
        transgerReceiveName.setBalance(transgerReceiveName.getBalance() + transfer);
        System.out.println("转账成功!");

    }

    // 转账方法(跨行)
    public void transferStride(TestDay20_1_Customer c) {
        // 获取所有银行信息
        ArrayList<TestDay20_1_Bank> al = TestDay20_1_Tool.getAllBank();
        int bankChoose;
        System.out.println("请选择收款人所在的银行");
        for (int i = 0; i < al.size(); i++) {
            System.out.println(i + "-" + al.get(i).getBankName());
        }
        System.out.println("----------");
        while (true) {
            bankChoose = TestDay20_1_Tool.getInt("输入对应的数字(输入-1退出)");
            if (bankChoose < 0 || bankChoose > al.size() - 1) {
                System.out.println("对不起,请重新输入");
            } else {
                break;
            }
        }
        this.transfer(c, al.get(bankChoose));
    }

    // 查看账户信息方法
    public String toString(TestDay20_1_Customer c) {
        return "[当前余额:" + c.getBalance() + "]";
    }

    // 销户方法
    public void accountCancellation(TestDay20_1_Customer c) {
        System.out.println("====" + this.bankName + "销户====");
        // 登录循环
        System.out.println("销户后将无法再次登录本银行系统,账户余额清零,确认执行销户操作吗?");
        System.out.println("1、确认");
        System.out.println("0、返回");
        String operation = TestDay20_1_Tool.getString("请选择:");
        if (operation.equals("1")) {
            for (TestDay20_1_Customer user : this.getCustomers()) {
                if (c.getUserName().equals(user.getUserName())) {
                    this.getCustomers().remove(user);
                    System.out.println("销户成功");
                    break;
                }
            }
        }
    }
}

 

然后还有个测试类:

package Day20test;

import java.util.ArrayList;

public class TestDay20_1 {

    public static void main(String[] args) {

        ArrayList<TestDay20_1_Bank> al = TestDay20_1_Tool.getAllBank();

        System.out.println("======欢迎光临======");
        // 选择银行循环
        int bankChoose;
        while (true) {
            System.out.println("请选择您要操作的银行");
            for (int i = 0; i < al.size(); i++) {
                System.out.println(i + "-" + al.get(i).getBankName());
            }
            System.out.println("----------");
            while (true) {
                bankChoose = TestDay20_1_Tool.getInt("输入对应的数字(输入-1退出)");
                if (bankChoose < -1 || bankChoose > al.size() - 1) {
                    System.out.println("对不起,请重新输入");
                } else {
                    break;
                }
            }
            if (bankChoose == -1) {
                break;
            }
            al.get(bankChoose).begin();
        }
        System.out.println("---------------");
        System.out.println("程序已结束");
    }
}

 





























以上是关于Java基础知识综合练习_使用集合存储_高级银行系统的搭建(注册登录存取款本行转账跨行转账销户特殊操作参数多个客户对象存入到银行类的集合,多个银行对象存入总测试类集合)的主要内容,如果未能解决你的问题,请参考以下文章

03_java基础之综合练习与考核评估

阶段1 语言基础+高级_1-3-Java语言高级_04-集合_01 Collection集合_4_Iterator接口介绍

阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_6_练习_转换文件编码

阶段1 语言基础+高级_1-3-Java语言高级_04-集合_02 泛型_3_定义和使用含有泛型的类

阶段1 语言基础+高级_1-3-Java语言高级_04-集合_01 Collection集合_5_迭代器的代码实现

阶段1 语言基础+高级_1-3-Java语言高级_04-集合_07 Collections工具类_1_Collections集合工具类的方法