功能描述:密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。接下来,我们要在密码之上再加一套密码,虽然简单但也安全。假设元子原来有一个BBS上的密码为zvbo941992,为了方便记忆,他通过一种算法把这个密码变换成YUANzi1992,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。他是这么变换的,大家都知道手机上的字母: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8, wxyz--9, 0--0,就这么简单,元子把密码中出现的小写字母都变成对应的数字,数字和其他的符号都不做变换,声明:密码中没有空格,而密码中出现的大写字母则变成对应的小写字母之后往后移一位,如:X,先边成小写,再往后移一位,不就是y了嘛,简单吧。记住,z往后移是a哦。
程序输入:输入包括多个测试数据。输入是一个明文,密码长度不超过100个字符,输入直到文件结尾。
程序输出:正真的密文
要求及说明:
(1)设计并编写的应用程序需要体现C++面向对象程序设计语言的基本特性;
(2)使用菜单选择操作,具有友好的人机交互提示和显示,方便用户输入及查看程序运行过程、结果;
(3)采取模块化方式进行程序设计,例如:小写字母变成对应数字的功能以及大写字母变小写字母并后移一位的功能分别用两个函数来实现;
(4)程序可以根据用户的选择多次运行,直到用户选择退出;
(5)对于运行解决问题的步骤(例如从键盘输入的数据、输出到显示器的结果),除了能够在显示器上显示以外,能够处理后的结果用文件的方式保存到outfile.txt文件中。
二、一种设计思路#include#include #include using namespace std; class key{ private: string k1,k2; int m; public: void in() { cout<<"请输入明文:"; cin>>k1; m=k1.length(); k2=k1; cout<<"读取成功"< ='A'&&k1[i]<'Z') { k2[i]=k3[i]+33; } else continue; } } void change2()//小写字母变成对应数字的功能 { for(int i=0;i ='a'&&k1[i]<='c') { k2[i]='2'; } else if(k1[i]>='d'&&k1[i]<='f') { k2[i]='3'; } else if(k1[i]>='g'&&k1[i]<='i') { k2[i]='4'; } else if(k1[i]>='j'&&k1[i]<='l') { k2[i]='5'; } else if(k1[i]>='m'&&k1[i]<='o') { k2[i]='6'; } else if(k1[i]>='p'&&k1[i]<='s') { k2[i]='7'; } else if(k1[i]>='t'&&k1[i]<='v') { k2[i]='8'; } else if(k1[i]>='w'&&k1[i]<='z') { k2[i]='9'; } else continue; } } void decryption()//对输入的明文进行解密 { if(k2.length()!=0) { change2(); change1(); cout<<"解密成功"< >n; if(n==1) { a.in(); } else if(n==2) { a.decryption(); } else if(n==3) { a.outfile(); } else if(n==4) { break; } else { cout<<"无此选项,请重新选择!"< 代码运行结果
在代码保存的相同路径下,可找到新建的“outfile”文本文件
***我的代码编写和测试均通过CB完成,如果有不同多有见谅。
***在编写时参考了@七七高7777 的菜单编写方式,十分感谢。
***由于使用string类编写,没有考虑到ASCII的转换问题,参考了这篇文章的string转char,十分感谢。C++中string、char *、char[]的转换 - xqz_Pillar - 博客园 (cnblogs.com)



