;.;.'程序设计及应用课程设计2015~2016学年第三学期院(系)信息工程与自动化学院专业自动化学号201510401308班级自动化153学生姓名张超设计时间2016年9月5日指导教师线岩团;.;.'1.设计题目:题目7:文件加密文件的传输会有明文和密文的区别,明文发送是不安全的,用一个程序实现发送文件的加密和解密操作。加密算法,密钥设计由同学自己选择现有的加密解密算法或是自己设计。要求:(1)对文件的字符根据加密算法,实现文件加密。(2)对操作给出必要的提示。(3)对存在的file1.txt文件,必须先打开,后读写,最后关闭。加密后的文件放在file2.txt。(4)解密文件保存在file3.txt中。2.设计目的:文件的传输会有明文和密文的区别,明文发送是不安全的,易遭到黑客拦截。现要求编写一个程序实现文本文件的加密和解密操作。3.要求:(1)用户可选择是“加密文件”还是“解密文件”操作;;.;.'(2)加密文件:用户输入明文文件名(待加密文件,该文件必须在磁盘存在)和密文文件名(加密后目标文件),系统能够打开明文源文件,每次读取源文件单个字节(直至读到文件结束),并与用户输入的密钥通过异或运算进行加密,加密后存入目标文件中;(3)解密文件:用户输入密文文件名(待解密文件,该文件必须在磁盘存在)和明文文件名(解密后目标文件),系统能够打开密文源文件,每次读取源文件单个字节(直至读到文件结束),并与用户输入的密钥通过异或运算进行解密,解密后存入目标文件中。一、设计思路和分析过程/*采用结构化程序设计思想,把系统的功能划分为哪几个模块,为实现每个功能模块设计了哪些函数及函数的作用说明*/程序分为三个模块:主函数菜单模块、“加密文件”模块、“解密文件”模块。“加密文件”模块对应voidfun1()、“解密文件”模块对应fun2()。Fun1()实现“加密文件”,根据要加密文件内容与key异或得到加密文件,并保存的第二个程序中去形成新的加密文件。;.;.'fun2()计算“解密文件”,根据要解密文件内容与key异或得到解密文件,并保存的第二个程序中去形成新的解密后的文件。二、程序流程图;.;.';.;.'三、程序代码#includestdio.hvoidfun1(){FILE*fp1,*fp2;charkey,ch;charfilename1[50],filename2[50];printf(Pleaseinputorginalfilenamen:);menu21:gets(filename1);if((fp1=fopen(filename1,rt))==NULL){printf(%sopenError!,filename1);gotomenu21;;.;.'}printf(Pleaseinputtargetfilenamen:);menu22:gets(filename2);if((fp2=fopen(filename2,wt+))==NULL){printf(%sopenError!,filename2);gotomenu22;}printf(Pleaseinputkey:);getche(key);printf(\n);while((ch=fgetc(fp1))!=EOF){ch=ch^key;fputc(ch,fp2);}fclose(fp1);fclose(fp2);printf(Decryptionsuccess!\n);}voidfun2(){FILE*fp1,*fp2;;.;.'charkey,ch;charfilename1[50],filename2[50];printf(Pleaseinputorginalfilenamen:);menu21:gets(filename1);if((fp1=fopen(filename1,rt))==NULL){printf(%sopenError!,filename1);gotomenu21;}printf(Pleaseinputtargetfilenamen:);menu22:gets(filename2);if((fp2=fopen(filename2,wt+))==NULL){printf(%sopenError!,filename2);gotomenu22;}printf(Pleaseinputkey:);getche(key);printf(\n);while((ch=fgetc(fp1))!=EOF){ch=ch^key;fputc(ch,fp2);};.;.'fclose(fp1);fclose(fp2);printf(Decryptionsuccess!\n);}voidfun3(){FILE*fp;charch,filename[50];printf(Pleaseenterthefilename:);gets(filename);if((fp=fopen(filename,r))==NULL){printf(Can'topenthisfile!);exit(0);}ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp);}fclose(fp);}main();.;.'{menu:printf(Plasechooseaoption:\n);printf(1.Encryptionafile.\n);printf(2.Decryptionafile.\n);printf(3.Opentheencryptionfile.\n);printf(0.Exittheapplication.\n);switch(getch()){case'1':fun1();break;case'2':fun2();break;case'3':fun3();break;case'0':exit(0);}gotomenu;}四、程序的调试过程及运行结果最后的key无法获取,使得其加密的后文件,并未加密,而是实现复制功能。发生错误的原因:(1)由于把gets(filenmaen1);输成了getc(filenmaen1);(2)由于把getche(key);输成了getch(key);;.;.'1.程序目录:2.文件加密:;.;.'3.文件解密4.打开加密文件;.;.'5.加密解密text文件五、课程设计总结经过2个礼拜的程序设计学习,很大程度上的让我更深刻的理解的C语言在实际上的运用,及其灵活。尤其在文件的存储和结构体模块,大大加强了我对概念和小细节的理解和把握。同时也让我知道的编程的艰辛,以后的路任重而道远。总之,这次课程设计让我收益非浅。对我将来的学习很有帮助。