我是靠谱客的博主 帅气信封,这篇文章主要介绍C语言实现密码本小项目,现在分享给大家,希望可以做个参考。

一、引言

学C语言有一段时间了,趁着正好做了密码本的小项目,把它分享出来。

二、思路与原理

密码本,见名知意,就是存放账号密码,起到备忘录作用的本子,将需要备忘的数据通过加密存放在文本文件中,打开的文本文件为加密文本,需要通过软件查看已经存放的数据,提高安全性。(软件设计了启动密码,三次过后自动退出)

项目目标:

  • 保存账号密码,退出后打开软件数据不丢失
  • 进行简单加密
  • 能按条件查找账号密码
  • 能修改账号密码数据
  • 能按条件进行删除数据

知识涉及到数组、文件操作的使用以及简单异或加密。

软件的部分截图如下:

主菜单

增加数据

删除数据

查询数据

全部数据

三、实现

1.头文件及数据定义

在密码本的小项目中我设立四个了存放数据的数组,所存放的账号密码的站点,存放的账号,存放的密码以及备注。定义了一个全局变量,用来计数当前密码本使用的条数。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> //定义四个数组,用来存放站点、账号、密码、备注的值 char webSite[100][20]; char userName[100][20]; char passWord[100][20]; char reMark[100][20]; //定义一个全局变量 int g_count = 0;

2.程序的整体框架

复制代码
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
int main(void) { InitInfo(); int nChoice = 1; StartPassWord(); while (nChoice) { printf("*********************************欢迎使用密码本*********************************n"); printf(" 请输入以下选项进行操作: n"); printf(" 1、增加数据 n"); printf(" 2、删除数据 n"); printf(" 3、修改数据 n"); printf(" 4、查询数据 n"); printf(" 5、全部数据 n"); printf(" 6、结束程序 n"); printf("********************************************************************************n"); scanf_s("%d", &nChoice); switch (nChoice) { case 1: { AddInfo();//增加数据 }break; case 2: { DelInfo(); //删除数据 }break; case 3: { EditInfo();//修改数据 }break; case 4: { FindInfo();//查询数据 }break; case 5: { ReadAllInfo();//查看全部 }break; case 6: { nChoice = 0;//退出程序 }break; } } printf("欢迎下次使用!n"); system("pause"); return 0; }

3.函数的声明

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//启动时输入密码 void StartPassWord(); //增加数据 void AddInfo(); //删除数据 void DelInfo(); //修改数据 void EditInfo(); //查询数据 void FindInfo(); //读取全部数据 void ReadAllInfo(); //保存数据 void SaveInfo(); //初始化数据 void InitInfo();

4.各个函数的实现

复制代码
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
//增加数据 void AddInfo() { printf("输入需要存储的 站点:"); scanf_s("%s", webSite[g_count], 20); printf("输入需要存储的 账号:"); scanf_s("%s", userName[g_count], 20); printf("输入需要存储的 密码:"); scanf_s("%s", passWord[g_count], 20); printf("输入需要存储的 备注:"); scanf_s("%s", reMark[g_count], 20); g_count++; SaveInfo(); InitInfo(); system("pause"); system("cls"); } //查看全部 void ReadAllInfo() { FILE *pfile; if (fopen_s(&pfile, "data.i", "r") != 0) { printf("file open fail"); exit(1); } fscanf_s(pfile, "当前个数%dn", &g_count); printf("当前有%d条数据n", g_count); for (int i = 0; i < g_count; i++) { printf("第%d条数据:n", i + 1); printf("站点:%s,账号:%s,密码:%s,备注:%s", webSite[i], userName[i], passWord[i], reMark[i]); printf("n"); } fclose(pfile); system("pause"); system("cls"); } //保存数据 void SaveInfo() { for (int j = 0; j < g_count; j++) { for (int m = 0; m < 20; m++) { webSite[j][m] ^= 5; userName[j][m] ^= 5; passWord[j][m] ^= 5; reMark[j][m] ^= 5; } } FILE *pfile; if (fopen_s(&pfile, "data.i", "w") != 0) { printf("file open fail"); exit(1); } fseek(pfile, 0, SEEK_SET); fprintf(pfile, "当前个数%dn", g_count); for (int i = 0; i < g_count; i++) { fwrite(webSite[i], 20, 1, pfile); fwrite(userName[i], 20, 1, pfile); fwrite(passWord[i], 20, 1, pfile); fwrite(reMark[i], 20, 1, pfile); fprintf(pfile, "n"); } fclose(pfile); } //删除数据 void DelInfo() { char aTemp[20]; int nFind = 0; int nIndex = 0; printf("请输入要删除的站点:n"); scanf_s("%s", aTemp, 20); for (; nIndex < g_count; nIndex++) { if (strcmp(aTemp, webSite[nIndex]) == 0) { nFind = 1; break; } } if (nFind == 1) { for (int i = nIndex; i < g_count; i++) { strcpy_s(webSite[i], 20, webSite[i + 1]); strcpy_s(userName[i], 20, userName[i + 1]); strcpy_s(passWord[i], 20, passWord[i + 1]); strcpy_s(reMark[i], 20, reMark[i + 1]); } g_count--; SaveInfo(); InitInfo(); printf("删除成功n"); } else { printf("查找失败!n"); } system("pause"); system("cls"); } //初始化数据 void InitInfo() { FILE *pfile; if (fopen_s(&pfile, "data.i", "r") != 0) { printf("请先建立data.i文件!"); system("pause"); exit(1); } fscanf_s(pfile, "当前个数%dn", &g_count); for (int i = 0; i < g_count; i++) { fread(webSite[i], 20, 1, pfile); fread(userName[i], 20, 1, pfile); fread(passWord[i], 20, 1, pfile); fread(reMark[i], 20, 1, pfile); fscanf_s(pfile, "n"); } for (int j = 0; j < g_count; j++) { for (int m = 0; m < 20; m++) { webSite[j][m] ^= 5; userName[j][m] ^= 5; passWord[j][m] ^= 5; reMark[j][m] ^= 5; } } fclose(pfile); } //查询数据 void FindInfo() { char aTemp[20]; int nFind = 0; printf("请输入要查询的站点:n"); scanf_s("%s", aTemp, 20); for (int nIndex = 0; nIndex < g_count; nIndex++) { if (strcmp(aTemp, webSite[nIndex]) == 0) { nFind = 1; } if (nFind == 1) { printf("站点:%s,账号:%s,密码:%s,备注:%sn", webSite[nIndex], userName[nIndex], passWord[nIndex], reMark[nIndex]); break; } } if (nFind == 0) { printf("查找失败!n"); } system("pause"); system("cls"); } //修改数据 void EditInfo() { char aTemp[20]; int nFind = 0; printf("请输入要修改的站点:n"); scanf_s("%s", aTemp, 20); for (int nIndex = 0; nIndex < g_count; nIndex++) { if (strcmp(aTemp, webSite[nIndex]) == 0) { nFind = 1; } if (nFind == 1) { printf("输入需要修改的 账号:"); scanf_s("%s", userName[nIndex], 20); printf("输入需要修改的 密码:"); scanf_s("%s", passWord[nIndex], 20); printf("输入需要修改的 备注:"); scanf_s("%s", reMark[nIndex], 20); printf("站点:%s,账号:%s,密码:%s,备注:%sn", webSite[nIndex], userName[nIndex], passWord[nIndex], reMark[nIndex]); SaveInfo(); break; } } if (nFind == 0) { printf("查找失败!n"); } system("pause"); system("cls"); } //启动时输入密码 void StartPassWord() { char spw[10] = "abcd"; //程序的启动密码 char write[10] = ""; int nSuccess = 0; for (int i = 1; i <= 3; i++) { printf("请输入启动密码:n"); scanf_s("%s", write, 10); if (strcmp(write, spw) == 0) { nSuccess = 1; break; } else { printf("你的输入有误!还有%d次机会n", 3 - i); system("pause"); system("cls"); } } if (nSuccess == 1) { printf("输入正确!按任意键开始使用程序n"); } else { printf("输入全部错误!按任意键结束程序n"); system("pause"); exit(1); } system("pause"); system("cls"); }

5.关于加密

异或加密:异或是一种运算方式,在C语言中是^符号,通常可以用于加密。

例如项目中的实现

复制代码
1
2
3
4
5
6
7
8
9
10
for (int j = 0; j < g_count; j++) { for (int m = 0; m < 20; m++) { webSite[j][m] ^= 5; userName[j][m] ^= 5; passWord[j][m] ^= 5; reMark[j][m] ^= 5; } }

四、总结

程序中还有很有缺陷,第一次写博客,希望大家多多包涵!

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

最后

以上就是帅气信封最近收集整理的关于C语言实现密码本小项目的全部内容,更多相关C语言实现密码本小项目内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(128)

评论列表共有 0 条评论

立即
投稿
返回
顶部