用c语言实现用户登录模块并可以注册,密码能够储存
时间: 2024-03-10 19:48:25 浏览: 31
以下是一个简单的基于文件存储的用户登录模块和注册模块的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_USERNAME_LEN 20
#define MAX_PASSWORD_LEN 20
typedef struct {
char username[MAX_USERNAME_LEN + 1];
char password[MAX_PASSWORD_LEN + 1];
} User;
// 从文件中读取用户信息
void read_users(User *users, int *num_users) {
FILE *fp;
fp = fopen("users.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return;
}
*num_users = 0;
while (fscanf(fp, "%s %s", users[*num_users].username, users[*num_users].password) == 2) {
(*num_users)++;
}
fclose(fp);
}
// 将用户信息写入文件
void write_users(User *users, int num_users) {
FILE *fp;
fp = fopen("users.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return;
}
for (int i = 0; i < num_users; i++) {
fprintf(fp, "%s %s\n", users[i].username, users[i].password);
}
fclose(fp);
}
// 检查用户名和密码是否匹配
int check_user(User *users, int num_users, char *username, char *password) {
for (int i = 0; i < num_users; i++) {
if (strcmp(users[i].username, username) == 0 && strcmp(users[i].password, password) == 0) {
return 1;
}
}
return 0;
}
// 注册新用户
void register_user(User *users, int *num_users) {
char username[MAX_USERNAME_LEN + 1];
char password[MAX_PASSWORD_LEN + 1];
printf("请输入用户名:");
scanf("%s", username);
for (int i = 0; i < *num_users; i++) {
if (strcmp(users[i].username, username) == 0) {
printf("用户名已存在,请重新输入!\n");
return;
}
}
printf("请输入密码:");
scanf("%s", password);
strcpy(users[*num_users].username, username);
strcpy(users[*num_users].password, password);
(*num_users)++;
printf("注册成功!\n");
}
int main() {
User users[100];
int num_users;
read_users(users, &num_users);
while (1) {
int choice;
printf("请选择操作:\n");
printf("1. 登录\n");
printf("2. 注册\n");
printf("3. 退出\n");
scanf("%d", &choice);
if (choice == 1) {
char username[MAX_USERNAME_LEN + 1];
char password[MAX_PASSWORD_LEN + 1];
printf("请输入用户名:");
scanf("%s", username);
printf("请输入密码:");
scanf("%s", password);
if (check_user(users, num_users, username, password)) {
printf("登录成功!\n");
} else {
printf("用户名或密码错误!\n");
}
} else if (choice == 2) {
register_user(users, &num_users);
} else if (choice == 3) {
write_users(users, num_users);
break;
} else {
printf("输入错误,请重新输入!\n");
}
}
return 0;
}
```
以上代码中,我们增加了一个 `write_users` 函数用于将用户信息写入文件。在 `register_user` 函数中,我们首先通过 `scanf` 函数获取新用户的用户名和密码,然后检查用户名是否已存在。如果用户名已存在,则输出提示信息并返回;否则将新用户信息存储到 `users` 数组中,并将 `num_users` 增加 1。在 `main` 函数中,我们增加了一个循环来实现用户交互。用户可以选择登录、注册或退出程序。程序退出时,我们调用 `write_users` 函数将用户信息写入文件。