您的位置:首页 > 其它

改良的用户注册和登录系统(2)

2017-04-30 11:14 225 查看
#include <stdio.h>
#include <string.h>
//用户登录验证系统-改良

struct log                            //定义log结构用于存储用户账号和密码信息
{
char name[15];
char password[10];
};
int num;
void logging(struct log person);      //登录函数
void regis(struct log person);        //注册函数
void jiami(char*p);                   //密码加密函数
int main()
{
FILE*fp;
int choice;                    //操作序号
struct log person;
if ((fp=fopen("num.dat","rb"))!=NULL)     //读取当前已注册用户的人数
{
fread(&num,sizeof(int),1,fp);
fclose(fp);
}
do{
printf("输入操作对应序号:1.登录 2.注册 3.退出(目前已注册用户:%d)\n",num);
scanf("%d",&choice);
switch (choice)
{
case 1:logging(person);break;
case 2:regis(person);break;
case 3:break;
default:break;
}
}while(choice!=3);
if ((fp=fopen("num.dat","wb"))!=NULL)       //存储当前已注册用户的人数
{
fwrite(&num,sizeof(int),1,fp);
fclose(fp);
}
return 0;
}

void logging(struct log person)
{
FILE*fp;
struct log read;
int flag=0;                                 //辅助开关
if ((fp=fopen("logging.dat","rb"))==NULL)     //若没有一个注册用户,则无法登录
{
printf("不存在注册用户\n");
}else
{
printf("请输入账号\n");
scanf("%s",person.name);
printf("请输入密码\n");
scanf("%s",person.password);
jiami(person.password);
fread(&read,sizeof(struct log),1,fp);
while(!feof(fp))
{
if((strcmp(person.name,read.name)==0) && (strcmp(person.password,read.password)==0))           //从注册信息文件读取信息,验证账号和密码
{
printf("登录成功\n");
fclose(fp);
flag=1;
break;
}
fread(&read,sizeof(struct log),1,fp);
}
if (flag==0) {printf("用户名不存在或密码不正确\n"); fclose(fp);}
}
}

void regis(struct log person)
{
FILE*fp;
char check[10];
int flag_check,flag_check1;      //两个辅助开关
struct log read;
do{
flag_check1=0;
printf("请输入新账号\n");
scanf("%s",person.name);
if ((fp=fopen("logging.dat","rb"))!=NULL)
{
fread(&read,sizeof(struct log),1,fp);
while(!feof(fp))
{
if (strcmp(person.name,read.name)==0)           //防止用户名被重复注册
{
printf("该账户已被注册\n");
flag_check1=1;
break;
}
fread(&read,sizeof(struct log),1,fp);
}
fclose(fp);
}
}while(flag_check1);
do{
flag_check=0;
printf("请输入新账号的密码\n");
scanf("%s",person.password);
printf("请再次输入密码\n");
scanf("%s",check);
if (strcmp(person.password,check)!=0)           //防止密码误输入
{
printf("两次输入的密码不一致\n");
flag_check=1;
}
}while(flag_check);
jiami(person.password);
if ((fp=fopen("logging.dat","ab"))==NULL)
{
printf("注册失败\n");
}else
{
fwrite(&person,sizeof(struct log),1,fp);        //把账号和密码写入注册文件
printf("注册成功\n");
num++;
fclose(fp);
}
}

void jiami(char*p)             //对密码进行加密
{
for (;*p!='\0';p++)
{
*p=*p^15;
}
}


用二进制形式存储账号和密码信息,提高安全性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: