c语言课程设计 字符文件处理,c语言课程设计之文本文件加密技术

#include#include//使用了exit函数

#include

#define M 30

void menu(void);//菜单函数

void create(void);//新建文件及输入文本函数

void encrypt(void);//加密函数

void decrypt(void);//解密函数

int judge(void);//判断函数

int proceed(code);//判断密码是否合理

charcode[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;charc, 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();

}

}elseprintf("\n密码不合格!\n");

getchar();//停顿一下,等待判断是否继续加密

}

}void decrypt(void)

{int n = 1;

FILE*fp,*fp1;charc,fname[M];char code1[M];//用户输入的密码

inti;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(charcode[])

{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;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值