码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-01-13 22:21:23      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:rgs   str   lis   password   文本   pre   程序   with   word   

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

标签:rgs   str   lis   password   文本   pre   程序   with   word   

原文地址:https://www.cnblogs.com/youlixin/p/10264137.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!