c语言隐私信息管理系统2022

重要的事情说三遍:

不要抄,抄对你没有好处!

不要抄,抄对你没有好处!

不要抄,抄对你没有好处!


题目要求:

隐私信息管理系统

本题要求采用结构体数组(或链表)存储数据。具体要求如下:

1) 程序执行时,首先要进行密码检测,以不让非法用户使用本程序。标准密码预先在程序中设定,程序运行时,若用户的输入密码和标准密码相同,则显示“口令正确!”并转去执行后续程序;若不相等,重新输入,3次都不相等则显示“您是非法用户!”并终止程序的执行。

2) 现在每个人在不同网站都有用户名和密码等信息,还有银行卡号及密码信息,众多的信息经常忘记,最好的方法是将这些信息用文件的形式保存起来。但是很多私密数据(特别是密码)不能明文存储,比较保险的办法是采用密文存储,即先将密码明文加密成密文后,再进行存储。加密方法自行设计,例如输入密码明文为字符1,但存储时却存储的是其密文字符a,这只要通过ASCII值加一个整数值即可实现。

3) 需要保护的数据信息包括编号,帐号位置,帐号描述,帐号名,密码等,如:

编号

帐号位置

帐号描述

帐号名

密码

1

https://next.xuetangx.com

学堂在线

xiangdesheng

123456

2

http://acm.hdu.edu.cn

杭电OJ

acm002

654321

3

https://www.icourse163.org

中国大学MOOC

30047495@qq.com

123456

此表仅为示例,设计时请根据自己的设计确定由哪些信息组成结构体。

4) 系统具体提供以下功能:

Ø 系统以菜单方式工作。开始运行程序时要进行密码验证。

Ø 信息的录入功能、浏览功能。

Ø 信息的查询功能。按帐号名查询,如输入“acm”可查出上表第2条记录。

Ø 信息的删除、修改功能。

Ø 信息存入文件。信息中的密码必须要加密后才能存入文件,建议先输入一串字符作为加密密钥,对信息中的密码加密后再进行存储,即确保存入文件中的信息里面,“密码”是加密后的字符串。

Ø 将文件中的信息导入。与信息存入文件的过程相反,将密码解密后导入。

5) 训练的主要知识点:数组、指针、结构体、文件。


上面的功能需求为编者提供的建议性方案,同学们可进行完善性修改。

本程序数据使用链表存储;

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//启动状态
static int keyopen=0;
//默认管理员密码
static char savekey[9]="1234";
//密码加密字符串,如果更改,以前的数据将会无法读取
static char savefilekey[20]="hjfzjskhghhbgjza";
static char tempfilekey[100];
static char killfilekey[100];
//结构体,链表
static struct ListNode *head=NULL,*temp=NULL;
struct ListNode
{
    int num;
    char https[100];
    char adds[100];
    char name[100];
    char key_hide[100];
    struct ListNode *next;
} map,*sky;
//函数初定义
int opensystem();
struct ListNode *readlist();
struct ListNode *changelist();
struct ListNode *scanlist();
struct ListNode *oldlist();
struct ListNode *filelist();
struct ListNode *openfilelist();
struct ListNode *deletelist();
struct ListNode *listtwo(struct ListNode *p1,struct ListNode *p2);
void printlist( struct ListNode *L );
void changekey();
int hash(char n[]);
int openhash();
int safeexit();
void beikeyopen();
//主函数
int main()
{
    int a,b=1,c;
    char mainopen;
    printf("这是隐私信息管理系统\n\n");
    opensystem();

    if(!keyopen)return 0;
    oldlist();
    do
    {
        mainopen='0';
        printf("\n     ***********主菜单*********\n");
        printf("       1.信息录入\n");
        printf("       2.信息查询\n");
        printf("       3.信息删除\n");
        printf("       4.信息修改\n");
        printf("       5.信息浏览\n");
        printf("       6.读取文件\n");
        printf("       7.存入文件\n");
        printf("       8.更改密码\n");
        printf("       *********************\n\n");
        printf("请输入序号(如“1”):\n");
        scanf("%d",&a);
        switch(a)
        {
        case 1:
        {
            if(head==NULL)
                head=readlist();
            else
            {
                temp=readlist();
                head=listtwo(head,temp);
            }
            filelist();
            break;
        }
        case 5:
        {
            printlist(head);
            break;
        }
        case 6:
        {
            openfilelist();
            break;
        }
        case 7:
        {
            filelist();
            break;
        }
        case 2:
        {
            scanlist();
            break;
        }
        case 4:
        {
            printlist(head);
            changelist();
            break;
        }
        case 3:
        {
            deletelist();
            break;
        }
        case 8:
        {
            changekey();
            opensystem();
            if(!keyopen)return 0;
            break;
        }
        default:
        {
            printf("\n****输入错误****\n");
            printf("\n是否重新进入主菜单(Y/N)\n");
            scanf("%s",&mainopen);
        }
        }
        printf("\n是否重新进入主菜单(Y/N)\n");
        scanf("%s",&mainopen);
    }
    while(mainopen=='Y'||mainopen=='y');
    safeexit();

    return 0;
}
//启动状态
int opensystem()
{
    char in[100];
    int a;
    FILE *fp3;
    if(fopen("key.txt","r")==NULL)
    {
        fp3=fopen("key.txt","w");
        hash(savekey);
        fprintf(fp3,"%s",tempfilekey);
        fclose(fp3);
    }
    fp3=fopen("key.txt","r");

    fscanf(fp3,"%s",tempfilekey);
    openhash();
    fclose(fp3);
    printf("\n开始进行密码检测\n");
    printf("请输入管理员密码:\n");
    for(a=0; a<3; a++)
    {
        scanf("%s",in);
        if(!strcmp(in,killfilekey))
        {
            printf("\n****密码正确****\n\n");
            keyopen=1;
            return 0;
        }
        if(2-a>0)
            printf("\n密码错误,你还有%d次机会,请重新输入密码:\n",2-a);
    }
    printf("\n密码错误,非法使用本程序\n");
    return 0;
}
int safeexit()
{
    printf("是否安全退出(Y/N)\n");
    getchar();
    if(getchar()=='n'||getchar()=='N')
        return 0;
    printf("\n*******安全退出需存入文件*******\n");
    filelist();
    printf("\n\n*******安全退出成功*******\n");
    keyopen=0;
}
//创建群体
struct ListNode *readlist()
{
    int number=0;
    struct ListNode *p,*bei=NULL,*tail;
    tail=bei;
    //printf("\n输入编号,位置,描述,用户名,密码\n");
    printf("\n编号         位置          描述          用户名          密码\n");
    printf("-------------------------------------------------------------------------\n");
    printf(" 1   https://next.xuetangx.com     学堂在线     xiangdesheng     123456\n\n");
    printf("编号输入0以结束\n\n");
    do
    {
        p=(struct ListNode*)malloc(sizeof(struct ListNode));
        printf("\n*=================*\n");
        printf("请输入编号:\n");
        scanf("%d",&p->num);
        number=p->num;
        if(number<=0)
        {
            printf("\n****输入结束****\n\n");
            return bei;
        }

        printf("请输入位置:\n");
        scanf("%s",p->https);
        printf("请输入描述:\n");
        scanf("%s",p->adds);
        printf("请输入用户名:\n");
        scanf("%s",p->name);
        printf("请输入用户名密码:\n");
        scanf("%s",p->key_hide);
        p->next=NULL;
        if(tail)
        {
            tail->next=p;
        }
        else bei=p;
        tail=p;
    }
    while(number>0);
    return bei;
}
//输出内容
void printlist( struct ListNode *L )
{
    struct ListNode *p = L;
    printf("\n\n");
    printf("                    **********所有成员信息**********");
    printf("\n编号         位置          描述          用户名          密码\n");
    printf("-------------------------------------------------------------------------\n");
    while (p)
    {
        printf("%d             %s            %s            %s               %s \n", p->num,p->https,p->adds,p->name,p->key_hide);
        p = p->next;
    }
    printf("\n");
}
//合并链表
struct ListNode *listtwo(struct ListNode *p1,struct ListNode *p2)
{
    struct ListNode *a,*b;
    a=p1;
    b=p2;
    if(a==NULL)
    {
        head=p2;
        return p2;
    }
    while (1)
    {
        if(a->next==NULL)
        {
            a->next=b;
            break;
        }
        a= a->next;
    }
    return p1;
}
//更改密码
void changekey()
{
    keyopen=0;
    FILE *fp2;
    printf("\n请输入旧的管理员密码");
    opensystem();
    if(keyopen)
    {
        printf("\n请更改新的管理员密码:\n");
        scanf("%s",savekey);
        fp2=fopen("key.txt","w");
        hash(savekey);
        fprintf(fp2,"%s",tempfilekey);
        fclose(fp2);
        printf("\n****更改完成****\n");
    }
    keyopen=0;
}
//查询指定项
struct ListNode *scanlist()
{
    struct ListNode *a;
    char scanone[99];
    int n=0;
    printf("\n请输入查询的账号:\n");
    scanf("%s",&scanone);
    a=head;
    printf("\n编号         位置          描述          用户名          密码\n");
    printf("-------------------------------------------------------------------------\n");
    while (a)
    {
        if(strstr(a->name,scanone))
            printf("%d             %s            %s            %s               %s \n", a->num,a->https,a->adds,a->name,a->key_hide);
        a=a->next;
    }
    printf("\n****查询完成****\n\n");
}
//删除功能
struct ListNode *deletelist()
{
    int n=0;
    struct ListNode *a,*b=NULL,*c=NULL;
    a=head;
    char delopen;
    do
    {
        delopen='0';
        printf("\n请输入需要删除的成员编号:\n");
        scanf("%d",&n);
        printf("\n删除的成员有:\n");
        printf("\n编号         位置          描述          用户名          密码\n");
        printf("-------------------------------------------------------------------------\n");
        while (a)
        {
            if(a->num==n)
            {

                printf("%d             %s            %s            %s               %s \n", a->num,a->https,a->adds,a->name,a->key_hide);
                if(a==head)
                {
                    if(a->next!=NULL)
                        head=a->next;
                    else head=NULL;
                }

                else
                {
                    b->next=a->next;
                }
            }
            b=a;
            a=a->next;
        }
        printf("\n****删除完成****\n");
        printf("\n是否再次删除成员(Y/N)\n");
        scanf("%s",&delopen);
    }
    while(delopen=='Y'||delopen=='y');
}
//修改功能
struct ListNode *changelist()
{
    int n=0;
    char chaopen;
    struct ListNode *a;
    a=head;
    do
    {
        chaopen='0';
        printf("\n请输入需要修改的成员编号:\n");
        scanf("%d",&n);
        printf("\n请输入新的成员内容:\n");
        while (a)
        {
            if(a->num==n)
            {
                printf("\n编号             位置            描述             用户名             密码\n");
                printf("-------------------------------------------------------------------------\n");
                scanf("%d%s%s%s%s", &a->num,a->https,a->adds,a->name,a->key_hide);
            }
            a=a->next;
        }
        printf("\n****修改结束****\n");
        printf("\n是否再次修改成员(Y/N)\n");
        scanf("%s",&chaopen);
    }
    while(chaopen=='Y'||chaopen=='y');
}
struct ListNode *filelist()
{
    FILE *fp1;
    struct ListNode *p =head;
    printf("\n是否存入文件(Y/N)\n");
    getchar();
    if(getchar()=='n'||getchar()=='N')
        return 0;
    fp1=fopen("data.txt","w+");
    while (p)
    {
        hash(p->key_hide);
        fprintf(fp1,"%d %s %s %s %s\n",p->num,p->https,p->adds,p->name,tempfilekey);
        p = p->next;
    }
    fclose(fp1);
    printf("\n已存入Data.txt\n");
    printf("\n****存入完成****\n");
}
//读取文件
struct ListNode *openfilelist()
{
    FILE *fp;
    char a;
    int number=0,i;
    struct ListNode *p,*bei=NULL,*tail=NULL;
    fp=fopen("data.txt","r");
    if(fopen("data.txt","r")==NULL)
    {
        printf("\n*****读取失败,文件不存在!*****\n");
        printf("\n你可以先创建信息,再存入文件\n");
        return bei;
    }
    p=(struct ListNode*)malloc(sizeof(struct ListNode));
    p->next=NULL;
    while(fscanf(fp,"%d %s %s %s %s\n",&p->num,p->https,p->adds,p->name,tempfilekey)!=EOF)
    {
        openhash();
        for(i=0;killfilekey[i]!='\0';i++)
    {
        p->key_hide[i]=killfilekey[i];
    }
       p->key_hide[i]='\0';
        bei=listtwo(bei,p);
        p=(struct ListNode*)malloc(sizeof(struct ListNode));
        p->next=NULL;

    }
    head=bei;
    fclose(fp);
    printf("\n已读取到系统\n");
   // printlist(head);
    printf("\n****读取结束****\n\n");
}
struct ListNode *oldlist()
{
     FILE *fp;
     fp=fopen("data.txt","r");
    if(fopen("data.txt","r")!=NULL)
    {
        printf("\n*****存在旧文件!*****\n");
        printf("\n是否存入系统(Y/N)\n");
         getchar();
       if(getchar()=='n'||getchar()=='N');
       else
        openfilelist();

    }
}
int hash(char n[])
{
    int i;
    for(i=0;n[i]!='\0';i++)
    {
        tempfilekey[i]=n[i]+savefilekey[i];
    }
    tempfilekey[i]='\0';
}
int openhash()
{
    int i;
    for(i=0;tempfilekey[i]!='\0';i++)
    {
        killfilekey[i]=tempfilekey[i]-savefilekey[i];
    }
    killfilekey[i]='\0';
}


主页面

                                                                       功能


最后:

谢谢观看。

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c语言学生籍贯管理系统课程设计 本系统是基于C语言的学生籍贯管理系统,旨在帮助学校管理学生的籍贯信息,方便学校进行统计分析和信息查询。该系统具有添加、修改、查询和删除学生籍贯信息的功能。 系统主要包括以下几个模块:学生信息管理模块、籍贯信息管理模块和查询统计模块。其中,学生信息管理模块用于添加和修改学生的个人信息,籍贯信息管理模块则用于录入和更新学生的籍贯信息。查询统计模块则可以根据不同的条件查询和统计学生的籍贯信息,比如按省份、城市等条件进行查询和统计。系统还可以支持对学生信息的单个和批量删除操作,保证信息的完整性和准确性。 在系统设计中,要考虑到用户友好性和易用性,保证系统的稳定性和性能,同时也要注重数据的安全性和隐私保护。因此,在设计过程中要充分考虑各种异常情况和用户行为,做好相应的异常处理和安全控制。另外,也要注意代码的规范性和可读性,保证系统的可维护性和扩展性。 在开发过程中,可以采用模块化的设计思想,将系统划分为若干个独立的功能模块,分别进行设计和开发,最后再将各个模块整合起来。同时也可以结合文件操作和数据结构等知识,实现系统对数据的持久化存储和高效管理。 总之,通过本系统的设计与开发,可以让学校更加方便地管理学生的籍贯信息,提高信息的时效性和准确性,为学校决策和统计分析提供更为有效的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值