1、 课程设计报告 课程设计名称: C语言程序设计 指导教师: 学 生: 学 号: 学 院: 电子信息工程学院 完成时间: 2011年9月27日 嘉应学院电子信息工程学院 C语言课程设计说明书 目录 1 需求分析 1 2总体设计 2 3详
2、细设计 3 3.1 换位加密流程图 3 3.2 换位解密流程图 3 3.3 替代加密流程图 3 3.4 替代解密流程图 3 4调试与测试 4 5测试结果 5 6附录 6 1 需求分析 问题描述(实验指导书中已经给出) ①数据的输入和输出;要求使用文件操作。文件(明文,仅限于英文字母)存放在某一已知文本文件中,加密后的文件(密文)存放在另一文件中。
3、②换位加密和解密: 加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文; 解密:输入密文后再输入移位位数则可输出明文; ③凯撒加密和解密: 加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文; 解密:输入密文后再输入移位位数则可输出明文; ④统计单词的个数; ⑤退出。 21 2总体设计 (程序设计总流程图,可以画带流程线的流程图) 此处只需要写出一个流程图就可以了,就是总的那个流程图,请规范的画图。不需要分出2.1和2.2. byebye() miwentongji() mingwentongji()
4、 caesarde() caesaren() transpde() transpen(); caidan() welcome() 开始 3详细设计 (各模块功能说明,如函数功能、入口及出口参数说明,函数调用关系描述等 这块大家问题最多了,这里不是写程序代码,而是写流程图里面各个主要函数的作用,函数之间关系的说明。 以第1题为例,此处应为: 3.1 换位加密流程图 流程图 (对流程图加以说明。可以把关键语句放在此处,加以注释说明) 建立mingwen.txt和miwen.txt文件 输入密钥n 输入明文到数组r k=strlen(r)j
5、 计算数组r长度 fputc(r[i],mingwen) 将明文存放到mingwen.txt文件中 for i=0 to k 关闭并保存mingwen.txt文件 打开mingwen.txt文件 space(h,r) 将明文去空格并放到数组h中 m=strlen(h) 计算数组h长度 m%n==0 是
6、 否 hang=m/n hang=m/n+1 j=0 for i=0 to hang for i=m to hang*n for j=0 to n h[i]='a'+j j++ for i=0 to hang zl[i][j]=h[z] z++ zl[i][j]=h[z] z++ for j=o to n
7、 z=0 fputc(zl[j][i],miwen) z++ 输出he[z] for j=0 to hang he[z]=zl[j][i] for i=0 to n fclose() 关闭并保存mingwen.txt文件 fclose() 关闭并保存miwen.txt文件 清屏 返回菜单 3.2 换位解密流程图 流程图 (对流程图加以说明。可以把关键语句放在此处,加以注释说明) 建立mingwen.txt和miwen.txt文件 输入密
8、钥n 输入明文到数组r k=strlen(r)j 计算数组r长度 fputc(r[i],miwen) 将密文存放到miwen.txt文件中 for i=0 to k 关闭并保存miwen.txt文件 打开miwen.txt文件 space(h,r) 将明文去空格并放到数组h中 m=strlen(h) 计算数组h长度 m%n==0 是
9、 否 hang=m/n hang=m/n+1 j=0 for i=0 to n for i=m to hang*n for j=0 to hang h[i]='a'+j j++ for i=0 to n zl[i][j]=h[z] z++ zl[i][j]=h[z] z++ for
10、j=o to hang z=0 fputc(zl[j][i],mingwen) z++ 输出he[z] for j=0 to n he[z]=zl[j][i] for i=0 to hang fclose(mingwen) 关闭并保存mingwen.txt文件 fclose(miwen) 关闭并保存miwen.txt文件 清屏 返回菜单 3.3 替代加密流程图 流程图 (对流程图加以说明。可以把关键语句放在此处,加以注释说明)
11、建立mingwen.txt和miwen.txt文件 ch=getchar() 接收回车字符 Ch=getchar() 开始输入明文 ch=getchar() fputc(ch,mingwen) 将明文放到mingwen.txt文件中 当ch!='\n' fclose(mingwen)) 关闭并保存mingwen.txt文件 输入密钥 i 直到!(i>=0&&i<=26)成立 打开mingwen.txt文件 ch=fgetchar(mingwen) 开始从明文中读出字符 当ch!=EOF ch=fge
12、tc(mingwen) 输出ch fputc(ch,miwen) ch=ch-26 ch=ch+i; ch>'Z'&&ch<='Z'+i||ch>'z' 是 否 (ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')
13、 是 否 fclose(mingwen) 关闭并保存mingwen.txt文件 fclose(miwen); 关闭并保存miwen.txt文件 清屏 返回菜单 3.4 替代解密流程图 流程图 (对流程图加以说明。可以把关键语句放在此处,加以注释说明) 建立mingwen.txt和miwen.txt文件 ch=getchar() 接收回车字符 Ch=getchar()
14、 开始输入明文 ch=getchar() fputc(ch,mingwen) 将明文放到mingwen.txt文件中 当ch!='\n' fclose(mingwen)) 关闭并保存mingwen.txt文件 输入密钥 i 直到!(i>=0&&i<=26)成立 打开mingwen.txt文件 ch=fgetchar(mingwen) 开始从明文中读出字符 当ch!=EOF ch=fgetc(miwen) 输出ch fputc(ch,mingwen) ch=ch+26 ch=ch+
15、i; ch>'Z'&&ch<='Z'+i||ch>'z' 是 否 (ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z') 是 否 fclose(mingwen) 关闭并保
16、存mingwen.txt文件 fclose(miwen); 关闭并保存miwen.txt文件 清屏 返回菜单 4调试与测试 (调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施) 调试程序,描述测试过程中遇到的问题和解决办法 1. 文件操作时打开的文件应该及时关闭,不然不会保存,在下次打开时就读不到以前存放在该文件里面的数据,而编译时却不会提示有错误。 2. .函数调用时,被调函数必须在前面声明或者写在调用函数的上面,不然在编译时也不会提示错误,程序却不能执行。 3. 空格的去除;采用指针的方法将去除空格的字符串放到另一个数组中
17、 4. 菜单函数的容错;用default:system("cls"); caidan();实现。 5. 加密解密后返回主菜单;在每个函数后面加ch=getchar();ch=getchar();system("cls");caidan();第一个h=getchar()接收回车字符,第二个ch=getchar()使屏幕上的显示暂停,并实现返回主菜单的操作。 5测试结果 (用几组测试数据进行测试算法设计的正确性,要包括测试数据和运行结果)。 此处需要给出你输入的源码,以及程序运行后出来的结果,可以适当的截图。 1:换位加密 源码:
18、 Ce shi jie guo 密钥:4 运行结果:Cigejusiohea 2换位解密 源码:Cigejusiohea 密钥:4 运行结果:Ceshijieguoa 3凯撒加密 源码:Ce shi jie guo 密钥:4 运行结果:Gi wlm nmi kys 4:凯撒解密 源码:Gi wlm nmi kys 密钥:4 运行结果:Ce shi jie guo 5. 明文统计 6. 密文统计 6附录 (源程序清单和结果:源程序要加注释) 此处需要些出你的源程序代码,以及对
19、主要代码的一些功能或作用说明。
#include
20、\n"); printf("\n\n\n\n\n\n\t\t\t\t\t\t\t电信101班陈仁波\n"); } byebye() //退出界面 { printf("\n\n\n\n\n\n\n\n\n\t\t**************************************\n"); printf("\t\t**************************************\n\n"); printf("\t\t\t\t欢迎使用\n\
21、n"); printf("\t\t**************************************\n"); printf("\t\t**************************************\n"); } tuichu() //退出菜单 { char tc; printf("\n\n\n\n\n\n\n\n\n\t\t********************************************\n\n"); printf("\t\t\t\t 确定退出???\n\n"
22、); printf("\t\t\t 确定请按Y, 取消请按N\n\n"); printf("\t\t********************************************\n"); tc=getchar(); tc=getchar(); if(tc=='n'||tc=='N') { system("cls"); caidan(); } else if(tc=='y'||tc=='Y') { system("cls"); byebye(); } else { system("cls");
23、tuichu(); } } char *space(char *a,char *b)// 去空格 { char *c = a; int n =0; while (*b!='\0') { if (*b!=' ') { *c = *b; n++; c++; } b++; } *c='\0'; } transpen
24、) //换位加密 { FILE *mingwen,*miwen; int i,j,n,m,k,z=0,hang; char ch; char r[1000],h[100],zl[10][10],he[100]; if((mingwen=fopen(a,"w+"))==NULL) {printf("不能打开文件\n"); exit(0); } if((miwen=fopen(b,"w+"))==NULL) {printf("不能打开文件\n"); exit(0); } printf("请输入密钥\n");
25、scanf("%d",&n);
printf("请输入明文\n");
ch=getchar();
gets(r);
k=strlen(r);
for(i=0;i 26、
{
for(j=0;j 27、
for(j=0;j 28、) //换位解密
{
FILE *mingwen,*miwen;
int i,j,n,m,k,z=0,hang;
char ch;
char r[1000],h[100],zl[10][10],he[100];
if((mingwen=fopen(a,"w+"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
if((miwen=fopen(b,"w+"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
printf("请输入密钥\n");
29、
scanf("%d",&n);
printf("请输入密文\n");
ch=getchar();
gets(r);
k=strlen(r);
for(i=0;i 30、
for(j=0;j 31、)
for(j=0;j 32、 //凯撒加密
{
FILE *mingwen,*miwen;
char ch;
int i;
if((mingwen=fopen(a,"w+"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
if((miwen=fopen(b,"w+"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
printf("请输入密文\n");
ch=getchar();
ch=getchar();
while(ch!='\n')
{
fputc(ch,mingwen);
33、
ch=getchar();
}
fclose(mingwen);
do
{
printf("请输入密钥(0~26)\n");
scanf("%d",&i);
}
while(!(i>=0&&i<=26));
if((mingwen=fopen(a,"r"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
ch=fgetc(mingwen);
while(ch!=EOF)
{
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{
ch=c 34、h+i;
if(ch>'Z'&&ch<='Z'+i||ch>'z')
ch=ch-26;
}
fputc(ch,miwen);
printf("%c",ch);
ch=fgetc(mingwen);
}
fclose(mingwen);
fclose(miwen);
printf("\n\n");
printf("密文请查看miwen.txt\n\n\n按enter键返回主菜单\n");
ch=getchar();ch=getchar();
system("cls");
caidan();
}
caesar 35、de() //凯撒解密
{
FILE *mingwen,*miwen;
char ch;
int i;
if((mingwen=fopen(a,"w+"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
if((miwen=fopen(b,"w+"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
printf("请输入密文\n");
ch=getchar();
ch=getchar();
while(ch!='\n')
{
36、 fputc(ch,miwen);
ch=getchar();
}
fclose(miwen);
do
{
printf("请输入密钥(0~26)\n");
scanf("%d",&i);
}
while(!(i>=0&&i<=26));
if((miwen=fopen(b,"r"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
ch=fgetc(miwen);
while(ch!=EOF)
{
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{ 37、
ch=ch-i;
if(ch<'a'&&ch>='a'-i||ch<'A')
ch=ch+26;
}
fputc(ch,mingwen);
printf("%c",ch);
ch=fgetc(miwen);
}
fclose(mingwen);
fclose(miwen);
printf("\n\n");
printf("明文请查看mingwen.txt\n\n\n按enter键返回主菜单\n");
ch=getchar();ch=getchar();
system("cls");
caidan();
38、}
mingwentongji() //统计明文单词个数
{
FILE *mingwen ;
char ch;
int i=1;
if((mingwen=fopen(a,"r"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
ch=fgetc(mingwen);
while(ch!=EOF)
{
if(ch==' ')
i++;
ch=fgetc(mingwen);
}
printf("明文中有%d个单词。\n",i);
pri 39、ntf("按enter键返回主菜单\n");
ch=getchar();ch=getchar();
system("cls");
caidan();
}
miwentongji() //统计密文单词个数
{
FILE *miwen ;
char ch;
int i=1;
if((miwen=fopen(b,"r"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
ch=fgetc(miwen);
while(ch!=EOF)
{
if(ch==' ' 40、)
i++;
ch=fgetc(miwen);
}
printf("密文中有%d个单词。\n",i);
printf("按enter键返回主菜单\n");
ch=getchar();ch=getchar();
system("cls");
caidan();
}
caidan() //菜单函数
{
char a;
printf("\n\n\n\n");
printf("\t\t\t\t1.换位加密\n\n");
printf("\t\t\t\t2.换位解密\n\n");
printf("\ 41、t\t\t\t3.凯撒加密\n\n");
printf("\t\t\t\t4.凯撒解密\n\n");
printf("\t\t\t\t5.明文统计\n\n");
printf("\t\t\t\t6.密文统计\n\n");
printf("\t\t\t\t7.退 出\n\n");
printf("\t\t\t请输入您要操作的项目编号\n");
a=getchar();
switch(a)
{
case'1':system("cls");
transpen();
break;
case'2':system("cls");
42、
transpde();
break;
case'3':system("cls");
caesaren();
break;
case'4':system("cls");
caesarde();
break;
case'5':system("cls");
mingwentongji();
break;
case'6':system("cls");
miwentongji();
break;
case'7':system("cls");
tuichu();
break;
default:system("cls");
caidan();
}
}
void main() //主函数
{
char ch;
welcome();
printf("按enter键继续\n");
ch=getchar();
system("cls");
caidan();
}






