C语言实现简单注册登陆功能

之前在学习用C语言建立通讯录管理系统的时候有想过,怎么为每个用户单独设立通讯录,自然而然想到了最常见的注册与登陆功能,通过不同的账号达到单独设立通讯录的目的。肯定还存在许多问题,当给自己立个flag,未来慢慢磨。以下是实现过程:

注意头文件:

#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#define bool int        //这里用define定义了布尔类型
#define true 1          //避免一些编译器如vs2010没有该头文件无法使用的情况发生
#define false 0         //有些编译器如code:blocks可以直接使用头文件<include stdbool.h>
FILE *fp;               //文件指针,不多说
bool judge=true;

先定义一个结构体Users,然后新建结构体pe用来存放用户名和密码。

typedef struct
{
    char user[20];
    char code[20];
}Users;
Users pe;  

然后是编写注册模块。这里多增加了一个”阅读用户手册”,可删改。

/*注册模块*/
void zhuce()
{
    char temp[20],txt[100],cha;        //定义两个数组,一个存放键盘输入的用户名和密码一个存放用户手册
    do
    {
        printf("\t\t\t\t用户注册");
        printf("\n\t\t1.直接注册 2.阅读用户手册");
        cha=getch();
        if(cha=='2')
        {
            if((fp=fopen("使用说明.txt","r"))==NULL)
                {
                printf("\n\t\t打开失败");
                exit(0);
                }
                fread(txt,2,20,fp);
                printf("\n\t\t%s",txt);
                /*txt=fgets(txt,100,fp);
                printf("%s",txt);
        }
        printf("\n\t\t按任意键继续");
        getch();
        system("cls");
        /*以上部分用于打开用户手册,可删改*/
        printf("\t\t\t\t用户注册");
        printf("\n\t\t用户名:");
        scanf("%s",pe.user);
        fp=fopen(pe.user,"r");
        /*判断用户名是否重复*/
        if(fp!=NULL) 
        {
           printf("\n\t该用户名已存在");
           fclose(fp);
           printf("\n\t继续注册?(Y/N)");
           if(getch()=='Y') return zhuce();
           else return denglu();
        }
        /*确认两次密码输入是否一致*/
        printf("\n\t\t密  码:");
        scanf("%s",pe.code);
        printf("\n\t\t确认密码:");
        scanf("%s",temp);
        if(strcmp(pe.code,temp)!=0)
        printf("\n\t\t两次密码不一致,请重新输入");
    }while(strcmp(pe.code,temp)!=0);
    /*用户名密码无误,写入文档储存用户信息*/
    fp=fopen(pe.user,"w");
    if(fp==NULL)
       {
          printf("\n\t注册失败\n");
          exit(0);
       }
    else 
    {
        system("cls");
        printf("\n\t注册成功");
        write();               //用户信息写入函数,底下给出
        judge = false;
        denglu();             //这里跳转到登陆模块
    }
}
/*写入用户信息*/
void write()
{
    if(fwrite(&pe,sizeof(User),1,fp)!=1)
    {
        printf("\n\t\t写入文件错误");
        exit(0);                     //写入错误则退出程序
    }
}

写完注册模块,接下来就是写登陆模块了,这里的关键就是读取之前存储好的用户信息以及用户的资料

void denglu()
{
    char u[20],c[20],temp[20];      //定义两个数组,存放键盘输入的用户名和密码
    printf("\n\t\t\t\t用户登录");
    printf("\n\t\t用户名:");
    scanf("%s",u);
    /*判断用户名是否存在*/
    fp=fopen(u,"r+");
    temp[0]='0';
    if(fp==NULL)
    {
        printf("\n\t\t用户不存在,请注册");
        printf("\n\t\t1.注册   2.重新登陆");
        temp[0]=getch();
        if(temp[0]=='1')
        {
            system("cls");
            zhuce();
        }
        else return denglu();
    }
    /*验证密码是否正确*/
    do
    {
        if(judge==true) fread(&pe,sizeof(Users),1,fp); //读取用户信息,即用户名和密码
        printf("\t\t密  码:");
        scanf("%s",c);
        if(strcmp(pe.code,c)!=0)                      //对比输入的密码和读取的密码
        {
            printf("\n\t\t密码错误(1.退出 2.重新输入)");
            temp[0]=getch();
            printf("\n");
            if(temp[0]=='1')
            {
                fclose(fp);                           //关闭文件防止错误操作
                return main();
            }
        }
    }while(temp[0]=='2');
    /*readfile();   
该函数读取用户自己的资料,需要注意这里用户信息和其资料存储在一个文件中,读取是应适当使用rewind,ftell和fseek跳过一个User大小的空间读取的才是用户的资料*/
    getch();
    //这里可以设置跳转到操作界面
}

**到这里登陆模块也编写好了,只需要将它添加到已有代码稍微修改下就可以了O(∩_∩)O~**

虽然这个思路很简单,但当初思考的时候还是费劲脑汁,毕竟刚接触C语言,很多东西还不能融会贯通,不能运用自如,甚至会在很简单的问题上纠结几个小时,最后发现的时候真的想抽自己几巴掌,但当最后完工了,真的实现了,好开心好开心!O(∩_∩)O~
然而,实用性确实有限,只能供咱们这些新手小白消遣消遣,而且肯定存在许多漏洞,水平有限,又或者太懒了,真心不找了,这里立个flag,未来的学习之路,咱们慢慢磨!
(*^__^*) 嘻嘻……

  • 80
    点赞
  • 422
    收藏
    觉得还不错? 一键收藏
  • 26
    评论
C语言可以通过使用数据结构和文件操作来实现注册登录功能。下面是一个简单的示例: 1. 首先,我们可以定义一个结构体来表示用户数据,包括用户名和密码: ```c typedef struct { char username[20]; char password[20]; } User; ``` 2. 接下来,我们可以定义几个函数来实现注册登录功能。首先是注册函数: ```c #include <stdio.h> // 注册函数 void registerUser() { User user; printf("请输入用户名:"); scanf("%s", user.username); printf("请输入密码:"); scanf("%s", user.password); // 将用户数据保存到文件 FILE* file = fopen("users.txt", "a"); fwrite(&user, sizeof(User), 1, file); fclose(file); printf("注册成功!\n"); } ``` 3. 然后是登录函数: ```c #include <stdio.h> #include <string.h> // 登录函数 void loginUser() { User user; printf("请输入用户名:"); scanf("%s", user.username); printf("请输入密码:"); scanf("%s", user.password); // 从文件中读取用户数据 FILE* file = fopen("users.txt", "r"); if (file == NULL) { printf("用户文件不存在!\n"); return; } int found = 0; while(fread(&user, sizeof(User), 1, file)) { if (strcmp(user.username, username) == 0 && strcmp(user.password, password) == 0) { printf("登录成功!\n"); found = 1; break; } } if (!found) { printf("用户名或密码错误!\n"); } fclose(file); } ``` 4. 最后,我们可以编写一个主函数来调用注册登录函数: ```c #include <stdio.h> int main() { int choice; printf("1. 注册\n"); printf("2. 登录\n"); printf("请选择功能:"); scanf("%d", &choice); switch (choice) { case 1: registerUser(); break; case 2: loginUser(); break; default: printf("无效的选择!\n"); } return 0; } ``` 以上是一个使用C语言实现简单注册登录功能的示例。请注意,此示例仅作演示用途,实际应用中可能需要更复杂的逻辑和安全性考虑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值