| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 386 人关注过本帖
标题:怎么不可以登陆啊 !!!
只看楼主 加入收藏
poiqwe11
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-10-3
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
怎么不可以登陆啊 !!!
我自己做的一个小程序,结果不可以登陆,我找不到哪里错可,求助高手帮忙解决
第一个是主函数
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];
};
搜索更多相关主题的帖子: 声明 include return 
2011-10-03 17:00
larryliu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:58
专家分:128
注 册:2011-9-30
收藏
得分:10 
你这样没人会帮手的,这么大一段代码过来,谁看头都大~~
你调试一下先看看嘛~~
2011-10-03 17:04
为我留住记忆
Rank: 4
来 自:北京
等 级:业余侠客
帖 子:130
专家分:226
注 册:2011-4-30
收藏
得分:10 
而且字的颜色太刺眼了  都看不下去

学习c是为了自己更强大。。。
2011-10-03 18:24
快速回复:怎么不可以登陆啊 !!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062126 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved