综合性实验,求大神
*(1)加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;例如通过将字母按顺序推后n位起到加密作用,如果n=3,则将字母A换作字母D,将字母B换作字母E。X变成A,Y变成B,Z变成C,x变成a,y变成b,z变成c。 (2)解密:输入密文后再输入移位位数则可输出明文
假如有这样一条指令: Can you come here
用替代密码加密后就成为: Fdq brx Frph khuh
实验要求:
(1)系统以菜单方式工作;菜单形式不限。
(2)界面比较美观。
(3)要有一定的容错能力,比如说输入一个不存在的菜单项编号
(4)明文和密文的输入输出都要使用文件。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char a[]={"mingwen.txt"},b[]={"miwen.txt"};
welcome()//欢迎界面
{
printf("\n\n\n\n\n\n\n\n\n\t\t****************************************\n\n");
printf("\t\t\t加密解密欢迎您\n\n");
printf("\t\t****************************************\n");
printf("\n\n\n\n\n\n\t\t\t\t\t\t\t电信\n");
return 0;
}
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\n");
printf("\t\t**************************************\n");
printf("\t\t**************************************\n");
return 0;}
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()//换位加密
{ 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");
scanf("%d",&n); printf("请输入明文\n");
ch=getchar();
gets(r);
k=strlen(r);
for(i=0;i<k;i++)
fputc(r[i],mingwen);
fclose(mingwen);
if((mingwen=fopen(a,"r"))==NULL)
{
printf("不能打开文件\n");
exit(0);
}
space(h,r);
m=strlen(h);
if(m%n==0)
{
hang=m/n;
for(i=0;i<hang;i++)
{
for(j=0;j<n;j++)
{
zl[i][j]=h[z];
z++;
}
}
}
else
{
hang=m/n+1;j=0;
for(i=m;i<(hang*n);i++)
{
h[i]='a'+j;
j++;
}
for(i=0;i<hang;i++)
{
for(j=0;j<n;j++)
{
zl[i][j]=h[z];
z++;
}
}
}
z=0;
for(i=0;i<n;i++)
for(j=0;j<hang;j++)
{
he[z]=zl[j][i];
printf("%c",he[z]);
z++;
fputc(zl[j][i],miwen);
}
printf("\n");
fclose(mingwen);
fclose(miwen);
printf("\n\n");
printf("密文请查看miwen.txt\n\n\n按enter键返回主菜单\n");
ch=getchar();
system("cls");
caidan();
return 0;
}
transpde()//换位解密
{
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");
scanf("%d",&n);
printf("请输入密文\n");
ch=getchar();
gets(r);
k=strlen(r);
for(i=0;i<k;i++)
fputc(r[i],miwen);
fclose(miwen);
if((mingwen=fopen(b,"r"))==NULL)
{
printf("不能打开文件\n");
exit(0);
}
space(h,r);
m=strlen(h);
if(m%n==0)
{
hang=m/n;
for(i=0;i<n;i++)
{
for(j=0;j<hang;j++)
{
zl[i][j]=h[z];
z++;
}
}
}
else
{
hang=m/n+1;
j=0;
for(i=m;i<(hang*n);i++)
{
h[i]='a'+j;
j++;
}
for(i=0;i<n;i++)
{
for(j=0;j<hang;j++)
{
zl[i][j]=h[z];
z++;
}
}
}
z=0;
for(i=0;i<hang;i++)
for(j=0;j<n;j++)
{
he[z]=zl[j][i];
printf("%c",he[z]);
z++;
fputc(zl[j][i],mingwen);
}
fclose(mingwen);
fclose(miwen);
printf("\n\n");
printf("明文请查看mingwen.txt\n\n\n按enter键返回主菜单\n");
ch=getchar();
system("cls");
caidan();
return 0;
}
caidan()//菜单函数
{
char a;
printf("\n\n\n\n");
printf("\t\t\t\t1.换位加密\n\n");
printf("\t\t\t\t2.换位解密\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"); transpde(); break;
case'7':system("cls"); tuichu(); break;
default:system("cls"); caidan();
}
return 0;
}
tuichu()//退出菜单
{
char tc;
printf("\n\n\n\n\n\n\n\n\n\t\t********************************************\n\n");
printf("\t\t\t\t 确定退出???\n\n");
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");
tuichu();
}
return 0;
}
void main(char a[]={"mingwen.txt"},b[]={"miwen.txt"};)//主函数
{
char ch;
welcome();
printf("按enter键继续\n");
ch=getchar();
system("cls");
caidan();
return 0;
}
[此贴子已经被作者于2016-12-26 21:44编辑过]