加密解密问题c语言程序[在线等]

 我来答
青阳小栈
推荐于2016-08-15 · TA获得超过153个赞
知道答主
回答量:70
采纳率:0%
帮助的人:27.3万
展开全部
#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("

密码错误!请重新输入

");

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式