C语言利用数组和文件登录注册功能

C语言利用数组和文件登录注册功能

C语言利用文件系统实现简单的用户登录和注册功能

版本一:利用数组

最近有个朋友让我帮他做一个C语言的登录注册功能,考虑到他没有学到数据库于是想到了存入文件

此版本使用的数组,第二个版本使用的是链表,链表是一个很好的数据结构,推荐大家用链表

第二版链接可以去我的主页找


话不多说上代码

#include <stdio.h>
#include <stdlib.h>

#define USER_MAX 20
//此系统能存放最多的用户数

typedef struct
{
    char name[10];
    char password[10];
} User;
//定义一个存放用户的结构体

User list[USER_MAX];
//定义一个全局数组,类型是User,大小是USER_MAX

char* filename = "user.txt";
//需要在你的程序目录下新建一个user.txt文件


//登录函数
User login()
{
    char name[10];
    char password[10];
    User lg;
    printf("enter name:");
    scanf("%s",name);
    strcpy(lg.name , name);
    printf("enter password:");
    scanf("%s",password);
    strcpy(lg.password,password);
    return lg;
}

//写入txt文件,每一行存在一个用户
void writeToFile(User u)
{
    FILE *fw = fopen(filename,"a+");
    fprintf(fw,u.name);
    fprintf(fw,"\t");
    fprintf(fw,u.password);
    fprintf(fw,"\n");
}

//判断是否存在该用户
int exist(User u)
{
    int i;
    for(i=0; i<USER_MAX; i++)
    {
        if(0==strcmp(list[i].name ,u.name) && 0==strcmp(list[i].password ,u.password))
        {
            return 1;
        }
    }
    return -1;
}

//注册用户
void registerUser()
{
    char name[10];
    char password[10];
    User user;
    int i;

    printf("enter your name:");
    scanf("%s",name);
    strcpy(user.name , name);

    //判断注册的用户是否已存在
    for(i=0; i<USER_MAX; i++)
    {
        if(0==strcmp(list[i].name ,name))
        {
            printf("USER ALREADY EXIST");
            return;
        }
    }

    printf("enter your password:");
    scanf("%s",password);
    strcpy(user.password , password);
    writeToFile(user);
}

int menu()
{
    int choice;
    printf("1.login\n");
    printf("2.register\n");
    printf("#.exit\n");
    printf("enter your choice:");
    scanf("%d",&choice);
    return choice;
}




int main()
{
    User test[USER_MAX];
    FILE *fp = fopen(filename,"r");
    int i=0;
    User u;
    if(NULL == fp)
    {
        printf("FILE NOT FOUND");
        return -1;
    }
    for(i=0; i<USER_MAX; i++)
    {
        char uname[10];
        char upassword[10];
        fscanf(fp,"%s%s",uname,upassword);

        strcpy(list[i].name , uname);
        strcpy(list[i].password , upassword);
    }

    int choice = menu();
    if(1 == choice)
    {
        system("cls");
        u=login();
        if(1 == exist(u))
        {
            printf("success");
        }
        else
        {
            printf("WRONG USER OR PASS");
        }

    }
    else if(2 == choice)
    {
        system("cls");
        registerUser();
    }
    else
    {
        return 0;
    }


}

运行结果

菜单,比较简陋,可以根据自己需求加东西
PS我并未写循环语句,只是简单实现功能,所以读者可根据需求写菜单的循环
这里写图片描述

注册
这里写图片描述

看一下文件
这里写图片描述

登录
这里写图片描述

异常路径(登录失败)
这里写图片描述

转载于:https://www.cnblogs.com/xiatom/p/9805972.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101422.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python基础教程,Python入门教程(非常详细)[通俗易懂]

    Python基础教程,Python入门教程(非常详细)[通俗易懂]Python英文本意为“蟒蛇”,直到1989年荷兰人GuidovanRossum(简称Guido)发明了一种面向对象的解释型编程语言(后续会介绍),并将其命名为Python,才赋予了

    2022年7月3日
  • python格式化json文件_pycharm对齐线

    python格式化json文件_pycharm对齐线1.json文件保存将数据保存为json格式,并存储到.json文件中,需要注意键值对均用双引号,而非单引号。样例如下所示:{“sampleDB”:{“shippedVsCustDemand”:[{“CUSTOMER”:”customer1″,”ITEM”:”desk”,”SUPPLIEDQTY”:25,”DEMANDQTY”:3},{“CUSTOMER”:”customer1″,”ITEM”:”drawer”,”SUPPLIEDQTY”:15,”DEMANDQTY”:

    2022年8月25日
  • C#静态方法和非静态方法

    使用了static修饰的方法是静态方法,反之则为非静态方法。静态方法是一种特殊的方法,他不属于某个具体的实例。非静态方法可以访问类中的任何成员,而静态方法只能访问静态成员。http://www.cnb

    2021年12月21日
  • java 服务器程序部署环境搭建

    java 服务器程序部署环境搭建1、安装JDK 右击我的电脑-属性-高级系统设置-高级-环境变量:系统变量:新建:CLASSPATH 变量值为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;新建:JAVA_HOME 变量值为D:\Java\jdk1.8.0_40(就是你安装的JDK路径)找到Path,点击编辑,在变量值最前端添加;%JA

    2022年5月27日
  • 用AVX2指令集优化浮点数组求和

    用AVX2指令集优化浮点数组求和用AVX2指令集优化浮点数组求和一、AVX2指令集介绍二、代码实现0.数据生成1.普通数组求和2.AVX2指令集求和:单精度浮点(float)3.AVX2指令集求和:双精度浮点(double)三、性能测试测试环境计时方式测试内容进行性能测试第一次测试第二次测试四、总结个人猜测原因:一、AVX2指令集介绍AVX2是SIMD(单指令多数据流)指令集,支持在一个指令周期内同时对256位内存进行操作。包含乘法,加法,位运算等功能。下附Intel官网使用文档。Intel®IntrinsicsGuid

    2022年5月7日
  • VC编程实现色彩空间XYZ与LAB相互转换[通俗易懂]

    VC编程实现色彩空间XYZ与LAB相互转换[通俗易懂]VC编程实现色彩空间XYZ与LAB相互转换文章VC编程实现色彩空间RGB与XYZ相互转换已经介绍了RGB与XYZ色彩空间的转换算法以及实际的VC源代码,在上一篇文章已经提到,在PhotoShop中经常使用有RGB(红色、绿色、蓝色)、CMYK(青色、洋红、黄色、黑色)、HSB(色相、饱和度、亮度)和Lab4中色彩空间。我们用到XYZ色彩空间的目的是进行RGB与LAB色彩空

    2022年6月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号