加密解密问题c语言程序[在线等]
1个回答
展开全部
#include <stdio.h> //
标准输入输出函数
#include <stdlib.h> //
标准库函数
#include <string.h> //
字符串处理函数
#include <ctype.h> //
字符操作函数
#define Max 30000 //
定义常数,容纳最大记录数
//
定义核心数组并对其取地址
char name[100],Wenzhang[Max];
char *p1=name;
char *p2=Wenzhang;
//
函数原型说明,定义
6
个功能模块函数和一个主函数
//
一般将主函数定义放在程序前部,其他函数定义放在主函数之后,因此要先说明函数原型
//
函数原型说明可帮助读者理解程序的结构和功能
char Menubar(); //
主菜单函数
,
返回菜单选项字符
void List(); //
显示所有记录文本
void Save(int n); //
保存文件
void Jiami(); //
文本加密
void Jiemi(); //
文本解密
void Tongji(); //
统计字数
//
主函数,程序运行入口。进行功能选项判定并引用相应的功能函数
//
在无限循环中引用函数
Menubar()
显示菜单,并返回菜单选项
void main()
{
int yyk=0;
char ch1;
int yyk1=0;
char ch2;
int count=1;
printf("
请输入文章名,输入
'#'
并按回车结束。
\n");
while ((ch1=getchar())!='#')
{
name[yyk1++]=ch1;
}
name[yyk1]='\0';
printf("
请输入英文文章
(
本系统只支持英文格式且不要缩写
)
输入
'#'
并按回车结束。
\n");
while ((ch2=getchar())!='#')
{
if(yyk>30000)
{
printf("
文章太长,超出
30000
字符部分的内容将被忽略!
\n");
break;
}
Wenzhang[yyk++]=ch2;
}
Wenzhang[yyk]='\0';
for(;;) //
无限循环
,
选择
0
退出循环
{
switch(Menubar()) //
调用主菜单函数,按返回值选择功能函数
{
//
选择功能
1
至
4
,查询并显示记录
case '1': List(); break; //
显示原文
case '2': Tongji() break; //
字数统计
case '3': Jiami(); break; //
文件加密
case '4': Jiemi(); break; //
文件解密
case '5': Save(count); break; //
文件保存
case '0': exit(0); //
跳出循环,终止程序运行
} // switch
语句结束
} // for
循环结束
} // main()
函数结束
//
主菜单函数
,
由
main()
函数引用,返回菜单选项字符供
main()
的
switch
语句判定
//
使用
printf()
函数显示菜单项,用
sacnf()
函数接收选项字符
// while
条件限定选项的合法性,非法字符则重新输入
char Menubar()
{
char c='0';
printf("\n#########################
文本加密解密管理软件
#################################\n\n");
printf("
文
1.
显示文件文本原样
** ** **
\n");
printf("
本
2.
字数统计
** ** **
\n");
printf("
加
3.
文件加密
** * ** **
\n");
\n");
printf("
密
4.
文件解密
** * ** ***** ** **** *****
* * ***** \n");
printf("
解
5.
文件保存
** * ** ** **
** ** ** **
**
** ** ** **\n");
printf("
密
0.
退出系统
** * * ** ******* ** ** ** ** **
** ** *******\n");
printf("
系
*** *** ** **
** ** **
**
** ** ** \n");
printf("
统
** ** ***** ** **** *****
** ** ** ***** \n");
printf("\n#########################################################################
############\n");
printf("\n
请输入选项
(0-5):"); //
提示输入选项
do{
scanf("%c",&c); //
输入选择项
,
为
1
个字符
}while(!(c>='0'&&c<='5'));//
选择项不合法则重输
return c; //
返回选择项
}
//
保存数组中的记录到文件中,参数为记录数
//
在对数组中的数据作过修改后都需要引用本函数保存修改结果
void Save(int n)
{
int i;
FILE *fp; //
指向文件的指针
fp=fopen("My Documents1.txt","wt");
getchar(\n);
printf(".........
正在保存文件
.............\n"); //
输出提示信息
fprintf(fp,"\r\n"); //
将换行符号写入文件
fprintf(fp,"%s",p1);
fprintf(fp,"%s",p2);
fprintf(fp,"\r\n"); //
将换行符号写入文件
,
使记录分行存
放
fclose(fp); //
关闭文件
printf("........
文件已经成功保存
!..........\n"); //
提示文件保存成功
}
//
显示记录,参数为记录数组
void List()
{
printf("\n\n********************
原文如下
************************\n\n");
printf("--------------------------------------------------------------------------
\
n");
puts(p1);
getchar(\n);
puts(p2);
printf("\n*******************
显
示
结
束
**********************\n");
}
//
统计字数
void Tongji()
{
int w,s; //
定义两个整型变量
w=s=0; //
对
W,S
赋初值
0
for (p2=Wenzhang;*p2!='\0';p2++) //for
循环
{ //p2
处值指向首地址
Wenzhang
,当
p
取值不是终止符时,执行并完后自加
1
if (*p2=='.'||*p2=='?'||*p2=='!') //
选择语句条件是
p2
地址所取
值是句号或问号或感叹号
++s; //
满足以上条件则执行
s
自加
1
if (*p2>='A'&&*p2<='Z'||*p2>='a'&&*p2<='z') //
选择语句条件是
p
地址所取
值是
26
个字母
{
if (*(p2+1)<'A'||*(p2+1)>'Z'&&*(p2+1)<'a'||*(p2+1)>'z') //
复合条件语
句
++w;
//
当条件满足
p+1
这个地址取值不是
26
个字母时,执行
w
自加
1
}
}
printf("\n
总单词数为
%d\n",w); //
结束
for
循环后打印
s,w
的最后结
果
printf("
总句数为
%d\n",s);
}
//
加密
void Jiami()
{
char VI,VIP;
int i=0;
printf("
请输入加密密码:
");
scanf("%d",&VI);
while(Wenzhang[i])
{
if (Wenzhang[i]>=32&&Wenzhang[i]<91) Wenzhang[i]+=26;
else if(Wenzhang[i]>=91&&Wenzhang[i]<102) Wenzhang[i]+=26;
else if(Wenzhang[i]>101&&Wenzhang[i]<127) Wenzhang[i]-=69;
else Wenzhang[i]=Wenzhang[i];
i++;
}
printf("
加密后的文章内容如下:
\n\n");
puts(Wenzhang);
}
//
解密
void Jiemi()
{
char VI,VIP;
int i=0;
printf("
请输入密码
:
");
scanf("%d",&VIP);
if(VIP==VI)
{
while(Wenzhang[i])
{
if (Wenzhang[i]>=32&&Wenzhang[i]<=57)
Wenzhang[i]+=69;
else if(Wenzhang[i]>=58&&Wenzhang[i]<117) Wenzhang[i]-=26;
else if(Wenzhang[i]>=117&&Wenzhang[i]<=127)
Wenzhang[i]-=26;
else
Wenzhang[i]=Wenzhang[i];
i++;
}
printf("\n\n
解密后的文章内容如下:
\n\n");
puts(Wenzhang);
printf("\n\n");
}
else
printf("
密码错误!请重新输入
");
}
标准输入输出函数
#include <stdlib.h> //
标准库函数
#include <string.h> //
字符串处理函数
#include <ctype.h> //
字符操作函数
#define Max 30000 //
定义常数,容纳最大记录数
//
定义核心数组并对其取地址
char name[100],Wenzhang[Max];
char *p1=name;
char *p2=Wenzhang;
//
函数原型说明,定义
6
个功能模块函数和一个主函数
//
一般将主函数定义放在程序前部,其他函数定义放在主函数之后,因此要先说明函数原型
//
函数原型说明可帮助读者理解程序的结构和功能
char Menubar(); //
主菜单函数
,
返回菜单选项字符
void List(); //
显示所有记录文本
void Save(int n); //
保存文件
void Jiami(); //
文本加密
void Jiemi(); //
文本解密
void Tongji(); //
统计字数
//
主函数,程序运行入口。进行功能选项判定并引用相应的功能函数
//
在无限循环中引用函数
Menubar()
显示菜单,并返回菜单选项
void main()
{
int yyk=0;
char ch1;
int yyk1=0;
char ch2;
int count=1;
printf("
请输入文章名,输入
'#'
并按回车结束。
\n");
while ((ch1=getchar())!='#')
{
name[yyk1++]=ch1;
}
name[yyk1]='\0';
printf("
请输入英文文章
(
本系统只支持英文格式且不要缩写
)
输入
'#'
并按回车结束。
\n");
while ((ch2=getchar())!='#')
{
if(yyk>30000)
{
printf("
文章太长,超出
30000
字符部分的内容将被忽略!
\n");
break;
}
Wenzhang[yyk++]=ch2;
}
Wenzhang[yyk]='\0';
for(;;) //
无限循环
,
选择
0
退出循环
{
switch(Menubar()) //
调用主菜单函数,按返回值选择功能函数
{
//
选择功能
1
至
4
,查询并显示记录
case '1': List(); break; //
显示原文
case '2': Tongji() break; //
字数统计
case '3': Jiami(); break; //
文件加密
case '4': Jiemi(); break; //
文件解密
case '5': Save(count); break; //
文件保存
case '0': exit(0); //
跳出循环,终止程序运行
} // switch
语句结束
} // for
循环结束
} // main()
函数结束
//
主菜单函数
,
由
main()
函数引用,返回菜单选项字符供
main()
的
switch
语句判定
//
使用
printf()
函数显示菜单项,用
sacnf()
函数接收选项字符
// while
条件限定选项的合法性,非法字符则重新输入
char Menubar()
{
char c='0';
printf("\n#########################
文本加密解密管理软件
#################################\n\n");
printf("
文
1.
显示文件文本原样
** ** **
\n");
printf("
本
2.
字数统计
** ** **
\n");
printf("
加
3.
文件加密
** * ** **
\n");
\n");
printf("
密
4.
文件解密
** * ** ***** ** **** *****
* * ***** \n");
printf("
解
5.
文件保存
** * ** ** **
** ** ** **
**
** ** ** **\n");
printf("
密
0.
退出系统
** * * ** ******* ** ** ** ** **
** ** *******\n");
printf("
系
*** *** ** **
** ** **
**
** ** ** \n");
printf("
统
** ** ***** ** **** *****
** ** ** ***** \n");
printf("\n#########################################################################
############\n");
printf("\n
请输入选项
(0-5):"); //
提示输入选项
do{
scanf("%c",&c); //
输入选择项
,
为
1
个字符
}while(!(c>='0'&&c<='5'));//
选择项不合法则重输
return c; //
返回选择项
}
//
保存数组中的记录到文件中,参数为记录数
//
在对数组中的数据作过修改后都需要引用本函数保存修改结果
void Save(int n)
{
int i;
FILE *fp; //
指向文件的指针
fp=fopen("My Documents1.txt","wt");
getchar(\n);
printf(".........
正在保存文件
.............\n"); //
输出提示信息
fprintf(fp,"\r\n"); //
将换行符号写入文件
fprintf(fp,"%s",p1);
fprintf(fp,"%s",p2);
fprintf(fp,"\r\n"); //
将换行符号写入文件
,
使记录分行存
放
fclose(fp); //
关闭文件
printf("........
文件已经成功保存
!..........\n"); //
提示文件保存成功
}
//
显示记录,参数为记录数组
void List()
{
printf("\n\n********************
原文如下
************************\n\n");
printf("--------------------------------------------------------------------------
\
n");
puts(p1);
getchar(\n);
puts(p2);
printf("\n*******************
显
示
结
束
**********************\n");
}
//
统计字数
void Tongji()
{
int w,s; //
定义两个整型变量
w=s=0; //
对
W,S
赋初值
0
for (p2=Wenzhang;*p2!='\0';p2++) //for
循环
{ //p2
处值指向首地址
Wenzhang
,当
p
取值不是终止符时,执行并完后自加
1
if (*p2=='.'||*p2=='?'||*p2=='!') //
选择语句条件是
p2
地址所取
值是句号或问号或感叹号
++s; //
满足以上条件则执行
s
自加
1
if (*p2>='A'&&*p2<='Z'||*p2>='a'&&*p2<='z') //
选择语句条件是
p
地址所取
值是
26
个字母
{
if (*(p2+1)<'A'||*(p2+1)>'Z'&&*(p2+1)<'a'||*(p2+1)>'z') //
复合条件语
句
++w;
//
当条件满足
p+1
这个地址取值不是
26
个字母时,执行
w
自加
1
}
}
printf("\n
总单词数为
%d\n",w); //
结束
for
循环后打印
s,w
的最后结
果
printf("
总句数为
%d\n",s);
}
//
加密
void Jiami()
{
char VI,VIP;
int i=0;
printf("
请输入加密密码:
");
scanf("%d",&VI);
while(Wenzhang[i])
{
if (Wenzhang[i]>=32&&Wenzhang[i]<91) Wenzhang[i]+=26;
else if(Wenzhang[i]>=91&&Wenzhang[i]<102) Wenzhang[i]+=26;
else if(Wenzhang[i]>101&&Wenzhang[i]<127) Wenzhang[i]-=69;
else Wenzhang[i]=Wenzhang[i];
i++;
}
printf("
加密后的文章内容如下:
\n\n");
puts(Wenzhang);
}
//
解密
void Jiemi()
{
char VI,VIP;
int i=0;
printf("
请输入密码
:
");
scanf("%d",&VIP);
if(VIP==VI)
{
while(Wenzhang[i])
{
if (Wenzhang[i]>=32&&Wenzhang[i]<=57)
Wenzhang[i]+=69;
else if(Wenzhang[i]>=58&&Wenzhang[i]<117) Wenzhang[i]-=26;
else if(Wenzhang[i]>=117&&Wenzhang[i]<=127)
Wenzhang[i]-=26;
else
Wenzhang[i]=Wenzhang[i];
i++;
}
printf("\n\n
解密后的文章内容如下:
\n\n");
puts(Wenzhang);
printf("\n\n");
}
else
printf("
密码错误!请重新输入
");
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询