C语言实现ATM机存取款系统
介绍
本文将介绍如何使用C语言实现一个简单的ATM机存取款系统。该系统包括用户登录、查询余额、存款、取款等基本功能。我们将使用C语言编写程序,使用结构体、函数、文件存储等技术实现系统的各项功能。
准备
在开始编写程序之前,需要确保您已经安装了C语言编译器。您可以选择常用的编译器,例如gcc或者Visual Studio等。本文将以gcc作为编译器进行示范。
设计系统
在设计系统之前,我们需要了解系统的基本需求。本文将设计一个包括以下功能的ATM机存取款系统:
- 用户登录
- 查询余额
- 存款
- 取款
为了实现上述功能,我们需要设计以下四个函数:
int login()
: 用户登录函数,验证用户信息是否正确并返回用户ID。double checkBalance(int userId)
: 查询余额函数,接收用户ID并返回余额。void deposit(int userId, double amount)
: 存款函数,接收用户ID和存款金额,并将余额更新。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技术站