C语言怎么将用户账号密码写入文件实现登录注册功能?

简介: 创建储存用户账号密码的文件: void Create_File() { FILE *fp; if ((fp = fopen("users.txt","rb"))==NULL) /*如果此文件不存在*/ { if ((fp = fopen("users.

创建储存用户账号密码的文件:

void Create_File()
{
    FILE *fp;
    if ((fp = fopen("users.txt","rb"))==NULL)                 /*如果此文件不存在*/
    {
        if ((fp = fopen("users.txt","wb+"))==NULL)
        {
            outtextxy(220, 200, "无法建立文件!");  
            
        }
    }
}

 


关于文件读写:

r     只读    为输入打开一个文本文件(文件必须存在)
w     只写    为输出打开一个文本文件(如没有文件,则新建)
a     追加    向文本文件尾添加数据(如没有文件,则新建)
rb    只读    为输入打开一个二进制文件
wb    只写    为输出打开一个二进制文件
ab    追加    向二进制文件尾添加数据
r+    读写    为读写打开一个文本文件(文件必须已经存在)
w+    读写    为读写建立一个新的文本文件
a+    读写    为读写打开一个文本文件(读写指针定位在最后)
rb+   读写    为读写打开一个二进制文件
wb+   读写    为读写建立一个新的二进制文件
ab+   读写    为读写打开一个二进制文件


创建结构体:

typedef struct The_users   //typedef 可以定义结构体别名
{
    char id[11];
    char pwd[20]; 
}users;

该结构体用于存储用户账号密码。

 

注册用户(账号密码)

     void registers()  //按结构体的大小,一次写入或者读入1个结构体大小
     {    
         users a,b;//结构体 The_users 重命名定义
         FILE *fp;
         fp = fopen("users.txt","r");
         
         fread(&b, sizeof(struct The_users), 1, fp); //读入一个结构体字符块 到b
         
         InputBox(a.id,11,"请输入账号");
         
         while (1)
         {    
             if (strcmp(a.id, b.id)) /*如果两串不相等*/
             {
                 if (!feof(fp))    /*如果未到文件尾*/                                
                     
                     
                 {
                     fread(&b, sizeof(struct The_users), 1, fp);
                 }
                 else
                     break;
             }
             else

             {   
                 outtextxy(220, 200, "此用户名已存在!"); 
                 fclose(fp);
                 main();     
             }
         }
         
         InputBox(a.pwd,10,"请输入密码");
         fp = fopen("users.txt","a");
         fwrite(&a, sizeof(struct The_users), 1, fp);
         outtextxy(220, 200, "帐号注册成功!");
         fclose(fp);
         main();
     }

 

 


登录账号密码:

void  Input_login()
{
    users a,b;//定义结构体The_users别名
    
    FILE *fp;
    
    fp = fopen("users.txt","r");
    
    fread(&b, sizeof(struct The_users), 1, fp); //读入一个结构体字符块 写入b
    
    InputBox(a.id,11,"请输入账号");
    
    outtextxy(295,270,a.id);
    
             while (1)
           {   
           if (strcmp(a.id, b.id)==0)         //如果有此用户名
           {
               break;       
           }
           
           else 
           {
               if (!feof(fp))  //如果文件没有读完                            
            
               {
                   fread(&b, sizeof(struct The_users), 1, fp);
               }
               
               else
               {
                   outtextxy(220, 200, "此用户名不存在!");
                   fclose(fp);
                   main();
                   
               }
           }
       }
       
       InputBox(a.pwd,20,"请输入密码");
       
if (strcmp(a.pwd, b.pwd)==0)            /*如果密码匹配*/
           
       {
           
           fclose(fp);
 
          outtextxy(250, 200, "登录成功,欢迎使用!");
          
          }
       else  
       {       outtextxy(220, 200, "密码不正确!");
               main();
       }
       
}

 

目录
相关文章
|
8月前
|
C语言
C语言-----qsort函数的功能以及模拟实现
C语言-----qsort函数的功能以及模拟实现
72 1
|
8月前
|
算法 C语言 C++
【C语言-扫雷游戏全功能详解】
【C语言-扫雷游戏全功能详解】
91 1
|
C语言
关于C语言中函数的知识总结(一)---函数的功能和分类
关于C语言中函数的知识总结(一)---函数的功能和分类
|
4月前
|
网络协议 C语言
C语言 网络编程(十三)并发的TCP服务端-以进程完成功能
这段代码实现了一个基于TCP协议的多进程并发服务端和客户端程序。服务端通过创建子进程来处理多个客户端连接,解决了粘包问题,并支持不定长数据传输。客户端则循环发送数据并接收服务端回传的信息,同样处理了粘包问题。程序通过自定义的数据长度前缀确保了数据的完整性和准确性。
|
4月前
|
存储 测试技术 C语言
C语言实现链表的各种功能
本文详细介绍了如何使用C语言实现链表的各种功能,包括链表节点结构的定义与操作函数的实现。链表作为一种常用的数据结构,具有节点自由插入删除、动态变化等特点。文中通过`link_list.h`和`link_list.c`两个文件,实现了链表的初始化、插入、删除、查找、修改等核心功能,并在`main.c`中进行了功能测试。这些代码不仅展示了链表的基本操作,还提供了丰富的注释帮助理解,适合作为学习链表的入门资料。
|
4月前
|
网络协议 C语言
C语言 网络编程(十四)并发的TCP服务端-以线程完成功能
这段代码实现了一个基于TCP协议的多线程服务器和客户端程序,服务器端通过为每个客户端创建独立的线程来处理并发请求,解决了粘包问题并支持不定长数据传输。服务器监听在IP地址`172.17.140.183`的`8080`端口上,接收客户端发来的数据,并将接收到的消息添加“-回传”后返回给客户端。客户端则可以循环输入并发送数据,同时接收服务器回传的信息。当输入“exit”时,客户端会结束与服务器的通信并关闭连接。
|
4月前
|
C语言
C语言 网络编程(八)并发的UDP服务端 以进程完成功能
这段代码展示了如何使用多进程处理 UDP 客户端和服务端通信。客户端通过发送登录请求与服务端建立连接,并与服务端新建的子进程进行数据交换。服务端则负责接收请求,验证登录信息,并创建子进程处理客户端的具体请求。子进程会创建一个新的套接字与客户端通信,实现数据收发功能。此方案有效利用了多进程的优势,提高了系统的并发处理能力。
|
4月前
|
C语言
C语言 网络编程(九)并发的UDP服务端 以线程完成功能
这是一个基于UDP协议的客户端和服务端程序,其中服务端采用多线程并发处理客户端请求。客户端通过UDP向服务端发送登录请求,并根据登录结果与服务端的新子线程进行后续交互。服务端在主线程中接收客户端请求并创建新线程处理登录验证及后续通信,子线程创建新的套接字并与客户端进行数据交换。该程序展示了如何利用线程和UDP实现简单的并发服务器架构。
|
5月前
|
C语言 索引
C语言编译环境中的 调试功能及常见错误提示
这篇文章介绍了C语言编译环境中的调试功能,包括快捷键操作、块操作、查找替换等,并详细分析了编译中常见的错误类型及其解决方法,同时提供了常见错误信息的索引供参考。
|
7月前
|
机器学习/深度学习 搜索推荐 程序员
C语言实现个人通讯录(功能优化)-2
C语言实现个人通讯录(功能优化)

热门文章

最新文章