C语言利用链表与文件实现登录注册功能

C语言实现简登录和注册功能,供大家参考,具体内容如下

C语言实现注册登录

使用链表
使用文件

版本二: 利用链表

此版本使用的链表,第一个版本使用的是数组

数组版本连接

这里我使用的线性链表,一定要注意在判断语句或赋值语句中不可将指针指向未定义的区域,这会产生很大问题,所以一般都需要在链表最后一个节点指向空指针

代码:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
typedef struct LNode
{
 char name[10];
 char pass[10];
 struct LNode *next;
} LNode,*pNode;
//定义节点
pNode createList()
{
 //此函数是为了构造一个链表,存储用户信息用的。

 //链表头结点声明,这个头结点也就是链表的入口,你可以通过头结点,找到链表所有的数据
 pNode pHead = (pNode)malloc(sizeof(LNode));
 pHead->next=NULL;
 //头结点不存放数据

 //以读的方式打开user.txt文件
 FILE *fp = fopen("user.txt","r+");
 if(NULL == fp)
 {
 //如果没有该文件,则退出并显示未找到文件
  printf("FILE NOT FOUND");
  exit(-1);
 }

 //获取链表入口,也就是头结点
 pNode cur = pHead;
 while(1)
 {
 //从user.text循环读入所有数据并依次存于链表

 //先制造一个临时节点
  pNode temp = (pNode)malloc(sizeof(LNode));
  if(!temp)
   exit(-1);

 //下面fscanf是从文件读取信息,并存入节点的name变量和pass变量
  //如果fscanf的返回值不是2,则说明后面没有数据了,也即是录入完毕
 //检测到录入完毕后将分配的空间清除掉
  if(2!=fscanf(fp,"%s%s",temp->name,temp->pass))
  {
   free(temp);
   break;
  }

 //让当前节点(链表的尾部)的后面加上读取到数据的节点
  cur->next=temp;

 //让当前的节点为链表尾部
  cur = temp;

  //使最后一个节点指向空,方便以后判断
  cur->next = NULL;
 }
 return pHead;
}

//登录函数
int login(pNode head)
{
 if(NULL==head->next)
 {
  printf("user list empty\n");
  getchar();
  return 0;
 }
 char name[10];
 char pass[10];
 printf("enter your name:");
 scanf("%s",name);
 printf("enter your password:");
 scanf("%s",pass);
 pNode temp = head->next;
 while(temp)
 {
  if(0==strcmp(temp->name,name) && 0==strcmp(temp->pass,pass))
  {
   printf("success");
   getchar();
   return 1;
  }
  temp = temp->next;
 }
 printf("user not found");
 getch();
}

//写入txt文件,每一行存在一个用户
void writeToFile(pNode head)
{
 FILE *fw = fopen("user.txt","a+");
 pNode temp=head->next;
 if(temp==NULL){
  return;
 }
 while(temp){
  fprintf(fw,temp->name);
  fprintf(fw,"\t");
  fprintf(fw,temp->pass);
  fprintf(fw,"\n");
  temp = temp->next;
 }
}

//注册用户
void registerUser(pNode head)
{
 pNode temp = head->next;
 //当表中无用户直接在头结点后注册
 if(!temp)
 {
  temp = (pNode)malloc(sizeof(LNode));
  head->next = temp;
 }
 else
 {
  //表中有用户则在最后一个节点后生成新节点
  while(temp->next)
  {
   temp = temp->next;
  }
  pNode last = (pNode)malloc(sizeof(LNode));
  temp->next = last;
  temp = last;
 }
 printf("enter your name:");
 scanf("%s",temp->name);
 printf("enter your password:");
 scanf("%s",temp->pass);
 temp->next=NULL;
}

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()
{
 int choice;
 pNode head = createList();
 while(1)
 {
  choice = menu();
  if(1==choice)
  {
   system("cls");
   if(login(head))
   {
    //这里写登陆成功的模块
   }
   system("cls");
  }
  else if(2==choice)
  {
   system("cls");
   registerUser(head);
   system("cls");
  }
  else
  {
   writeToFile(head);
   return 0;
  }
 }
}

运行结果

菜单,比较简陋,可以根据自己需求加东西

这次写了菜单的循环

注册

登录

异常路径(登录失败)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

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

    C语言利用文件系统实现简单的用户登录和注册功能 版本一:利用数组 最近有个朋友让我帮他做一个C语言的登录注册功能,考虑到他没有学到数据库于是想到了存入文件 此版本使用的数组,第二个版本使用的是链表,链表是一个很好的数据结构,推荐大家用链表 第二版:链接 话不多说上代码 #include <stdio.h> #include <stdlib.h> #define USER_MAX 20 //此系统能存放最多的用户数 typedef struct { char name[10]; ch

  • C语言实现注册登录系统

    本文实例为大家分享了C语言实现注册登录系统的具体代码,供大家参考,具体内容如下 /* Note:Your choice is C IDE */ #include "stdio.h" #include "string.h" #include "windows.h" //定义变量 char reg_name[30]="",reg_pwd[10]=""; char on_name[30],on_pwd[10];

  • C语言实现密码强度检测

    本文实例为大家分享了C语言实现密码强度检测,供大家参考,具体内容如下 1 方案得分项 一.密码长度: 公式 :+(n*4),其中n表示密码长度 二.大写字母: 公式:+((len-n)*2),其中n表示大写字母个数,len表示密码长度 三.小写字母: 公式:+((len-n)*2),其中n表示小写字母个数,len表示密码长度 四.数字: 公式:+(n*4),其中n表示数字个数 条件:满足n < len,才能得到加分,len表示密码长度 五.符号: 公式:+(n*6),其中n表示符号个数 六.位于

  • C语言实现登录注册和忘记密码功能

    这是一个用纯C语言和文件操作实现的系统的登录.注册和忘记密码功能.可以用于c语言大作业的登录系统.下面分享一下具体的代码. 首先定义一个结构体来存放用户的注册信息,账号密码等. typedef struct The_users //typedef 可以定义结构体别名 { char id[11]; //账号 char pwd[20]; //密码 char name[15];//姓名为字符串 char sex; //性别为单个字符 long phone; //电话号码为长整型 }users; 然后写

  • C语言利用链表与文件实现登录注册功能

    C语言实现简登录和注册功能,供大家参考,具体内容如下 C语言实现注册登录 使用链表 使用文件 版本二: 利用链表 此版本使用的链表,第一个版本使用的是数组 数组版本连接 这里我使用的线性链表,一定要注意在判断语句或赋值语句中不可将指针指向未定义的区域,这会产生很大问题,所以一般都需要在链表最后一个节点指向空指针 代码: #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <stri

  • C语言利用链表实现学生成绩管理系统

    链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用. 链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点. 链表都有一个头指针,一般以head来表示,存放的是一个地址.链表中的节点分为两类,头结点和一般节点,头结点是没有数据域的.链表中每个节点都分为两部分,一个数据域,一个是指针域. 说到这里你应该就明白了,链表就如同车链子一样,head指向第一个元素:第一个元素又指向第二个元素:……,直到最后一

  • python应用文件读取与登录注册功能

    python应用文件读取与登录注册功能,具体实现代码如下所示: #!/usr/bin/python3 # -*- coding: utf-8 -*- # Author: zhw #读取文件中的内容 def open_file(filename ,file_type , *args): #读取文件中的数据 if file_type == 'r': flie_list = [] with open(filename,file_type) as sub_all: for file_line in su

  • JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)

    下面通过通过图文并茂的方式给大家介绍JavaWeb实现用户登录注册功能实例代码,一起看看吧. 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JS

  • Android实现登录注册功能封装

    我们都知道Android应用软件基本上都会用到登录注册功能,那么对一个一个好的登录注册模块进行封装就势在必行了.这里给大家介绍一下我的第一个项目中所用到的登录注册功能的,已经对其进行封装,希望能对大家有帮助,如果有什么错误或者改进的话希望各位可以指出. 我们都知道登录注册系列功能的实现有以下几步: 注册账号 登录账号 (第三方账号登录) 记住密码 自动登录 修改密码 大体的流程如下 对于需要获取用户登录状态的操作,先判断用户是否已经登录. 如果用户已经登录,则继续后面的操作,否则,跳转到登录页面

  • node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能

    同志们,经过不懈的努力,查了各种文档,终于鼓捣出了一个稍微像样一点的node项目,当然如果直接拿去项目里用,这个demo还太简单,毕竟一个完整的登录注册还有很多实际的内容,本案例mySQL的用户列表里,为便于理解,只设置了username 和password两个字段,正常的登录注册,肯定会有更多的字段的.但是对于初学node的人来说,比如笔者,还是学习到了不少内容,甚至,紧张的我不知如下下笔,肯定这个是参考了很多网上其他少年博客,以后这个登录注册demo会依据项目的需要而有所改进, 效果如下 效

  • Android实现登录注册功能

    本文实例为大家分享了Android实现登录注册功能的具体代码,供大家参考,具体内容如下 运行环境 Android Studio 总体效果图 一. 设计注册页面的布局 二.完成注册功能 (1) 添加User类 (2)添加 UserManager类 管理用户信息 package com.example.videoplayer; import android.hardware.usb.UsbRequest; import java.io.BufferedReader; import java.io.F

  • Node+Express+MongoDB实现登录注册功能实例

    注入MongoDB 依赖 var mongoose = require("mongoose"); 由于需要进行表单处理,需要用到bodyParser中间件 bodyParser模块来做文件解析,将表单里的数据进行格式化 var bodyParser = require("body-parser"); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); 登录后将

  • 图解NodeJS实现登录注册功能

    该Demo根据菜鸟教程的练手项目,请提前到菜鸟教程的官网查看nodejs的相关教程,根据教程实际操作一遍,然后自己动手去实现登录.注册功能,此Demo只作参考,不符合前端相关规范. 使用的技术栈 node+express+mongodb 项目目录结构 node_modules: 第三方模块目录 public: 公共文件目录(js.css.image) login.html:登录页面 register.html:注册页面 main.html:主页面 db.js:数据库相关封装(数据库添加.查询)

随机推荐