c++—簡單的密碼本實現

主要實現功能有增刪改查數據,本地讀取保存。web

數據存儲設計 data.h data.cpp函數

#pragma once
#define 添加帳戶      1
#define 刪除帳戶      2
#define 修改帳戶      3
#define 查詢帳戶      4
#define 查詢全部      5
#define 保存本地      6
#define 退出          7

#define NUM 100
extern int g_nNum; //當前密碼本容量
extern int oCho;    //判斷是否保存到本地了

//定義帳戶結構體
typedef struct _ACCOUNT
{
    char website[100];
    char userName[100];
    char passWord[100];
}ACCOUNT,*PACCOUNT;
#include "data.h"
int g_nNum;

函數方法的實現:spa

ctrl.h設計

#pragma once
#include "data.h"
//增長帳戶
void insertInfo(ACCOUNT acc[], int* nCount);
//刪除帳戶
void deleteInfo(ACCOUNT acc[], int *nCount);
//修改帳戶
void alterInfo(ACCOUNT acc[], int nCount);
//查詢帳戶
void searchInfo(ACCOUNT acc[], int nCount);
//查詢全部帳戶
void searchALLInfo(ACCOUNT acc[], int nCount);
//保存操做
void saveInfo(ACCOUNT acc[], int nCount);
//讀取數據
void readInfo(PACCOUNT *pAc, int *nCount);

ctrl.cppcode

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include "data.h"
#include "ctrl.h"
void insertInfo(ACCOUNT acc[], int* nCount)
{

    int nNum = *nCount;
    if (nNum <0 || nNum > NUM)
    {
        printf("添加異常請重試!\n");
            return;
    }
    printf("請輸入須要保存的站點:\n");
    scanf_s("%s", acc[nNum].website,100);
    char ss = getchar();
    printf("請輸入須要保存的用戶名:\n");
    scanf_s("%s", acc[nNum].userName,100);
     ss = getchar();
    printf("請輸入須要保存的密碼:\n");
    scanf_s("%s", acc[nNum].passWord,100);
     ss = getchar();
    (*nCount)++;
    printf("保存成功!返回主菜單\n");
    
}

void deleteInfo(ACCOUNT acc[], int* nCount) 
{
    int nNum = *nCount;
    if (nNum <0 || nNum > NUM)
    {
        printf("有點小毛病我也不知道咋回事你再試試!\n");
        return;
    }
    char str[100] = {};
    printf("請輸入你想要刪除的站點:\n");
    scanf_s("%s", str, 100);
    for (int i = 0; i < nNum; i++)
    {
        if (strcmp(str, acc[i].website) == 0)
        {
            for (int j=i;j<nNum-1;j++)
            {
                strcpy_s(acc[j].website, 100, acc[j + 1].website);
                strcpy_s(acc[j].userName, 100, acc[j + 1].userName);
                strcpy_s(acc[j].passWord, 100, acc[j + 1].passWord);
            }
            
            printf("刪除成功!\n");
            (*nCount)--;
            return;
        }
        
    }
    printf("查無此站點請重試!\n");
}

void alterInfo(ACCOUNT acc[], int nCount)
{
    char str[100] = {};
    printf("請輸入你想要修改的站點:\n");
    scanf_s("%s", str, 100);
    for (int i = 0; i < nCount; i++)
    {
        if (strcmp(str, acc[i].website) == 0)
        {
            
            printf("請輸入修改後的站點:\n");
            scanf_s("%s", acc[i].website, 100);
            printf("請輸入修改後的用戶名:\n");
            scanf_s("%s", acc[i].userName, 100);
            printf("請輸入修改後的密碼:\n");
            scanf_s("%s", acc[i].passWord, 100);
            printf("修改爲功!\n");
            return;
        }
        
    }
    printf("查無此站點請重試!\n");
}

void searchInfo(ACCOUNT acc[], int nCount)
{
    char str[100] = {};
    printf("請輸入你想要查詢的站點:\n");
    scanf_s("%s", str, 100);
    for (int i = 0;i<nCount;i++)
    {
        if (strcmp(str,acc[i].website) ==0)
        {
            printf("查詢結果爲:\n");
            printf("站  點:%s  \n", acc[i].website);
            printf("用戶名:%s  \n", acc[i].userName);
            printf("密  碼:%s  \n", acc[i].passWord);
            return;
        }
    }
    printf("暫無搜索結果\n");

}

void searchALLInfo(ACCOUNT acc[], int nCount)
{
    
    printf("-------------查詢結果----------------\n");
    if (0==nCount)
    {
        printf("空\n");
        return;
    }
    
    for (int i = 0; i< nCount; i++)
    {
        printf("站  點:%s  \n",acc[i].website);
        printf("用戶名:%s  \n",acc[i].userName);
        printf("密  碼:%s  \n",acc[i].passWord);
        printf("--------------------------------\n");
    }
}


void saveInfo(ACCOUNT acc[], int nCount)
{
    FILE* pFile=NULL;
    errno_t err = fopen_s(&pFile, "file.txt", "wb");
    if (err != 0)
    {
        printf("保存本地失敗!\n");
        return ;

    }
    g_nNum = nCount;
    fwrite(&nCount, sizeof(nCount), 1, pFile);
    fwrite(&g_nNum, sizeof(g_nNum), 1, pFile);
    int bytsize = sizeof(ACCOUNT) * g_nNum;
    char* buf = (char*)malloc(bytsize);
    memcpy_s(buf, bytsize, acc, bytsize);
    for (int i = 0; i < bytsize; i++)
    {
        buf[i] += 2;
    }
    fwrite(buf, sizeof(ACCOUNT), g_nNum, pFile);
    fclose(pFile);
    free(buf);
    buf = NULL;
    printf("已成功保存到本地!\n");
}
void readInfo(PACCOUNT *pAc, int *nCount)
{

    FILE* pFile=NULL;
    errno_t err = fopen_s(&pFile, "file.txt", "rb");
    if (err != 0)
    {
        *pAc = (PACCOUNT)malloc(sizeof(ACCOUNT) * NUM);
        g_nNum = NUM;
        return ;
    }
    fread(nCount, sizeof(nCount), 1, pFile);
    fread(&g_nNum, sizeof(g_nNum), 1, pFile);
    if (g_nNum==0)
    {
        *pAc= (PACCOUNT)malloc(sizeof(ACCOUNT));
        fclose(pFile);
        return;
    }
    *pAc = (PACCOUNT)malloc(sizeof(ACCOUNT) * g_nNum);
    memset(*pAc, 0, sizeof(ACCOUNT) * g_nNum);
    size_t lent = fread(*pAc, sizeof(ACCOUNT), g_nNum, pFile);
    if (lent!=g_nNum)
    {
        printf("讀取錯誤!");
        fclose(pFile);
        return;
    }
    int bytsize = sizeof(ACCOUNT) * g_nNum;
    char* buf = (char*) *pAc;
    for (int i = 0; i < bytsize; i++)
    {
        buf[i] -= 2;
    }
    
    fclose(pFile);
    
}

主界面 menuMain.cppblog

#include <stdio.h>
#include <malloc.h>
#include "data.h"
#include "ctrl.h"
#include <stdlib.h>
int main()
{
    int g_nNum = 0; //當前密碼容量
    int nCount = 0; //當前密碼個數
    PACCOUNT pAc = nullptr;
    readInfo(&pAc, &nCount);
    //pAc = (PACCOUNT)malloc(sizeof(ACCOUNT) * NUM);
    int nOver = 1;
    int oper;
    int oCho = 0;
    printf("歡迎使用塵風密碼本\n");
    while (nOver)
    {
        printf("======主菜單===========\n");
        printf("1 添加帳戶\n");
        printf("2 刪除帳戶\n");
        printf("3 修改帳戶\n");
        printf("4 查詢帳戶\n");
        printf("5 查詢全部帳戶\n");
        printf("6 保存本地\n");
        printf("7 退出\n");
        printf("請輸入你想要進行的操做序號:\n");
        scanf_s("%d",&oper);

        switch (oper)
        {
        case 添加帳戶:
        {
            insertInfo(pAc, &nCount);
            oCho += 1;
        }
            break;
        case 刪除帳戶:
        {
            deleteInfo(pAc, &nCount);
            oCho += 1;
        }
            break;
        case 修改帳戶:
        {
             alterInfo(pAc,nCount);
             oCho += 1;

        }
            break;
        case 查詢帳戶:
        {
            searchInfo(pAc, nCount);
            
        }
                break;
        case 查詢全部: 
        {
            searchALLInfo(pAc, nCount);
        }
                break;
        case 保存本地: 
        {
            saveInfo(pAc, nCount);
            oCho = 0;
        }
                break;
        case 退出:
        {
            if (oCho!=0)
            {
                printf("更改是否保存到本地?(y or 其餘)\n");
                char x = getchar();
                char s;
                scanf_s("%c", &s,1);        
                if ('y'== s)
                {
                    saveInfo(pAc, nCount);
                }

            }
            printf("謝謝您的使用!");
            nOver = 0;
            system("pause");
            system("cls");
            
        }
                break;
        default:
        {
            printf("請輸入正確命令");
        }
            break;
        }
        
    }
    free(pAc);
    pAc = nullptr;

}
相關文章
相關標籤/搜索