南京邮电大学Java软件开发(混合式)实验2:银行账户管理——面向对象

一、 Java 类与对象的基本知识:
1. 类的定义
2. 方法重载
3. 构造方法
4. static 关键字
5. this 关键字
6. 包与import 语句
7. 访问权限
8. 对象的使用

二、实验内容

1. 创建两个包
· com.mybank.domain;
· com.mybank.test;

这里不多赘述。

2. 创建 Account 类
· 位于包: com.mybank.domain中;
· 向Account 类中添加 private 实例变量double balance, 用于维护客户的账户存款额;
· 添加具有一个公有构造方法: Account(double initBalance), 用于初始化账户存款额;
· 添加一个公有方法: deposit(double amt), 用于向账户存钱, 返回值是 boolean 型;
· 添加一个公有方法: withdraw(double amt), 用于从账户取钱, 需要根据账户的实际余
额做判断分析, 返回值是boolean 型;
· 添加一个公有方法: getBalance(), 用于返回 balance 的值, 返回值是 double 类型。

package com.mybank.domain;
public class Account {
    private  double balance;
    public Account(double initBalance)
    {
        balance = initBalance;
    }
    public boolean deposit(double amt)
    {
        if(amt>=0)
        {
            balance = balance + amt;
            return true;
        }
        else
            return false;
    }
    public boolean withdraw(double amt)
    {
        if(amt<=balance&&amt>=0)//取的钱款必须小于等于余额,并且大于等于0元
        {
            balance = balance - amt;
            return true;

        }
        else if(amt>balance)
        {
            System.out.println("You have no money!");
            return  false;
        }
        else
            return false;
    }
    public double getBalance()
    {
       return  balance;
    }

}

3. 创建 Customer 类:
· 位于包: com.mybank.domain 中;
· 向 Customer 类添加四个private 实例变量: firstName, lastName, accounts( Account
对象数组) 和 numberOfAccounts( 记录实际的账户数目);
· 添加一个公有构造方法: 具有两个形式参数 firstName, lastname, 用于初始化客户姓
名; 同时初始化 accounts 数组(长度为10) 和 numberOfAccounts 变量( 初值为0) ;
· 添加一个公有方法: getFirstName() , 该方法返回客户的 firstName 实例变量;
· 添加一个公有方法: getLastName() , 该方法返回客户的 lastName 实例变量;
· 添加 addAccount 方法: 该方法具有一个形式参数: double amount, 数组的下标通过
实例变量 numberOfAccounts 实现递增, 同时将实例化出来的 Account 对象存储到
accounts 数组中;
· 添加重载的 addAccount(Account acc)方法: 该方法具有一个形式参数( 即 Account 类
型的对象 acc) , 数组的下标依然通过实例变量 numberOfAccounts 实现递增, 同时将
Account 对象 acc 存储到 accounts 数组中;
· 添加 getNumberOfAccounts 方法: 该方法返回 numberOfAccounts 实例变量;
· 添加 getAccount 方法: 该方法具有一个形式参数( 即 int 类型 index) , 根据传进来
的数组下标返回该下标对应的 Account 对象。
· 重写 toString() 方法, 将 Customer 对象以客户名字的字符串形式输出。

package com.mybank.domain;

public class Customer {
    private String firstName;
    private String lastName;
    private Account[] accounts;
    private int numberOfAccounts;
    public Customer(String firstName,String lastName){
        this.firstName = firstName;
        this.lastName = lastName;
        accounts = new Account[10];
        numberOfAccounts = 0;
    }
    public String getFirstName() {
        return firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void addAccount(double amt){
        accounts[numberOfAccounts++]=new Account(amt);
    }
    public void addAccount(Account acc)
    {
        accounts[numberOfAccounts++]=acc;
    }
    public int getNumberOfAccounts()
    {
        return  numberOfAccounts;
    }

    public Account getAccounts(int index) {
        return accounts[index];
    }
    public String toString(){
        return firstName+lastName;
    }
}

4.创建 Bank 类:
· 位于包: com.mybank.domain 中;
· 向 Bank 类 添 加 两 个 静 态 变 量 : customers ( Customer 对 象 数 组 ) 和
numberOfCustomers( 记录实际客户数目);
· 添 加 一 个 静 态 初 始 化 块 : 用 于 初 始 化 customers 数 组 ( 长 度 为 10 ) 和
numberOfCustomers 变量;
· 添加静态方法 addCustomer: 该方法有两个形式参数( 即 firstName, lastName) , 数
组的下标通过实例变量 numberOfCustomers 实现递增, 同时将实例化出来的 Customer
对象存储到 customers 数组中;
· 添加静态方法 getNumberOfCustomers: 该方法返回 numberOfCustomers 的值;
· 添加静态方法 getCustomer: 该方法具有一个形式参数( 即 int 类型 index) , 根据传
进来的数组下标返回该下标对应的 Customers 对象。

package com.mybank.domain;

public class Bank {
    private static  Customer[] customers;
    private static  int numberOfCustomers;
    static{
        customers = new Customer[10];
        numberOfCustomers = 0;
    }
    public static void addCustomer(String firstName,String lastName){
        customers[numberOfCustomers++]=new Customer(firstName,lastName);
    }

    public static int getNumberOfCustomers() {
        return numberOfCustomers;
    }
    public static Customer getCustomer(int index){
        return customers[index];
    }
}

5.创建 TestBanking 类, 该类有程序入口 main() 函数:
· 该类文件位于包: com.mybank.test中;
· 通过 Bank 类调用相应的静态方法, 为银行的每个客户( 最多10个客户) 及其账户开
户;
· 自行设计, 对客户的账户进行存取款操作, 并输出客户姓名及其每个账户的余额。

package com.mybank.test;
import java.util.*;
import com.mybank.domain.*;

public class TestBanking {
    public static void menu() {
        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("6.退出系统。");
        System.out.println("请选择您需要的功能:");
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int choice;
        do {
            TestBanking.menu();
            choice = sc.nextInt();
            sc.nextLine();
            switch (choice) {
                //添加客户,目前只能逐个开户
                case 1: {
                    System.out.println("请输入客户姓氏:");
                    String fn = sc.nextLine();
                    System.out.println("请输入客户名字:");
                    String ln = sc.nextLine();
                    Bank.addCustomer(fn, ln);
                    System.out.println("客户开户成功!");
                    break;
                }
                //创建账户,根据数量可以批量开户
                case 2: {
                    System.out.println("请输入客户编号:");
                    int num = sc.nextInt();
                    Customer customer = Bank.getCustomer(num);
                    System.out.println("客户姓名是:" + customer.getFirstName()  +" "+ customer.getLastName());
                    System.out.println("请输入开户数量:");
                    int num1 = sc.nextInt();
                    for (int i = 0; i < num1; i++)
                        customer.addAccount(0);
                    System.out.println("客户账户开户成功!");
                    break;
                }
                case 3: {
                    System.out.println("请输入客户编号:");
                    int num = sc.nextInt();
                    System.out.println("客户姓名是:" + Bank.getCustomer(num).getFirstName() + " " + Bank.getCustomer(num).getLastName());
                    System.out.println("请输入想存款的账户编号:");
                    int num1 = sc.nextInt();
                    Account account = Bank.getCustomer(num).getAccounts(num1);
                    System.out.println("请输入存款金额:");
                    int num3 = sc.nextInt();
                    if (account.deposit(num3)) {
                        System.out.println("存款后的余额是:" + account.getBalance());
                    }
                    break;
                }
                case 4: {
                    System.out.println("请输入客户编号:");
                    int num = sc.nextInt();
                    System.out.println("客户姓名是:" + Bank.getCustomer(num).getFirstName() + " " + Bank.getCustomer(num).getLastName());
                    System.out.println("请输入想取款的账户编号:");
                    int num1 = sc.nextInt();
                    Account account = Bank.getCustomer(num).getAccounts(num1);
                    System.out.println("请输入取款金额:");
                    int num3 = sc.nextInt();
                    if (account.withdraw(num3)) {
                        System.out.println("取款后的余额是:" + account.getBalance());
                    }
                    break;
                }
                case 5: {
                    System.out.println("请输入客户编号:");
                    int num = sc.nextInt();
                    System.out.println("客户姓名是:" + Bank.getCustomer(num).getFirstName() + " " + Bank.getCustomer(num).getLastName());
                    System.out.println("请输入想查询余额的账户编号:");
                    int num1 = sc.nextInt();
                    Account account = Bank.getCustomer(num).getAccounts(num1);
                    System.out.println("该账户的余额是:" + Bank.getCustomer(num).getAccounts(num1).getBalance());
                    break;
                }
                case 6:{
                    System.exit(1);
                }
                default:{
                    System.out.println("无此功能,请重新选择!");
                    break;
                }

            }
        } while (true);


    }
}

仅供学习使用,禁止直接抄袭,请学弟学妹们对自己负责!
 

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值