10大3张苏阳 27.docx
《10大3张苏阳 27.docx》由会员分享,可在线阅读,更多相关《10大3张苏阳 27.docx(9页珍藏版)》请在冰豆网上搜索。
![10大3张苏阳 27.docx](https://file1.bdocx.com/fileroot1/2023-4/17/8f67971b-86d0-46ef-aa42-c34e2e967688/8f67971b-86d0-46ef-aa42-c34e2e9676881.gif)
10大3张苏阳27
苏州技师学院
信息工程系
课程设计报告
2010—2011学年第二学期
课程名称C语言课程设计
设计题目《文件加密》
学生姓名张苏阳
学号27
专业班级信息工程系10-3班
指导教师潘毅
2011年6月21日
目录
1.设计任务书………………………………………………………2
1.1题目与要求……………………………………………2
1.2本程序涉及的知识点…………………………………2
2.功能设计……………………………………………2
2.1算法设计……………………………………2
2.2部分模块流程图………………………………………2
3.程序代码设计…………………………………………4
3.1输入函数………………………………………………4
3.2输出函数………………………………………………5
4.C程序设计总结…………………………………………6
5.致谢………………………………………………………6
参考文献……………………………………………………6
1.设计任务书
1.1题目与要求
我计划写文件加密,某公司采用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:
每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
通过本课程设计,深入了解dos及其目录文件系统,并初步具备完成大型汇编程序的能力,巩固汇编语言知识,提高学生理论与实践相结合的
能力。
1.2本程序涉及的知识点
structpassword /*加密方法*/{charps[10]; /*加密字符串*/longl; /*加密间隔字节数*/longwd;} /*加密的字节数*/加密voidencode();解密voiddecode();文件比较voidcmptxt();
2.功能设计
2.1算法设计
1、本程序实现的功能要求:
利用if语句完成所示的主菜单。
建立程序框架
显示当前目录文件名
显示文件内容
进行文件加密
显示加密文件内容
2、进入第一步出现如下信息:
分析设计要求,熟悉相关知识
第二步:
建立程序框架,每个字符命令对应一个子程序
第三步:
依次编写各子程序汇编语言代码
第四步:
汇编,连接,调试。
2.2、部分模块流程图
2.程序代码设计
3.1输入函数
改文件名
提示:
oldfilename:
键入文件全名,若该文件存在,则
提示:
newfilename:
键入新文件全名后,磁盘文件改名;
若不存在,则提示:
filenotfound!
显示文件内容
提示:
filename:
键入文件全名,若该文件不存在,则提示:
filenotfound!
;若该文件存在,显示该文件内容。
加密文件内容
提示:
filename:
键入文件全名,若该文件不存在,则提示:
filenotfound!
;若该文件存在,则提示:
s-code:
,键入密码(
数字或ascll码),提示:
newfilename:
键入新文件全名后,
将文件内容顺序与密码进行异或操作,异或后的文件内容存
入新文件。
显示加密文件内容
提示:
filename:
键入文件全名,若该文件不存在,则提示:
filenotfound!
;若该文件存在,则提示:
s-code:
,键入密码,
显示该文件内容与密码异或后的内容。
退出程序,返回dos提示符状态。
#include
#include
#include
#include
structpassword/*加密方法*/
{
charps[10];/*加密字符串*/
longl;/*加密间隔字节数*/
longwd;/*加密的字节数*/
}password;
char*s=newchar[100];
voidset()
{
cout<";
cin>>password.ps;
cout<";
cin>>password.l;
cout<";
cin>>password.wd;
}
voidprinttxt()/*显示文件*/
{
ifstreamfs1(s,ios:
:
nocreate);//以输入方式打开文件
ifstreamfs2("result.txt");
ifstreamfs3("recall.txt");
charc;
cout<";
if(!
fs1)
{
cout<
}
else
{
while(fs1.get())
cout<}
cout<cout<";
while(fs2.get())
cout<cout<cout<";
while(fs3.get())
cout<cout<fs1.close();//关闭文件
fs2.close();
fs3.close();
}
voidencode()/*加密*/
{
intn=strlen(password.ps);
charN;
charc;
ofstreamout("result.txt");
ifstreamfs(s,ios:
:
nocreate);
if(!
fs) //文件为空则为对字符串s进行加密
{
intm=strlen(s);
for(inti=0;i{
if(i%password.l==0)
{
staticinta=0;
if(a{
N=s[i]+password.ps[a%n]-48;
if(N>122)
{
N=N%122;
}
out.put(N);
a++;
}
elseout.put(s[i]);
}
elseout.put(s[i]);
}
}
else//文件非空,为对文件进行加密
{
for(inti=0;fs.get();i++)
{
if(i%password.l==0)
{
staticinta=0;
if(a {
N=c+password.ps[a%n]-48;
if(N>122)
{
N=N%122;
}
out.put(N);
a++;
}
elseout.put(N);
}
elseout.put(N);
}
}
cout<"<out.close();
fs.close();
}
voidcmptxt()/*文件比较*/
{
ifstreamfs1(s,ios:
:
nocreate);
ifstreamfs2("recall.txt");
charc1,c2;
if(!
fs1) //fs1文件空,为对字符串和fs2之间比较
{
for(inti=0;s[i];i++)
{
fs2.get(c2);
if(s[i]!
=c2) //若出现不同的字符则解密失败
{
cout<解密失败!
"<4.C程序设计总结
本程序在刚开始调试时有许多错误,但在我的努力及同学的帮助下都被一一克服,现在在操作本程序时可根据提示进行相关操作,能正确输出结果。
在刚开始的几次调试中曾经出现过密码不能输入的情况;不能输入过多的密码情况;还有不能识别密码等情况。
经过我的努力及同学的帮助,这些问题得到克服,并且使程序的功能也得到了一定的完善。
现在它能对出错的题目发出报警声,并且给出正确答案。
最后还能分别输出对错的题数及所得分数。
在这次设计过程中,不仅复习课本上所学知识,还通过查资料、问同学学到了课本上没有的知识。
从而启发我,要想写好程序,在写好课本知识的同时还需要多读和专业有关的一些书籍,同时还需要多动脑子,尽量把所学的知识综合起来应用,力争写出完美的程序。
除此之外,我还得到了一些有用的教训:
写程序时必须要细心,不能输错一个字符标点,就连全角半角也得注意。
在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。
5.致谢
能够完成这次课程设计必须感谢C语言课程老师潘毅(是他教会了我C语言这门课程)、林亚洲同学(他帮我修改了几处重要错误,同时启发我完善了该程序的功能)。
参考文献
(1)、
(2)、贾宗璞、许合利,C语言程序设计,江苏:
中国矿业大学出版社,2007.6