C语言实现密码本小项目

一、引言

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

二、思路与原理

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

项目目标:

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

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

软件的部分截图如下:

主菜单

增加数据

删除数据

查询数据

全部数据

三、实现

1.头文件及数据定义

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

#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.程序的整体框架

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_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, "当前个数%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语言实现密码本小项目 的全部内容, 来源链接: utcz.com/p/244883.html

回到顶部