怎么不可以登陆啊 !!!
我自己做的一个小程序,结果不可以登陆,我找不到哪里错可,求助高手帮忙解决第一个是主函数
1:
#include "b.h"
void main()
{
// GetFileLength("user.data");
// return;
EntryMain();
SelectItem();
}
2:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include "c.h"
int selectno=0;//主界面选择
//函数声明
void EntryMain();
void SelectItem();
void UserRegister();
void UserLogin();
void ModifyPass();
void FogetPass();
void MainProgramInterface();
/************************
* 进入主界面的处理函数
*
***********************/
void EntryMain()
{
printf("\n\n\n\n\n\n\n\n\n");
printf("\t\t◆□¤★◆□¤★◆□¤★◆□¤★◆□¤★◆□¤★◆□¤★\n");
printf("\t\t◆ 1.用户注册 2.用户登陆 ★\n");
printf("\t\t◆ 3.修改密码 4.找回密码 ★\n");
printf("\t\t◆□¤★◆□¤★◆□¤★◆□¤★◆□¤★◆□¤★◆□¤★\n");
}
/************************
* 进入主界面的选择处理函数
*
***********************/
void SelectItem()
{
input:
system("cls");
EntryMain();
printf("\t\t请选择(1-4):");
selectno=getch();
switch(selectno)
{
case '1':
UserRegister();
break;
case '2':
UserLogin();
break;
case '3':
ModifyPass();
break;
case '4':
FogetPass();
break;
default:
printf("\n\t\t输入有误,请重新选择!\n");
getch();
goto input;
}
}
/************************
* 用户注册处理函数
*
***********************/
void UserRegister()
{
struct user user1;
system("cls");
// int i;
NAME:
printf("请输入用户名称:");
gets(user1.name);
int i;
i=strlen(user1.name);
if(i<4)
{
printf("用户名过短");
goto NAME;
}
ValidateFileIsExists("user.data");
if(!ValidateUserIsRegister(user1.name))
{
printf("该用户已注册,请更换用户名重新注册!\n");
goto NAME;
}
printf("\n请输入用户密码:");
mi(user1.pass);
ccc:
printf("\n请输入性别:");
gets(user1.sex);
if((strcmp(user1.sex,"nan"))!=0 &&(strcmp(user1.sex,"nv"))!=0)
{
printf("输入错误,请从新输入");
goto ccc;
}
AGE:
printf("\n请输入年龄(1-120):");
scanf("%d",&user1.age);
fflush(stdin);
if(!ValidateAge(user1.age))
{
printf("年龄输入不合法,请重输!");
goto AGE;
}
ID:
printf("\n请输入身份证号码(15-18):");
gets(user1.id);
if(!ValidateId(user1.id))
{
printf("身份证号码输入不合法,请重输!");
goto ID;
}
TEL:
printf("\n请输入电话号码(手机或座机[区号-号码]):");
gets(user1.tel);
if(!ValidateTel(user1.tel))
{
printf("电话号码输入不合法,请重输!");
goto TEL;
}
bbb:
printf("\n请输入籍贯地址:");
gets(user1.address);
if(strlen(user1.address)<8)
{
printf("请写详细地址");
goto bbb;
}
aaa:
printf("\n请输入用户职位:");
gets(user1.zhiwei);
if(strcmp(user1.zhiwei,"老师")!=0)
{
printf("对不起,你没权限注册");
goto aaa;
}
EMAIL:
printf("\n请输入用户邮箱:");
gets(user1.email);
if(!ValidateEmail(user1.email))
{
printf("邮箱输入不合法,请重输!");
goto EMAIL;
}
printf("\n请输入密保问题:");
gets(user1.question);
if(strlen(user1.address)<4)
{
printf("问题过短");
}
printf("\n请输入密保答案:");
gets(user1.answer);
if(strlen(user1.address)<4)
{
printf("答案过短");
}
FILE* fp;
fp=fopen("user.data","ab+");
int result=fwrite(&user1,sizeof(struct user),1,fp);
fclose(fp);
if(result)
{
printf("恭喜你,注册成功!\n");
printf("按任意键返回主界面\n");
getch();
EntryMain();
SelectItem();
}
}
/************************
* 用户登陆的处理函数
*
***********************/
void UserLogin()
{
char name[10];
char pass[10];
struct user temp;
int r=0;
int tag=0;
system("cls");
INPUT:
printf("请输入用户名称:");
gets(name);
FILE* fp;
fp=fopen("user.data","rb");
while(!feof(fp))
{
r=fread(&temp,sizeof(struct user),1,fp);
if(strcmp(temp.name,name)==0)
{
tag=1;
break;
}
}
fclose(fp);
if(tag==0)
{
printf("该用户未注册,请重新输入!\n");
goto INPUT;
}
tag=0;
PASS1:
printf("\n请输入用户密码:");
mi(pass);
fp=fopen("user.data","rb");
while(!feof(fp))
{
r=fread(&temp,sizeof(struct user),1,fp);
if(strcmp(temp.name,name)==0 && strcmp(temp.pass,pass)==0)
{
tag=2;
break;
}
}
fclose(fp);
if(tag==0)
{
printf("\n密码输入错误,请重输!\n");
goto PASS1;
}
if(tag==2)
{
MainProgramInterface();
}
}
/************************
* 主程序界面
*
***********************/
void MainProgramInterface()
{
system("cls");
printf("\n\n\n\n\n\n\n\n\n");
printf("\t\t◆□¤★◆□¤★◆□¤★◆□¤★◆□¤★◆□¤★◆□¤★\n");
printf("\t\t◆ 1.学籍管理 2.成绩管理 ★\n");
printf("\t\t◆ 3.成绩查询 4.退出系统 ★\n");
printf("\t\t◆□¤★◆□¤★◆□¤★◆□¤★◆□¤★◆□¤★◆□¤★\n");
}
/************************
* 修改密码的处理函数
*
***********************/
void ModifyPass()
{
system("cls");
struct user temp;
char name[10];//用户名称
char oldpass[10];//旧密码
char newpass[10];//新密码
char confirmnewpass[10];//确认新密码
FILE* fp;//文件指针
int tag=0;
int r=0;
int count=0;
long curpos=0;//文件指针位置
REINPUT:
printf("请输入用户名称:");
gets(name);
fp=fopen("user.data","rb");
while(!feof(fp))
{
r=fread(&temp,sizeof(struct user),1,fp);
if(strcmp(temp.name,name)==0)
{
tag=1;
break;
}
}
fclose(fp);
if(tag==0)
{
printf("无此账号,请重新输入!\n");
goto REINPUT;
}
REPASS:
printf("请输入原密码:");
gets(oldpass);
if(strcmp(temp.pass,oldpass)!=0)
{
printf("密码输入有误,请重输!\n");
goto REPASS;
}
aa:
printf("请输入新密码:");
gets(newpass);
printf("请再输入一遍新密码:");
gets(confirmnewpass);
if(strcmp(newpass,confirmnewpass)!=0)
{
printf("两遍密码输入不一致,请重输!\n");
goto aa;
}
//开始修改密码
//先找到该用户在文件中的位置,然后移动文件指针,进行修改
r=0;
fp=fopen("user.data","rb+");
curpos=ftell(fp);
printf("文件打开文件指针起始位置:%ld\n",curpos);
while(!feof(fp))
{
r=fread(&temp,sizeof(struct user),1,fp);
curpos=ftell(fp);
if(r!=0)
{
count++;
printf("循环第%d次,文件指针当前位置位置:%ld\n",count,curpos);
}
if(strcmp(temp.name,name)==0 && strcmp(temp.pass,oldpass)==0 )//找到该用户了
{
printf("找到了的位置:第%d次,文件指针当前位置位置:%ld\n",count,curpos);
fseek(fp,(count-1)*sizeof(struct user),0);
strcpy(temp.pass,newpass);//先将读取出来的该用户的密码改成新密码,然后写入文件
r=0;
r=fwrite(&temp,sizeof(struct user),1,fp);
if(r==1)
{
printf("恭喜你,密码修改成功!\n");
break;
}
}
}
fclose(fp);
printf("按任意键返回主界面\n");
getch();
EntryMain();
SelectItem();
}
/************************
* 找回密码的处理函数
*
***********************/
void FogetPass()
{
system("cls");
struct user temp;
char name[10];//用户名称
char question[40];//密保问题
char answer[40];//密保答案
FILE* fp;//文件指针
int r=0;
int tag=0;
REINPUT:
printf("请输入用户名称:");
gets(name);
fp=fopen("user.data","rb");
while(!feof(fp))
{
r=fread(&temp,sizeof(struct user),1,fp);
if(strcmp(temp.name,name)==0)
{
tag=1;
break;
}
}
fclose(fp);
if(tag==0)
{
printf("该用户未注册,请重新输入!\n");
goto REINPUT;
}
REINPUT1:
printf("\n请输入密保问题:");
gets(question);
printf("\n请输入密保答案:");
gets(answer);
if(strcmp(temp.question,question)==0 && strcmp(temp.answer,answer)==0 )
{
printf("你的密码为:%s,请妥善保管!\n",temp.pass);
}else
{
printf("输入有误,请重输!\n");
goto REINPUT1;
}
printf("按任意键返回主界面\n");
getch();
EntryMain();
SelectItem();
}
3:
#include <conio.h>
#include "d.h"
/************/
/* 验证密码**/
/* */
/************************
* 输入密码,采用*输出
* 不带删除版
***********************/
void InputPass(char *pass)
{
char ch;
int i=0;
ch = getch();
while(ch!='\r'&&ch!='\b' )
{
pass[i]=ch;
putchar('*');
ch=getch();
i++;
}
pass[i]='\0';
}
/************************
* 输入密码,采用*输出
* 带删除版,一次性删除
***********************/
void mi(char *pass)
{
char ch;
int i=0;
ch = getch();
while(ch!='\r')
{
if(ch!='\b')
{
pass[i]=ch;
putchar('*');
ch=getch();
i++;
}else
{
if(i>0)
{
putch(8);
putch(' ');
putch(8);
i--;
//getch();
}else
{
ch=getch();
}
}
}
pass[i]='\0';
}
/************************
* 验证年龄范围在1-120之间
* 1:合法
* 0:非法
***********************/
int ValidateAge(int age)
{
if(age>=1 && age <= 120)
{
return 1;
}
return 0;
}
/************************
* 验证是否是字母
* 1:是
* 0:否
***********************/
int ValidateLetter(char id[20])
{
char str[27]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i;
int j;
int tag=-1;
int len=strlen(id);//身份证长度
int len1=strlen(str);//26个英文字母
//printf("len=%d,len1=%d\n",len,len1);
for(i=0;i<len;i++)
{
for(j=0;j<len1;j++)
{
if(toupper(id[i])==str[j])
{
if(len==15)
{
if(i==14)
{
tag=1;
break;
}
}
else
{
tag=0;
}
if(len==18)
{
if(i==17)
{
tag=1;
break;
}
}else
{
tag=0;
}
}
}
}
// printf("ok");
// printf("%d\n",tag);
if(tag==1 || tag==-1)
{
return 1;
}
return 0;
}
/************************
* 验证身份证号码是否合法
* 1:合法
* 0:非法
* 兼容旧版的15位和新版的18位
***********************/
int ValidateId(char id[20])
{
int len=0;
int i=0;
int tag=-1;
char prostr[3];
char year1[3];
char year2[5];
// char month[3];
// char day[3];
int y1=0;
int y2=0;
char pro[34][3]={"11","12","13","14","15","21","22","23","31","32","33","34",\
"35","36","37","41","42","43","44","45","46","50","51","52",\
"53","54","61","62","63","64","65","71","81","82"};
//验证长度
len=strlen(id);
if(len!=15 && len!=18)
{
return 0;
}
//验证最后一位是否包含英文字符
if(!ValidateLetter(id))
{
return 0;
}
//验证省编码是否正确
prostr[0]=id[0];
prostr[1]=id[1];
prostr[2]='\0';
//printf("%s\n",prostr);
for(i=0;i<34;i++)
{
if(strcmp(pro[i],prostr)==0)
{
tag=1;
break;
}
}
//验证出生年月
if(len==15)
{
year1[0]=id[6];
year1[1]=id[7];
year1[2]='\0';
//printf("%s\n",year1);
y1=atoi(year1);
if( !(y1>=0 && y1<=99))
{
return 0;
}
}
if(len==18)
{
year2[0]=id[6];
year2[1]=id[7];
year2[2]=id[8];
year2[3]=id[9];
year2[4]='\0';
y2=atoi(year2);
if( !(y2>=0 && y2<=2500))
{
return 0;
}
//printf("%s\n",year2);
}
if(tag==1)
{
return 1;
}
return 0;
}
/************************
* 验证是否是数字
* 1:是
* 0:否
***********************/
int ValidateNum(char tel[14])
{
char number[12]="-0123456789";
int len1=strlen(number);
int len2=strlen(tel);
int i;
int j;
int tag=-1;
//15x 1023 1234
//010-89411025
//0731-85128940
//0735-8512456
for(i=0;i<len2;i++)
{
for(j=0;j<len1;j++)
{
if(tel[i]!=number[j])
{
tag = 0;
}else
{
tag = 1;
break;
}
}
if(tag==0&& j==len1)
{
tag=0;
break;
}
}
if(tag)
{
return 1;
}
return 0;
}
/************************
* 验证电话号码是否合法
* 1:合法
* 0:非法
*
***********************/
int ValidateTel(char tel[14])
{
int len=strlen(tel);
char ch='-';
// int i;
//座机号码 010-87871231 0731-84121020 0735-5212102
if(tel[3]==ch)//010-87871231
{
if(len!=12)
{
return 0;
}
else
{
if(!ValidateNum(tel))
{
return 0;
}
}
}else if(tel[4]==ch)
{
if(len!=12&&len!=13)
{
return 0;
}
else
{
if(!ValidateNum(tel))
{
return 0;
}
}
}else //手机号码
{
if(len!=11)
{
return 0;
}else
{
if(!ValidateNum(tel))
{
return 0;
}
}
}
return 1;
}
/************************
* 验证邮箱是否合法
* 1:合法
* 0:非法
*
***********************/
//bu3g@
int ValidateEmail(char email[20])
{
char str[3]="@.";
int len=strlen(email);
int i;
int j;
int tag0=-1;
int tag1=-1;
for(i=0;i<len;i++)
{
if(email[i]==str[0])
{
tag0=1;
break;
}
}
for(j=0;j<len;j++)
{
if(email[j]==str[1])
{
tag1=1;
break;
}
}
if(tag0==1&&tag1==1)
{
return 1;
}else
{
return 0;
}
}
/************************
* 获取文件的行数
* 返回值: 文件行数
*
***********************/
int GetFileLength(char name[20])
{
FILE* fp;
struct user stuser;
int count=0;
int result=0;
fp=fopen(name,"rb");
while(!feof(fp))
{
result=fread(&stuser,sizeof(struct user),1,fp);
//printf("result=%d\n",result);
if(result==1)
{
count++;
}else
{
break;
}
}
fclose(fp);
//printf("文件记录条数:%d\n",count);
return count;
}
/************************
* 验证该用户是否已注册
* 0:已注册
* 1:未注册
*
***********************/
int ValidateUserIsRegister(char name[10])
{
int len=GetFileLength("user.data");
int i=0;
struct user stuser;
int result;
int tag=0;
FILE* fp=fopen("user.data","rb");
for(i=0;i<len;i++)
{
result=fread(&stuser,sizeof(struct user),1,fp);
if(strcmp(stuser.name,name)==0)
{
tag=1;
break;
}
}
fclose(fp);
if(tag==1)
{
return 0;
}
return 1;
}
/************************
* 验证该文件是否存在
* 1:存在
* 0:不存在
*
***********************/
void ValidateFileIsExists(char name[20])
{
FILE* fp;
fp=fopen(name,"rb");
if(fp==NULL)
{
fp=fopen(name,"wb");
if(fp!=NULL)
{
// printf("创建文件成功!");
}else
{
// printf("创建文件失败!");
}
}
fclose(fp);
}
4:
struct user
{
char name[10];
char pass[10];
char sex[4];
int age;
char id[20];
char tel[14];
char address[50];
char zhiwei[20];
char email[20];
char question[40];
char answer[40];
};