1. 程式人生 > 其它 >面向物件實驗二:陣列、指標與c++標準庫

面向物件實驗二:陣列、指標與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,不得不說,新的版本更加舒適,更加的智慧

補充:對於實驗五,其實也能有更多、更好的優化,因為是預定,所以可以選擇國家,同時對填入資訊進行合法檢查,還可以加入驗證碼設定防止惡意預定等等

還有就是取消預訂的功能,使程式更加人性化

而實驗六的加密方法,顯然是最簡單的一種,如果想要增加安全性,目前想到的有兩種,一種就是多層加密,即便加密方式很簡單,但加密個五六次,一般人也就看不出規律了,但是這種加密可能會被計算機層層破解。

還有一種就是人工了,就像電影裡的,直接拿本聖經出來,你得到的資訊就是某頁的某個字,也就是密碼本,這個是計算機無法破解的,當然加密也不需要計算機進行