当前位置:首页 > 通信资讯 > 正文

c#项目开发实战密码(c语言实战小项目)

一、引言

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

二、思路与原理

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

项目目标:

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

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

软件的部分截图如下:

c#项目开发实战密码(c语言实战小项目)

主菜单

c#项目开发实战密码(c语言实战小项目)

增加数据

c#项目开发实战密码(c语言实战小项目)

删除数据

c#项目开发实战密码(c语言实战小项目)

查询数据

c#项目开发实战密码(c语言实战小项目)

全部数据

三、实现

1.头文件及数据定义

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

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

2.程序的整体框架

  1. int main(void)
  2. {
  3. InitInfo();
  4. int nChoice = 1;
  5. StartPassWord();
  6. while (nChoice)
  7. {
  8. printf("*********************************欢迎使用密码本*********************************\n");
  9. printf(" 请输入以下选项进行操作: \n");
  10. printf(" 1、增加数据 \n");
  11. printf(" 2、删除数据 \n");
  12. printf(" 3、修改数据 \n");
  13. printf(" 4、查询数据 \n");
  14. printf(" 5、全部数据 \n");
  15. printf(" 6、结束程序 \n");
  16. printf("********************************************************************************\n");
  17. scanf_s("%d", &nChoice);
  18. switch (nChoice)
  19. {
  20. case 1:
  21. {
  22. AddInfo();//增加数据
  23. }break;
  24. case 2:
  25. {
  26. DelInfo(); //删除数据
  27. }break;
  28. case 3:
  29. {
  30. EditInfo();//修改数据
  31. }break;
  32. case 4:
  33. {
  34. FindInfo();//查询数据
  35. }break;
  36. case 5:
  37. {
  38. ReadAllInfo();//查看全部
  39. }break;
  40. case 6:
  41. {
  42. nChoice = 0;//退出程序
  43. }break;
  44. }
  45. }
  46. printf("欢迎下次使用!\n");
  47. system("pause");
  48. return 0;
  49. }

3.函数的声明

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

4.各个函数的实现

  1. //增加数据
  2. void AddInfo()
  3. {
  4. printf("输入需要存储的 站点:");
  5. scanf_s("%s", webSite[g_count], 20);
  6. printf("输入需要存储的 账号:");
  7. scanf_s("%s", userName[g_count], 20);
  8. printf("输入需要存储的 密码:");
  9. scanf_s("%s", passWord[g_count], 20);
  10. printf("输入需要存储的 备注:");
  11. scanf_s("%s", reMark[g_count], 20);
  12. g_count++;
  13. SaveInfo();
  14. InitInfo();
  15. system("pause");
  16. system("cls");
  17. }
  18. //查看全部
  19. void ReadAllInfo()
  20. {
  21. FILE *pfile;
  22. if (fopen_s(&pfile, "data.i", "r") != 0)
  23. {
  24. printf("file open fail");
  25. exit(1);
  26. }
  27. fscanf_s(pfile, "当前个数%d\n", &g_count);
  28. printf("当前有%d条数据\n", g_count);
  29. for (int i = 0; i < g_count; i++)
  30. {
  31. printf("第%d条数据:\n", i + 1);
  32. printf("站点:%s,账号:%s,密码:%s,备注:%s",
  33. webSite[i], userName[i], passWord[i], reMark[i]);
  34. printf("\n");
  35. }
  36. fclose(pfile);
  37. system("pause");
  38. system("cls");
  39. }
  40. //保存数据
  41. void SaveInfo()
  42. {
  43. for (int j = 0; j < g_count; j++)
  44. {
  45. for (int m = 0; m < 20; m++)
  46. {
  47. webSite[j][m] ^= 5;
  48. userName[j][m] ^= 5;
  49. passWord[j][m] ^= 5;
  50. reMark[j][m] ^= 5;
  51. }
  52. }
  53. FILE *pfile;
  54. if (fopen_s(&pfile, "data.i", "w") != 0)
  55. {
  56. printf("file open fail");
  57. exit(1);
  58. }
  59. fseek(pfile, 0, SEEK_SET);
  60. fprintf(pfile, "当前个数%d\n", g_count);
  61. for (int i = 0; i < g_count; i++)
  62. {
  63. fwrite(webSite[i], 20, 1, pfile);
  64. fwrite(userName[i], 20, 1, pfile);
  65. fwrite(passWord[i], 20, 1, pfile);
  66. fwrite(reMark[i], 20, 1, pfile);
  67. fprintf(pfile, "\n");
  68. }
  69. fclose(pfile);
  70. }
  71. //删除数据
  72. void DelInfo()
  73. {
  74. char aTemp[20];
  75. int nFind = 0;
  76. int nIndex = 0;
  77. printf("请输入要删除的站点:\n");
  78. scanf_s("%s", aTemp, 20);
  79. for (; nIndex < g_count; nIndex++)
  80. {
  81. if (strcmp(aTemp, webSite[nIndex]) == 0)
  82. {
  83. nFind = 1;
  84. break;
  85. }
  86. }
  87. if (nFind == 1)
  88. {
  89. for (int i = nIndex; i < g_count; i++)
  90. {
  91. strcpy_s(webSite[i], 20, webSite[i + 1]);
  92. strcpy_s(userName[i], 20, userName[i + 1]);
  93. strcpy_s(passWord[i], 20, passWord[i + 1]);
  94. strcpy_s(reMark[i], 20, reMark[i + 1]);
  95. }
  96. g_count--;
  97. SaveInfo();
  98. InitInfo();
  99. printf("删除成功\n");
  100. }
  101. else
  102. {
  103. printf("查找失败!\n");
  104. }
  105. system("pause");
  106. system("cls");
  107. }
  108. //初始化数据
  109. void InitInfo()
  110. {
  111. FILE *pfile;
  112. if (fopen_s(&pfile, "data.i", "r") != 0)
  113. {
  114. printf("请先建立data.i文件!");
  115. system("pause");
  116. exit(1);
  117. }
  118. fscanf_s(pfile, "当前个数%d\n", &g_count);
  119. for (int i = 0; i < g_count; i++)
  120. {
  121. fread(webSite[i], 20, 1, pfile);
  122. fread(userName[i], 20, 1, pfile);
  123. fread(passWord[i], 20, 1, pfile);
  124. fread(reMark[i], 20, 1, pfile);
  125. fscanf_s(pfile, "\n");
  126. }
  127. for (int j = 0; j < g_count; j++)
  128. {
  129. for (int m = 0; m < 20; m++)
  130. {
  131. webSite[j][m] ^= 5;
  132. userName[j][m] ^= 5;
  133. passWord[j][m] ^= 5;
  134. reMark[j][m] ^= 5;
  135. }
  136. }
  137. fclose(pfile);
  138. }
  139. //查询数据
  140. void FindInfo()
  141. {
  142. char aTemp[20];
  143. int nFind = 0;
  144. printf("请输入要查询的站点:\n");
  145. scanf_s("%s", aTemp, 20);
  146. for (int nIndex = 0; nIndex < g_count; nIndex++)
  147. {
  148. if (strcmp(aTemp, webSite[nIndex]) == 0)
  149. {
  150. nFind = 1;
  151. }
  152. if (nFind == 1)
  153. {
  154. printf("站点:%s,账号:%s,密码:%s,备注:%s\n",
  155. webSite[nIndex], userName[nIndex], passWord[nIndex], reMark[nIndex]);
  156. break;
  157. }
  158. }
  159. if (nFind == 0)
  160. {
  161. printf("查找失败!\n");
  162. }
  163. system("pause");
  164. system("cls");
  165. }
  166. //修改数据
  167. void EditInfo()
  168. {
  169. char aTemp[20];
  170. int nFind = 0;
  171. printf("请输入要修改的站点:\n");
  172. scanf_s("%s", aTemp, 20);
  173. for (int nIndex = 0; nIndex < g_count; nIndex++)
  174. {
  175. if (strcmp(aTemp, webSite[nIndex]) == 0)
  176. {
  177. nFind = 1;
  178. }
  179. if (nFind == 1)
  180. {
  181. printf("输入需要修改的 账号:");
  182. scanf_s("%s", userName[nIndex], 20);
  183. printf("输入需要修改的 密码:");
  184. scanf_s("%s", passWord[nIndex], 20);
  185. printf("输入需要修改的 备注:");
  186. scanf_s("%s", reMark[nIndex], 20);
  187. printf("站点:%s,账号:%s,密码:%s,备注:%s\n",
  188. webSite[nIndex], userName[nIndex], passWord[nIndex], reMark[nIndex]);
  189. SaveInfo();
  190. break;
  191. }
  192. }
  193. if (nFind == 0)
  194. {
  195. printf("查找失败!\n");
  196. }
  197. system("pause");
  198. system("cls");
  199. }
  200. //启动时输入密码
  201. void StartPassWord()
  202. {
  203. char spw[10] = "abcd"; //程序的启动密码
  204. char write[10] = "";
  205. int nSuccess = 0;
  206. for (int i = 1; i <= 3; i++)
  207. {
  208. printf("请输入启动密码:\n");
  209. scanf_s("%s", write, 10);
  210. if (strcmp(write, spw) == 0)
  211. {
  212. nSuccess = 1;
  213. break;
  214. }
  215. else
  216. {
  217. printf("你的输入有误!还有%d次机会\n", 3 - i);
  218. system("pause");
  219. system("cls");
  220. }
  221. }
  222. if (nSuccess == 1)
  223. {
  224. printf("输入正确!按任意键开始使用程序\n");
  225. }
  226. else
  227. {
  228. printf("输入全部错误!按任意键结束程序\n");
  229. system("pause");
  230. exit(1);
  231. }
  232. system("pause");
  233. system("cls");
  234. }

5.关于加密

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

例如项目中的实现

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

四、总结

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

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

原文链接:https://blog.csdn.net/wudao_MyWay/article/details/81085548

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。