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

yizhihongxing

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日

相关文章

  • 解决javac不是内部或外部命令,也不是可运行程序的报错问题

    这个错误通常出现在Windows系统中,它表示系统无法找到Java编译器(javac)命令。这个问题可能是由于两个原因造成的:Java Development Kit(JDK)未在计算机上安装或未添加到PATH环境变量。 以下是解决这个问题的完整攻略: 步骤 1:确认 JDK 是否安装 如果 Java Development Kit(JDK)未安装在计算机上…

    C 2023年5月23日
    00
  • 深入了解C++优先队列(priority_queue)的使用方法

    深入了解C++优先队列(priority_queue)的使用方法 什么是优先队列? 优先队列(Priority Queue)是一种数据结构,其本质是一个队列,但是队列中的元素都被赋予了优先级。优先级最高的元素最先被取出。 C++的优先队列(priority_queue)的用法 在C++中,优先队列(priority_queue)类定义在头文件中,其基本用法如…

    C 2023年5月22日
    00
  • SpringBoot参数校验Validator框架详解

    完整攻略:“SpringBoot参数校验Validator框架详解” 一、介绍 SpringBoot是一个非常流行的轻量级Java开发框架,提供了很多便利的功能以及简洁的语法,使得开发者可以更加快速的进行开发。而参数校验也是开发者在开发过程中必须要面对的一项工作,为了保证程序的正确性,一些基本的参数校验是非常必要的。SpringBoot提供了一套非常方便的参…

    C 2023年5月23日
    00
  • C++中的对象指针总结

    C++中的对象指针总结 在C++中,指针是非常常见的数据类型,而对象指针就是指向一个对象的指针。本文将讲解C++中的对象指针的使用以及注意事项。 声明对象指针 在C++中声明一个对象指针非常简单,如下所示: ClassName *pObject; 其中,ClassName是要指向的对象的类名,pObject是指向这个对象的指针。需要注意的是,指针声明时必须要…

    C 2023年5月22日
    00
  • 使用C语言实现CRC校验的方法

    使用C语言实现CRC校验的方法 什么是CRC校验 CRC(循环冗余校验)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种信道编码技术,通常用于数据传输和存储检错。即在发送数据前按照预设的算法生成校验位,将该校验位附加在数据后传输,在接收方使用相同的算法和相同的数据来计算校验位,然后与接收到的校验位进行比较,以此判断接收数据是否正确。 CRC校…

    C 2023年5月23日
    00
  • C语言字符串另类用法的实现

    下面是详细讲解 C 语言字符串另类用法的实现的完整攻略。 什么是 C 语言字符串 在 C 语言中,字符串是一种字符数组。一个字符串就是一串字符的集合,它们以 NULL 字符(即 \0)结尾,表示字符串的结束。 在 C 语言中,声明字符串可以在两边加上双引号,例如: char str[] = "Hello World"; 实现 C 语言字符…

    C 2023年5月23日
    00
  • C++实现二叉树基本操作详解

    C++实现二叉树基本操作详解 二叉树是计算机科学中的重要数据结构,其实现在C++编程中是必不可少的。本文将从二叉树的定义、基本操作的实现以及示例说明三个方面,详细讲解如何在C++中实现二叉树。 一、二叉树的定义 二叉树是一种树形结构,其中每个节点最多只包含两个子节点(左子节点和右子节点)。每个节点都包含一个值(或者说是一个数据项),而左右子节点则分别指向另外…

    C 2023年5月23日
    00
  • 清除canvas画布内容(点擦除+线擦除)

    清除canvas上绘制的内容是一个常见的需求。主要有两种方式可以实现:点擦除和线擦除。 一、点擦除 点擦除是指通过鼠标或手指操作,在canvas上逐点清除绘制内容,实现的效果类似于橡皮擦。 1.1 实现方案 点擦除的实现方案是:在canvas上监听鼠标或手指操作,当检测到鼠标或手指在canvas上移动时,获取当前点坐标,然后将该点坐标周围的像素点的颜色设置为…

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