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日

相关文章

  • 简单谈谈Python中的几种常见的数据类型

    下面是详细讲解“简单谈谈Python中的几种常见的数据类型”的完整攻略。 一、Python中的常见数据类型 Python是一种动态类型的解释性语言,因此在编程时可以不必预先定义变量类型。Python有许多不同的数据类型,其中一些常见的包括以下几种: 1. Numbers 类型 整数类型(int):即为整数,没有小数部分。例如:1,3,10等等。 # 示例1:…

    C 2023年5月22日
    00
  • 从历史讲起JavaScript基因里的函数式编程实例

    下面就是从历史讲起JavaScript基因里的函数式编程实例的完整攻略。 什么是JavaScript基因里的函数式编程 在了解JavaScript基因里的函数式编程之前,我们需要先了解什么是函数式编程。 函数式编程(Functional Programming)是一种编程范式,它将计算机运算当成数学中的函数运算,并且避免了改变状态和可变数据。函数式编程的特点…

    C 2023年5月22日
    00
  • C语言中字符串库函数的实现及模拟

    C语言中字符串库函数的实现及模拟攻略 1. 字符串函数简介 C语言中的字符串函数是用来处理字符串的函数库,其中包含了很多有用的函数,例如字符串复制函数strcpy、字符串拼接函数strcat、字符串比较函数strcmp等等,这些函数使得字符串的处理变得更加简单、高效和方便。 2. C语言中字符串函数的实现 下面是几个常用的字符串函数的实现方法。 2.1 st…

    C 2023年5月23日
    00
  • C语言Make命令用法讲解

    C语言Make命令用法讲解 简介 Make命令是一种构建工具,可以用来自动化执行多个编译步骤,从而生成可执行文件,库文件等。在C语言编程中,Make命令可用于自动化编译操作,减少开发者的工作量,提高程序的可维护性。 安装 Make命令在GNU编译器套件(GCC)中自带,因此大多数Linux、Unix系统中已经预安装了Make。在Windows操作系统中,可以…

    C 2023年5月22日
    00
  • C语言学生信息管理系统设计与实现

    C语言学生信息管理系统设计与实现 1. 系统设计 1.1 系统需求分析 在开始实现C语言学生信息管理系统之前,我们需要先进行系统需求分析。从用户需求中得知,该系统需要支持以下功能: 添加学生信息 删除学生信息 修改学生信息 查询学生信息 显示所有学生信息 除此之外,还需要能够保存所有学生信息,方便下次打开程序时能够直接读取已有的学生信息。 1.2 系统架构设…

    C 2023年5月23日
    00
  • 详解基于C++实现约瑟夫环问题的三种解法

    详解基于C++实现约瑟夫环问题的三种解法 约瑟夫问题 约瑟夫问题是一个经典的问题,是一个圆圈里面有$n$个数字,从中每次删除第$m$个数字,求出每次删除的数字。简单的说,约瑟夫问题就是$n$个人围成一圈,从第一个人开始报数,报到$m$的人出圈,直到计算到最后一个人。 解法一:使用递推(模拟游戏过程) 思路:利用递归的思想模拟即可。假如最后剩下一个数据,则保留…

    C 2023年5月22日
    00
  • Kotlin的枚举与异常示例详解

    Kotlin的枚举与异常示例详解 枚举(Enum) 枚举是指具有固定数量的、有限的、不同类型的值的集合,它们被定义在枚举类中。在Kotlin中,使用enum class关键字来声明一个枚举类。 声明枚举类型 下面是一个基本的颜色枚举类型的示例: enum class Color { RED, ORANGE, YELLOW, GREEN, BLUE, INDI…

    C 2023年5月22日
    00
  • 使用C++程序获取新浪行情数据的方法

    使用C++程序获取新浪行情数据的方法,可以通过以下步骤实现: 1. 将URL转换为API请求 新浪行情数据的接口是以URL的方式提供的。我们需要将URL转换为API请求,以便用C++代码发送请求并获取数据。 例如,要获取某股票代码为”SH600000″的当前行情数据,我们需要访问以下API请求: http://hq.sinajs.cn/list=sh6000…

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