目录
一、题目详情
题目:
在f12-2.txt文件保存着系统用户信息,要实现登录系统时校验用户的合法性。
输入用户名和密码,若正确则输出“有效用户”,否则输出“无效用户”。
注:用户信息包括用户名与登录密码,其中密码已加密。
密码加密算法:对每个字符ASCII码的低四位求反,高四位保持不变
f12-2文本文件内容
二、代码的编写
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct sysuser{ //定义系统用户账号信息结构
char username[20];
char password[8];
};
void encrypt(char *pwd); //加密函数
int check(struct sysuser *psu);
int main(void)
{
struct sysuser su;
printf("输入用户名:");
scanf("%s",su.username);
printf("输入用户密码:");
scanf("%s",su.password);
if(check(&su)==1)
printf("有效用户!\n");
else printf("无效用户!\n");
return 0;
}
//加密算法
void encrypt(char *pwd)
{
int i;
//与15(二进制码是00001111)异或 ,实现低四位取反,高四位保持不变
for(i=0;i<strlen(pwd);i++)
pwd[i]=pwd[i]^15;
}
int check(struct sysuser *psu)
{
FILE *fp; //定义文件指针
char usr[30],usr1[30],pwd[10];
int check=0; //检查结果变量,初始化为0
//连接生成待校验字符串
strcpy(usr,psu->username); //复制用户名到usr
strcpy(pwd,psu->password); //复制登录密码到pwd
encrypt(pwd);
//连接usr、空格、pwd和\n构成新字符串usr,用于在文件中检查匹配
strcat(usr," ");strcat(usr,pwd);strcat(usr,"\n");
if((fp=fopen("f12-2.txt","r"))==NULL){ //打开文件,进行读入操作
printf("File open error!\n");
exit(0);
}
// 从文件读入用户信息数据,遍历判断是否存在
while(!feof(fp)){
fgets(usr1,30,fp);
if(strcmp(usr,usr1)==0){
check=1;break;
}
}
//关闭文件
if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}
return check;
}
运行结果图
三、结束语
本篇内容分上下,具体代码解析放在下篇~
若发现错误或遇到问题,欢迎到评论区留言,大家一起解决问题,共同进步,不断提高!!