算法:简易银行系统

leetcode 简易银行系统
在这里插入图片描述

一个简单的银行系统,主要涉及初始化,转账,取钱,存钱。


代码:

typedef struct {
    int bankSize;
    long long * money;
} Bank;


Bank* bankCreate(long long* balance, int balanceSize) {
    Bank * bank = malloc(sizeof(Bank));
    bank->bankSize = balanceSize;
    bank->money = malloc(sizeof(long long) * balanceSize);
    memset(bank->money, 0, balanceSize);
    for (int i = 0; i < balanceSize; i++) {
        bank->money[i] = balance[i];
    }
    return bank;
}

bool bankTransfer(Bank* obj, int account1, int account2, long long money) {
    if (account1 > obj->bankSize || account2 > obj->bankSize) return false;
    if (obj->money[account1 - 1] < money) return false;
    obj->money[account1 - 1] -= money;
    obj->money[account2 - 1] += money;
    return true;
}

bool bankDeposit(Bank* obj, int account, long long money) {
    if (account > obj->bankSize) return false;
    obj->money[account - 1] += money;
    return true;
}

bool bankWithdraw(Bank* obj, int account, long long money) {
    if (account > obj->bankSize) return false;
    if (obj->money[account - 1] < money) return false;
    obj->money[account - 1] -= money;
    return true;
}

void bankFree(Bank* obj) {
    free(obj->money);
    free(obj);
}

/**
 * Your Bank struct will be instantiated and called as such:
 * Bank* obj = bankCreate(balance, balanceSize);
 * bool param_1 = bankTransfer(obj, account1, account2, money);
 
 * bool param_2 = bankDeposit(obj, account, money);
 
 * bool param_3 = bankWithdraw(obj, account, money);
 
 * bankFree(obj);
*/

结构体中定义了两个,一个账户的个数,和一个数组,用于存储每个账户对应的余额。

  1. 初始化:初始化结构体,账户个数即为传入的数组的长度,那个数组即为每个账户的初始金额(这里似乎不用一个一个赋值,直接将结构体指针指向传入的数组的指针)。

  2. 转账:需要判断两个条件,转账双方的账户是否有效,转账金额是否有效

  3. 存款:只需要判断账户是否有效即可

  4. 取款:需要判断账户是否有效以及取款金额是否有效

注意,账户是否有效和金额是否有效不要使用 && 同时判断,需要先判断账户是否有效,再判断金额是否有效,因为无效金额是没有余额的

结果
在这里插入图片描述

不使用单个赋值,而是直接使用指针赋值,内存只减少了一丢丢,但是运行时间也提高了一丢丢​。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
功能需求详细说明: 0、 显示所有账户 a) 查询出所有账户信息(账户名、账户ID、账户密码、账户余额); 1、 添加账户 a) 添加时先判断输入的账户Id在当前系统中存在不存在,不能重复,如果重复,提示退出程序; b) 添加账户分为两种情况: i. accounts数组未满,只需遍历当前的系统中账户信息,找到为null的位置将新的账户信息添加进去; ii. accounts满了,进行扩容操作,每次扩容10个,提示(在数组扩容之后要将原系统中的账户信息移到对应的新对象数组中); 2、 存钱 a) 判断存入的账户存在还是不存在,如果不存在给出相应提示; b) 如果存在,在存入金额的时候,判断金额是否合法(不能小于等于0),如果合法提示输入密码,再次确认密码,如果密码输入错误,给出相关提示,如果正确,进行存钱; 3、 取钱 a) 判断取钱的账户存在还是不存在,如果不存在给出相应提示; b) 取钱判断输入的金额是否合法,如果合法提示输入密码,如果密码输入错误,给出相关提示; c) 取款金额要小于等于现有存款金额,不能超出现有余额,若超出,则取款失败,给出相关提示; 4、 转账 a) 要判断本人账户存在还是不存在,然后判断对方账户存在还是不存在,如果其中之一不存在,给出错误提示; b) 进行转账前,要判断本人账户余额是否满足转账金额,如果不足,提示账户余额不足,输出现有余额; c) 在转账金额满足的情况下需要确认密码才能进行转账,转账成功之后,给出相关提示; 5、 修改密码 a) 首先提示输入账户ID,如果不存在给出相关错误提示; b) 输入原密码,再次确认密码,在原密码和确认密码输入正确的情况下方可进入修改密码界面,如果不正确那么提示密码输入错误,如果输入的新密码和旧密码一样,提示新密码和原密码不能一样; c) 在新密码和确认新密码输入不正确的情况下,提示输入错误之后再次提示用户进行输入,在此处可以做一个循环提示,当新密码和确认新密码都输入正确满足条件时则提示修改密码成功;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值