Linux下账号登陆界面IO操作

Linux下IO账号登陆界面

/*
*名 称:Linux下IO账号登陆界面
*功 能:1.注册 2.登陆 3.退出 4.注销 5.修改密码
*作 者:杨某
*时 间:2019.8.10
*
*/
简介:账号登陆为日常所见界面操作,如何利用Linux开发一项属于自己的登陆界面呢?
该项目适合刚学完基本IO操作的童鞋,话不多说,直接上干货!!

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool reg(FILE *fp,char *name,char *passwd)  //注册
{
	char buf[100]={0};
	fseek(fp,0,SEEK_SET);
	char n_name[20]={0};
	char n_passwd[20]={0};
	while(!feof(fp))
	{
		bzero(buf,sizeof(buf));
		bzero(n_name,sizeof(n_name));
		bzero(n_passwd,sizeof(n_passwd));
		fgets(buf,100,fp);
		sscanf(buf,"%s %s",n_name,n_passwd);
		if( strcmp(name,n_name) == 0)
		{
			return false;
		}
	}
	return true;
}
bool login(FILE *fp,char *name,char *passwd)  //登陆界面
{
	char buf[100]={0};
	fseek(fp,0,SEEK_SET);
	char n_name[20]={0};
	char n_passwd[20]={0};
	while(!feof(fp))
	{
		bzero(buf,sizeof(buf));
		bzero(n_name,sizeof(n_name));
		bzero(n_passwd,sizeof(n_passwd));
		fgets(buf,100,fp);
		sscanf(buf,"%s %s",n_name,n_passwd);
		if( strcmp(name,n_name) == 0 && strcmp(passwd,n_passwd) == 0)
		{
			return true;
		}
	}
	return false;
}
void chang(FILE *fp,char *name) //修改密码函数
{
  	 //开始寻找 name 所在的位置  
  	fseek(fp,0,SEEK_SET);  
  	while(!feof(fp))
  	{
  		//获取一行数据
  		char buf[1024]={0};
  		fgets(buf,1024, fp);    //遇到换行符结束或者1024-1个字符结束!难点
  		printf("%ld\n",strlen(buf));
  		
  		//判断账号
  		char code[100]={0}; 
  		char pwd[100]={0}; 
  		sscanf(buf,"%s %s",code,pwd);
  		int  len = strlen(pwd);
  		printf("len:%d\n",len );
  		//判断账号是否一样
  		if(strcmp(code,name) == 0)  //可修改
  		{
  			printf("用户存在!\n");
  			fseek(fp,-len-1,SEEK_CUR);
  			printf("请重新输入密码:\n");
  			char passwd1[20]={0};
  			bzero(passwd1,20);
  			scanf("%s",passwd1);
  			fputs(passwd1,fp);
  			//fprintf(fp, "%s\n",passwd1 );  //这个也可以
  			fflush(fp);
  			printf("写入成功!\n");
  			break;
  		}
    }
}
void del(FILE *fp,char *name)   //注销函数
{
  
  	 //开始寻找 name 所在的位置  
  	fseek(fp,0,SEEK_SET);  
  	while(!feof(fp))
  	{
  		//获取一行数据
  		char buf[1024]={0};
  		fgets(buf,1024, fp);  
  		printf("%ld\n",strlen(buf));
  		int  len = strlen(buf);
  		//判断账号
  		char code[100]={0}; 
  		char pwd[100]={0}; 
  		sscanf(buf,"%s %s ",code,pwd);
  		//判断账号是否一样
  		if(strcmp(code,name) == 0)  //注销掉
  		{
  			//从当前位置开始偏移
			fseek(fp,-(len),SEEK_CUR);  
			int i = 0;
			for ( i = 0; i< len-1;i++)
			{
			    fputc('*',fp);
			}	
			    fputc('\n',fp); 
			bzero(buf,1024);
			fflush(fp);
			printf("------%s\n",buf);
			break;
  		}
  	}
}
//  r   : 以只读的方式打开文件  
//  r+  :  以读写方式打开文件  
// w   :  以只写方式打开,并清空文件和创建文件 
// w+  : 以读写方式打开,假设文件不存在则创建,文件存在则清空    
// a   : 以追加 只写 的方式打开文件,假设文件不存在则创建  
// a+  :  以追加 读写 的方式打开文件,假设文件不存在则创建  	
int main()
{
	FILE *fp  = fopen("data","r+");   //r+是重点,在修改和注销时指针出错的罪魁祸首   必须自己创建文本 data!!
	if( fp == NULL )
	{
		perror("文件打开失败:");
		return -1;
	}
	int n;
	int flag = 0;
	char name[100]={0};
	char passwd[100]={0};
	while(1)
	{
		printf("请输入你想要进行的操作:\n1、注册\t 2、登录 3、退出   4.注销  5.修改\n");
		scanf("%d",&n);
		switch(n)
		{
			case 1:
			{
				printf("用户名:");
				scanf("%s",name);
				printf("密码:");
				scanf("%s",passwd);
				if( reg(fp,name,passwd) )
				{
					fprintf(fp,"%s %s\n",name,passwd);
					fflush(fp);
					printf("注册成功\n");
				}
				else
				{
					printf("注册失败,用户已被注册\n");
				}
				break;
			}
			case 2:
			{
				printf("用户名:");
				scanf("%s",name);
				printf("密码:");
				scanf("%s",passwd);
				if( login(fp,name,passwd) )
				{
					printf("登录成功\n");
				}
				else
				{
					printf("登录失败,用户名或密码输入错误\n");
				}
				break;
			}
			case 3:
			{
				flag=1;
				break;
			}
			case 4:
			{
				printf("用户名:");
				scanf("%s",name);
				del(fp,name);
				break;
			}
			case 5:
			{
				printf("用户名:\n");
				scanf("%s",name);
				chang(fp,name);
				break;
			}
		}
		if(flag)  break;
	}
	return 0;

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值