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日

相关文章

  • C语言中如何进行静态链接库编程?

    C语言中静态链接库编程主要包括三个步骤:编写代码、编译成目标文件、将目标文件打包成静态链接库。下面我将详细讲解每一步骤。 编写代码 首先,我们需要编写需要包含在静态链接库中的函数代码。下面是一个简单的示例: // mylib.h #ifndef MYLIB_H #define MYLIB_H int add(int x, int y); int sub(in…

    C 2023年4月27日
    00
  • Java日常练习题,每天进步一点点(30)

    Java日常练习题是一套帮助Java初学者巩固基础的练习题目,目的是帮助学习者每天进行一点点的练习,逐步提高自己的编程技能。 本套练习共包含30个题目,其中每个题目都涵盖了不同的知识点,涉及数据结构、算法、面向对象编程以及Java开发中的实践等。下面,我们将通过以下步骤来详细讲解Java日常练习题的攻略: 步骤一:理解题意 在开始每个练习题之前,首先需要仔细…

    C 2023年5月23日
    00
  • AE怎么安装并使用Plexus插件? ae特效plexus的用法

    下面是安装并使用Plexus插件的完整攻略: 1. 下载并安装Plexus插件 Plexus插件是一款AE特效插件,需从AE插件市场或者其他资源网站下载。下载下来的插件应该是一个.zxp文件,需要使用Adobe Extension Manager将其安装到AE中。 2. 安装Adobe Extension Manager 如果你已经安装了Adobe Crea…

    C 2023年5月22日
    00
  • 三星Galaxy Book Flex值得入手吗 三星笔记本Galaxy Book Flex详细评测

    三星Galaxy Book Flex值得入手吗 三星笔记本Galaxy Book Flex详细评测 如果你正在寻找一款高性能、轻巧、功能强大的2合1笔记本,那么三星Galaxy Book Flex绝对值得一看。该笔记本采用最新一代的处理器,配备高清触摸屏和可旋转键盘,具备出色的性能和灵活的使用方式,让你随时随地体验高效便捷的计算体验。 性能和硬件 三星Gal…

    C 2023年5月22日
    00
  • C语言五子棋小游戏实现代码

    C语言五子棋小游戏的实现代码,主要分为以下几步: 1. 游戏窗口的设计与绘制 游戏窗口的设计可以使用Windows API库中的CreateWindow () 函数进行实现。需要指定窗口的标题、大小、风格等参数。具体可以参考以下代码示例: //创建窗口的函数 HWND hWindow; hWindow = CreateWindow( "Window…

    C 2023年5月24日
    00
  • 详解C++异常处理机制示例介绍

    以下是详解“详解C++异常处理机制示例介绍”的攻略。 异常处理机制介绍 异常处理是指程序在运行时出现异常情况(如除数为零、内存分配失败、文件不存在等)时,一种用来进行错误处理的机制,目的是确保程序能够继续正常执行而不被终止。 在C++中,异常处理机制分为三个部分:try、catch和throw。当程序出现异常时,会抛出异常对象,然后程序在try块中寻找匹配的…

    C 2023年5月23日
    00
  • ccleaner注册码详解

    CCleaner注册码详解 CCleaner是一款非常受欢迎的系统清理工具,它能够帮助我们清理垃圾文件、清理注册表以及卸载软件等。在使用CCleaner时,我们经常会需要注册码来激活其高级版功能。本文将详细讲解如何获得CCleaner注册码以及如何使用。 获得CCleaner注册码 1. 购买CCleaner正版 最简单的获取CCleaner注册码的方法就是…

    C 2023年5月23日
    00
  • C 程序 查找数组元素的总和

    C程序 查找数组元素的总和 简介 本程序通过输入一个包含n个数的整型数组,求出数组中所有元素的总和。 使用攻略 编译环境 本程序使用C语言编写,建议使用gcc编译器,在Linux环境下执行。 输入数组 程序使用scanf函数从标准输入中读入数组元素,用户需输入n个整型数值,以空格或换行符分隔。 示例输入: 5 1 2 3 4 5 程序设计 本程序使用for循…

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