C语言实现模拟银行系统

C语言实现模拟银行系统攻略

概述

本文将介绍如何采用C语言实现简单的模拟银行系统。该系统主要包含账户管理、存款、取款、转账、查询余额等功能。

系统设计

账户结构体

一个账户包含三个属性:账户号、账户余额和持有者姓名。定义一个结构体表示账户:

typedef struct account_t {
    int account_no; //账户号
    float balance; //账户余额
    char holder_name[20]; //账户持有者姓名
} Account;

系统函数

根据系统需要,实现一些相关的函数,例如:

初始化账户系统

定义一个函数来初始化账户系统,主要完成以下两个任务:
- 设置系统当前账户个数为0;
- 动态创建一定数量的账户结构体数组的内存空间。

#define MAX_ACCOUNTS 10
Account *accounts[MAX_ACCOUNTS]; //定义一个指针数组,存储所有账户结构体的地址
int account_count; //账户总数,即accounts数组中已有元素个数

void init_system()
{
    account_count = 0;
    for (int i=0; i<MAX_ACCOUNTS; i++) {
        accounts[i] = NULL;
    }
}

创建账户

定义一个函数来创建账户并添加到账户系统中,主要完成以下四个任务:
- 检查是否已经达到最大账户数量;
- 根据用户输入的信息创建一个账户结构体;
- 将新创建的账户结构体指针添加到accounts数组中;
- 增加账户总数。

void create_account()
{
    if (account_count >= MAX_ACCOUNTS) {
        printf("系统最多只能支持%d个账户!", MAX_ACCOUNTS);
        return;
    }

    Account *account = (Account*)malloc(sizeof(Account));
    printf("请输入新账户号:");
    scanf("%d", &account->account_no);
    printf("请输入账户余额:");
    scanf("%f", &account->balance);
    printf("请输入账户持有者姓名:");
    scanf("%s", account->holder_name);

    accounts[account_count++] = account;
    printf("账户创建成功!\n");
    print_account(account);
}

存款

定义一个函数来存款,主要完成以下三个任务:
- 搜索指定账户在accounts数组中的索引;
- 判断账户是否存在;
- 增加账户余额。

void deposit(int account_no, float amount)
{
    int account_index = find_account_index(account_no);
    if (account_index == -1) {
        printf("账户 %d 不存在!", account_no);
        return;
    }
    accounts[account_index]->balance += amount;
    printf("存款成功!\n");
    print_account(accounts[account_index]);
}

取款

定义一个函数来取款,主要完成以下四个任务:
- 搜索指定账户在accounts数组中的索引;
- 判断账户是否存在;
- 判断账户余额是否充足;
- 减少账户余额。

void withdraw(int account_no, float amount)
{
    int account_index = find_account_index(account_no);
    if (account_index == -1) {
        printf("账户 %d 不存在!", account_no);
        return;
    }
    if (accounts[account_index]->balance < amount) {
        printf("账户余额不足!");
        return;
    }
    accounts[account_index]->balance -= amount;
    printf("取款成功!\n");
    print_account(accounts[account_index]);
}

转账

定义一个函数来转账,主要完成以下五个任务:
- 搜索发起转账的账户和收到转账的账户在accounts数组中的索引;
- 判断发起转账的账户是否存在;
- 判断接收转账的账户是否存在;
- 判断发起转账的账户余额是否充足;
- 减少发起转账的账户余额,增加接收转账的账户余额。

void transfer(int from_account_no, int to_account_no, float amount)
{
    int from_account_index = find_account_index(from_account_no);
    if (from_account_index == -1) {
        printf("发起转账的账户 %d 不存在!", from_account_no);
        return;
    }
    int to_account_index = find_account_index(to_account_no);
    if (to_account_index == -1) {
        printf("接收转账的账户 %d 不存在!", to_account_no);
        return;
    }
    if (accounts[from_account_index]->balance < amount) {
        printf("发起转账的账户余额不足!");
        return;
    }
    accounts[from_account_index]->balance -= amount;
    accounts[to_account_index]->balance += amount;
    printf("转账成功!\n");
    print_account(accounts[from_account_index]);
    print_account(accounts[to_account_index]);
}

查询余额

定义一个函数来查询余额,主要完成以下两个任务:
- 搜索指定账户在accounts数组中的索引;
- 判断账户是否存在,若存在则输出账户余额。

void check_balance(int account_no)
{
    int account_index = find_account_index(account_no);
    if (account_index == -1) {
        printf("账户 %d 不存在!", account_no);
        return;
    }
    printf("%s的账户余额为:%.2f元\n", accounts[account_index]->holder_name, accounts[account_index]->balance);
}

搜索函数

定义一个函数来搜索指定账户在accounts数组中的索引,若目标账户不存在则返回-1。

int find_account_index(int account_no)
{
    for (int i=0; i<account_count; i++) {
        if (accounts[i]->account_no == account_no) {
            return i;
        }
    }
    return -1;
}

示例演示

以下是示例演示的两个场景:

情景一:创建账户、存款、取款、查询余额

//启动系统
init_system();

//创建账户1
create_account();

//存款
deposit(1, 1000);

//取款
withdraw(1, 500);

//查询余额
check_balance(1);

输出结果:

请输入新账户号:1
请输入账户余额:999.99
请输入账户持有者姓名:Tom
账户创建成功!
账户号:1, 账户余额:999.99元, 账户持有者:Tom
存款成功!
账户号:1, 账户余额:1000.00元, 账户持有者:Tom
取款成功!
账户号:1, 账户余额:500.00元, 账户持有者:Tom
Tom的账户余额为:500.00元

情景二:创建账户、转账、查询余额

//启动系统
init_system();

//创建账户1
create_account();

//创建账户2
create_account();

//转账
transfer(1, 2, 500);

//查询余额
check_balance(1);
check_balance(2);

输出结果:

请输入新账户号:1
请输入账户余额:1000
请输入账户持有者姓名:Tom
账户创建成功!
账户号:1, 账户余额:1000.00元, 账户持有者:Tom
请输入新账户号:2
请输入账户余额:0
请输入账户持有者姓名:Jerry
账户创建成功!
账户号:2, 账户余额:0.00元, 账户持有者:Jerry
转账成功!
账户号:1, 账户余额:500.00元, 账户持有者:Tom
账户号:2, 账户余额:500.00元, 账户持有者:Jerry
Tom的账户余额为:500.00元
Jerry的账户余额为:500.00元

总结

本文简单介绍了如何采用C语言实现模拟银行系统,涵盖了账户管理、存款、取款、转账、查询余额等功能。系统设计合理,代码简洁易懂,并提供了示例代码供读者参考。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现模拟银行系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 举例讲解C语言的fork()函数创建子进程的用法

    当我们编写多进程程序时,经常需要使用fork()函数创建子进程。在此为大家详细讲解C语言的fork()函数创建子进程的用法。 什么是fork()函数? fork()函数是一个创建进程的系统调用,调用一次生成两个进程(一个子进程和一个父进程)。两个进程都执行fork()调用后的下一条语句。这个新进程几乎与原先的进程完全一样,除了它有自己独特的进程ID,PID和…

    C 2023年5月23日
    00
  • postgresql 实现修改jsonb字段中的某一个值

    要实现修改 jsonb 字段中的某一个值,可以使用 PostgreSQL 提供的相关函数来实现。下面我会详细讲解如何使用 PostgreSQL 的函数来实现修改 jsonb 字段。 准备工作 首先,我们需要创建一个包含 jsonb 字段的表来演示。可以使用下面的 SQL 语句创建新表: CREATE TABLE example ( id SERIAL PRI…

    C 2023年5月23日
    00
  • C语言实现简单的扫雷游戏操作

    C语言实现简单的扫雷游戏攻略 1. 游戏规则 扫雷游戏是一种单人游戏。游戏板面是由方格组成的矩阵,其中某些方格下面埋藏着地雷,其他方格则显示数字或者空白。玩家需要透过已知的数字,来推测出哪些方格下面有地雷,并标记出所有的地雷。 具体规则如下: 游戏开始时,玩家会看到一个游戏板面。这个板面上所有方块的初始状态都是未翻开的。 玩家需要翻开方格。如果翻开的方格下面…

    C 2023年5月23日
    00
  • C++深入探究类与对象之友元与运算符重载

    C++深入探究类与对象之友元与运算符重载 友元(friend)是 C++ 中比较特殊的概念,它可以使一个类中的非成员函数访问类的私有成员,非常适合于一些特殊的应用场景。本文将深入讲解 C++ 中友元的使用方法并结合示例进行说明。 友元的概念 在 C++ 中,我们可以使用关键字 friend 定义友元,其作用是允许其他类或者函数访问该类的私有成员。简而言之,友…

    C 2023年5月22日
    00
  • C++中4种类型转换的方法分享

    当我们在C++编程中需要将一个数据类型转换为另一个数据类型时,可以使用以下四种类型转换方法: 1. 隐式类型转换 隐式类型转换(implicit conversion)是由编译器自动完成的类型转换,不需要程序员显式地调用转换函数或者使用强制类型转换运算符。例如,将整型变量赋给浮点型变量时,编译器会自动将整型变量转换为浮点型变量。示例代码如下: int i =…

    C 2023年5月30日
    00
  • 进一步理解Java中的多态概念

    我将给出“进一步理解Java中的多态概念”的完整攻略。在这里,我将首先给出对多态的基本概念和含义的解释;然后,给出两个示例来说明如何实现多态。最后,为了更好的理解,我将解释多态的实际应用场景。 多态的概念和含义 在Java编程中,实现多态通常是通过继承和方法重写来实现的。具体来说,多态是指通过父类引用指向不同子类对象时,对同一方法的调用会产生不同的结果。同时…

    C 2023年5月23日
    00
  • java 三元操作符用法说明

    Java的三元操作符也称为条件运算符(Ternary Operator),它是Java中唯一的一个三元运算符。它使用“?”和“:”符号,表示一个简单的条件转换操作,它通常用于简化if-else语句的使用。这个操作符的语法格式如下:expression1 ? expression2 : expression3。 其中,expression1为一个布尔表达式或者…

    C 2023年5月22日
    00
  • C#如何通过匿名类直接使用访问JSON数据详解

    C#通过匿名类直接使用访问JSON数据非常方便,能够帮助我们更加高效地操作JSON数据。下面是详细的攻略: 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它是基于JavaScript语言的一个子集,可以用于表示简单的数据结构,比如数字、字符串、布尔值等等。JSON数据由键值对组成,格式如下: { …

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部