面向对象实验二:数组、指针与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,不得不说,新的版本更加舒适,更加的智能

补充:对于实验五,其实也能有更多、更好的优化,因为是预定,所以可以选择国家,同时对填入信息进行合法检查,还可以加入验证码设定防止恶意预定等等

还有就是取消预订的功能,使程序更加人性化

而实验六的加密方法,显然是最简单的一种,如果想要增加安全性,目前想到的有两种,一种就是多层加密,即便加密方式很简单,但加密个五六次,一般人也就看不出规律了,但是这种加密可能会被计算机层层破解。

还有一种就是人工了,就像电影里的,直接拿本圣经出来,你得到的信息就是某页的某个字,也就是密码本,这个是计算机无法破解的,当然加密也不需要计算机进行

 

posted @ 2021-10-30 22:09  在野车辙  阅读(16)  评论(3编辑  收藏  举报