C语言实现ATM机存取款系统

C语言实现ATM机存取款系统

介绍

本文将介绍如何使用C语言实现一个简单的ATM机存取款系统。该系统包括用户登录、查询余额、存款、取款等基本功能。我们将使用C语言编写程序,使用结构体、函数、文件存储等技术实现系统的各项功能。

准备

在开始编写程序之前,需要确保您已经安装了C语言编译器。您可以选择常用的编译器,例如gcc或者Visual Studio等。本文将以gcc作为编译器进行示范。

设计系统

在设计系统之前,我们需要了解系统的基本需求。本文将设计一个包括以下功能的ATM机存取款系统:

  1. 用户登录
  2. 查询余额
  3. 存款
  4. 取款

为了实现上述功能,我们需要设计以下四个函数:

  1. int login(): 用户登录函数,验证用户信息是否正确并返回用户ID。
  2. double checkBalance(int userId): 查询余额函数,接收用户ID并返回余额。
  3. void deposit(int userId, double amount): 存款函数,接收用户ID和存款金额,并将余额更新。
  4. void withdraw(int userId, double amount): 取款函数,接收用户ID和取款金额,并将余额更新。

此外,我们还需要设计一个用户结构体,该结构体包含用户名、密码、用户ID、余额等信息。

typedef struct {
    char username[20];
    char password[20];
    int userId;
    double balance;
} User;

实现

用户登录函数

我们先来实现用户登录函数。该函数需要读取用户信息文件,验证用户输入的用户名和密码是否正确,如果正确则返回用户ID,否则返回0。

int login() {
    char username[20], password[20];
    User user;

    printf("请输入用户名:");
    scanf("%s", username);
    printf("请输入密码:");
    scanf("%s", password);

    FILE *fp = fopen("users.dat", "rb");
    if (fp == NULL) {
        printf("无法打开用户文件\n");
        return 0;
    }

    while (fread(&user, sizeof(User), 1, fp) == 1) {
        if (strcmp(user.username, username) == 0 && strcmp(user.password, password) == 0) {
            printf("登录成功\n");
            fclose(fp);
            return user.userId;
        }
    }

    printf("用户名或密码错误\n");
    fclose(fp);
    return 0;
}

查询余额函数

查询余额函数需要接收用户ID,并返回对应用户的余额。

double checkBalance(int userId) {
    User user;

    FILE *fp = fopen("users.dat", "rb");
    if (fp == NULL) {
        printf("无法打开用户文件\n");
        return 0;
    }

    while (fread(&user, sizeof(User), 1, fp) == 1) {
        if (user.userId == userId) {
            printf("余额为:%.2f\n", user.balance);
            fclose(fp);
            return user.balance;
        }
    }

    printf("找不到对应用户\n");
    fclose(fp);
    return 0;
}

存款函数

存款函数需要接收用户ID和存款金额,并将对应用户的余额更新。

void deposit(int userId, double amount) {
    User user;
    FILE *fp = fopen("users.dat", "r+b");

    if (fp == NULL) {
        printf("无法打开用户文件\n");
        return;
    }

    while (fread(&user, sizeof(User), 1, fp) == 1) {
        if (user.userId == userId) {
            user.balance += amount;
            fseek(fp, -sizeof(User), SEEK_CUR); // 将文件指针移回到当前位置
            fwrite(&user, sizeof(User), 1, fp);
            printf("存款成功,当前余额为:%.2f\n", user.balance);
            fclose(fp);
            return;
        }
    }

    printf("找不到对应用户\n");
    fclose(fp);
}

取款函数

取款函数需要接收用户ID和取款金额,并将对应用户的余额更新。

void withdraw(int userId, double amount) {
    User user;
    FILE *fp = fopen("users.dat", "r+b");

    if (fp == NULL) {
        printf("无法打开用户文件\n");
        return;
    }

    while (fread(&user, sizeof(User), 1, fp) == 1) {
        if (user.userId == userId) {
            if (user.balance < amount) {
                printf("余额不足\n");
                fclose(fp);
                return;
            } else {
                user.balance -= amount;
                fseek(fp, -sizeof(User), SEEK_CUR); // 将文件指针移回到当前位置
                fwrite(&user, sizeof(User), 1, fp);
                printf("取款成功,当前余额为:%.2f\n", user.balance);
                fclose(fp);
                return;
            }
        }
    }

    printf("找不到对应用户\n");
    fclose(fp);
}

示例

首先我们需要准备一个存储用户信息的文件users.dat,内容如下:

admin admin 1 1000
guest guest 2 500

其中,每行代表一个用户信息,分别为用户名、密码、用户ID、余额。

下面是一个简单的示例,演示了如何使用上述函数实现存取款功能。

#include <stdio.h>

typedef struct {
    char username[20];
    char password[20];
    int userId;
    double balance;
} User;

int login() {
    // 略
}

double checkBalance(int userId) {
    // 略
}

void deposit(int userId, double amount) {
    // 略
}

void withdraw(int userId, double amount) {
    // 略
}

int main() {
    int userId = login();
    double balance = checkBalance(userId);

    printf("请输入存款金额:");
    double amount;
    scanf("%lf", &amount);
    deposit(userId, amount);

    balance = checkBalance(userId);

    printf("请输入取款金额:");
    scanf("%lf", &amount);
    withdraw(userId, amount);

    balance = checkBalance(userId);

    return 0;
}

通过运行上述程序,您可以输入用户名和密码进行登录,随后输入存款和取款金额进行相关操作。用户信息将从文件users.dat中读取和更新。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现ATM机存取款系统 - Python技术站

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

相关文章

  • Notepad++ 运行 C 代码(MinGW-m64)

    Notepad++ 是一个常用的文本编辑器,它支持很多编程语言,包括 C 语言,同时它也很方便与其他工具配合使用。本攻略将介绍如何在 Notepad++ 中使用 MinGW-m64 工具集来编译并运行 C 代码,具体步骤如下: 步骤一:安装 MinGW-m64 工具集 MinGW(Minimalist GNU for Windows)是一个使用 GNU 工具…

    C 2023年5月22日
    00
  • C语言实现电器销售管理系统

    C语言实现电器销售管理系统攻略 1.设计思路 本系统是一个基于C语言的控制台应用程序,主要实现了电器销售管理的各项功能。在设计时,首先需要确定系统所需要完成的具体功能,包括商品管理、销售管理、统计报表等。然后考虑如何使用C语言实现这些功能。 具体实现方法是:使用结构体来存储商品信息,使用文件来储存数据,通过读写文件实现数据的持久化,使用菜单、输入、输出等操作…

    C 2023年5月30日
    00
  • Linux折腾记(八):使用GCC和GNU Binutils编写能在x86实模式运行的16位代码

    Linux折腾记(八)的主题是如何使用GCC和GNU Binutils编写能在x86实模式运行的16位代码。针对这个主题,我们可以分为以下几步。 步骤1:准备工作 在开始编写代码之前,我们需要安装在Ubuntu系统上安装GCC和GNU Binutils。可以使用以下命令进行安装: sudo apt-get update sudo apt-get instal…

    C 2023年5月23日
    00
  • C/C++中for语句循环用法以及练习举例

    下面是对C/C++中for语句循环用法以及练习举例的详细讲解。 1. for循环语法 for循环是一种常用的循环结构,它的语法如下: for (初始化表达式; 循环条件; 更新表达式) { 循环体 } 其中,初始化表达式一般是用来初始化循环控制变量的,循环条件是一个判断式,根据该式的返回值判断是否进入循环,更新表达式则在每次迭代之后更新循环控制变量的值。循环…

    C 2023年5月22日
    00
  • C++ 通过pqxxlib库链接 PostgreSql数据库的详细过程

    C++ 是广泛使用的编程语言之一,与后端的数据库管理息息相关。其中,PostgreSQL 是一个功能齐全的开源对象-关系数据库管理系统,被广泛应用于 Web 应用程序的数据存储。在 C++ 中,通过使用 pqxxlib 库的链接,可以很方便地访问并操作 PostgreSQL 数据库。 下面是 C++ 通过 pqxxlib 库链接 PostgreSQL 数据库…

    C 2023年5月22日
    00
  • C++内存四区之代码区、全局区、栈区和堆区

    C++内存四区指的是程序在运行时所使用的内存分为代码区、全局区、栈区和堆区。下面我们分别来讲解一下这四个区域。 1. 代码区 代码区是存储函数体等二进制代码的区域,它需要保护,以免被其他程序或者用户修改。代码区一般位于内存的高地址部分,从而防止由于栈溢出操作而覆盖代码区。 代码示例: #include <iostream> int main() …

    C 2023年5月24日
    00
  • C++消息队列(定义,结构,如何创建,发送与接收)

    下面是C++消息队列的完整攻略。 定义 C++消息队列是一种多线程之间通讯的方式,其实现了线程之间的异步通信机制。消息队列基于先进先出的原则,消息发送者将消息依次放入消息队列的尾部,消息接收者从队列的头部依次取出消息进行处理。 结构 消息队列的结构一般分为三个部分: 队列存储空间:为消息存储提供空间。 发送者:将消息放入队列中。 接收者:从队列中取出消息进行…

    C 2023年5月23日
    00
  • 根据json字符串生成Html的一种方式

    根据json字符串生成Html是前端常见操作之一,以下是一种实现方式: 步骤一:解析json字符串 使用JavaScript中提供的JSON.parse()方法,将json字符串解析成对应的JavaScript对象。 const jsonString = ‘{"name": "Joe", "age"…

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