面向物件實驗二:陣列、指標與c++標準庫
阿新 • • 發佈:2021-10-31
任務五:
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;}; }; intinfo::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,不得不說,新的版本更加舒適,更加的智慧
補充:對於實驗五,其實也能有更多、更好的優化,因為是預定,所以可以選擇國家,同時對填入資訊進行合法檢查,還可以加入驗證碼設定防止惡意預定等等
還有就是取消預訂的功能,使程式更加人性化
而實驗六的加密方法,顯然是最簡單的一種,如果想要增加安全性,目前想到的有兩種,一種就是多層加密,即便加密方式很簡單,但加密個五六次,一般人也就看不出規律了,但是這種加密可能會被計算機層層破解。
還有一種就是人工了,就像電影裡的,直接拿本聖經出來,你得到的資訊就是某頁的某個字,也就是密碼本,這個是計算機無法破解的,當然加密也不需要計算機進行