银行,客户,账户

简介: 银行,客户,账户

题目2

// 三个类之间的关系
// 它们之间的关系是正方形属于矩形的特例 所以需要继承矩形的属性
// 而立方体是在矩形的基础之上多了一个维度 所以需要在矩形的基础上加上一个属性:高
// 矩形类
class Rectangle{
    private int width;
    private int length;
    public Rectangle() { }
    public Rectangle(int width, int length) {
        this.width = width;
        this.length = length;
    }
    public int getWidth() {
        return width;
    }
    public void setWidth(int width) {
        this.width = width;
    }
    public int getLength() {
        return length;
    }
    public void setLength(int length) {
        this.length = length;
    }
}
// 需要注意的是 在这个题里面需要通过父类提供的set方法来为父类的私有成员赋值 这样才符合继承,封装的意义
// 正方形类
class Square extends Rectangle{
    public Square(){ }
    // 因为继承关系的原因 这里必须使用super 这样才符合面相对象思想
    public Square(int width, int length) {
        super(width, length);
    }
}
// 立方体类
class Cube extends Rectangle{
    // 在原有的基础之上加上一个height属性
    private int height;
    public int getHeight() {
        return height;
    }
    public void setHeight(int height) {
        this.height = height;
    }
    public Cube(){}
    public Cube(int height) {
        this.height = height;
    }
    public Cube(int width, int length, int height) {
        super(width, length);
        this.height = height;
    }
}

题目3

// 面相对象第一步 思考各个类之间的关系
// 题目里面说Bank中有多个Account 但是他们不是继承关系
// 所以在这里如果Bank,Customer想要调用Account的话需要把Account放在Bank类的前面 (一个技术细节)
// 需要思考的就是银行,银行客户,与客户的账户之间的关系
// 显然分析可得这里是IS-A法则 所以这三个类都是独立的
class Account{
    private int id; // 账户id
    private double money; // 账户金额
    public Account() {}
    public Account(int id, double money) {
        this.id = id;
        this.money = money;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public double getMoney() {
        return money;
    }
    public void setMoney(double money) {
        this.money = money;
    }
}
class Bank{
    private Account [] accounts; // 银行的账户集 用一个account的数组表示
    private int accountNum; // 银行账户的数量
    public Bank(){}
    public Bank(Account[] accounts){
        this.accounts = accounts;
        this.accountNum = accounts.length;
    }
    public Account[] getAccounts() {
        return accounts;
    }
    public void setAccounts(Account[] accounts) {
        this.accounts = accounts;
    }
    public int getAccountNum() {
        return accountNum;
    }
    public void setAccountNum(int accountNum) {
        this.accountNum = accountNum;
    }
}
class Customer{
    private Account account; // 该用户的账户
    private double custmerMoney; // 用户的钱
    // 由于题目说用户可以有一个账户 所以用户多了一个是否有账户的情况
    private boolean flag; // 该用户是否有在银行开户 如果为false代表没有开户 反之为开户
    public Customer() {
        // 误差构造方法含义就是没有创建账户 那么就是false
        this.flag = false;
    }
    public Customer(Account account, double custmerMoney) {
        this.account = account;
        this.custmerMoney = custmerMoney;
        this.flag = true;
    }
    public Account getAccount() {
        // 如果这个客户没有创建账户 那么就返回null
        if (flag == false) return null;
        return account;
    }
    public void setAccount(Account account) {
        // 设置了账户 那么flag就为true了
        this.account = account;
        this.flag = true;
    }
    public boolean isFlag() {
        return flag;
    }
    public void setFlag(boolean flag) {
        this.flag = flag;
    }
    public double getCustmerMoney() {
        return custmerMoney;
    }
    public void setCustmerMoney(double custmerMoney) {
        this.custmerMoney = custmerMoney;
    }
    // 不论是存钱还是取钱 第一步判断是这个用户是否开户了 没有的话就是false
    // 存钱和取钱的函数都是boolean 如果返回true那么就是成功了 反之就失败了
    public boolean withdrawMoney(double money){  // 取钱
        if (this.isFlag()) {
            double tmoney = this.getAccount().getMoney();  // 这里先把变量存在一个临时表变量里面 这样的目的是可以减少函数间传递的频率
                                                           // 提高程序的运行效率(用c++的思想写java)
            if (tmoney < money) return false; // 如果钱不够
            else {
                this.getAccount().setMoney(tmoney - money);
                return true;
            }
        } else return false;
    }
    // 存钱的方法
    public boolean saveMoney(int money){
        // 先判断有没有账号
        if (this.isFlag()) {
            // 钱不够 然后就存钱失败
            if (this.custmerMoney - money < 0) return false;
            this.getAccount().setMoney(this.getAccount().getMoney() + money);
            return true;
        } else return false;
    }
    // 向另一个用户转账 设计为boolean类型 查看是否转账成功
    public boolean transferAccount(Customer customer1, Customer customer2, double money){
        // 这里是account1向account2转账
        // 钱不够 不够转账
        double money1 = customer1.getAccount().getMoney();
        double money2 = customer2.getAccount().getMoney();
        if(customer1.getAccount().getMoney() < money) return false;
        customer1.getAccount().setMoney(money1 - money);
        customer2.getAccount().setMoney(money2 + money);
        return true;
    }
}


相关文章
|
7月前
|
安全 API 开发者
转账到支付宝账户接口:一次开发,提升打款效率
转账到支付宝账户接口:一次开发,提升打款效率
153 0
支付系统03------支付指引,开启支付的前置条件,公户,如果是企业要准备营业执照,组织机构代码证,对公银行账户,法人身份证
支付系统03------支付指引,开启支付的前置条件,公户,如果是企业要准备营业执照,组织机构代码证,对公银行账户,法人身份证
|
7月前
|
人工智能 数据挖掘
掌握CRM+邮箱技巧:销售速度与客户信任双丰收
**销售提效关键:CRM+邮件融合** 在商业环境中,邮件仍然是重要的沟通工具。Zoho CRM通过集成邮件功能,提升了销售团队的效率。基础功能允许在CRM内直接发送和回复邮件,避免系统间切换,同时将邮件与客户记录关联,确保信息完整。销售信号提醒功能确保及时响应客户动态,而邮件模板则减少了重复工作。进阶功能如SalesInbox帮助优先处理重要邮件,邮件模板简化日常工作,邮件透视提供数据分析。高阶功能如智能邮件撰写和解读,利用AI优化写作和理解,提高处理速度。Zoho CRM通过深度整合邮件,助力销售团队实现高效协作和精准决策。
96 2
|
存储 编译器 uml
创建一个银行账户的继承层次,表示银行的所有客户的账户。每个客户都能在他们的银行账户存钱,取钱。但是账户可以分为更具体的两种类型,例如,依靠存款生息的存储账户SavingsAccount类,另一种就是信
创建一个银行账户的继承层次,表示银行的所有客户的账户。每个客户都能在他们的银行账户存钱,取钱。但是账户可以分为更具体的两种类型,例如,依靠存款生息的存储账户SavingsAccount类,另一种就是信
187 0
基于账户的营销平台
本文研究全球及中国市场基于账户的营销平台现状及未来发展趋势,侧重分析全球及中国市场的主要企业,同时对比北美、欧洲、中国、日本、东南亚和印度等地区的现状及未来发展趋势