程序设计及应用课程设计.docx
《程序设计及应用课程设计.docx》由会员分享,可在线阅读,更多相关《程序设计及应用课程设计.docx(11页珍藏版)》请在冰点文库上搜索。
程序设计及应用课程设计
程序设计及应用课程设计
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异或得到解密文件,并保存的第二个程序中去形成新的解密后的文件。
二、程序流程图
三、程序代码
#include
voidfun1()
{
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语言在实际上的运用,及其灵活。
尤其在文件的存储和结构体模块,大大加强了我对概念和小细节的理解和把握。
同时也让我知道的编程的艰辛,以后的路任重而道远。
总之,这次课程设计让我收益非浅。
对我将来的学习很有帮助。