面向对象实验二:数组、指针与c++标准库
任务五:
info.hpp:
#include<iostream> #include<string> #include<vector> using namespace std; class info { private: string nickname,contact,city;int n; static int num; public:info(string x,string y,string z,int w):nickname(x),contact(y),city(z),n(w){}; void print() { cout<<"称呼:\t"<<nickname<<endl; cout<<"联系方式:\t"<<contact<<endl; cout<<"所在城市:\t"<<city<<endl; cout<<"预定人数:\t"<<n<<endl; } static int count(){return num;}; void add(){num+=n;}; }; int info::num=0;
task5.cpp:
#include<iostream> #include<string> #include<vector> #include"info.hpp" using namespace std; const int capacity=100; int main() { vector<info>lis; int i=0; cout << "录入信息:" << endl; cout << "称呼/昵称,联系方式(邮箱/手机号),所在城市,预定参加人数" << endl; string x, y, z; int t; while(cin >> x >> y >> z >> t) { lis.push_back(info(x,y,z,t));/*输入*/ if(info::count()+t>capacity) { cout<<"对不起,只剩"<<capacity-info::count()<<"个位置"<<endl; cout<<"1.输入u,更新(update)预订信息"<<endl; cout<<"2.输入q,退出预定"<<endl; cout<<"你的选择:"; char c; cin >> c; if(c=='u') { lis.pop_back(); continue; } else { lis.pop_back(); break; } } else{ lis.at(i).add(); i++; continue; } } cout<<"截至目前,一共有"<<info::count()<<"位观众预定参加,预定听众信息如下:"<<endl; for(int j=0;j<=lis.size()-1;j++) { lis.at(j).print(); } }
运行结果:
1、
2、
任务六:
Textcoder.hpp:#include<iostream>
#include<string> using namespace std; class TextCoder { private: string text; public: TextCoder(string x):text(x){}; string encoder() { for(auto&c:text) {
if(c>='A'&&c<='z') if(c+5>'z') c='A'+c+4-'z'; else c+=5; } return text; }; string decoder() { for(auto&c:text) {
if(c>='A'&&c<='z') if(c-5<'A') c='z'+c-4-'A'; else c-=5; } return text; }; };
task6.cpp:
#include "TextCoder.hpp" #include <iostream> #include <string> int main() { using namespace std; string text, encoded_text, decoded_text; cout << "输入英文文本: "; while (getline(cin, text)) { encoded_text = TextCoder(text).encoder(); // 这里使用的是临时无名对象 cout << "加密后英文文本:\t" << encoded_text << endl; decoded_text = TextCoder(encoded_text).decoder(); // 这里使用的是临时无名对象 cout << "解密后英文文本:\t" << decoded_text << endl; cout << "\n输入英文文本: "; } }
运行结果:
总结:
实验五的类并不难写,主要考察的是对vector的用法,比如size、push_back、pop_back等函数的熟悉
实验六则是对for auto的简单应用。比较遗憾的是,visual2010虽然支持c++11,但是部分规则并不适用,for(auto&x:y)这样的用法在2010中必须标明起始位置,需要用vector去定位,于是一气之下升级到了2019,不得不说,新的版本更加舒适,更加的智能
补充:对于实验五,其实也能有更多、更好的优化,因为是预定,所以可以选择国家,同时对填入信息进行合法检查,还可以加入验证码设定防止恶意预定等等
还有就是取消预订的功能,使程序更加人性化
而实验六的加密方法,显然是最简单的一种,如果想要增加安全性,目前想到的有两种,一种就是多层加密,即便加密方式很简单,但加密个五六次,一般人也就看不出规律了,但是这种加密可能会被计算机层层破解。
还有一种就是人工了,就像电影里的,直接拿本圣经出来,你得到的信息就是某页的某个字,也就是密码本,这个是计算机无法破解的,当然加密也不需要计算机进行