這是一個(gè)用純C語言和文件操作實(shí)現(xiàn)的系統(tǒng)的登錄、注冊和忘記密碼功能。可以用于c語言大作業(yè)的登錄系統(tǒng)。下面分享一下具體的代碼。
首先定義一個(gè)結(jié)構(gòu)體來存放用戶的注冊信息,賬號(hào)密碼等。
1
2
3
4
5
6
7
8
|
typedef struct The_users //typedef 可以定義結(jié)構(gòu)體別名 { char id[11]; //賬號(hào) char pwd[20]; //密碼 char name[15]; //姓名為字符串 char sex; //性別為單個(gè)字符 long phone; //電話號(hào)碼為長整型 }users; |
然后寫一個(gè)函數(shù)用來創(chuàng)建儲(chǔ)存用戶賬號(hào)密碼的文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/*創(chuàng)建儲(chǔ)存用戶賬號(hào)密碼的文件*/ void Create_File() { FILE *fp; if ((fp = fopen ( "users.txt" , "rb" ))==NULL) /*如果此文件不存在*/ { if ((fp = fopen ( "users.txt" , "wb+" ))==NULL) { printf ( "無法建立文件!\n" ); exit (0); } } } |
注冊:將存放用戶的信息的結(jié)構(gòu)體直接存入文件中,每次存入分配該結(jié)構(gòu)體大小的空間,然后該用戶的信息就可以按結(jié)構(gòu)體整體來讀取。還加入了一些錯(cuò)誤提示,如果輸入錯(cuò)誤就提示重新輸入。
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
|
/*注冊賬號(hào)*/ void registers() //按結(jié)構(gòu)體的大小,一次寫入或者讀入1個(gè)結(jié)構(gòu)體大小 { users a,b; //結(jié)構(gòu)體 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); //讀入一個(gè)結(jié)構(gòu)體字符塊 到b printf ( "請(qǐng)輸入賬號(hào)\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 ( "此用戶名已存在!請(qǐng)重新注冊!\n" ); Sleep(1000); fclose (fp); return ; } } printf ( "請(qǐng)輸入姓名:\n" ); scanf ( "%s" ,&a.name); printf ( "請(qǐng)輸入性別(f(女)/m(男)):\n" ); scanf ( " %c" ,&a.sex); do { if (a.sex != 'f' && a.sex != 'm' ){ printf ( "性別輸入錯(cuò)誤!請(qǐng)重新輸入!\n" ); scanf ( "%c" ,&a.sex); } } while (a.sex != 'f' && a.sex != 'm' ); getchar (); printf ( "請(qǐng)輸入電話號(hào)碼:\n" ); scanf ( "%ld" ,&a.phone); printf ( "請(qǐng)輸入密碼\n" ); scanf ( " %s" ,&a.pwd); printf ( "請(qǐng)確認(rèn)密碼\n" ); scanf ( " %s" ,&temp); do { if (! strcmp (a.pwd,temp)){ fp = fopen ( "users.txt" , "a" ); fwrite (&a, sizeof ( struct The_users), 1, fp); printf ( "賬號(hào)注冊成功,請(qǐng)登錄!\n" ); Sleep(500); fclose (fp); return ; } else { printf ( "兩次密碼不匹配!請(qǐng)重新輸入!\n" ); scanf ( "%s" ,&a.pwd); printf ( "請(qǐng)確認(rèn)密碼\n" ); scanf ( "%s" ,&temp); } } while (1); } |
登錄:先輸入賬號(hào)和密碼。然后按賬號(hào)從文件中讀取,如果賬號(hào)匹配就讀取密碼,如果密碼也匹配就登錄成功,否則重新輸入密碼。
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
|
/*登錄系統(tǒng)*/ void Input_login() { users a,b; //定義結(jié)構(gòu)體The_users別名 FILE *fp; printf ( "歡迎來到登錄界面!\n" ); Sleep(1000); fp = fopen ( "users.txt" , "r" ); fread (&b, sizeof ( struct The_users), 1, fp); //讀入一個(gè)結(jié)構(gòu)體字符塊 寫入b printf ( "請(qǐng)輸入賬號(hào)\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 ( "此用戶名不存在,請(qǐng)重新輸入!\n" ); Sleep(500); fclose (fp); return ; } } } printf ( "請(qǐng)輸入密碼\n" ); scanf ( "%s" ,&a.pwd); do { if ( strcmp (a.pwd, b.pwd)==0) /*如果密碼匹配*/ { fclose (fp); printf ( "登錄成功,歡迎使用!" ); Sleep(500); return ; } else { printf ( "密碼不正確!請(qǐng)重新輸入密碼\n" ); scanf ( "%s" ,&a.pwd); } } while ( strcmp (a.pwd, b.pwd)==0); } |
找回密碼:根據(jù)輸入的賬號(hào)獲取該賬號(hào)的結(jié)構(gòu)體信息,然后與其他信息進(jìn)行匹配,如果全部匹配成功,則顯示該賬號(hào)的密碼。
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() //按結(jié)構(gòu)體的大小,一次寫入或者讀入1個(gè)結(jié)構(gòu)體大小 { users a,b; //結(jié)構(gòu)體 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); //讀入一個(gè)結(jié)構(gòu)體字符塊 寫入b printf ( "請(qǐng)輸入賬號(hào)\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 ( "此用戶名不存在,請(qǐng)重新輸入!\n" ); Sleep(500); fclose (fp); return ; } } } printf ( "請(qǐng)輸入姓名:\n" ); scanf ( "%s" ,&a.name); do { if ( strcmp (a.name,b.name)){ printf ( "姓名輸入錯(cuò)誤!請(qǐng)重新輸入!\n" ); scanf ( "%s" ,&a.name); } } while ( strcmp (a.name,b.name)); printf ( "請(qǐng)輸入電話號(hào)碼:\n" ); scanf ( "%ld" ,&a.phone); do { if (a.phone != b.phone){ printf ( "電話號(hào)碼輸入錯(cuò)誤!請(qǐng)重新輸入!\n" ); scanf ( "%ld" ,&a.phone); } } while (a.phone != b.phone); printf ( "您的密碼是:%s" ,b.pwd); Sleep(3000); } |
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/qq_40663357/article/details/86663598