作业目标:
这个作业中,你需要综合运用之前文章中的知识,来解决一个相对完整的应用程序。
作业描述:
1 在这个作业中你需要在文本文件中存储学生通讯录的信息,并在程序启动的时候加载这些数据到内存中。
2 在程序运行过程中允许用户用键盘输入信息来完成对通讯录数的增删改查。
交互示例:

开始代码
开始代码不是完整的代码,需要你填写一部分代码,使之完整。
答案在本文最后。
当你填写完整之后,运行程序和示例的交互输出一致,就算完成了这个作业
开始代码:
- #include
- #include
- #include
- #include
- #include
- #include
- using namespace std;
-
- class Person
- {
- public:
- friend ostream& operator<<(ostream& os, const Person& _person);
- friend istream& operator>>(istream& is, Person& _person);
-
- public:
- string m_id;
- string m_name;
- string m_tel;
- };
-
- ostream& operator<<(ostream& os, const Person& person)
- {
- os << left << setw(5) << person.m_id << setw(15) << person.m_name << setw(20) << person.m_tel;
- return os;
- }
-
- istream& operator>>(istream& is, Person& person)
- {
- //(1) your code
- // 使用输入操作符重载,将流中的数据,提取赋值给person对象的成员变量中
- //see https://zhuanlan.zhihu.com/p/412724745
-
- return is;
- }
-
- class PersonManager
- {
- public:
- void InputOnePerson(void);
- bool LoadAllPersonFromFile(const string& fileName);
- bool DeletePerson(void);
- bool QueryPersonByName() const;
- bool QueryPersonByTel() const;
- void ShowAllPerson(void) const;
- bool SaveAllPersonToFile(void) const;
-
- private:
- vector
m_allPerson; - };
-
- bool PersonManager::DeletePerson(void)
- {
- cout << "Please input person id for delete:";
-
-
- string id;
- cin >> id;
- for (auto itr = m_allPerson.begin(); itr != m_allPerson.cend(); ++itr)
- {
- if (itr->m_id == id)
- {
- //(2) your code
- // 容器的erase方法支持删除容器的元素时,传入指向元素的迭代器
- //see https://zhuanlan.zhihu.com/p/441293600
-
- }
- }
- return false;
- }
- bool PersonManager::QueryPersonByName() const
- {
- //注意该函数需要返回bool值
- cout << "Please input name for query:";
-
- string name;
- cin >> name;
- for (auto itr = m_allPerson.cbegin(); itr != m_allPerson.cend(); ++itr)
- {
- if (itr->m_name == name)
- {
- cout << "Find:" << endl;
- //(3) your code
- //see https://zhuanlan.zhihu.com/p/376440190
- //see https://zhuanlan.zhihu.com/p/376446724
-
- }
- }
- cout << "not found " << name << endl;
- return false;
- }
- bool PersonManager::QueryPersonByTel() const
- {
- cout << "Please input tel for query:";
- string tel;
- cin >> tel;
- for (auto itr = m_allPerson.cbegin(); itr != m_allPerson.cend(); ++itr)
- {
- if (itr->m_tel == tel)
- {
- cout << "Find:" << endl;
- //(4) your code
- //see https://zhuanlan.zhihu.com/p/376440190
- //see https://zhuanlan.zhihu.com/p/376446724
-
- }
- }
- cout << "not found " << tel << endl;
- return false;
- }
-
- void PersonManager::ShowAllPerson(void) const
- {
- cout << "All Person:" << endl;
- cout << left << setw(5) << "id" << setw(15) << "name" << setw(20) << "tel" << endl;
- for (auto& item : m_allPerson)
- {
- cout << item << endl;
- }
- }
- bool PersonManager::SaveAllPersonToFile(void) const
- {
- ofstream fout("data_saved.txt");
- //下面的常量迭代器 cbegin cend 中的 c 指的是 const的意思,表示不可以修改容器的元素
- for (auto itr = m_allPerson.cbegin(); itr != m_allPerson.cend(); ++itr)
- {
- //(5) your code
- //see https://zhuanlan.zhihu.com/p/262508774
-
- }
- return true;
- }
-
- bool PersonManager::LoadAllPersonFromFile(const string& fileName)
- {
- ifstream fin(fileName);
- if (!fin)
- {
- cout << "load data failed . file " << fileName << " not exits." << endl;
- return false;
- }
-
- Person person;
- while (fin >> person)
- {
- m_allPerson.push_back(person);
- }
- cout << "load data from file success." << endl;
- return true;
- }
-
- void PersonManager::InputOnePerson(void)
- {
- cout << "Please input one person:" << endl;
- cout << "Please input id:";
- string id;
- cin >> id;
- Person person;
- person.m_id = id;
-
- for (auto itr = m_allPerson.cbegin(); itr != m_allPerson.cend(); ++itr)
- {
- if (itr->m_id == id)
- {
- cout << id << " already existed! Save failed." << endl;
- return;
- }
- }
-
- cout << "Please input name:";
- string name;
- cin >> name;
- person.m_name = name;
-
- cout << "Please input tel:";
- string tel;
- cin >> tel;
- person.m_tel = tel;
-
- cout << "Input finished, save successed." << endl;
-
- m_allPerson.push_back(person);
- }
-
- int main(int argv, char* argc[])
- {
- PersonManager personMgr;
- personMgr.LoadAllPersonFromFile("input_data.txt");
- personMgr.ShowAllPerson();
-
- while(true)
- {
- cout<<"input a commond : "<
- cout<<"1 [AddPerson]"<
- cout<<"2 [ShowAllPerson]"<
- cout<<"3 [QueryPerson by name]"<
- cout<<"4 [QueryPerson by tel]"<
- cout<<"5 [SaveAllPersonToFile]"<
- cout<<"6 [DeletePerson]"<
- cout<<"0 [ExitAndSaveChange]"<
- int commond;
- cin>>commond;
- switch(commond)
- {
- case 1: { personMgr.InputOnePerson(); break;}
- case 2: { personMgr.ShowAllPerson(); break;}
- case 3: { personMgr.QueryPersonByName(); break;}
- case 4: { personMgr.QueryPersonByTel(); break;}
- case 5: { personMgr.SaveAllPersonToFile(); break;}
- case 6: { personMgr.DeletePerson(); break;}
- case 0: { personMgr.SaveAllPersonToFile(); return 0;}
- default:{ cout<<"System Exit."<
return 0;} - }
- }
- return 0;
- }
输入文件
input_data.txt
文件内容:
- 2 zhangsan2 13788889992
- 3 zhangsan3 13788889993
- 4 zhangsan4 13788889994
- 5 wanger 13333333333
运行与输出
- load data from file success.
- All Person:
- id name tel
- 2 zhangsan2 13788889992
- 3 zhangsan3 13788889993
- 4 zhangsan4 13788889994
- 5 wanger 13333333333
- input a commond :
- 1 [AddPerson]
- 2 [ShowAllPerson]
- 3 [QueryPerson by name]
- 4 [QueryPerson by tel]
- 5 [SaveAllPersonToFile]
- 6 [DeletePerson]
- 0 [ExitAndSaveChange]
- 2
- All Person:
- id name tel
- 2 zhangsan2 13788889992
- 3 zhangsan3 13788889993
- 4 zhangsan4 13788889994
- 5 wanger 13333333333
- input a commond :
- 1 [AddPerson]
- 2 [ShowAllPerson]
- 3 [QueryPerson by name]
- 4 [QueryPerson by tel]
- 5 [SaveAllPersonToFile]
- 6 [DeletePerson]
- 0 [ExitAndSaveChange]
- 1
- Please input one person:
- Please input id:1
- Please input name:zhangsan
- Please input tel:13344445555
- Input finished, save successed.
- input a commond :
- 1 [AddPerson]
- 2 [ShowAllPerson]
- 3 [QueryPerson by name]
- 4 [QueryPerson by tel]
- 5 [SaveAllPersonToFile]
- 6 [DeletePerson]
- 0 [ExitAndSaveChange]
- 2
- All Person:
- id name tel
- 2 zhangsan2 13788889992
- 3 zhangsan3 13788889993
- 4 zhangsan4 13788889994
- 5 wanger 13333333333
- 1 zhangsan 13344445555
- input a commond :
- 1 [AddPerson]
- 2 [ShowAllPerson]
- 3 [QueryPerson by name]
- 4 [QueryPerson by tel]
- 5 [SaveAllPersonToFile]
- 6 [DeletePerson]
- 0 [ExitAndSaveChange]
- 3
- Please input name for query:zhangsan
- Find:
- 1 zhangsan 13344445555
- input a commond :
- 1 [AddPerson]
- 2 [ShowAllPerson]
- 3 [QueryPerson by name]
- 4 [QueryPerson by tel]
- 5 [SaveAllPersonToFile]
- 6 [DeletePerson]
- 0 [ExitAndSaveChange]
- 3
- Please input name for query:zhang
- not found zhang
- input a commond :
- 1 [AddPerson]
- 2 [ShowAllPerson]
- 3 [QueryPerson by name]
- 4 [QueryPerson by tel]
- 5 [SaveAllPersonToFile]
- 6 [DeletePerson]
- 0 [ExitAndSaveChange]
- 4
- Please input tel for query:13344445555
- Find:
- 1 zhangsan 13344445555
- input a commond :
- 1 [AddPerson]
- 2 [ShowAllPerson]
- 3 [QueryPerson by name]
- 4 [QueryPerson by tel]
- 5 [SaveAllPersonToFile]
- 6 [DeletePerson]
- 0 [ExitAndSaveChange]
- 4
- Please input tel for query:1334444
- not found 1334444
- input a commond :
- 1 [AddPerson]
- 2 [ShowAllPerson]
- 3 [QueryPerson by name]
- 4 [QueryPerson by tel]
- 5 [SaveAllPersonToFile]
- 6 [DeletePerson]
- 0 [ExitAndSaveChange]
- 6
- Please input person id for delete:4
- input a commond :
- 1 [AddPerson]
- 2 [ShowAllPerson]
- 3 [QueryPerson by name]
- 4 [QueryPerson by tel]
- 5 [SaveAllPersonToFile]
- 6 [DeletePerson]
- 0 [ExitAndSaveChange]
- 2
- All Person:
- id name tel
- 2 zhangsan2 13788889992
- 3 zhangsan3 13788889993
- 5 wanger 13333333333
- 1 zhangsan 13344445555
- input a commond :
- 1 [AddPerson]
- 2 [ShowAllPerson]
- 3 [QueryPerson by name]
- 4 [QueryPerson by tel]
- 5 [SaveAllPersonToFile]
- 6 [DeletePerson]
- 0 [ExitAndSaveChange]
- 5
- input a commond :
- 1 [AddPerson]
- 2 [ShowAllPerson]
- 3 [QueryPerson by name]
- 4 [QueryPerson by tel]
- 5 [SaveAllPersonToFile]
- 6 [DeletePerson]
- 0 [ExitAndSaveChange]
- 0
最终保存数据到文件 data_saved.txt
文件 data_saved.txt 的内容为:
- 2 zhangsan2 13788889992
- 3 zhangsan3 13788889993
- 5 wanger 13333333333
- 1 zhangsan 13344445555
你的结果也是这样吗?
答案在此
学生完成该作业展示

另一个学生实现的效果

如需答案和答疑:请私信。
-
相关阅读:
中国500米分辨率年最大LAI数据集(2000-2020)
数据库基本概念
likely和unlikely的用法
飞天使-mysql-安装以及环境搭建
数据结构系列学习(七) - 链栈(Chain_Stack)
【通信】Matlab实现改进的多同步压缩变换
数字藏品NFT“无聊猿”BAYC的内忧与外患
LeetCode-热题100-笔记-day31
解决在pycharm中使用matplotlib画图问题
(附源码)spring boot建材市场销售管理系统 毕业设计 191544
-
原文地址:https://blog.csdn.net/ClamReason/article/details/132636814