• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C语言实现密码本小项目

c语言 搞代码 4年前 (2022-01-06) 41次浏览 已收录 0个评论

这篇文章主要为大家详细介绍了C语言实现密码本小项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

一、引言

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

二、思路与原理

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

项目目标:

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

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

软件的部分截图如下:

主菜单

增加数据

删除数据

查询数据

全部数据

三、实现

1.头文件及数据定义

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

 #define _CRT_SECURE_NO_WARNINGS #include  #include  #include  //定义四个数组,用来存放站点、账号、密码、备注的值 char webSite[100][20]; char userName[100][20]; char passWord[100][20]; char reMark[100][20]; //定义一个全局变量 int g_count = 0;

2.程序的整体框架

 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.函数的声明

 //启动时输入密码 void StartPassWord(); //增加数据 void AddInfo(); //删除数据 void DelInfo(); //修改数据 void EditInfo(); //查询数据 void FindInfo(); //读取全部数据 void ReadAllInfo(); //保存数据 void SaveInfo(); //初始化数据 void InitInfo();

4.各个函数的实现

 //增加数据 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_c<strong style="color:transparent">来源gaodai#ma#com搞@代~码网</strong>ount++; 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, "当前个数%d\n", &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, "当前个数%d\n", 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, "当前个数%d\n", &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,备注:%s\n", 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,备注:%s\n", 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语言中是^符号,通常可以用于加密。

例如项目中的实现

 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语言实现密码本小项目的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C语言实现密码本小项目

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址