c语言编辑问道注册登录程序,C语言实现简单的注册登陆功能

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

注意头文件:

#include

#include

#include

#include

#define bool int //这里用define定义了布尔类型

#define true 1 //避免一些编译器如vs2010没有该头文件无法使用的情况发生

#define false 0 //有些编译器如code:blocks可以直接使用头文件

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,未来的学习之路,咱们慢慢磨!

(*^__^*) 嘻嘻……

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值