C语言实现银行管理系统(文件操作)

C语言实现银行管理系统(文件操作)攻略

1. 概述

这篇攻略介绍如何使用C语言实现一个基本的银行管理系统,并使用文件读写操作进行数据的存取。银行管理系统的功能包括用户注册、登录、存款、取款、查询余额等。

2. 数据结构设计

为了实现银行管理系统,我们需要使用一些数据结构来存储用户信息。以下是我们所需要使用的数据结构:

// 用户账户结构体
typedef struct
{
    char name[20];   // 用户名
    char password[20];   // 登录密码
    double balance;   // 账户余额
} Account;

// 用户信息结构体
typedef struct
{
    Account account;   // 用户账户
    int flag;          // 删除标志:0表示存在,1表示已删除
} User;

以上的数据结构中,Account结构体用来存储用户账户信息,包括用户名、密码、账户余额等;User结构体封装了Account结构体, 并添加了一个flag标志,用来记录账户是否已被删除。

3. 文件操作

为了实现数据的永久存储,我们需要使用文件来存储用户信息。以下是相关的文件操作函数:

FILE *fp;   // 文件指针

// 打开文件
if((fp=fopen("user.dat","wb+"))==NULL)
{
    printf("Open file failure!\n");
    exit(0);
}
// 写入数据到文件
fwrite(&user,sizeof(User),1,fp);
// 读取数据从文件
fread(&user,sizeof(User),1,fp);
// 关闭文件
fclose(fp);

以上代码中,我们通过fopen()函数打开文件user.dat,并使用wb+模式来指定文件访问方式。其中,w表示写入模式,b表示二进制模式,+表示读写模式。接着,通过fwrite()fread()函数来实现将结构体数据写入文件和从文件中读取结构体数据。最后,我们使用fclose()函数来关闭文件。

4. 功能实现

4.1 用户注册

用户注册是银行管理系统中的一个重要功能,该功能通过将用户信息保存到文件中来实现永久存储。

以下是用户注册代码的实现:

void registerAccount()
{
    User user;
    printf("Please enter your name:");
    gets(user.account.name);
    printf("Please enter your password:");
    gets(user.account.password);
    user.account.balance = 0;   // 初始余额为0
    user.flag = 0;               // 删除标志为0
    // 打开文件
    fp = fopen("user.dat","ab+");
    if(fp==NULL)
    {
        printf("Open file failure!\n");
        exit(0);
    }
    // 写入数据到文件
    fwrite(&user,sizeof(User),1,fp);
    fclose(fp);
    printf("\nAccount registration was successful!\n");
}

以上代码通过调用fwrite()函数将用户注册信息保存到文件中,并使用fclose()函数关闭文件。在文件写入过程中,我们需要先判断文件是否打开成功。若文件打开失败,则程序退出。

4.2 用户登录

用户登录是银行管理系统中的另一个重要功能,该功能允许已注册的用户通过输入用户名和密码来进行登录。

以下是用户登录代码的实现:

int login()
{
    char name[20],password[20];
    User user;
    printf("Please enter your name: ");
    gets(name);
    printf("Please enter your password: ");
    gets(password);

    fp = fopen("user.dat","rb");
    if(fp==NULL){
        printf("Open file failure!\n");
        exit(0);
    }

    while(fread(&user,sizeof(User),1,fp)==1)
    {
        if(user.flag==0 && strcmp(user.account.name,name)==0 && strcmp(user.account.password,password)==0)
        {
            fclose(fp);
            printf("\nLogin successfully!\n");
            return 1;
        }
    }
    fclose(fp);
    printf("Incorrect user name or password.\n");
    return 0;
}

以上代码通过调用fread()函数读取文件中每个用户的信息,并与输入的用户名和密码进行比较,确定用户是否登录成功。在读取过程中,我们需要先判断文件是否打开成功。若文件打开失败,则程序退出。

4.3 存款和取款

存款和取款是银行管理系统中最基本的功能之一,该功能通过修改用户信息来实现。我们需要通过输入用户名,找到对应的用户,并对用户余额进行加减操作将结果写入文件。

以下是存款和取款代码的实现:

// 存款
void deposit()
{
    double amount;
    User user;
    char name[20];
    printf("\nEnter your name: ");
    gets(name);

    fp = fopen("user.dat","rb+");
    if(fp==NULL){
        printf("Open file failure!\n");
        exit(0);
    }

    while(fread(&user,sizeof(User),1,fp)==1)
    {
        if(user.flag==0 && strcmp(user.account.name,name)==0)
        {
            printf("\nEnter the amount you want to deposit: ");
            scanf("%lf",&amount);
            user.account.balance += amount;
            fseek(fp,-sizeof(User),SEEK_CUR);
            fwrite(&user,sizeof(User),1,fp);
            fclose(fp);
            printf("\nDeposit successfully!\n");
            return;
        }
    }
    fclose(fp);
    printf("\nSorry, the account does not exist!\n");
}
// 取款
void withdrawal()
{
    double amount;
    User user;
    char name[20];
    printf("\nEnter your name: ");
    gets(name);

    fp = fopen("user.dat","rb+");
    if(fp==NULL){
        printf("Open file failure!\n");
        exit(0);
    }

    while(fread(&user,sizeof(User),1,fp)==1)
    {
        if(user.flag==0 && strcmp(user.account.name,name)==0)
        {
            printf("\nEnter the amount you want to withdraw: ");
            scanf("%lf",&amount);
            if(amount > user.account.balance){
                printf("\nThe balance is insufficient!\n");
                fclose(fp);
                return;  
            }
            user.account.balance -= amount;
            fseek(fp,-sizeof(User),SEEK_CUR);
            fwrite(&user,sizeof(User),1,fp);
            fclose(fp);
            printf("\nWithdrawal successfully!\n");
            return;
        }
    }
    fclose(fp);
    printf("\nSorry, the account does not exist!\n");
}

以上代码通过调用fread()函数读取文件中每个用户的信息,并与输入的用户名进行比较。若用户名匹配,则进行存款或取款操作,并将更新后的用户信息写入文件。在写入过程中,我们需要通过fseek()函数定位到要修改的用户的位置,并调用fwrite()函数将更新后的用户信息写入文件。

4.4 查询余额

查询余额是银行管理系统中另一个基础功能,该功能通过读取用户余额信息来实现。

以下是查询余额代码的实现:

void queryBalance()
{
    double balance;
    User user;
    char name[20];
    printf("\nEnter your name: ");
    gets(name);

    fp = fopen("user.dat","rb");
    if(fp==NULL){
        printf("Open file failure!\n");
        exit(0);
    }

    while(fread(&user,sizeof(User),1,fp)==1)
    {
        if(user.flag==0 && strcmp(user.account.name,name)==0)
        {
            balance = user.account.balance;
            fclose(fp);
            printf("\nYour account balance is %.2lf\n",balance);
            return;
        }
    }
    fclose(fp);
    printf("\nSorry, the account does not exist!\n");
}

以上代码通过调用fread()函数读取文件中的每个用户信息,并与输入的用户名进行比较。如果用户名匹配,则输出用户余额信息。如果没有找到对应的用户,则输出错误信息。

5. 结束语

这篇攻略介绍了如何使用C语言实现银行管理系统,并使用文件读写操作进行数据的存储。通过本文,你应该对C语言文件操作、数据结构以及用户注册、登录、存款、取款、余额查询等功能有了更深入的了解。

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

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

相关文章

  • 学习C++编程的必备软件

    下面我将为您详细讲解“学习C++编程的必备软件”的完整攻略。 学习C++编程的必备软件 1. C++编译器 C++编译器是你学习编程时必备的工具之一。编译器负责将写好的C++程序翻译成机器可以理解的语言,让计算机可以运行它。以下是几个常用的C++编译器: Visual Studio:Visual Studio是一个非常强大的开发环境,附带了C++编译器和许多…

    C 2023年5月23日
    00
  • php数组转成json格式的方法

    下面是“PHP数组转成JSON格式的方法”的完整攻略。 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写。在web开发中,经常需要将数据从一个格式转化到另一个格式,如将PHP数组转化为JSON格式。 PHP数组转JSON格式的方法 在PHP中,可以使用json_encode()函数将…

    C 2023年5月23日
    00
  • Java日常练习题,每天进步一点点(50)

    当我们学习编程语言时,除了理论知识的学习外,实践编程也是非常重要的。而Java日常练习题则是一种提高编程能力的好方法。本篇攻略将针对“Java日常练习题,每天进步一点点(50)”这一题目进行详细讲解。 题目内容 该题目为Java练习题,包括50道不同难度的题目,涉及Java基础、面向对象编程、异常处理、IO、集合框架等知识点。 解题步骤 理解题目意思对于每一…

    C 2023年5月23日
    00
  • C语言kmp算法简单示例和实现原理探究

    C语言KMP算法简单示例和实现原理探究 概述 KMP算法是一种字符串匹配算法,它能在O(n+m)的时间复杂度内匹配文本串和模式串。与简单的暴力匹配算法相比,它的时间复杂度更低。 实现原理 暴力匹配算法 在了解KMP算法之前,我们先来看一下暴力匹配算法,这是最简单的字符串匹配算法。 暴力匹配算法的实现原理是:假设文本串为T,模式串为P,从T的第一个字符开始,依…

    C 2023年5月22日
    00
  • 在Visual Studio Code中配置C++编译环境的问题

    下面是在Visual Studio Code中配置C++编译环境的完整攻略: 1. 确保计算机中已安装C++编译环境 在开始之前,首先需要确保计算机中已经安装了C++编译环境。如果尚未安装,可以在官网上下载对应版本的Visual C++ Redistributable Packages进行安装。 2. 安装Visual Studio Code 如果尚未安装V…

    C 2023年5月23日
    00
  • C语言中strcmp的实现原型

    好的。首先我们来介绍一下strcmp函数的用法和定义: strcmp函数是C标准库中的一个字符串比较函数,用于比较两个字符串是否相等,如果相等则返回0,否则返回非0值。该函数原型如下: int strcmp(const char* str1, const char* str2); 该函数接收两个参数。第一个参数是要进行比较的字符串str1,第二个参数是与之进…

    C 2023年5月23日
    00
  • 从创建数据库到存储过程与用户自定义函数的小感

    创建数据库到存储过程与用户自定义函数 一、创建数据库 创建数据库需要执行以下操作: CREATE DATABASE database_name; 其中,database_name为你要创建的数据库名称。 二、创建表 创建表需要执行以下操作: CREATE TABLE table_name( column1 datatype constraints, colu…

    C 2023年5月23日
    00
  • C语言类的基本语法详解

    C语言类的基本语法详解 概述 C语言是一门广泛使用的编程语言,具有较强的系统编程能力。本文将详细介绍C语言的基本语法。 变量 C语言中的变量由其类型和名称两部分组成。变量的类型定义变量能够保存的数据类型,常用的变量类型包括: int: 整数类型,占用4个字节 float: 单精度浮点数类型,占用4个字节 double: 双精度浮点数类型,占用8个字节 cha…

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