您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 电子商务 > C语言加密解密程序 设计报告
昆明理工大学《计算机程序设计基础》课程综合实践型教学课题报告课题名称:文章加密组长:学号041003017姓名杨彦凯组员:学号041003008姓名廖源学号041003071姓名杨麟飞学号041003007姓名张振喜学号041003030姓名杨达辉学院:建筑工程学院专业班级:土木工程(1)班指导教师:付湘琼昆明理工大学计算中心2005年6月20日昆明理工大学计算中心《计算机程序设计基础》课程综合实践型教学课题报告课程名称:C程序设计学院:建筑工程学院专业班级:土木工程(1)班学号姓名小组编号所选题号自评小组工作量(1—6)自评分数分数041003017杨彦凯019088041003008廖源029088041003071杨麟飞039595041003007张振喜048080041003030杨达辉058080设计说明与功能描述(基本思路及关键语句说明)该程序的主要功能是对英文文章加密、解密、统计字数并对文章进行保存。为了对一篇英文文章进行加密处理,解密处理,原文显示,统计文章的单词数句数并对文章以文件形式进行保存我和我的同仁设计了这一款软件系统。以下是对该系统的一些实际功能所做的描述:1,显示原文功能,该功能中做了lisr()函数,在该功能中主要是用了puts()函数来显示两个核心数组中的内容:2、统计字数和句数,为该功能设计了tongji()函数,在该功能模块中使用了指针,使用指针指向核心数组的首地址,然后对顺次增加的地址取其值,并对其做相应的处理,详细的说明见后面的说明。3、加密功能模块,为其设计了jiami()函数,在该功能模块中主要是对每一个核心数组的具体字符做了处理,被处理后的文章看起来像一堆乱码,无法辨认其为何物。4.解密功能模块,为该功能设计了jiemi()函数,在该设计中做了针对jiami()块做的处理,使得系统能够针对核心数组做连续的处理。5、集成功能模块,为其设计了menubr()函数,用printf()函数做了菜单选项和欢迎界面6、在主函数数中,先对核心数组进行录入之后,各个被调函数才可对其做相应得处理7、函数及其相应得变量:menubar();list()tongji()变量intw、sjiami()变量charVI,VIPjiemi()变量VIVIP8、定义全局得核心数组并对其指针取地址组长签名:杨彦凯2005年6月20日教师评语文档和程序完成较好。教师签名:付湘琼2005年6月26日正文内容:一、问题描述文章加密、解密程序主要解决的问题是:将可以看懂的字母转换成不能看懂的东西,以此来实现其加密的功能:同时我们也加入了文章单词数及句子数的统计,解决了一些人对这方面的需要。二、问题分析本程序是通过调用六个子函数来实现其功能,其流程图如下图所示入口判断分类加密解密出口加密、解密程块输入文章内容(a[i]=32&&a[i]91)a[i]+=26;(a[i]=91&&a[i]102)a[i]+=26;(a[i]101&&a[i]127)a[i]-=69;(a[i]=32&&a[i]=57)a[i]+=69;(a[i]=58&&a[i]117)a[i]-=26;(a[i]=117&&a[i]=127)a[i]-=26;通过这个程序我们实现了对文章的加密和解密功能,并可以统计其单词数和句子数。数据输入形式是字符型,输出值的范围为0——30000。在程序的调试过程中主要出错是:子函数不能调出,通过认真分析定义调用函数,一一与主函数对应,逐步调出,最后得到全部调用。三、程序设计思路功能模块说明主要思路:采用了变换字符的二进制代码的方法使其转换,将可以看懂的文章转换成不能看懂的,以此而实现其加密的功能。统计单词数算法——英文单词与单词之间是以26个字母以外的字符隔开的,所以只要满足:一个是字符,而紧跟的是26个字母以外的字符,则记为一个字母。统计句子数算法——在英文文章中,一个句子是以!或?或。为结束标记,所以出现!或?或。时,记为一个句子。设计此块时,最开始是想边输入边统计,但此思路不能统计单词个数,有太多的不便。如果边输边记数,则单词与单词间会出现——输入的不仅是一个中心个字母以外的字符,这样统计起来会出错!所以经思考后,决定先输完一篇文章后,在从新统计单词和句数。此设计就要用到数组和指针。把一篇文章逐个输入一个数组中,在定义一个指针。开始时,负初值,把指针指向数组首地址。然后当满足p指向一个字母,同时P+1指向的不是一个字母,则单词数变量自加一。这就是记为一个单词的最简单的条件,这也就可以满足不标准的英文输入格式,也就是容错处理!流程图:入口调用子函数出口显示原文统计单词数和句子数文章加密文章解密保存文章退出系统执行所选功能函数YNYNNYYNNY四、序调试与测试在程序得调试过程中,我们组员遇到一些意想不到得难题,但是在组员之间得相互默契得配合,相互帮助之下,我们终于克服重重得困难现在程序也写好了,下面是我们在调试过程中得悲与喜:1、函数得类型及其列表:charMenubar();//主菜单函数,返回菜单选项字符voidList();//显示所有记录文本voidSave(intn);//保存文件voidJiami();//文本加密voidJiemi();//文本解密voidTongji();//统计字数2、具体得调试过程:For(p=a;*p!=’\0’;p++)*p==‘?’||‘!’||‘。’*p取到26个字母中一个S++*(P+1)取到26个字母以外W++刚开始时用了老师做得通讯录得程序做模板的,只是通讯录用了结构体数组,我们想用结构体数组但是遇到了麻烦,就是文章的名称和其内容的两个数组做为结构体时,在录入文章时并非如想象的那样如意,因为在使用空格键时,只要使用空格键录入内容便会从名称数组跳到内容数组的录入,而在英文的文章里空格时很常见的,后来就放弃了结构体的使用,定义了两个核心的数组,问题终于得到了解决,其于的被调函数就是以name[]和wenzhang[]这两个数组所记录的数据来作为核心数据处理的:主菜单:原文显示:统计字数:文件加密:文章解密:文章保存:五、程序清单:#includestdio.h//标准输入输出函数#includestdlib.h//标准库函数#includestring.h//字符串处理函数#includectype.h//字符操作函数#defineMax30000//定义常数,容纳最大记录数//定义核心数组并对其取地址charname[100],Wenzhang[Max];char*p1=name;char*p2=Wenzhang;//函数原型说明,定义6个功能模块函数和一个主函数//一般将主函数定义放在程序前部,其他函数定义放在主函数之后,因此要先说明函数原型//函数原型说明可帮助读者理解程序的结构和功能charMenubar();//主菜单函数,返回菜单选项字符voidList();//显示所有记录文本voidSave(intn);//保存文件voidJiami();//文本加密voidJiemi();//文本解密voidTongji();//统计字数//主函数,程序运行入口。进行功能选项判定并引用相应的功能函数//在无限循环中引用函数Menubar()显示菜单,并返回菜单选项voidmain(){intyyk=0;charch1;intyyk1=0;charch2;intcount=1;printf(请输入文章名,输入'#'并按回车结束。\n);while((ch1=getchar())!='#'){name[yyk1++]=ch1;}name[yyk1]='\0';printf(请输入英文文章(本系统只支持英文格式且不要缩写)输入'#'并按回车结束。\n);while((ch2=getchar())!='#'){if(yyk30000){printf(文章太长,超出30000字符部分的内容将被忽略!\n);break;}Wenzhang[yyk++]=ch2;}Wenzhang[yyk]='\0';for(;;)//无限循环,选择0退出循环{switch(Menubar())//调用主菜单函数,按返回值选择功能函数{//选择功能1至4,查询并显示记录case'1':List();break;//显示原文case'2':Tongji();break;//字数统计case'3':Jiami();break;//文件加密case'4':Jiemi();break;//文件解密case'5':Save(count);break;//文件保存case'0':exit(0);//跳出循环,终止程序运行}//switch语句结束}//for循环结束}//main()函数结束//主菜单函数,由main()函数引用,返回菜单选项字符供main()的switch语句判定//使用printf()函数显示菜单项,用sacnf()函数接收选项字符//while条件限定选项的合法性,非法字符则重新输入charMenubar(){charc='0';printf(\n#########################文本加密解密管理软件#################################\n\n);printf(文1.显示文件文本原样******\n);printf(本2.字数统计******\n);printf(加3.文件加密*******\n);printf(密4.文件解密****************************\n);printf(解5.文件保存***************************\n);printf(密0.退出系统**********************************\n);printf(系************************\n);printf(统*******************************\n);printf(\n#####################################################################################\n);printf(\n请输入选项(0-5):);//提示输入选项do{scanf(%c,&c);//输入选择项,为1个字符}while(!(c='0'&&c='5'));//选择项不合法则重输returnc;//返回选择项}//保存数组中的记录到文件中,参数为记录数//在对数组中的数据作过修改后都需要引用本函数保存修改结果voidSave(intn){inti;FILE*fp;//指向文件的指针fp=fopen(MyDocuments1.txt,wt);getchar(\n);printf(.........正在保存文件.............\n);//输出提示信息fprintf(fp,\r\n);//将换行符号写入文件fprintf(fp,%s,p1);fprintf(fp,%s,p2);fprintf(fp,\r\n);//将换行符号写入文件,使记录分行存放fclose(fp);//关闭文件printf(........文件已经成功保存!..........\n);//提示文件保存成功}//显示记录,参数为记录数组voidList(){printf(\n\n********************原文如下************************\n\n);printf(--------------------------------------------------------------------------\n);puts(p1);getchar(\n);puts(p2);printf(\n*******************显示结束**********************\n);}//统计字数voidTongji(){int
本文标题:C语言加密解密程序 设计报告
链接地址:https://www.777doc.com/doc-3379150 .html