这是一个用纯C语言和文件操作实现的系统的登录、注册和忘记密码功能。可以用于c语言大作业的登录系统。下面分享一下具体的代码。
首先定义一个结构体来存放用户的注册信息,账号密码等。
1
2
3
4
5
6
7
8
|
typedef struct The_users //typedef 可以定义结构体别名
{
char id[11]; //账号
char pwd[20]; //密码
char name[15]; //姓名为字符串
char sex; //性别为单个字符
long phone; //电话号码为长整型
}users;
|
然后写一个函数用来创建储存用户账号密码的文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/*创建储存用户账号密码的文件*/
void Create_File()
{
FILE *fp;
if ((fp = fopen ( "users.txt" , "rb" ))==NULL) /*如果此文件不存在*/
{
if ((fp = fopen ( "users.txt" , "wb+" ))==NULL)
{
printf ( "无法建立文件!\n" );
exit (0);
}
}
}
|
注册:将存放用户的信息的结构体直接存入文件中,每次存入分配该结构体大小的空间,然后该用户的信息就可以按结构体整体来读取。还加入了一些错误提示,如果输入错误就提示重新输入。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
/*注册账号*/
void registers() //按结构体的大小,一次写入或者读入1个结构体大小
{
users a,b; //结构体 The_users 重命名定义
FILE *fp;
char temp[20];
int count = 0;
printf ( "欢迎来到注册界面!\n" );
Sleep(1000);
fp = fopen ( "users.txt" , "r" );
fread (&b, sizeof ( struct The_users), 1, fp); //读入一个结构体字符块 到b
printf ( "请输入账号\n" );
scanf ( "%s" ,&a.id);
while (1)
{
if ( strcmp (a.id, b.id)) /*如果两串不相等*/
{
if (! feof (fp)) /*如果未到文件尾*/
{
fread (&b, sizeof ( struct The_users), 1, fp);
}
else
break ;
}
else
{
printf ( "此用户名已存在!请重新注册!\n" );
Sleep(1000);
fclose (fp);
return ;
}
}
printf ( "请输入姓名:\n" );
scanf ( "%s" ,&a.name);
printf ( "请输入性别(f(女)/m(男)):\n" );
scanf ( " %c" ,&a.sex);
do {
if (a.sex != 'f' && a.sex != 'm' ){
printf ( "性别输入错误!请重新输入!\n" );
scanf ( "%c" ,&a.sex);
}
} while (a.sex != 'f' && a.sex != 'm' );
getchar ();
printf ( "请输入电话号码:\n" );
scanf ( "%ld" ,&a.phone);
printf ( "请输入密码\n" );
scanf ( " %s" ,&a.pwd);
printf ( "请确认密码\n" );
scanf ( " %s" ,&temp);
do {
if (! strcmp (a.pwd,temp)){
fp = fopen ( "users.txt" , "a" );
fwrite (&a, sizeof ( struct The_users), 1, fp);
printf ( "账号注册成功,请登录!\n" );
Sleep(500);
fclose (fp);
return ;
} else {
printf ( "两次密码不匹配!请重新输入!\n" );
scanf ( "%s" ,&a.pwd);
printf ( "请确认密码\n" );
scanf ( "%s" ,&temp);
}
} while (1);
}
|
登录:先输入账号和密码。然后按账号从文件中读取,如果账号匹配就读取密码,如果密码也匹配就登录成功,否则重新输入密码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
/*登录系统*/
void Input_login()
{
users a,b; //定义结构体The_users别名
FILE *fp;
printf ( "欢迎来到登录界面!\n" );
Sleep(1000);
fp = fopen ( "users.txt" , "r" );
fread (&b, sizeof ( struct The_users), 1, fp); //读入一个结构体字符块 写入b
printf ( "请输入账号\n" );
scanf ( "%s" ,&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
{
printf ( "此用户名不存在,请重新输入!\n" );
Sleep(500);
fclose (fp);
return ;
}
}
}
printf ( "请输入密码\n" );
scanf ( "%s" ,&a.pwd);
do {
if ( strcmp (a.pwd, b.pwd)==0) /*如果密码匹配*/
{
fclose (fp);
printf ( "登录成功,欢迎使用!" );
Sleep(500);
return ;
}
else
{ printf ( "密码不正确!请重新输入密码\n" );
scanf ( "%s" ,&a.pwd);
}
} while ( strcmp (a.pwd, b.pwd)==0);
}
|
找回密码:根据输入的账号获取该账号的结构体信息,然后与其他信息进行匹配,如果全部匹配成功,则显示该账号的密码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
/*找回密码*/
void reback() //按结构体的大小,一次写入或者读入1个结构体大小
{
users a,b; //结构体 The_users 重命名定义
FILE *fp;
char temp[20];
int count = 0;
printf ( "欢迎来到找回密码界面!\n" );
Sleep(1000);
fp = fopen ( "users.txt" , "r" );
fread (&b, sizeof ( struct The_users), 1, fp); //读入一个结构体字符块 写入b
printf ( "请输入账号\n" );
scanf ( "%s" ,&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
{
printf ( "此用户名不存在,请重新输入!\n" );
Sleep(500);
fclose (fp);
return ;
}
}
}
printf ( "请输入姓名:\n" );
scanf ( "%s" ,&a.name);
do {
if ( strcmp (a.name,b.name)){
printf ( "姓名输入错误!请重新输入!\n" );
scanf ( "%s" ,&a.name);
}
} while ( strcmp (a.name,b.name));
printf ( "请输入电话号码:\n" );
scanf ( "%ld" ,&a.phone);
do {
if (a.phone != b.phone){
printf ( "电话号码输入错误!请重新输入!\n" );
scanf ( "%ld" ,&a.phone);
}
} while (a.phone != b.phone);
printf ( "您的密码是:%s" ,b.pwd);
Sleep(3000);
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_40663357/article/details/86663598