• 密码本(初版),求指正


     1 <data.h>
     2 
     3 #pragma once
     4 
     5 // 全局变量,常量的声明
     6 #define NUM 100     // 密码最大长度
     7 extern int g_nNum;
     8 
     9 
    10 
    11 // 定义存储账号密码的结构体
    12 typedef struct _PASSWORD 
    13 {
    14     char website[100]; // 站点名
    15     char username[100]; // 用户名
    16     char passWord[100]; // 密码
    17     char note[100];     // 备注
    18 }PASSWORD, *PPASSWORD;
    1 <data.c>
    2 
    3 #include <stdio.h>
    4 #include <stdlib.h>
    5 #include "data.h"
    6 
    7 // 定义全局变量
    8 int g_nNum;
     1 <ctrl.h>
     2 
     3 #pragma once
     4 #include "data.h"
     5 // 查看所有密码
     6 void searchAllInfo(PASSWORD pwd[], int nCount);
     7 
     8 // 新增密码
     9 void insertInfo(PASSWORD pwd[], int * pnCount);
    10 
    11 // 删除密码
    12 void deleteInfo(PASSWORD pwd[], int *pnCount);
    13 
    14 // 修改密码
    15 void changInfo(PASSWORD pwd[], int nCount);
    16 
    17 // 查询密码
    18 void searchInfo(PASSWORD pwd[], int nCount);
    19 
    20 // 保存密码(文本方式)
    21 void saveInfoText(PASSWORD pwd[], int nCount);
    22 
    23 // 保存密码(二进制)
    24 void saveInfoBin(PASSWORD pwd[], int nCount);
    25 
    26 // 从本地文件中读取密码,用于初始化密码本
    27 void initialInfo(PPASSWORD * ppPwd, int * pnCount);
      1 <ctrl.c>
      2 
      3 #define _CRT_SECURE_NO_WARNINGS
      4 #include <stdio.h>
      5 #include <stdlib.h>
      6 #include <string.h>
      7 #include "ctrl.h"
      8 #include "data.h"
      9 
     10 // 查看所有密码
     11 void searchAllInfo(PASSWORD pwd[], int nCount)
     12 {
     13     printf("==共计匹配: %3d 条记录==============
    ", nCount);
     14     for (size_t i = 0; i < nCount; i++)
     15     {
     16         
     17         printf("目  标: %s  
    ", pwd[i].website);
     18         printf("用户名: %s 
    ", pwd[i].username);
     19         printf("密  码: %s 
    ", pwd[i].passWord);
     20         printf("备  注: %s 
    ", pwd[i].note);
     21     }
     22 
     23     printf("
    ");
     24     system("pause");
     25     system("cls");
     26 
     27 }
     28 
     29 // 新增数据
     30 void insertInfo(PASSWORD pwd[], int * pnCount)
     31 {
     32     int i = *pnCount;
     33     if (i < 0 || i >= NUM);
     34     {
     35         printf("插入位置异常:%d 
    ", i);
     36         return;
     37     }
     38     printf("请输入<目标站点>
    ");
     39     scanf("%s", pwd[i].website);
     40     printf("请输入< 用户名 >
    ");
     41     scanf("%s", pwd[i].username);
     42     printf("请输入< 密码 >
    ");
     43     scanf("%s", pwd[i].passWord);
     44     printf("请输入< 备注 >
    ");
     45     printf("%s", pwd[i].note);
     46 
     47     (*pnCount)++;
     48 
     49     saveInfoText(pwd, *pnCount);
     50 
     51     printf("
    ");
     52     system("pause");
     53     system("cls");
     54 }
     55 
     56 // 删除密码
     57 void deleteInfo(PASSWORD pwd[], int *pnCount)
     58 {
     59     int i = -1;
     60     printf("请输入待删除项<密码ID>
    ");
     61     scanf("%d", &i);
     62     if (i < 0 || i >= NUM)
     63     {
     64         printf("删除位置异常: %d 
    ", i);
     65         return;
     66     }
     67 
     68     for (size_t j = i; j < *pnCount - 1; j++)
     69     {
     70         pwd[j] = pwd[j + 1];
     71     }
     72 
     73     (*pnCount)--;
     74 
     75     saveInfoBin(pwd, *pnCount);
     76 
     77     printf("
    ");
     78     system("pause");
     79     system("cls");
     80 }
     81 
     82 // 修改密码
     83 void changInfo(PASSWORD pwd[], int nCount)
     84 {
     85     int i = -1;
     86     printf("请输入待修该项<密码ID>
    ");
     87     scanf("%d", &i);
     88     if (i < 0 || i >= NUM)
     89     {
     90         printf("修改位置异常:%d 
    ", i);
     91         return;
     92     }
     93     printf("请输入<目标站点>
    ");
     94     scanf("%s", pwd[i].website);
     95     printf("请输入< 用户名 >
    ");
     96     scanf("%s", pwd[i].username);
     97     printf("请输入< 密码 >
    ");
     98     scanf("%s", pwd[i].passWord);
     99     printf("请输入< 备注 >
    ");
    100     printf("%s", pwd[i].note);
    101 
    102     saveInfoBin(pwd, nCount);
    103 
    104     printf("
    ");
    105     system("pause");
    106     system("cls");
    107 }
    108 
    109 // 查询密码
    110 void searchInfo(PASSWORD pwd[], int nCount)
    111 {
    112     char key[100] = { 0 };
    113     printf("请输入查找密码的关键字:
    ");
    114     scanf(key, 100);
    115 
    116     // 找出所有匹配项
    117     int findPwd[100] = { 0 };
    118     int nfindCount = 0;
    119     for (size_t i = 0; i < nCount; i++)
    120     {
    121         if (strstr(pwd[i].website, key))
    122         {
    123             findPwd[nfindCount++] = i;
    124             continue;
    125         }
    126         if (strstr(pwd[i].username, key))
    127         {
    128             findPwd[nfindCount++] = i;
    129             continue;
    130         }
    131         if (strstr(pwd[i].passWord, key))
    132         {
    133             findPwd[nfindCount++] = i;
    134             continue;
    135         }
    136         if (strstr(pwd[i].note, key    ))
    137         {
    138             findPwd[nfindCount++] = i;
    139             continue;
    140         }
    141     }
    142 
    143     // 打印所有匹配项
    144     printf("==共计匹配: %3d 条记录==============
    ", nfindCount);
    145     for (size_t i = 0; i < nfindCount; i++)
    146     {
    147         int pos = findPwd[i];
    148         printf("目  标: %s  
    ", pwd[pos].website);
    149         printf("用户名: %s 
    ", pwd[pos].username);
    150         printf("密  码: %s 
    ", pwd[pos].passWord);
    151         printf("备  注: %s 
    ", pwd[pos].note);
    152     }
    153     
    154     printf("
    ");
    155     system("pause");
    156     system("cls");
    157 }
    158 
    159 // 保存密码(文本方式)
    160 void saveInfoText(PASSWORD pwd[], int nCount)
    161 {
    162     /*
    163         1. 打开文件
    164         2. 读写文件
    165         3. 关闭文件
    166     */
    167     FILE *pf = NULL;
    168     fopen("data.txt", "w");
    169     if (feof(pf))
    170     {
    171         return;
    172     }
    173     fprintf(pf, "==共计:%3d条记录==================
    ", nCount);
    174     for (int i = 0; i < nCount; i++)
    175     {
    176         fprintf(pf, "--ID: %3d---------------
    ", i);
    177         fprintf(pf, "目  标: %s  
    ", pwd[i].website);
    178         fprintf(pf, "用户名: %s 
    ", pwd[i].username);
    179         fprintf(pf, "密  码: %s 
    ", pwd[i].passWord);
    180         fprintf(pf, "备  注: %s 
    ", pwd[i].note);
    181     }
    182     
    183     fclose(pf);
    184 
    185     printf("保存文本密码成功,使用后请尽快删除!! 
    ");
    186     system("pause");
    187     system("cls");
    188 }
    189 
    190 // 保存密码(二进制)
    191 void saveInfoBin(PASSWORD pwd[], int nCount)
    192 {
    193     // 打开文件
    194     FILE * pf = NULL;
    195     fopen("data.i", "wb");
    196 
    197     if (feof(pf))
    198     {
    199         return;
    200     }
    201 
    202     // 读写文件
    203     fwrite(&nCount, sizeof(nCount), 1, pf);    // 当前密码个数
    204     fwrite(&g_nNum, sizeof(g_nNum), 1, pf);   // 当前密码本容量
    205 
    206     // 先加密(使用中间文件),再存储
    207     int byteSize = sizeof(PASSWORD) * g_nNum;
    208     char * buf = (char *)malloc(byteSize);
    209     memcpy(buf, pwd, byteSize);
    210 
    211     for (size_t i = 0; i < byteSize; i++)
    212     {
    213         buf[i] ^= (i + nCount + g_nNum); // 加密
    214     }
    215 
    216     size_t rlen = fwrite(buf, sizeof(PASSWORD), g_nNum, pf); // 密码数组
    217     if (rlen != g_nNum)
    218     {
    219         printf("写入密码文件错误 
    ");
    220     }
    221     else
    222     {
    223         printf("成功!!
    ");
    224     }
    225 
    226     // 关闭文件
    227     fclose(pf);
    228     free(buf);
    229 }
    230 
    231 // 从本地文件中读取密码,用于初始化密码本
    232 void initialInfo(PPASSWORD * ppPwd, int * pnCount)
    233 {
    234     // 打开文件
    235     FILE *pf = NULL;
    236     fopen("data.i", "rb");
    237     if (!feof(pf));
    238     {
    239         *ppPwd = (PPASSWORD)malloc(sizeof(PASSWORD) * NUM);
    240         g_nNum = NUM;
    241         return;
    242     }
    243 
    244     // 读写文件
    245     // 先读取,再解密
    246     fread(pnCount, sizeof(int), 1, pf); // 当前密码个数
    247     fread(&g_nNum, sizeof(g_nNum), 1, pf);    // 当前密码本容量
    248     *ppPwd = (PPASSWORD)malloc(sizeof(PASSWORD)*g_nNum);
    249     size_t rlen = fread(*ppPwd, sizeof(PPASSWORD), g_nNum, pf); // 密码数组
    250     if (rlen != g_nNum)
    251     {
    252         printf("读取密码文件错误
    ");
    253         fclose(pf);
    254         return;
    255     }
    256     int byteSize = sizeof(PASSWORD) * g_nNum;
    257     char * buf = (char *)*ppPwd;
    258     for (size_t i = 0; i < byteSize; i++)
    259     {
    260         buf[i] ^= (i + *pnCount + g_nNum);
    261     }
    262 
    263     // 关闭文件
    264     fclose(pf);
    265 }
     1 <main.c>
     2 
     3 #define _CRT_SECURE_NO_WARNINGS
     4 #include <stdio.h>
     5 #include <stdlib.h>
     6 #include "data.h"
     7 #include "ctrl.h"
     8 
     9 int printMenu(); // 声明
    10 
    11 int main()
    12 {
    13     PPASSWORD pPwd = 0;    // 密码结构体数组
    14     int nCount = 0;    // 当前密码个数
    15     g_nNum = 0;        // 当前密码本容量
    16 
    17     int menuID;
    18     
    19     while (1)
    20     {
    21         menuID = printMenu();
    22     
    23         switch (menuID)
    24         {
    25         case 1: searchAllInfo(pPwd, nCount); break;
    26         case 2: insertInfo(pPwd, &nCount); break;
    27         case 3: deleteInfo(pPwd, &nCount); break;
    28         case 4: changInfo(pPwd, nCount); break;
    29         case 5: searchInfo(pPwd, nCount); break;
    30         case 6: saveInfoText(pPwd, nCount); break;
    31         case 7: saveInfoBin(pPwd, nCount); break;
    32         }
    33         
    34     }
    35 
    36 
    37     return 0;
    38 }
    39 
    40 
    41 // 打印主菜单
    42 int printMenu()
    43 {
    44     int menuID;
    45     printf("**************************欢迎使用密码本**************************
    ");
    46     printf("*                                                                *
    ");
    47     printf("*                ---------------------------------               *
    ");
    48     printf("*                    |     Powered By NoThx  |                   *
    ");
    49     printf("*                ---------------------------------               *
    ");
    50     printf("*                                                                *
    ");
    51     printf("*                                                                *
    ");
    52     printf("*                1)查看所有的密码                                *
    ");
    53     printf("*                2)新增密码                                      *
    ");
    54     printf("*                3)删除密码                                      *
    ");
    55     printf("*                4)修改密码                                      *
    ");
    56     printf("*                5)查询密码                                      *
    ");
    57     printf("*                6)保存密码(文本方式)                            *
    ");
    58     printf("*                7)保存密码(二进制方式)                          *
    ");
    59     printf("*                                                                *
    ");
    60     printf("******************************************************************
    ");
    61     
    62 
    63     scanf("%d", &menuID);
    64     return menuID;
    65 
    66 }
  • 相关阅读:
    浅拷贝在项目中的应用
    MVC3中使用AuthorizeAttribute特性来完成登陆权限的验证
    一个面向对象的JS例子,很好的支持了开闭原则(不要重复你昨天的代码)
    c++学习笔记5
    JS跨域访问操作iframe
    Select函数
    MacOS10.8.3+Xcode4.6+IOS6.1 编译FFmpeg,简单使用
    eclipse部署,在tomcat中找不到eclipse发布的项目。eclipse更改项目发布路径
    初识Volley(二)
    MySQL 5.0 迁移到 MariaDB 10.0.2 存储过程无法迁移
  • 原文地址:https://www.cnblogs.com/nothx/p/8523070.html
Copyright © 2020-2023  润新知