文件加密系统
第一章 课程设计目的和要求
1.1设计目的
通过课程设计,使学生了解高级程序设计语言的结构,逐渐培养学生的编程能力、
用计算机解决实际问题的能力,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。
程序设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构化程序设计的方法,按照课程设计的题目要求,分析、设计、编写、调试和测试程序及编写设计报告。
本课程设计的目标:
1. 巩固《高级语言程序设计》课程学习的内容和加深学生对基本知识的理解和掌握。 2. 掌握编程和程序调试的基本技能。 3. 掌握软件设计的方法。
4. 提高运用程序设计解决实际问题的能力。
5. 培养思考、 综合运用所学有关相应知识的能力。 6. 强化上机动手编程能力,闯过理论与实践相结合的难关!
1.2设计要求
1. 分析课程设计题目的要求,根据所要求的程序功能,画出程序的流程图。 2. 对系统功能模块进行分析,写出详细设计说明文档。 3. 对程序源代码进行调试与测试,使其能正确运行。 4. 设计完成的软件要便于操作和使用。 5. 设计完成后提交课程设计报告。
1
程序设计综合课程设计报告
第二章 课程设计任务内容
2.1 背景
加密技术是电子商务采取的主要安全保密措施,是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。加密技术包括两个元素:算法和密钥。算法是将普通的文本(或者可以理解的信息)与一窜数字(密钥)的结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解码的一种算法。在安全保密中,可通过适当的密钥加密技术和管理机制来保证网络的信息通讯安全。
2.2 功能需求
实现对文件的加密与解密,要求有图形用户界面。细则如下:
1.能够对一个文件进行加密。
2.加密后生成一个新文件,并且原文件删除。 3.能将加密生成的文件还原成原文件。 4.能够统计文件中单词个数。
2
程序设计综合课程设计报告
第三章 模块设计
3.1 系统模块
包括四个模块:加密模块,解密模块,显示模块,统计单词模块
系统模块加密模块解密模块显示模块统计单词模块
图 3-1 系统模块图
3
程序设计综合课程设计报告
3.2主函数流程图
在主函数中,利用switch语句实现对各个项目的函数调用。
case0NY退出breakcase1NY输入breakcase2NY加密解密breakbreakcase3NYcase4NY显示breakcase5NY统计break输入错误,重新输入
图 3-2 主函数流程图
4
程序设计综合课程设计报告
3.3 函数流程图
3.3.1 加密函数流程图
先读取原文件数据,将原文件称需经过特定条件转换后存放到另一个文件夹。加密过程,即将读取文件的字符根据加密公式转化为别的字符实现加密。但由于后面的解密重要判断是否已经是加密文件,所以在文件末尾做记号标记。存到另一文件夹后关闭文件,最后用remove,rename两个函数实现删除源文件,将加密后文件命名为原文件名,这样只剩下一个加密文件了。
开始加密公示c+520删除被加密的原文件加密后的文件名更改为原文件名是否继续加密文件YN结束图 3-3 加密函数流程图
5
程序设计综合课程设计报告
3.3.2解密函数流程图
先判断是否已经加密,这时要利用加密函数中使用的标识符,可以用fseek函数读取文件末尾的标识符判断是否已加密。若是则解密,否则不解密。
开始解密公示c-520输入密码Z<=3密码是否正确Y删除被解密的文件N解密后的文件名更改为原文件名是否继续解密文件NY结束图3-4 解密函数流程图
6
程序设计综合课程设计报告
3.3.3显示函数流程图
利用文件的操作,用fgetc函数从文件读取数据,再用putchar函数将数据显示到
屏幕。
开始输入要显示文件的名称是否能打开Y显示文件N继续显示文件NY结束
图 3-5 显示函数流程图
7
程序设计综合课程设计报告
3.3.4 统计单词流程图
从文件中读取字符串,存到数组中。接着从字符串中读取一个英文单词,出来与要统计的单词比较(strcmp函数),定义一个计数的变量实现记录单词出现的次数。
开始键入要查找单词的文件名是否能打开Y统计单词个数N结束
图3-6 统计单词流程图
8
程序设计综合课程设计报告
第四章 软件使用说明
4.1进入界面
输入0—5,实现不同功能。
图4-1
若输入错误,重新输入。
图4-2
9
程序设计综合课程设计报告
4.2加密文件
输入要加密文件名,文档内容。
图4-3
图4-4
图4-5
4.3解密文件
输入进入系统密码
图4-6
10
程序设计综合课程设计报告
图4-7
图4-8
图4-9
图 4-10
11
程序设计综合课程设计报告
4.4显示文件
图 4-11
4.5统计单词个数
图 4-12
12
程序设计综合课程设计报告
第五章 课程设计心得与体会
5.1 关于对程序编写的心得
这个程序看起来挺简单的,但对于对C语言还是初学者的我,还是显得有些难度的。
在编写的过程中,由于粗心经常出现一些比较简单的错误,比如遗漏逗号、双引号、小括号,以及项目名称,从而导致出现乱码。C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。看着有错的程序,不知该如何改起!但是,通过上网查询还有在老师、学长和同学的帮助下,我最终还是完成了程序的编写。
5.2 对于课程设计的心得体会
经过三周的编程设计,我认识到编程是一项很慎密的工作,来不得一点马虎,否则就会给编程工作带来很多不必要的麻烦。
这次的课程设计加深了我对C语言的理解,并且提高了我查阅相关参考资料和分析解决问题以及自己上机动手的能力。
课程设计为学生提供了一个既动手又动脑,实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。应实际,实践编程的能力。
13
程序设计综合课程设计报告
附录1:参考文献
1. 谭浩强:C程序设计,清华大学出版社,2005年7月第三版 2. 谭浩强:C++程序设计,清华大学出版社,2004年6月第一版
3. 谭浩强,张基温,唐永炎:编著,C语言程序设计教程.北京:高等教育出版 社,1992
4. 谭浩强: C程序设计题解与上机指导(第二版). 北京:清华大学出版社1999
14
程序设计综合课程设计报告
附录2:程序代码
#include #define M 20 /*宏定义文件名字符串数组大小*/ #define N 20 /*宏定密码字符串数组大小*/ #define W 20 /*宏定义单词字符串数组大小*/ #define F 1000 /*宏定义文件读取字符串数组大小*/ #define E 3 /*宏定密系统密码输入次数*/ char mina[]=\"ulinchen\"; /*初始化解密系统进入密码*/ void menu(void); /*主菜单*/ void shuru(void); /*输入*/ void jiami(void); /*加密*/ /*函数原型*/ void jiemi(void); /*解密*/ void show(void); /*显示*/ void count(void); /*统计单词数*/ int judge(void); /*是否继续判断函数*/ main() { char num; while(1) { menu(); /*显示主菜单*/ scanf(\"%c\输入数字0--5*/ fflush(stdin); /*清除数据流,防止恶意输入字符串, 直接操作以第一个字符后面字符串为名的文件*/ switch(num) /*选择语句*/ { case '0': /*选择 0 */ printf(\"\\n\"); exit(0); case '1': /*选择 1 */ system(\"cls\"); shuru(); /*输入*/ printf(\"\\n 按任意键返回主菜单\"); break; case '2': /*选择 2 */ 15 程序设计综合课程设计报告 system(\"cls\"); jiami(); /*加密*/ printf(\"\\n 按任意键返回主菜单\"); break; case '3': /*选择 3 */ system(\"cls\"); jiemi(); /*解密*/ printf(\"\\n 按任意键返回主菜单\"); break; case '4': /*选择 4 */ system(\"cls\"); show(); /*显示*/ printf(\"\\n 按任意键返回主菜单\"); break; case '5': /*选择 5 */ system(\"cls\"); count(); /*统计单词数*/ printf(\"\\n 按任意键返回主菜单\"); break; default: /*输入错误*/ printf(\"\\n\\ 输入错误,请重新输入。(按任意键返回主菜单)\"); break; } getch(); /*等待输入,是界面停留*/ fflush(stdin); /*清除数据流*/ system(\"cls\"); /* 清屏 */ } } void menu(void) /*主菜单函数*/ { printf(\"\\n\\n\"); printf(\"\ ********************************************************\\n\"); printf(\"\ * *\\n\"); printf(\"\ * 1--输入 2--加密 3--解密 4--显示 5--统计 0--退出 *\\n\"); printf(\"\ * *\\n\"); printf(\"\ ********************************************************\\n\"); printf(\"\\n\\n\"); printf(\"\0. 退出系统。 、\\n\"); printf(\"\1. 输入信息,并写入数据文件。\\n\"); 16 程序设计综合课程设计报告 printf(\"\2. 对给定的文件进行加密。\\n\"); printf(\"\3. 对给定的文件进行解密。\\n\"); printf(\"\4. 显示文本文件的内容。\\n\"); printf(\"\5. 统计某单词在文件中出现的次数。\\n\"); printf(\"\\n\\n\"); printf(\"\ 请选择(0--5): \"); } void shuru(void) /*输入函数*/ { FILE *fp; int x=1; /*定义x=1,输入*/ char ch,fname[M]; while(x) { printf(\"\\n\\n 键入要输入信息的文件名:\"); scanf(\"%s\输入文件名*/ if((fp=fopen(fname,\"w\"))==NULL) /*若不能打开*/ { printf(\"存储空间不足!!!\\n\"); exit(0); } else { printf(\"请输入文档的内容:(以Ctrl+z 结束)\\n\"); fflush(stdin); while((ch=getchar())!=EOF) fputc(ch,fp); fclose (fp); } printf(\"\\n 文档输入并保存成功!\"); printf(\"继续创建文件并输入信息?(按Y继续)\"); x=judge(); } } void jiami(void) /*加密函数*/ { FILE *fp,*fp1; char c,pd,fname[M]; int x=1; while(x) { printf(\"\\n\\n 键入要加密的文件名称:\"); 17 程序设计综合课程设计报告 scanf(\"%s\ if((fp=fopen(fname,\"r\"))==NULL) { printf(\"\\n 此文件未能打开,重新输入(按Y)?\"); fflush(stdin); x=judge(); } else { if(!fseek(fp,-(long)sizeof(char),SEEK_END))pd=fgetc(fp); /*判断文件是否已进行加密步骤*/ if(pd=='$') { printf(\"\\n 文件已使用本程序加密!!!\"); printf(\"重新输入要加密的文件名(按Y)?\"); x=judge(); fclose(fp); } else { rewind(fp); if((fp1=fopen(\"jiami.txt\ { printf(\"存储空间不足!!!\\n\"); exit(0); } printf(\"\\n 加密后的文档: \\n\\n\"); while((c=fgetc(fp))!=EOF) { fputc(c+520,fp1); /*加密公式“c+520”*/ putchar(c+520); } fclose(fp); fclose(fp1); fp1=fopen(\"jiami.txt\ fputc('$',fp1); fclose(fp1); remove(fname); /*删除被加密的原文件*/ rename(\"jiami.txt\加密后的文件名更改为原文件名*/ printf(\"\\n\\n 文档加密并保存成功!\"); printf(\"继续加密文件?(按Y继续)\"); 18 程序设计综合课程设计报告 x=judge(); } } } } void jiemi(void) /*解密函数*/ { FILE *fp,*fp1; char c,pd,fname[M],mm[N],mima[N]; int x=1,y=1,z=0; while(y) { system(\"cls\"); printf(\"\\n\\n 请输入进入解密系统的密码:\"); scanf(\"%s\ if(strcmp(mm,mima)==0) /*验证密码,判断字符串是否相等*/ { y=0; while(x) { fflush(stdin); printf(\"\\n\\n 键入要解密的文件名称:\"); scanf(\"%s\ if((fp==fopen(fname,\"r\"))==NULL) { printf(\"\\n 此文件未能打开,重新输入(按Y)?\"); fflush(stdin); x=judge(); } else { if(!fseek(fp,-(long)sizeof(char),SEEK_END))pd=fgetc(fp); if(pd!='$') { printf(\"\\n 文件未曾使用本程序加密!!!\"); printf(\"重新输入要加密的文件名(按Y)?\"); x=judge(); fclose(fp); } else { rewind(fp); if((fp1=fopen(\"jiemi.txt\ 19 程序设计综合课程设计报告 { printf(\"存储空间不足!!!\\n\"); exit(0); } printf(\"\\n 解密后的文档: \\n\\n\"); while((c=fgetc(fp))!='$') { fputc(c-520,fp1); putchar(c-520); } x=0; fclose(fp); fclose(fp1); remove(fname); /*删除被解密的文件*/ rename(\"jiemi.txt\解密后的文件名更改为原文件名*/ printf(\"\\n\\n 文档解密并保存成功!\"); printf(\"继续解密文件?(按Y继续)\"); x=judge(); } } } } else { printf(\"\\n\\n 密码输入有误!\\n\"); printf(\"\\n 重新输入密码?(按Y重新输入)\\n\"); y=judge(); z++; if(z==E) { printf(\"\\n 对不起,您输入错误次数太多,请仔细回想密码!\\n\"); y=0; } } } } void show(void) /*显示函数*/ { FILE *fp; char fname[M]; int x=1; 20 程序设计综合课程设计报告 while(x) { printf(\"\\n\\n 键入要显示的文件名称:\"); scanf(\"%s\ if((fp=fopen(fname,\"r\"))==NULL) { printf(\"\\n 此文件未能打开,重新输入(按Y)?\"); x=judge(); } else { printf(\"\\n%s的内容是: \\n\\n\ while(!feof(fp)) /*判断是否为文件末尾*/ putchar(fgetc(fp)); printf(\"\\n\"); fclose(fp); printf(\"\\n 继续显示文件(按Y继续)?\"); x=judge(); } } } void count(void) /*统计单词数函数*/ { char fname[M], word[W], /*要统计的单词*/ str[F], /*保存文档内容*/ nword[M]; /*从内容读取的单词*/ int i=0,j,z=0,count=0,x=1,t; FILE *fp; while(x) { printf(\"\\n\\n 键入要查找单词的文件名称:\"); scanf(\"%s\ if((fp=fopen(fname,\"r\"))==NULL) { printf(\"\\n 此文件未能打开,重新输入(按Y)?\"); x=judge( ); } else { while(!feof(fp)) str[i++]=fgetc(fp); /*将文档内容存入字符串数组*/ printf(\"\\n 键入要统计个数的单词:\"); 21 程序设计综合课程设计报告 scanf(\"%s\ t=strlen(word); for(j=0;j str[j]=tolower(str[j]); nword[z++]=str[j]; } else if(z!=0) { nword[z]='\\0'; /*保证字符串结束*/ if(strcmp(word,nword)==0) count++; z=0; } } fclose(fp); printf(\"\\n文档中有%s的单词数为:%d\\n\ count=0; i=0; printf(\"\\n继续统计单词个数(按Y继续?\"); x=judge(); } } } int judge(void) /*是否继续判断函数*/ { char ch; fflush(stdin); scanf(\"%c\ if(ch=='y'||ch=='Y') return 1; else return 0; } 22 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务