admin 管理员组文章数量: 887021
2024年1月4日发(作者:android studio安装调试)
程序报告设计
题目:加密解密处理
程序设计报告的电子文档(B10080128—程序设计.doc )
一.
老师对作业要求。
1:对学生课程设计两周的纪律及提交内容的要求:
(1) 规定上机的时间内不得无故缺勤,有事需要向指导老师书面请假;
(2) 上机时禁止玩游戏,屡教不改者,实习成绩可为不及格;
(3) 每人手头准备一至两本C/C++的有关工具书,上机前作好充分的准备,包括事先写好主要算法的程序
代码以保证充分利用上机的时间调试程序;
(4) 同组可以讨论思路,但是程序要自己完成,不可抄袭,若完全抄袭别人的,实习成绩可为不及格;
(5) 实习的最后阶段认真完成实习报告的电子文档。报告内容不得少于15页。
(6) 每个学生最后提交的材料:
压缩文件一个,起名为:学号名_题目名.rar(如:B06020127_学生管理系统.rar)。该压缩文件中包含下列
几个文件:程序设计报告的电子文档(起名为:学号_程序设计.doc)、源程序文件(起名为:学号名_题目
名.cpp,如:B06020127_学生管理系统.cpp)、原始数据文件(如:)、编译链接后得到的可执行
文件(起名为:学号名_题目名.exe)
(7)请同学独立完成报告,若发现两份报告一模一样,则两人都按不及格论处,请各位同学珍惜自己的版权
,也请指导老师严格把关。
附2:上机时间:每天上午8:00——11:20
附3:成绩的评定
根据学生平时的上机出勤情况、为上机所作的准备情况、上机时的表现、程序的完成情况、报告的完成情况
、验收答辩时的表现等综合打分。等级为:优秀、良好、中等、及格、不及格。
附4:课程设计报告具体内容要求
学生管理系统
(题目格式:宋体,3号,加粗,居中对齐)
一、 课题内容和要求(格式:宋体,4号,加粗,两端对齐)
该部分可参考前面给出的问题描述再加以细化一些
(正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)
二、需求分析(格式:宋体,4号,加粗,两端对齐)
在该部分中叙述每个模块的功能要求
(正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)
概要设计 (格式:宋体,4号,加粗,两端对齐)
在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如
果指定存储结构请写出该存储结构的定义,如果用面向对象的方法,应该给出类中成员变量和成员函数原型
声明)。
(正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)
四、源程序代码 (格式:宋体,4号,加粗,两端对齐)
各个算法实现的源程序(可以是一组源程序,每个功能模块采用不同的函数实现),源程序要按照写程序的
规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。
(正文格式:宋体,小4号,不加粗,两端对齐)
五、测试数据及其结果分析(格式:宋体,4号,加粗,两端对齐)
(正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)
六、调试过程中的问题(格式:宋体,4号,加粗,两端对齐)
每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),以及算法的改进设想。
(正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)
七、课程设计总结(格式:宋体,4号,加粗,两端对齐)
总结可以包括 : 程序设计过程的收获、遇到的问题,遇到问题解决问题过程的思考、程序调试能力的思考,
对该课程组织和考核方式的建议等。
(正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)
原始数据文件()
课题内容和要求
1.编写一个对字符文件(由数字或字母组成)进行加密解密的程序。可以将所需要的内容(整个文件或者输入的一行字符)加密,也可以将存储的加密文件翻译回来。例如加密时可以将选取内容的每个字符依次反复加上”4963287312”中的数字,如果范围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(既N%122)。解密与加密的顺序相反。
2、部分要求
(1)从键盘输入要进行加密的一行字符串或者需要加密的文件名。
(2)显示菜单:
*********************************
1.设置加密方法
2.加密
3.解密
4.退出
*********************************
(3)选择菜单,进行相应的操作。加密方法是设置一加密字符串以及对文件的哪些部分进行加密;加密是将原始文件加密并保存到文件中;解密是将加了密的文件还原并保存到文件中,同时应比较与原始文件的一致性;显示是将文件在屏幕上显示出来,供人工校对。
(4)定义原始文件、加密文件和还原文件
3、其他要求
(1)变量、函数命名符合规范。
(2)注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。
(3)程序的层次清晰,可读性强。
4、需要掌握的知识
(1)如何读写文件
(2)如何对字符进行加减操作,并保证加减后的数值处于某一范围之内 (模运算)
(3) 了解加解密的基本原理
需求分析
模块分析:
(1)在屏幕上显示文件 void printtxt()
用于将原始文件,加密文件,解密文件,的内容显示在屏幕上,方便检验程序是否正确执行。在此函数中要以输入方式打开三个文件。
(2)加密void encode()
对原始文件整个或部分字符串加密,并将加密后的内容写入上。加密时,每个字符依次反复加上”4963287312”中的数字,如果范围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(即N%122).
例如:加密the
(t)116+4,(h)104+9,(e)101+6
变为xqk
(3)解密void decode()
对加密后的进行解密,并将解密后的内容写入文件中。解密过程与加密过程的顺序正好相反,即从第一个字符开始,每个字符依次反复减去”4963287312”中的数字,若执行减法后得到一个负数,则把这个负数加122,即 (N+122), 其中N为负数。
例如:把xqk解密
(x) 120-4 (q)111-9 (k) 107-6
变为 the
(4)设置加密方法void set()
由键盘输入,进行加密方法的设置,主要由输出输入语句组成,目的是为了方便人机交流。
(5)显示菜单:
*********************************
1.设置加密方法
2.加密
3.解密
4.退出
*********************************
(6)加密方法用结构表示
struct password /*加密方法*/
{
char ps[10]; /*加密字符串*/
long wd;
};
/*加密的字节数*/
概要设计
1.加密程序的设计:
开始,以输出方式打开加密文件,以输入方式打开原始文件,判断文件是否为空,若为空,对字符串进行加密:定义for循环,判断i值是否小于字符串的长度,是则进行加密运算,即将字符所对应的ASCALL码加上加密字符串所对应的数字减去48,得到的就是加密后的字符,如果范围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(即N%122),将加密后的文字写入加密文件,关闭打开的两个文件,屏幕显示加密成功。如果文件不为空,则对文件中字符加密,加密过程与上述加密过程相似。
2.解密程序的设计:
开始,以输出方式打开解密密文件,以输入方式打开加密文件,对加密后的文件中的字符串进行解密:定义for循环,判断i值是否小于字符串的长度,是则进行加密运算,即将字符所对应的ASCALL码减去加密字符串所对应的数字加上48,得到的就是解密后的字符,若执行减法后得到一个负数,则把这个负数加122,即 (N+122), 其中N为负数。将解密后的文字写入解密文件,关闭打开的两个文件,屏幕显示解密成功。
3.显示程序的设计:
以输入方式打开原始文件,加密文件,解密文件,将文件中进行的字符串读入到屏幕上,方便读者进行比较。
编译连接后得到可执行文件(B10080128—加密解密处理.exp)
源程序代码
#include
#include
#include
struct password /*加密方法*/
{
char ps[10]; /*加密字符串*/
long wd; /*加密的字节数*/
};
struct password password; //定义一个加密方法结构变量
char s[100];
void set() //加密方法设置函数
{
printf("n输入加密字符串:");
scanf("%s",);
printf("n输入加密字节数:");
scanf("%ld",&);
getchar();
system("pause"); /*按任意键继续,使界面整洁*/
}
void printtxt() /*显示显示原始文件和解密文件函数*/
{
/*以读方式打开文件*/
FILE *source = fopen("","rt"); //打开原始文件
FILE *result = fopen("","r");
FILE *recall = fopen("","rt"); //打开解密文件
char c; //临时字符存储变量
if(source == NULL ) //文件存在性判断
{
printf("不存在 文件n");
exit(0);
}
if(result == NULL )
{
printf("不存在 文件n");
exit(0);
}
if(recall == NULL ) //文件存在性判断
{
printf("不存在 文件n");
exit(0);
}
c = fgetc(source); //先从原始文件读出一个字符,若不是文件结尾,则文件内容非空
if(c ==EOF) //文件内容为空,输出加密字符
{
printf("n加密字符:");
printf("%sn",s);
}
else //文件非空,输出原始文件
{
printf("n原始文件:");
printf("%c",c);
while((c=fgetc(source)) != EOF) //文件非空调用判断
printf("%c",c);
}
printf("n");
printf("n解密文件:");
while((c=fgetc(result)) != EOF) //文件非空,输出解密文件
printf("%c",c);
printf("n");
printf("n");
printf("n解密文件:");
while((c=fgetc(recall)) != EOF) //文件非空,输出解密文件
printf("%c",c);
printf("n");
/*下面是文件关闭操作*/
fclose(source);
//fclose(result);
fclose(recall);
system("pause");
}
void encode() /*加密*/
{
int m,n=strlen(),i,flag = 1; //m存储加密字符长度 ,n存储加密字符串 ,i 为临时变量
char N,w;
char c,C; //临时字符存储变量
FILE *result = fopen("","wt"); //以写方式打开result。txt文件
FILE *source = fopen("","wt"); //以写方式打开source。txt文件
if(result == NULL ) //文件非空容错处理
{
printf("不存在 文件n");
exit(0);
} //ofstream out("");
if(source == NULL ) //文件非空容错处理
{
printf("不存在 文件n");
flag = 0;
}
// ifstream fw("");
//ifstream fs(s,ios::nocreate);
if (flag = 1) C = fgetc(source);//先得到一个文件内容
if(flag == 0 || C==EOF ) //判断文件是否为空,为空的话,对输入字符加密
{
printf("请输入要加密的字符串:n");
scanf("%s",s);
m=strlen(s); /*对输入的字符串加密*/
fprintf(source,"%s",s); //将输入字符输出至source文件中
for(i=0;i { static int a=0; if(a<) { N=s[i]+[a%n]-48; if(N>122) { N=N%122; } fputc(N,result); //将加密内容输出入result中 a++; } } else fputc(s[i],result); //将加密内容输出入result中 } else //文件非空,对文件加密 { w=C+[0%n]-48; fputc(w,result); //将加密结果输出至result文件中 for( i=0;(c=fgetc(source)) != EOF;i++) { static int a=1; if(a<) { N=c+[a%n]-48; if(N>122) { N=N%122; /*模运算*/ } fputc(N,result); //(N); a++; } else fputc(N,result); } } printf("n加密成功!n"); //关闭文件 fclose(result); fclose(source); system("pause"); } void decode() /*解密*/ { FILE * recall = fopen("","wt"); /*以写方式打开文件*/ FILE * result = fopen("","rt"); /*以读方式打开文件*/ char c,N; //临时变量 int n=strlen(), i; //n存储加密字符串长度,i为临时变量 //文件存在性判断 if(result == NULL ) { printf("不存在 文件n"); exit(0); } if(recall == NULL ) { printf("不存在 文件n"); exit(0); } for( i=0;(c=fgetc(result)) != EOF;i++) //对加密文件进行译码 { static int a=0; if(a<) { N=c-([a%n]-48); if(N<0) { N=(N+122)%122; /*模运算*/ fputc(N,recall); } else { if(N==0) fputc('z',recall);//将解密结果输出至recall文件 else fputc(N,recall); } a++; } else fputc(N,recall) ;// } printf("n解密成功!n"); //关闭文件 fclose(result); fclose(recall); system("pause"); } void cmptxt() /*比较解密文件和原始文件的一致性,一致输出原字符,不一致输出'-'*/ //在程序中没有调用 { /*以读方式打开文件*/ FILE *source = fopen("","rt"); //打开原始文件 //FILE *result = fopen("","r"); FILE *recall = fopen("","rt"); //打开解密文件 char c,d; //临时字符存储变量 if(source == NULL ) //文件存在性判断 { printf("不存在 文件n"); exit(0); } /* if(result == NULL ) { printf("不存在 文件n"); exit(0); }*/ if(recall == NULL ) //文件存在性判断 { printf("不存在 文件n"); exit(0); } c = fgetc(source); //先从原始文件读出一个字符,若不是文件结尾,则文件内容非空 d = fgetc(recall); //先从解密文件读出一个字符,若不是文件结尾,则文 件内容非空 if(c ==EOF) //文件内容为空,输出加密字符 { printf("读文件错误!!n"); exit(0); } if(d ==EOF) //文件内容为空,输出加密字符 { printf("读文件错误!!n"); exit(0); } printf("文件比较:"); if(c == d) { printf("%c",c); } else printf("-"); while((c=fgetc(source)) != EOF && (c=fgetc(source)) != EOF) //非空调用判断 { if(c == d) { printf("%c",c); } else printf("-"); } 文件 printf("n"); /*下面是文件关闭操作*/ fclose(source); //fclose(result); fclose(recall); system("pause"); } void menu() //主菜单 { printf("n********************n"); printf("1.设置加密方法n"); printf("2.加密n"); printf("3.解密n"); printf("4.显示文件n"); printf("5.退出n"); printf("n********************n"); printf("请选择:"); } void main() { int a=0; while (a!=5) { /* FILE *f1 = fopen("","wt"); //创建文件 FILE *f2 = fopen("","wt"); FILE *f3 = fopen("","wt"); fclose(f1); fclose(f2);fclose(f3); // 关闭文件*/ menu(); scanf("%d",&a); switch(a) { case 1: set(); //调用设置加密方法函数 system("cls"); //清楚屏幕上的字符,是屏幕更整洁 menu(); break; case 2: encode(); //调用加密函数 system("cls"); menu(); break; case 3: decode(); //调用解密函数 system("cls"); menu(); break; case 4: printtxt(); //显示原始文件与目标文件 system("cls"); menu(); break; case 5: printf("n谢谢使用!nn"); break; default: printf("n输入错误 请再次输入n"); system("cls"); } menu(); break; } } 六、测试数据及其结果分析 测试数据记录: 请输入需要加密的内容: the *************** 1.设置加密方法 2.加密 3.解密 4.显示文件 5.退出 **************** 请选择:1 输入加密字符串:496 输入加密字节数:3 请按任意键继续...... *************** 1.设置加密方法 2.加密 3.解密 4.显示文件 5.退出 **************** 请选择:2 加密成功! 请按任意键继续...... *************** 1.设置加密方法 2.加密 3.解密 4.显示文件 5.退出 **************** 请选择:3 解密成功! 请按任意键继续...... *************** 1.设置加密方法 2.加密 3.解密 4.显示文件 5.退出 **************** 请选择:4 原始文件:the 加密文件:xqk 解密文件:the 请按任意键继续...... 原文件为空时: *************** 1.设置加密方法 2.加密 3.解密 4.显示文件 5.退出 **************** 请选择:1 输入加密字符串:496 输入加密字节数:3 请按任意键继续...... *************** 1.设置加密方法 2.加密 3.解密 4.显示文件 5.退出 **************** 请选择:2 请输入需要加密的字符串: the 加密成功! 请按任意键继续...... *************** 1.设置加密方法 2.加密 3.解密 4.显示文件 5.退出 **************** 解密成功! 请按任意键继续...... *************** 1.设置加密方法 2.加密 3.解密 4.显示文件 5.退出 **************** 请选择:4 加密字符串:ddd 加密文件:uzw 解密文件:ddd 请按任意键继续...... *************** 1.设置加密方法 2.加密 3.解密 4.显示文件 5.退出 **************** 请选择:5 谢谢使用! 分析:将本程序五个选项每个进行测试,其中测试字符串the为原始文件中部分字符串,进行加解密处理后进行对比;而后用字符串ddd测试字符串不是原始文件字符的情况,后经文件对比,能够正常运行,所以此程序成功。 七、调试过程中的问题 在这个编程中,如果你在设计时存在逻辑错误,虽然源代码没错,不过在运行时就有问题,在调试中前后函数的功能要对应,要不然就不能正确运行,还有一些基本的符合不符合规范,注意英文字母的书写。 八、课程设计总结 通过这个C语言程序的编写,我遇到了许多问题,如:有些源 代码的运用不是很清楚,这个加密解密处理文件比较大,处理起来比较麻烦,不过通过我与同学们的讨论以及查阅资料,在草稿纸上进行算法的书写,终于把他搞定,让我明白团队的力量,更重要的是怎么学习,要懂得不懂就要问,懂得吃苦了,比如我在调试的过程中就遇到了问题,不过我一个一个的,慢慢的进行下去,这是我收获最大的了哟,学C要多练了。 九.
版权声明:本文标题:c语言程序设计文件加密解密 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1704309774h454160.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论