一个简单的银行系统,主要涉及初始化,转账,取钱,存钱。
代码:
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);
*/
结构体中定义了两个,一个账户的个数,和一个数组,用于存储每个账户对应的余额。
-
初始化:初始化结构体,账户个数即为传入的数组的长度,那个数组即为每个账户的初始金额(这里似乎不用一个一个赋值,直接将结构体指针指向传入的数组的指针)。
-
转账:需要判断两个条件,转账双方的账户是否有效,转账金额是否有效
-
存款:只需要判断账户是否有效即可
-
取款:需要判断账户是否有效以及取款金额是否有效
注意,账户是否有效和金额是否有效不要使用 && 同时判断,需要先判断账户是否有效,再判断金额是否有效,因为无效金额是没有余额的。
结果
不使用单个赋值,而是直接使用指针赋值,内存只减少了一丢丢,但是运行时间也提高了一丢丢。