您好,欢迎访问三七文档
xxxxxxxxxxxxxxxx课程设计学号xxxxxxxxxxxx班级xxxxxx姓名xxxxxx指导教师xxxxxxxxxx年xx月xx日xxxxxxxxxxxx课程设计任务书院系:电子专业:电子信息工程班级:xxxxxx学号:xxxxxxxxxx题目:解读简单的加密文件一、课程设计时间xxxx年xx月xx日至xxxx年xx月xx日,共计x周,xx学时。二、课程设计内容用C语言编写软件完成以下任务:设一个文件中,前2个字节存储的是“解密码”;后面连续存储了5个浮点型数据(file09.dat,由指导教师提供,参考下图),它们是5个浮点型数据与“解密码”进行位的异或运算的结果数据。要求用再次利用“解密码”数据,以及“位的异或运算”方法,将文件中的5个浮点型数据恢复成原始数据,并打印到屏幕上。提示:①一个整数与另一个整数“异或”运算2次,结果还是原来的整数,即:若A^K的值为T,则T^K的值必为A。请参考教材中有关“位运算”的内容。②利用指针,可以把4个字节的浮点数据理解为由2个整型数据构成的。三、课程设计要求1.程序质量:贯彻结构化的程序设计思想。用户界面友好,功能明确,操作方便。用户界面中的菜单至少应包括“显示解密码”、“显示解密之前的浮点数据”、“显示解密之后的浮点数据”、“退出”4项。代码应适当缩进,并给出必要的注释,以增强程序的可读性。2.课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。四、指导教师和学生签字指导教师:xxxxxx学生签名:xxxxxx五、说明书成绩六、教师评语xxxxxxxx设计用纸I目录一、需求分析..................................................................1二、程序流程图..............................................................2三、核心技术的实现说明及相应程序段......................7四、个人总结.................................................................11五、参考文献................................................................12六、源程序.....................................................................13xxxxxxxx设计用纸1一、需求分析根据对程序设计所给的题目的分析可知,整个程序的设计完成实现大致可分为三个部分,其中每一个部分对应一个函数,他们的功能分别为:1)读取并显示所给的解密码函数(mima);2)显示解密码前的符点型数据函数(nowfloat);3)显示解密码只后的符点型数据函数(oldfload);在这三个函数当中,每一步都是按照题目所给的要求来实现的.(一)文件分析:文件file09.dat一共有22个字节,前2个字节是1个整型数据,后面是有由每4个字节组成的浮点型数据,一共5个浮点型数据。(二)具体方法:一个整数与另一个整数“异或”运算2次,结果还是原来的整数。利用指针,可以把4个字节的浮点数据理解为xxxxxxxx设计用纸2由2个整型数据构成的。二、程序流程图程序总体结构图:xxxxxxxx设计用纸3输入CH的值植输出密码输出之前浮点数据输出之后浮点数据退出继续Viodmima()Viodnowfloat()Viodoldfloat()Exid(0)Continuexxxxxxxx设计用纸4xxxxxxxx设计用纸5xxxxxxxx设计用纸6xxxxxxxx设计用纸7三、核心技术的实现说明及相应程序段(1)如何打开读取文件并显示解密码:xxxxxxxx设计用纸8文件共22个字节,解密码为整形,占两个字节.利用fread函数阅读文件file09.dat.如读取解密码可表示为:if((fp=fopen(d:\\0009\\file09.dat,rb))==NULL)/*打开文件file09.dat*/{printf(cannotopenfile\n);exit(0);/*终止程序*/printf(jiemima);printf(\n);fread(&b,2,1,fp);/*阅读文件*/(2)如何读取并显示解秘前的五个连续符点型数据:文件存放的五个连续的符点型数据,每个符点型数据占4个字节,共二十个字节,再次利用fread函数阅读文件file09.dat.读取5个连续的符点型数据,可表示为:for(i=0;i5;i++){xxxxxxxx设计用纸9fread(&s[i],4,1,fp);printf(%f,s[i]);printf(\n);}(3)如何把5个浮点型数据变成10个整型数据,进行整型与整型之间的“异或”运算。4个字节5个浮点型数据图12个字节10个整型数据图2如图1,2,把一个浮点型数据变成2个整型数据,利用指针先把浮点型数据的地址赋给整型指针变量,表示为:for(k=0;k5;k++)fread(&s[k],4,1,fp);p=s;/*把浮点型数据的地址赋给整xxxxxxxx设计用纸10型指针变量*/然后以2个字节为1个整型数据,把它们赋给整型数组变量,共循环10次,可表示为:for(i=0;i10;i++)Y[i]=*p++;/*把整型指针变量指向的内容赋给整型数组变量*/形成的10个整型数据Y[10]分别与解密码b进行“异或”运算,变成10个新的整型数据z[10],可表示为:for(l=0,j=0;l10,j10;l++,j++)z[l]=Y[j]^b;/*整型数据与解密码进行异或运算*/(4)整个程序的收尾完善阶段,最后把10个新的整型数据z[10],每2个合成1个浮点型数据,共5个u[5].利用指针,把10个新整型数据的地址赋给浮点型指针变量,把浮点型指针变量指向的内容赋给浮点型数组变量,分别输出。可表示为:voidman(intw[],intm){float*q,u[5];xxxxxxxx设计用纸11inti;q=w;/*把整型数据的地址赋给浮点型指针变量*/for(i=0;im/2;i++){u[i]=*q++;/*把浮点型指针变量指向的内容赋给浮点型数组变量*/}printf(%f,u[i]);printf(\n);}四、个人总结为期一周的C语言程序设计结束了,仔细回想一下,在这一周的学习中,收获不少.通过这次C语言课程设计,使我更进一步了解认识C语言这一门学科,他不仅仅是简单的设计编辑程序,他需要更深度的理论和完整准确的数据作为支撑点,每个程序的xxxxxxxx设计用纸12编译都要掌握其真正的操作价值,明确他的目的.这是智慧与逻辑的结合,考察我们的思维能力,锻炼我们的实际操作能力.通过这次C语课程设计,使我加深了对C语言的了解,也提高了C语言的应用能力。这次课程任务设计,主要考察怎样打开并读取所给的文件的内容,如何使用调用函数,怎样对整形数据进行位的异或运算.在我做这次课设之前,对这些程序的运用还是很陌生,不知怎样才能更好的利用,也不理解什么时候该使用,但通过这次课设,经过查找资料,请教老师和同学,终于能够完成这项任务,并且掌握了运用方法,同时还增强了我的动手能力和逻辑思维,使我受益匪浅.五、参考文献1谭浩强.C程序设计.北京:清华大学出版社,20052刘成等.C语言程序设计实验指导与习题集.北京:中国铁道出版社,2006xxxxxxxx设计用纸13六、源程序#includestdio.hvoidmima(){intb;FILE*fp;/*定义文件型指针变量*/if((fp=fopen(d:\\0009\\file09.dat,rb))==NULL)/*打开文件file09.dat*/{printf(cannotopenfile\n);exit(0);/*终止程序*/}printf(jiemima);printf(\n);fread(&b,2,1,fp);/*阅读文件*/printf(%d,b);/*输出整型数据*/printf(\n);fclose(fp);/*关闭文件*/}voidnowfloat(){inti;intb;floats[5];FILE*fp;if((fp=fopen(d:\\0009\\file09.dat,rb))==NULL)/*打开文件file09.dat赋给fp*/{printf(cannotopenfile\n);exit(0);}printf(mimaqiandefloat);xxxxxxxx设计用纸14printf(\n);fread(&b,2,1,fp);for(i=0;i5;i++){fread(&s[i],4,1,fp);printf(%f,s[i]);printf(\n);}fclose(fp);}voidoldfloat(){inti,j,l,k;intb;intz[10];intY[10];int*p;floats[5];FILE*fp;if((fp=fopen(d:\\0009\\file09.dat,rb))==NULL){printf(cannotopenfile\n);exit(0);}printf(jiemihoudefloat);printf(\n);fread(&b,2,1,fp);for(k=0;k5;k++)fread(&s[k],4,1,fp);p=s;/*把浮点型数据的地址赋给整型指针变量*/for(i=0;i10;i++)Y[i]=*p++;/*把整型指针变量指向的内容赋给整型数组变量*/for(l=0,j=0;l10,j10;l++,j++)xxxxxxxx设计用纸15z[l]=Y[j]^b;/*整型数据与解密码进行异或运算*/man(z,10);fclose(fp);}voidman(intw[],intm){float*q,u[5];inti;q=w;/*把整型数据的地址赋给浮点型指针变量*/for(i=0;im/2;i++){u[i]=*q++;/*把浮点型指针变量指向的内容赋给浮点型数组变量*/printf(%f,u[i]);printf(\n);}}main(){while(1){intch;gotoxy(1,1);/*窗口开始坐标函数*/window(1,1,99,99);/*窗口结束坐标函数*/printf(********welcometousejiemima*********\n);printf(“*-----------zhangxueyingzhizuo----------*\n”);printf(********************menu********************\n);printf(*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*\n);printf(*1mima2nowfloat*\n);printf(*3oldfloat4exit(0)*\n);printf(*---------------------------------------------------------*\n);printf(Pleaseinputwhichyouwant(1-4):);ch=getch();xxxxxxxx设计用纸16switch(ch){case'1':mima();break;case'2':nowfloat();break;case'3':oldfloat();break;case'4':exit(0);default:continue;}}}
本文标题:解读简单的加密文件
链接地址:https://www.777doc.com/doc-2040900 .html