登陆注册系统模拟(源代码)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define Max 71
typedef struct
{
    char name[20];
    char pw[20];
    int flag;
}USER;
USER user[Max];
char Admin[20]="administrator";
int count;
int chance;
void menu();
void User_admin(char name[],char pw[]);
void User_common(char name[],char pw[]);
void Saved();
int flag;
void Inithtable()
{
    for(int i=0;i<Max;i++)
        user[i].flag=0;
}
void password(char a[])//密码输入
{
    int i=0;
    char c;
    while((c=getch())!=13)
    {
        if(c==8 && i==0);
        else if(c==8 && i>0)
        {
            i--;
            printf("%c%c%c",'\b','\0','\b');
        }
        else
        {
            a[i++]=c;
            printf("*");
        }
    }
    a[i]='\0';
    printf("\n");
}
void jiami(char pw[],char a[])//加密
{
    char c,*p;
    p=pw;
    c=*p;
    int i=0;
    while(c!='\0')
    {
        if(c>='0' && c<='9')//数字
        {
            c=c+5;
            if(c>'9')
                c=c-10;
        }
        else
        {
            c=c+5;
            if(c>'Z' && c<='Z'+5 || c>'z')
                c=c-26;
        }
        a[i++]=c;
        p++;
        c=*p;
    }
    a[i]='\0';
}
void jiemi(char pw[],char b[])//解密
{
    char c,*p;
    p=pw;
    c=*p;
    int i=0;
    while(c!='\0')
    {
        if(c>='0' && c<='9')
        {
            c=c-5;
            if(c<'0')
                c=c+10;
        }
        else
        {
            c=c-5;
            if(c<'A' || c<'a' && c>='a'-5)
                c=c+26;
        }
        b[i++]=c;
字符串函数模拟注册        p++;
        c=*p;
    }
    b[i]='\0';
}
int hash(int key)//构造哈希表
{
    int H=key%Max;
    while(user[H].flag==1)
        H=(H+1)%Max;
    return H;
}
int hashsrch(char name[])//在哈希表中查
{
    int key=name[0]-'0';
    int H=key%Max;
    if(user[H].flag==0)
        return -1;
    else if(user[H].flag==1 && strcmp(user[H].name,name)==0)
        return H;
    else
    {
        while(user[H].flag==1 && strcmp(user[H].name,name)!=0 || user[H].flag==2)
            H=(H+1)%Max;
        if(user[H].flag==0)
            return -1;
        else return H;
    }
}
void Read()//将文件中的信息存入到哈希表中
{
    Inithtable();
    FILE *fp;
    if((fp=fopen("","r"))==NULL)
    {
        printf("文件打开错误!\n");
        exit(0);
    }
    while(!feof(fp))
    {
        char name[20],pwf[20],pw[20];
        fscanf(fp,"%s%s",name,pwf);
        jiemi(pwf,pw);
        count++;
        int key=name[0]-'0';
        int H=hash(key);
        strcpy(user[H].name,name);
        strcpy(user[H].pw,pw);
        user[H].flag=1;
    }
    fclose(fp);
}
void Search(char name[])//查用户
{
    int H=hashsrch(name);
    if(user[H].flag==1)
    {
        if(H==-1)
            printf("该用户不存在!\n");
        else
            printf("用户名:%s\t密码:%s\n",user[H].name,user[H].pw);
    }
    else
        printf("该用户不存在!\n");
}
void Delete(char name[])//删除用户
{
    if(strcmp(name,Admin)==0)
    {
        char name1[20];
        printf("输入要删除的用户名:");
        gets(name1);
        int H=hashsrch(name1);
        int a=hashsrch(Admin);
        if(strcmp(name1,Admin)==0)
            printf("不能删除管理员账号!\n");
        else if(H!=-1)
        {
            char pw[20];
            printf("请输入管理员密码:");
            password(pw);
            if(strcmp(user[a].pw,pw)==0)
            {
                user[H].flag=2;
                count--;
                Saved();
                printf("用户信息删除成功!\n");   
            }
            else
                printf("密码错误,不能进行删除操作!\n");
        }
        else
            printf("该用户不存在,不能进行删除操作!\n");
    }
    else
    {
        int H=hashsrch(name);
        user[H].flag=2;
        count--;
        Saved();
        printf("账户已注销!\n");
        flag=0;
    }
}
void Changepw(char name[],char pw[])//修改用户密码
{
    char pw1[20],pw2[20],pw3[20];
    int H=hashsrch(name);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。