C语言编写一个 if else 开机输入密码 如果输入密码错误,

。编写一个简单程序

我写的代码功能:实现整个登陆模块,使用链表存储临时用户数据(实际软件,链表应该从数据库中加载数据)。管理员登陆可以查看所有用户信息。

实现注册、登陆、验证、注销、查询。

登陆用户分:普通用户和管理员用户。默认我初始一个管理员,你不需要可以删。

验证规则,你可以在我的验证函数中改。

登陆成功以后,具体做什么我没写,留给你自己发挥!!你在我相关注释的位置添加代码。

注意:如果是实际软件开发,注册需要写入数据库,登陆需要读取数据库,你需要在我相关位置添加数据库写入和读取代码。

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <conio.h>
#define SIZE 20
typedef struct userInfo//用户信息
{
   char uName[SIZE];//用户名
   char uPSW[SIZE];//用户密码
   int uType;//用户类型:0普通用户;1管理员
   struct userInfo *next;
}USERINFO;
int checkUINFO(char *uName,char *uPSW);//验证用户信息合理性,合理返回1,不合理返回0。
USERINFO *regUser(char *uName,char *uPSW,USERINFO *userHead,USERINFO* userTail,int uType);//注册用户,返回尾节点
int showMeu1(USERINFO *userHead,USERINFO** userTail);//显示1级菜单
int showMeu2(int n,USERINFO *userHead,USERINFO** userTail);//显示2级菜单
void printfList(USERINFO *userHead);//测试用函数,打印链表所有数据,正常用户不使用
int login(char *uName,char *uPSW,USERINFO *userHead);//登陆,登陆成功返回1,失败返回0
void initUser();//初始化登陆状态
USERINFO loginUser=
{
    {0},
    {0},
    0,
    NULL
};// 全局变量当前登陆的用户
int main()
{
    int m;
    USERINFO userHead,*userTail=NULL;
    userHead.next=NULL;
    //-----测试用添加了一个管理员账户,不需要可以删!!---------------
    userTail=regUser("admin123","admin123",&userHead,userTail,1);
    //-----------------------------------------------------------------

    while(1)
    {
        //printf("loginUser.uName[0]=%d,loginUser.uType=%d\n",loginUser.uName[0],loginUser.uType);
        //getch();
        if(loginUser.uName[0]==0)
            showMeu1(&userHead,&userTail);
        else if(loginUser.uName[0]!=0 && loginUser.uType==0)//普通用户登陆,登陆以后想做的操作添加在这里!!!!!!!!
        {
            printf("退出登陆输入0\n");
            scanf("%d",&m);
            if(m==0)
                initUser();
            continue;
        }
        else if(loginUser.uName[0]!=0 && loginUser.uType==1)//管理员登陆,直接打印全部用户数据
        {
            system("cls");
            printf("当前为管理员登陆,打印所有用户信息:\n");
            printfList(&userHead);//测试用函数,打印链表所有数据,正常用户不使用
            printf("退出登陆输入0\n");
            scanf("%d",&m);
            if(m==0)
                initUser();
            continue;
        }

    }

    return 0;
}
void initUser()//初始化登陆状态
{
    memset(loginUser.uName,0,SIZE);
    memset(loginUser.uPSW,0,SIZE);
    loginUser.uType=0;
    loginUser.next=NULL;
}
int showMeu1(USERINFO *userHead,USERINFO** userTail)//显示1级菜单
{
    int n;
    while(1)
    {
        system("cls");
        printf("1、注册账户\n2、登陆账户\n");
        scanf("%d",&n);
        if(n!=1 && n!=2)
            continue;
        return showMeu2(n,userHead,userTail);
    }
}
int showMeu2(int n,USERINFO *userHead,USERINFO** userTail)//显示2级菜单
{
    int m;
    char uName[100]={0}, uPSW[100]={0};
    if(n==1)//注册界面
        while(1)
        {
            system("cls");
            printf("注册要求:用户名只包含数字、字母及下划线。\n          密码必须包含数字及字母。\n          用户名密码大于6个字符且小于%d!\n",SIZE);
            printf("请输入用户名:");
            scanf("%s",uName);
            printf("请输入密码:");
            scanf("%s",uPSW);
            *userTail=regUser(uName,uPSW,userHead,*userTail,0);
            if(!*userTail)
            {
                printf("注册失败!输入0重新注册,输入1返回主菜单\n");
                while(1)
                {
                    scanf("%d",&m);
                    if(m==0)
                        break;
                    if(m==1)
                        return n;
                }
                if(m==0)
                    continue;
            }
            else
            {
                printf("注册成功!按任意键返回。。。。。。\n");
                getch();
                return n;
            }

        }
    else//登陆界面
        while(1)
        {
            system("cls");
            printf("用户名:");
            scanf("%s",uName);
            printf("密码:");
            scanf("%s",uPSW);
            if(!login(uName,uPSW,userHead))
                continue;
            else
            {

                return n;
            }

        }
    return 1;
}
void printfList(USERINFO *userHead)//测试用函数,打印链表所有数据,正常用户不使用
{
    USERINFO *userSave=userHead;
    while(userSave->next)
    {
        printf("用户名:%s\n",userSave->next->uName);
        printf("密码:%s\n",userSave->next->uPSW);
        printf("类型:%s\n\n",userSave->next->uType?"管理员":"普通用户");
        userSave=userSave->next;
    }
}
int login(char *uName,char *uPSW,USERINFO *userHead)//登陆,登陆成功返回1,失败返回0
{
    USERINFO *userSave=userHead;
    while(userSave->next)
    {
        if(!strcmp(userSave->next->uName,uName) && !strcmp(userSave->next->uPSW,uPSW))
        {
            printf("登陆成功");
            strcpy(loginUser.uName,uName);
            strcpy(loginUser.uPSW,uPSW);
            loginUser.uType=userSave->next->uType;
            return 1;
        }
        userSave=userSave->next;
    }
    printf("用户名密码不正确或不存在!按任意键继续。。。。。。\n");
    getch();
    return 0;
}
int checkUINFO(char *uName,char *uPSW)//验证用户信息合理性,合理返回1,不合理返回0。
{
    //用户名和密码的输入规则,在这里添加,要改规则自己加!!!!!!!!!
    //我默认规则,用户名大于6个字符且只包含数字、字母及下划线,密码大于6个字符且必须包含数字及字母,用户名密码小于数组上限
    int i,len1=strlen(uName),len2=strlen(uPSW),flag1=0,flag2=0;
    if(len1>SIZE || len2>SIZE)
    {
        printf("用户名或密码过长,不得超过%d个字符!!\n",SIZE);
        return 0;
    }
    if(len1<6 || len2<6)
    {
        printf("用户名或密码必须大于6个字符\n");
        return 0;
    }
    for(i=0;i<len1;i++)
    {
        if(!(uName[i]>=48 && uName[i]<=57) && !(uName[i]>=65 && uName[i]<=90) &&!(uName[i]>=97 && uName[i]<=122) && uName[i]!='_')
        {
            printf("用户名只能包含数字、字母及下划线!!\n");
            return 0;
        }
    }
    for(i=0;i<len2;i++)
    {
        if(uPSW[i]>=48 && uPSW[i]<=57)
            flag1=1;
        if((uPSW[i]>=65 && uPSW[i]<=90) || (uPSW[i]>=97 && uPSW[i]<=122))
            flag2=1;
    }
    if(flag1==0 || flag2==0)
    {
        printf("密码必须包含数字及字母!!\n");
        return 0;
    }
    return 1;

}
USERINFO *regUser(char *uName,char *uPSW,USERINFO *userHead,USERINFO* userTail,int uType)//注册用户,返回尾节点
{
    USERINFO *userNew=NULL;
    if(checkUINFO(uName,uPSW))//通过验证
    {
        userNew=(USERINFO *)malloc(sizeof(USERINFO));
        userNew->next=NULL;
        strcpy(userNew->uName,uName);
        strcpy(userNew->uPSW,uPSW);
        userNew->uType=uType;
    }
    else
        return NULL;

    if(userHead->next==NULL)
        userHead->next=userNew;
    else
        userTail->next=userNew;
    userTail=userNew;
    //如果是正常软件,这里应该把注册信息写入数据库,数据库insert语句写在这里!!!!

    //-----------------------------------------------------------------------------------
    return userTail;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-03-25
1 以字符串方式,读入用户名和密码;
2 通过strcmp函数,判断是否相同。如相同,则合法。
3 给出提示信息。
说明:strcmp原型为
int strcmp(char *a, char *b);
功能为比较a和b两个字符串,如果相同返回0;如果a大返回1;如果b大返回-1。
大小依照ascii比较。
参考代码如下:
#include <stdio.h>#include <string.h>int main(){ char a[100],b[100]; scanf("%s%s",a,b); if(strcmp(a,"abc") == 0 && strcmp(b, "123456") == 0) printf("用户合法\n"); else printf("用户非法\n");}
第2个回答  2019-03-25
#include<string.h>
main()
{
char password[]="abc123";
gets(password);
if(strcmp(password,"abc123"))
printf("密码错误!");
else
printf("欢迎使用!");
}本回答被网友采纳
第3个回答  2019-03-25
没有看明白提问者的意思,是需要输入密码错误的提示程序嘛? 还有你的程序用于哪里?是什么软件?追问

就是一个作业,。if的 如果怎样 就怎样。。编写简单程序

相似回答