四 实验结论
(1)实验任务5
1. 源代码如下
Info.hpp
#ifndef INFO_HPP #define INFO_HPP //Info 类的定义 #include <iostream> #include <string> #include <iomanip> using namespace std; class Info { public: Info(); Info(string nickname0, string contact0, string city0, int n0); ~Info(){}; void print_n() const ; private: string nickname; string contact; string city; int n; }; //默认构造函数 Info::Info(){}; //构造函数 Info::Info(string nickname0, string contact0, string city0, int n0):nickname(nickname0),contact(contact0),city(city0),n(n0) { }; //输出信息 void Info::print_n() const { cout << setiosflags(ios::left) << setw(12) <<"称呼:" << nickname << endl ; cout << setw(12) <<"联系方式:" << contact << endl ; cout << setw(12) <<"所在城市:" << city << endl ; cout << setw(12) <<"预定人数:" << n << endl ; } #endif
task5.cpp
#include "Info.hpp" #include <iostream> #include <vector> int main() { using namespace std; vector<Info> audience_info_list; const int capacity=100; string nickname0,contact0,city0; int n0; int count=0; cout << "录入信息:" << endl ; while(cin >> nickname0 >> contact0 >> city0 >> n0) { if(count+n0>capacity) { cout << "对不起,只剩" << capacity-count << "个位置。" << endl ; cout << "1.输入u,更新(update)预定信息" << endl ; cout << "2.输入p,退出预定" << endl ; string judgeinformation; cin >> judgeinformation ; if(judgeinformation=="p") break; else if(judgeinformation!="u") cout << "输入信息错误,自动退出预定" << endl ; } else { Info test(nickname0,contact0,city0,n0); audience_info_list.push_back(test); count+=n0; if(count==capacity) { cout << "场馆人数已满,预定系统自动关闭" << endl ; break; } } } cout << "截至目前为止,一共有" << audience_info_list.size() << "位顾客预定参加,预定顾客信息如下:" << endl ; for(auto i :audience_info_list) i.print_n(); }
2.运行截图如下
(2)实验任务6
1. 源代码如下
textcoder.hpp
#ifndef TEXTCODER_HPP #define TEXTCODER_HPP #include <iostream> #include <string> using namespace std ; class TextCoder { public: TextCoder() ; TextCoder(string text0) ; ~TextCoder(){ } ; string encoder() const ; string decoder() const ; private: string text; }; //默认构造函数 TextCoder::TextCoder() { }; //构造函数 TextCoder::TextCoder(string text0):text(text0) { }; //加密函数 string TextCoder::encoder() const { string entext=text; for(auto &i : entext) { if(i>='A'&&i<='U') i+=5; else if(i>='V'&&i<='Z') i-=21; else if(i>='a'&&i<='u') i+=5; else if(i>='v'&&i<='z') i-=21; } return entext; }; //解密函数 string TextCoder::decoder() const { string detext=text; for(auto &i : detext) { if(i>='F'&&i<='Z') i-=5; else if(i>='A'&&i<='E') i+=21; else if(i>='f'&&i<='z') i-=5; else if(i>='a'&&i<='e') i+=21; } return detext; }; #endif
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输入英文文本: "; } }
2. 运行截图如下
五 实验结论
(1)for (declaration : expression)这个循环在编写代码时,提供了非常方便的遍历手段,同时auto函数也是省略了很多判断过程。比如textcoder.hpp中加密函数遍历string类时,一开始我并不知道i是什么类型,想用迭代器的方式去访问,在编译时报错了,因此i只是一个字符类型。
(2)在实验五判断人数时,当人数达到了100,直接退出了循环,以免输入无效。同时,在选择继续输入预定信息或者退出时,我判断了u和p,实际上如果按照指示输入,只需要判断一个就可以了,但是,为了避免输入别的字符导致判断错误,还是判断了两次。