📄 check_user_ip1.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct user_type
{
char name[15];
char code[8];
char ip[16];
char time[25];
}USER;
//从文件读数据,data_kind为0,读用户姓名,为1,读用户密码,为2,读ip地址,为3,读时间。
//*n为
int read_data(USER *user,FILE *user_file,long *n,int data_kind)
{
long i=*n/128;
char buf[35];
char *p=buf;
long file_end;
memset(buf,'\0',sizeof(buf));
if(data_kind>3)
{
printf("data_kind is out of range.\n");
return 0;
}
if((user_file=fopen("user1.txt","r+"))==NULL)
{
ferror(user_file);
return 0;
}
if(feof(user_file)==1)
{
printf("file is empty.\n");
return 0;
}
fseek(user_file,0,2);
file_end=ftell(user_file);
if (*n>file_end)
{
printf("file reading is out of range.\n");
return 0;
}
if(fseek(user_file,i*128+data_kind*32,0)==-1)
{
ferror(user_file);
return 0;
}
fgets(buf,32,user_file);
for(;*p!=' '&&*p!='\n'&&*p!=';';p++);
*p='\0';
switch(data_kind)
{
case 0:
strcpy(user->name,buf);
break;
case 1:
strcpy(user->code,buf);
break;
case 2:
strcpy(user->ip,buf);
break;
case 3:
strcpy(user->time,buf);
break;
default:
break;
}
*n=ftell(user_file);
fclose(user_file);
return 1;
}
int write_data(USER *user,FILE *user_file,long n,int data_kind)
{
int i;
char space[]=" ";
i=n/128;
if((user_file=fopen("user1.txt","r+"))==NULL)
{
ferror(user_file);
return 0;
}
switch (data_kind)
{
case 0:
fseek(user_file,(long)(i*128+(data_kind*32)),0);
fwrite(space,1,29,user_file);
fseek(user_file,(long)(i*128+(data_kind*32)),0);
fprintf(user_file,"%s",user->name);
break;
case 1:
fseek(user_file,(long)(i*128+(data_kind*32)),0);
fwrite(space,1,29,user_file);
fseek(user_file,(long)(i*128+(data_kind*32)),0);
fprintf(user_file,"%s",user->code);
break;
case 2:
fseek(user_file,(long)(i*128+(data_kind*32)),0);
fwrite(space,1,29,user_file);
fseek(user_file,(long)(i*128+(data_kind*32)),0);
fprintf(user_file,"%s",user->ip);
break;
case 3:
fseek(user_file,(long)(i*128+(data_kind*32)),0);
fwrite(space,1,29,user_file);
fseek(user_file,(long)(i*128+(data_kind*32)),0);
fprintf(user_file,"%s",user->time);
break;
}
return 1;
}
//检测用户与密码是否正确,正确返回1,错误返回0;
//user为传入的用户数据,user1为空,从文件里读出的数据存入。
int check_user_login(USER *user,USER *user1)
{
long file_end,locate=0;
FILE *fp=fopen("user1.txt","r");
fseek(fp,0,2);
file_end=ftell(fp);
fclose(fp);
while(locate<file_end)
{
if(read_data(user1,fp,&locate,0)==0)
{
printf("read_data user fail.\n");
return 0;
}
if(strcmp(user->name,user1->name)==0)
{
if(read_data(user1,fp,&locate,1)==0)
{
printf("read_data user fail.\n");
return 0;
}
if(strcmp(user->code,user1->code)==0)
{
write_data(user,fp,locate,2);
write_data(user,fp,locate,3);
printf("user and code is corrcet.\n");
return 1;
//cgi
}
else
{
printf("code is error.\n");
return 0;
}
}
else
locate+=128;
}
if(locate>file_end)
{
printf("user doesn't exist.\n");
return 0;
}
return 1;
}
//检测ip地址是否存在,与时间是否超时;
//如果ip存在,判断是否超时,超时则提示退出;
//如果ip不存在,返回0;
//user为传入的用户数据,user1为空,从文件里读出的数据存入。
int check_user_ip(USER* user,USER *user1)
{
long file_end,locate=0;
FILE *fp=fopen("user1.txt","r");
fseek(fp,0,2);
file_end=ftell(fp);
while(file_end>locate)
{
if(read_data(user1,fp,&locate,2)==0)
{
printf("read_data user fail.\n");
return 0;
}
if(strcmp(user->ip,user1->ip)==0)
{
if(read_data(user1,fp,&locate,3)==0)
{
printf("read_data user fail.\n");
return 0;
}
if(strcmp(user->time,user1->time)==0)
{
write_data(user,fp,locate,3);
printf("success.\n");
return 1;
//cgi
}
else
{
printf("time out.\n");
return 0;
}
}
else
locate+=128;
}
if(locate>file_end)
{
printf("ip does't exist.\n");
return 0;
}
return 1;
}
main()
{
USER *user,*user1;
user=(USER*)malloc(sizeof(USER));
user1=(USER*)malloc(sizeof(USER));
strcpy(user->name,"liu");
strcpy(user->code,"123");
strcpy(user->ip,"192.1.1.1");
strcpy(user->time,"2008/1/1");
check_user_ip(user,user1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -