c语言课程设计之文本文件加密技术

#include<stdio.h>
#include<stdlib.h>//使用了exit函数
#include<string.h>
#define M 30
void menu(void);//菜单函数
void create(void);//新建文件及输入文本函数
void encrypt(void);//加密函数
void decrypt(void);//解密函数
int judge(void);//判断函数
int proceed(code);//判断密码是否合理
char code[M];
main()
{
    int num;//定义菜单指令的变量
    while(1)
    {
        menu();
        scanf("%d",&num);
        switch(num)
        {
            case 0:printf("\n");
                   exit(0);
            case 1:system("cls");//清屏处理
                   create();
                   break;
            case 2:system("cls");
                   encrypt();
                   break;
            case 3:system("cls");
                   decrypt();
                   break;
            default:printf("input error, enter again!\n");
                   break;
        }
    }
}
void menu(void)
{
    printf("***********\n");
    printf("****\n");
    printf("* 文本文件加密技术 *\n");
    printf("******************************************************\n");
    printf("\n0.exit\n");
    printf("1.create and input\n");
    printf("2.encrypt\n");
    printf("3.decrypt\n");
    printf("\nchoose(0--3):");
}
void create(void)
{
    FILE *fp;//定义文件指针fp用以指向某个文件
    char ch[100];//定义输入字符
    char fname[40];//文件名字
    int i;//判断次数
    printf("input file name:");
    scanf("%s",&fname);
    if((fp = fopen(fname,"w"))==NULL)
    {
        printf("failure to open %s.\n",fname);
        exit(0);
    }
    //判断文件能否正常打开或建立
    printf("input the content:\n");
    for(i = 0;;i++)
    {
        scanf("%c",&ch[i]);
        if(ch[i] == ‘#‘&&ch[i-1] == ‘#‘)
            break;
        fputc(ch[i],fp);//将字符的ASCII码写入文件
    }
    //while((ch = getchar()) != ‘#‘)
    //fputc(ch,fp);
    fclose(fp);
}
void encrypt(void)
{
    int n = 1,x;
    FILE *fp, *fp1;
    char c, fname[M];
    while(n)
   {
     printf("\n输入加密密码(至少两个字母和四个数字):\n");
     scanf("%s",code);
     x = proceed(code);
     if(x == 1)
     {
        while(n)
        {
           printf("\n输入加密的文件名\n");
           scanf("%s",fname);
           if((fp = fopen(fname,"r")) == NULL)//以读的方式打开源文件
           {
               printf("\n无法打开,继续按 Y or y\n");
               getchar();
               n = judge();
           }
           if((fp1 = fopen("encrypt.txt","w")) == NULL)//以写的方式打开目标文件
           {
               printf("无法打开\n");
               exit(0);
           }
           while((c = fgetc(fp)) != EOF)
           {
               fputc(c+1,fp1);
           }//将fp所指向文件中的内容进行加一的加密方法
            fclose(fp1);
            fclose(fp);
            remove(fname);//remove函数删除指定文件
            rename("encrypt.txt",fname);//给文件重命名,实现文件移动功能(若归属文件夹不同,可以实现该文件移动)
            printf("\n文档加密并保存成功!\n");
            printf("\n是否继续加密,继续请按y:\n");
            n = judge();
       }
    }
     else
     printf("\n密码不合格!\n");
     getchar();//停顿一下,等待判断是否继续加密
   }
}
void decrypt(void)
{
    int n = 1;
    FILE *fp,*fp1;
    char c,fname[M];
    char code1[M];//用户输入的密码
    int i;
    while(n)
    {
        printf("\n输入解密密码\n");
        scanf("%s",code1);
        if(strcmp(code1,code) == 0)
        {
            while(n)
            {
                printf("\n解密的文件名:\n");
                scanf("%s",fname);
                if((fp = fopen(fname,"r")) == NULL)
                {
                    printf("\n 文件打不开\n");
                    exit(0);
                }
                if((fp1 = fopen("decrypt.txt","w")) == NULL)
                {
                    printf("无法打开文件!\n");
                    exit(0);
                }
                while((c = fgetc(fp)) != EOF)//文件末尾标志
                {
                    fputc(c-1,fp1);
                    if(c-1 != ‘#‘)
                        putchar(c-1);
                }
                fclose(fp1);
                fclose(fp);
                remove(fname);
                rename("decrypt.txt",fname);//将decrypt.txt重命名为fname,归属文件夹不同,可以做到移动的效果
                printf("\n\n是否继续解密,继续请按y:\n");
                n = judge();
            }
        }
        else printf("\n输入有误,重新输入:\n");
        getchar();
    }
}
int judge(void)
{
    char x;//要判断的数
    scanf("%c",&x);
    if(x == ‘Y‘ || x == ‘y‘)
        return 1;
    else
        return 0;
}
int proceed(char code[])
{
    int i, flag1 = 0,flag2 = 0,len;
    len = strlen(code);
    for(i = 0; i< len; i++)
    {
        if(code[i] >= ‘a‘ && code[i] <= ‘z‘)
            flag1 += 1;
        else if(code[i] >= ‘A‘ && code[i] <= ‘Z‘)
            flag1 += 1;
        else if(code[i] >= ‘0‘ && code[i] <= ‘9‘)
            flag2 += 1;
    }
    if(flag1 >= 2 && flag2 >= 4)
        return 1;
    else
        return 0;
}
时间: 2024-10-15 01:33:12

c语言课程设计之文本文件加密技术的相关文章

C语言课程设计

目录 实现目的 游戏玩法介绍 实现流程与作品架构 任务列表及贡献度 总结感想 作品源码与仓库地址(附页) 资料引用与出处(附页) 实现目的 2048,作为一款极其经典的游戏,从发行到现在,已经有了极多的版本和玩法,各种优秀应用游戏层出不穷. 本游戏注重"视觉展现效果和更快速的动画".注重数据储存,是一种对于算法和 UI 设计有一定要求的应用设计. 本小组秉承课程所学与外部优秀知识技术相结合的观念,多人合作,共同研究学习. 以 C 语言为基础.C++ 语言库函数为辅助.Windows 程

C语言课程设计—图书管理系统

这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中居然在QQ网络硬盘中找到了当初的teta版,公布于此,以作纪念. C源码例如以下: #include<stdio.h> #include<stdlib.h> #include<string.h> struct book{ char book_name[30]; int bianhao; double price; char author[20]; char state[20]; cha

学生管理系统-火车订票系统 c语言课程设计

概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描述: 学生信息: 基本信息: 学号: int 姓名: char 128 密码: char 32 年龄: int 班级: int 成绩信息: 数学成绩: int C 语言成绩:int 语文成绩: int 名次: int 1.  实现对学生信息基本信息的录入,其中名次根据成绩自动计算(添加).学号不能

c语言实现简单的文本文件加密 ---初试

先用python 做一个文本文件  (一个学号列表) python 代码: [[email protected] kuing]# cat input.py #!/usr/bin/env python f = open('design.txt','w+') for i in range(10001,200001): f.write('%d\n' %i) f.close() 没错  就是这么简单... 然后就是这些东西.. ... 199998 199999 200000 接下来 写c语言代码: [

C语言课程设计第三节课:指针和链表使用 &#160; &nbsp; 150809205

一.学习体会 C语言的难点就是指针,学习的时候感觉指针的难点在于与其相关的技术和方法很多,所以学习              的时候并不能像前边一样一个知识点一道题就明白了. 二.以下是我对指针原理的理解 指针通常指向一片储存空间,而开辟的储存空间地址为指针的量 1.指针与数组 数组开辟的是一段连续的内存空间,而指针则是单一特定内存地址,因此两者不可互相转换. 数组变量可以赋值给指针(即将数组第一个变量的地址赋予指针). 2.动态内存分配与静态内存分配 (1)动态内存分配 根据程序的需要开辟空间

C语言课程设计之学生信息管理系统

#include"stdio.h"        //标准的输入输出函数文件头部说明 #include"math.h"              // 数学函数头部说明 #include"string.h" #include"stdlib.h"    //通过该函数头部里的函数,改变控制台的背景和颜色 #include"windows.h"    //头文件声明,下文用到了改变控制台的宽度和高度 #defi

C语言课程设计第三节课作业刘子威

1 指针的概念分解      指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 1.指针的类型2.指针所指向的类型3.指针的值或者叫指针所指向的内存区4.还有指针本身所占据的内存区 学习C语言动态内存分配 对于指针,正确的分配动态内存是十分重要的,本文将着重阐述动态内存分配函数malloc,calloc,realloc以及memset的用法. 一.对于malloc,在终端输入 #:man  malloc可以知道函数原型是: Void

C语言课程设计——电影院订票系统

1. 课题简介 大家都爱看电影,现请参考一个熟悉电影票预订系统,实现C语言版的订票系统.了解订票如何实现的.系统主要有2类用户:管理员用户和顾客用户. 管理员用户登录系统后,实现电影放映厅信息管理和电影场次信息管理.具体菜单有: 1.电影放映厅信息管理 选择该菜单能展示所有放映厅,用户输入某个放映厅编号后,能实现对放映厅增加.删除.修改功能.主要对movie_house.txt数据修改. 放映厅主要字段信息有: 放映厅编号.放映厅名称.放映厅行数.放映厅列数.放映厅座位初始状态. 假如放映厅是一

C语言课程设计 Win32应用程序

问题描述: 请设计一个职工信息管理程序,以方便人事部门对本单位职工的管理,该程序应该具有以下功 能: (1)能从键盘输入职工的信息 . (2)给定职工号,显示职工的信息. (3)给定工作部门,显示该部门的职工信息. (4)给定职工号,修改职工的信息. (5)给定职工号,删除职工信息. 题目要求: (1)按照分析.设计.编码.调试.测试的软件过程完成这个应用程序. (2)职工信息应该包含职工号.姓名.工作部门.职称.入厂时间.工资. (3)为程序设计windows 窗口,在该窗口上以按钮的形式为用