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日

相关文章

  • Java 常量池详解之字符串常量池实现代码

    下面是“Java 常量池详解之字符串常量池实现代码”的完整攻略。 什么是常量池? Java 中的常量池(Constant Pool)是指类和接口中所使用的常量的集合。其中包括了基本数据类型(如 byte、short、int、long、float、double、char、boolean)、字符串以及对其他类型(如 Class 对象和方法句柄)的引用。 什么是字…

    C 2023年5月23日
    00
  • C语言函数栈帧的创建与销毁详解

    C语言函数栈帧的创建与销毁详解 概述 在C语言中,当一个函数被调用时,系统会为这个函数创建一个函数栈帧(也称为活动记录),用于保存函数内部的变量、参数和函数返回地址等信息。当函数执行完毕后,系统会销毁该函数栈帧,释放内存。 函数栈帧的组成部分 函数栈帧一般由以下几部分组成: 函数参数:函数在调用时所传递的参数,存放在栈帧的底部; 函数局部变量:函数内部定义的…

    C 2023年5月23日
    00
  • SpringBoot整合Redis入门之缓存数据的方法

    下面是 “SpringBoot整合Redis入门之缓存数据的方法” 的完整攻略。 简介 在高并发访问下,数据库成为了性能瓶颈,为了解决这个问题,我们可以加入缓存来减轻数据库的压力,提高网站的响应速度。Redis作为一个高性能的内存数据库,被广泛应用于缓存系统中。在SpringBoot中,通过RedisTemplate来实现redis的缓存数据。 环境准备 首…

    C 2023年5月23日
    00
  • C语言之如何求三次方根

    C语言之如何求三次方根 在C语言中,求一个数的三次方根可以使用数学库中的pow()函数,但是这会增加程序的复杂度和开销。另一种方法是通过迭代逐步逼近三次方根的解,这种方法效率高,适合在不使用数学库的情况下求解三次方根。 方案原理 设正数n的三次方根为x,则有: $$ x^3 = n $$ 两边同时取平方根,得到: $$ x^2 = \sqrt{n} $$ 继…

    C 2023年5月23日
    00
  • C程序 查找数组中常见元素

    下面是查找数组中常见元素的使用攻略: 1. 程序介绍 本程序的功能是,在一个给定的整型数组中,查找出出现次数最多的若干个元素。 2. 环境要求 本程序使用 C 语言编写,需要在计算机上安装 C 编译器才能运行。常用的 C 编译器有 GCC、Clang、Visual Studio 等。此外,程序需要在控制台(命令行)下运行。 3. 程序结构 程序的主要流程分为…

    C 2023年5月9日
    00
  • springboot项目数据库密码如何加密

    首先,为了保证数据库密码的安全性,我们可以在SpringBoot项目中使用加密算法对数据库密码进行加密。以下是实现步骤: 1.引入依赖 在项目的pom.xml文件中引入Jasypt的依赖: <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifa…

    C 2023年5月23日
    00
  • C++中const的实现机制深入分析

    C++中const的实现机制深入分析 在C++中,常量(constant)是指值无法改变的变量。常量在程序中有很重要的作用,例如在函数中传递参数时,可以使用常量来确保参数不被修改。在C++中,我们可以使用关键字const来定义常量。但是,const并不是简单的关键字,其实现机制比较复杂。本文将深入分析C++中const的实现机制以及使用常量的注意事项,并提供…

    C 2023年5月23日
    00
  • VSCODE+cmake配置C++开发环境的实现步骤

    下面将详细讲解“VSCODE+cmake配置C++开发环境的实现步骤”的完整攻略。 一、下载安装VS Code 首先,我们需要下载并安装VS Code,可以在其官网(https://code.visualstudio.com/)或者其他镜像站点中进行下载。 二、安装C++插件 安装好VS Code后,我们需要在扩展市场中安装C++相关插件,这里建议安装如下两…

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