运行环境为VS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct password {
int user; //账号
char user_name[11]; //用户名
char pass[8]; //密码
};
//用户登录功能
void login(struct password ps[]);
//注册用户
void pas_add(struct password ps[]);
//读取所有用户信息(从文件)
void pas_read(struct password ps[]);
//保存所有用户信息(到文件)
void pas_save(struct password ps[]);
#define MAX_PAS 100
int p = 0;
int current_user = -1;
int main() {
struct password ps[MAX_PAS];
int i;
//预先从文件读取所有用户信息
pas_read(ps);
while (1) {
printf("\t\t\t\t\t请选择你要进行的操作\n");
printf("\t\t\t\t\t1、登录\n");
printf("\t\t\t\t\t2、注册\n");
printf("\t\t\t\t\t0、退出\n");
printf("请输入选项\n");
scanf("%d(0-2):", &i);
switch (i) {
case 0:
return 0;
case 1:
//登录
login(ps);
break;
case 2:
//注册并保存
pas_add(ps);
pas_save(ps);
break;
default:
printf("请输入0~2之间的数字\n");
break;
}
}
return 0;
}
void login(struct password ps[]) {
int i;
int user;//存储输入的账号
char pass[8];//存储输入的密码
current_user = -1;
printf("请输入账号(必须为数字):");
scanf("%d", &user);
for (i = 0; i < p; i++) {
if (user == ps[i].user) {
current_user = i;
break;
}
}
if (current_user < 0) {
printf("这个账号不存在,请重新输入账号!\n");
return;
}
printf("请输入密码:");
scanf("%s", pass);
if (strcmp(pass, ps[current_user].pass) == 0) {
printf("登录成功,用户名:%s \n", ps[current_user].user_name);
}
else {
current_user = -1;
printf("密码不正确\n");
}
}
void pas_add(struct password ps[]) {
int i;
int new_user;
printf("请输入要注册的账号(必须为数字):");
scanf("%d", &new_user);
for (i = 0; i < p; i++) {
if (new_user == ps[i].user) {
printf("这个账号已存在,请重新输入账号!\n");
return;
}
}
ps[i].user = new_user;
printf("请输入注册用户名\n");
scanf("%s", ps[i].user_name);
printf("请输入密码\n");
scanf("%s", ps[i].pass);
p++;
}
void pas_read(struct password ps[]) {
FILE* fp;
struct password pa;
//以读的方式打开文件
fp = fopen("user_password.txt", "r");
if (fp != NULL) {
p = 0;
while (fscanf(fp, "%s %d %s ", pa.user_name, &pa.user, pa.pass) == 3) { //读取保存至结构体哦
ps[p] = pa;
p++;
}
fclose(fp);
}
}
void pas_save(struct password ps[]) {
FILE* fp;
int i;
//以写的方式打开文件
fp = fopen("user_password.txt", "w");
if (fp != NULL) {
for (i = 0; i < p; i++) {
fprintf(fp, "%s %d %s\n", ps[i].user_name, ps[i].user, ps[i].pass); //依次存入
}
fclose(fp);
}
}