欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實現(xiàn)密碼本小項目

 更新時間:2020年02月26日 10:45:55   作者:吾道_MyWay  
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)密碼本小項目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、引言

學(xué)C語言有一段時間了,趁著正好做了密碼本的小項目,把它分享出來。

二、思路與原理

密碼本,見名知意,就是存放賬號密碼,起到備忘錄作用的本子,將需要備忘的數(shù)據(jù)通過加密存放在文本文件中,打開的文本文件為加密文本,需要通過軟件查看已經(jīng)存放的數(shù)據(jù),提高安全性。(軟件設(shè)計了啟動密碼,三次過后自動退出)

項目目標(biāo):

  • 保存賬號密碼,退出后打開軟件數(shù)據(jù)不丟失
  • 進(jìn)行簡單加密
  • 能按條件查找賬號密碼
  • 能修改賬號密碼數(shù)據(jù)
  • 能按條件進(jìn)行刪除數(shù)據(jù)

知識涉及到數(shù)組、文件操作的使用以及簡單異或加密。

軟件的部分截圖如下:

主菜單

增加數(shù)據(jù)

刪除數(shù)據(jù)

查詢數(shù)據(jù)

全部數(shù)據(jù)

三、實現(xiàn)

1.頭文件及數(shù)據(jù)定義

在密碼本的小項目中我設(shè)立四個了存放數(shù)據(jù)的數(shù)組,所存放的賬號密碼的站點(diǎn),存放的賬號,存放的密碼以及備注。定義了一個全局變量,用來計數(shù)當(dāng)前密碼本使用的條數(shù)。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
//定義四個數(shù)組,用來存放站點(diǎn)、賬號、密碼、備注的值
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("        請輸入以下選項進(jìn)行操作:       \n");
 printf("         1、增加數(shù)據(jù)         \n");
 printf("         2、刪除數(shù)據(jù)         \n");
 printf("         3、修改數(shù)據(jù)         \n");
 printf("         4、查詢數(shù)據(jù)         \n");
 printf("         5、全部數(shù)據(jù)         \n");
 printf("         6、結(jié)束程序         \n");
 printf("********************************************************************************\n");
 scanf_s("%d", &nChoice);
 switch (nChoice)
 {
 case 1:
 {
 AddInfo();//增加數(shù)據(jù) 
 }break;
 case 2:
 {
 DelInfo(); //刪除數(shù)據(jù)
 }break;
 case 3:
 {
 EditInfo();//修改數(shù)據(jù)
 }break;
 case 4:
 {
 FindInfo();//查詢數(shù)據(jù)
 }break;
 case 5:
 {
 ReadAllInfo();//查看全部
 }break;
 case 6:
 {
 nChoice = 0;//退出程序
 }break;
 }
 }
 printf("歡迎下次使用!\n");
 
 system("pause");
 return 0;
}

3.函數(shù)的聲明

//啟動時輸入密碼
void StartPassWord();
//增加數(shù)據(jù)
void AddInfo();
//刪除數(shù)據(jù)
void DelInfo();
//修改數(shù)據(jù)
void EditInfo();
//查詢數(shù)據(jù)
void FindInfo();
//讀取全部數(shù)據(jù)
void ReadAllInfo();
//保存數(shù)據(jù)
void SaveInfo();
//初始化數(shù)據(jù)
void InitInfo();

4.各個函數(shù)的實現(xiàn)

//增加數(shù)據(jù)
void AddInfo()
{
 printf("輸入需要存儲的 站點(diǎn):");
 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āng)前個數(shù)%d\n", &g_count);
 printf("當(dāng)前有%d條數(shù)據(jù)\n", g_count);
 for (int i = 0; i < g_count; i++)
 {
 printf("第%d條數(shù)據(jù):\n", i + 1);
 printf("站點(diǎn):%s,賬號:%s,密碼:%s,備注:%s",
 webSite[i], userName[i], passWord[i], reMark[i]);
 printf("\n");
 
 }
 fclose(pfile);
 system("pause");
 system("cls");
}
 
//保存數(shù)據(jù)
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āng)前個數(shù)%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);
}
 
//刪除數(shù)據(jù)
void DelInfo()
{
 char aTemp[20];
 int nFind = 0;
 int nIndex = 0;
 printf("請輸入要刪除的站點(diǎn):\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");
}
 
//初始化數(shù)據(jù)
void InitInfo()
{
 FILE *pfile;
 if (fopen_s(&pfile, "data.i", "r") != 0)
 {
 printf("請先建立data.i文件!");
 system("pause");
 exit(1);
 }
 fscanf_s(pfile, "當(dāng)前個數(shù)%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);
}
 
//查詢數(shù)據(jù)
void FindInfo()
{
 char aTemp[20];
 int nFind = 0;
 
 printf("請輸入要查詢的站點(diǎn):\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("站點(diǎn):%s,賬號:%s,密碼:%s,備注:%s\n",
 webSite[nIndex], userName[nIndex], passWord[nIndex], reMark[nIndex]);
 break;
 }
 }
 if (nFind == 0)
 {
 printf("查找失?。n");
 }
 system("pause");
 system("cls");
}
 
//修改數(shù)據(jù)
void EditInfo()
{
 char aTemp[20];
 int nFind = 0;
 
 printf("請輸入要修改的站點(diǎn):\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("站點(diǎn):%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次機(jī)會\n", 3 - i);
 system("pause");
 system("cls");
 }
 }
 if (nSuccess == 1)
 {
 printf("輸入正確!按任意鍵開始使用程序\n");
 }
 else
 {
 printf("輸入全部錯誤!按任意鍵結(jié)束程序\n");
 system("pause");
 exit(1);
 }
 system("pause");
 system("cls");
}

5.關(guān)于加密

異或加密:異或是一種運(yùn)算方式,在C語言中是^符號,通常可以用于加密。

例如項目中的實現(xià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;
 }
 }

四、總結(jié)

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解析結(jié)構(gòu)體的定義及使用詳解

    解析結(jié)構(gòu)體的定義及使用詳解

    本篇文章是對結(jié)構(gòu)體的定義以及使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 詳細(xì)解析命令行的getopt_long()函數(shù)

    詳細(xì)解析命令行的getopt_long()函數(shù)

    getopt_long支持長選項的命令行解析,函數(shù)中的參數(shù)argc和argv通常直接從main()的兩個參數(shù)傳遞而來
    2013-09-09
  • C語言結(jié)構(gòu)體詳細(xì)圖解分析

    C語言結(jié)構(gòu)體詳細(xì)圖解分析

    C 數(shù)組允許定義可存儲相同類型數(shù)據(jù)項的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲不同類型的數(shù)據(jù)項,本篇讓我們來了解C 的結(jié)構(gòu)體
    2022-03-03
  • C語言中 type *(0)的具體使用

    C語言中 type *(0)的具體使用

    表達(dá)式?type * (0)?在 C/C++ 編程中是一個常見的技巧,通常用于內(nèi)核編程和一些系統(tǒng)編程場景中,本文主要介紹了C語言中 type *(0)的具體使用,感興趣的可以了解一下
    2024-08-08
  • 詳解C++ 拷貝構(gòu)造函數(shù)

    詳解C++ 拷貝構(gòu)造函數(shù)

    這篇文章主要介紹了C++ 拷貝構(gòu)造函數(shù)的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C++調(diào)用tensorflow教程

    C++調(diào)用tensorflow教程

    今天小編就為大家分享一篇關(guān)于C++調(diào)用tensorflow教程,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • C++ Opengl旋轉(zhuǎn)功能附源碼下載

    C++ Opengl旋轉(zhuǎn)功能附源碼下載

    這篇文章主要介紹了C++ Opengl旋轉(zhuǎn)功能附源碼下載,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Visual?Studio?2022?配置?PCL?1.12.1?的問題小結(jié)

    Visual?Studio?2022?配置?PCL?1.12.1?的問題小結(jié)

    這篇文章主要介紹了Visual?Studio?2022?配置?PCL?1.12.1?的經(jīng)驗總結(jié)分享,本文通過圖文實例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • C 語言二叉樹幾種遍歷方法詳解及實例

    C 語言二叉樹幾種遍歷方法詳解及實例

    這篇文章主要介紹了C 語言二叉樹幾種遍歷方法詳解及實例的相關(guān)資料,二叉樹在數(shù)據(jù)結(jié)構(gòu)當(dāng)中是非常重要的知識要點(diǎn),這里對二叉樹進(jìn)行了總結(jié),需要的朋友可以參考下
    2017-01-01
  • C++超集C++/CLI模塊的基本用法

    C++超集C++/CLI模塊的基本用法

    這篇文章介紹了C++超集C++/CLI模塊的基本用法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論