您的位置:首页 > 编程语言 > C语言/C++

【C++】基于C++的封装和运算符重载的思想,实现基于通讯录类的数据查询工作

2017-08-17 22:22 561 查看

一、实验项目内容

1、实现通讯录条目类(姓名、性别和电话号码),并为每个属性设置 set和get方法,并实现输入/输出运算符重载功能;

2、从通讯录的文本文件“record.txt”中读取数据放到通讯录条目类实例化的对象中,并合理组织存储结果方便查找。其文件样例如下,文件第一行为通讯录中人员的个数n,从第二行到第n+1行是n个通讯录; 每个通讯录占1行,每行依次为人员姓名、性别和电话号码,每个属性间以空格隔开。
3
张三 男 123456
李四 女 654321
张三 男 654321

3、从文本文件“query.txt”,查询指定列的数据,样例如下,只有1行,第1个数据是指查询的数据在“record.txt”对应的列数,第二个数据是查询的关键词。
1 张三

4、将查询到的结果输出到“result.txt”文件中,根据前面的“record.txt”和“query.txt”的样例,“result.txt”输出样例如下,注意将查到所有    的结果都输出。
张三 男 123456
张三 男 654321


二、实验过程或算法

程序流程图:



Member.h:

#ifndef MEMBER_H
#define MEMBER_H

#include <iostream>
#include <string>
using namespace std;

class Member {                           //成员remeber相关信息类

private:
string name;
string gender;
string tel;

public:

Member();                           //默认构造函数

Member(string name,string gender,string tel);  //构造函数

string getGender();                //Getting and setting

string getName();

string getTel();

void setGender(string gender);

void setName(string name) ;

void setTel(string tel);

};
#endif


Member.cpp

#include "Member.h"

Member::Member() {                     //默认构造函数
this->name = "NULL";
this->gender = "NULL";
this->tel = "NULL";
}

Member::Member(string name, string gender, string tel) {    //构造函数
this->name = name;
this->gender = gender;
this->tel = tel;
}
/*
* Getting and setting
* *
e598
/
string Member::getGender()  {
return gender;
}

string Member::getName()  {
return name;
}

string Member::getTel()  {
return tel;
}
void Member::setGender(string gender) {
this->gender = gender;
}

void Member::setName(string name) {
this->name = name;
}

void Member::setTel(string tel) {
this->tel = tel;
}


QueryManger.h:

#ifndef QUERYMANGER_H
#define QUERYMANGER_H

#include <iostream>
#include <string>
#include <list>
#include <fstream>
#include <sstream>
#include "Member.h"
using namespace std;

class QueryManger{                                                       //封装查询类:QueryManger
public:
QueryManger(list<Member> members,string queryL,string queryInfo);    //构造函数

list<Member> getMembers();                                           //getting

void queryNmae();                                                    //查询Name
void queryGender();                                                  //查询Gender
void queryTel();                                                     //查询Telephone

friend ostream& operator<<(ostream& output, const QueryManger& queryManger) ;
friend istream& operator>>(istream& input, QueryManger& queryManger) ;

private:
list<Member> members;                                                //查询对象集合
list<Member>::iterator it;
list<Member> queryMembers;                                           //查询结果集合
string queryL;                                                       //查询所在列
string queryInfo;                                                    //查询的信息
};
#endif


QueryManger.cpp:

#include "QueryManger.h"

QueryManger::QueryManger(list<Member> members, string queryL,   //构造函数
string queryInfo) {
this->members = members;
this->queryL = queryL;
this->queryInfo = queryInfo;

this->queryMembers=getMembers();
}

list<Member> QueryManger::getMembers() {                        //getting查询结果
if (queryL == "1") {
queryNmae();                                            //第一列==Nmae
}
if (queryL == "2") {                                        //第二列==Gender
queryGender();
}
if (queryL == "3") {
queryTel();                                             //第三列==Telephone
}
return queryMembers;
}

void QueryManger::queryNmae() {                                //查询Name
for (it = members.begin(); it != members.end(); it++) {
Member temp = *it;
if (temp.getName().compare(queryInfo) == 0) {
queryMembers.push_back(temp);
}
}
}
void QueryManger::queryGender() {                            //查询Gender
for (it = members.begin(); it != members.end(); it++) {
Member temp = *it;
if (temp.getGender().compare(queryInfo) == 0) {
queryMembers.push_back(temp);
}
}
}
void QueryManger::queryTel() {                               //查询Telephone
for (it = members.begin(); it != members.end(); it++) {
Member temp = *it;
if (temp.getTel().compare(queryInfo) == 0) {
queryMembers.push_back(temp);
}
}
}

ostream& operator<<(ostream& output, const QueryManger& queryManger){

list<Member> it=queryManger.queryMembers;
cout<<"询信息:"<<queryManger.queryL<<" "<<queryManger.queryInfo<<"\n查询结果:"<<endl;
ofstream fout("result.txt");          //查询结果写入文件

while(it.size()!=0){
fout<<it.front().getName()<<" "<<it.front().getGender()<<" "<<it.front().getTel()<<endl;
output<<it.front().getName()<<" "<<it.front().getGender()<<" "<<it.front().getTel()<<endl;
it.pop_front();
}

fout.close();
return output;
}

istream& operator>>(istream& input, QueryManger& queryManger) {
Member in;
string temp;
cout << "Please input name:";
input >> temp;
in.setName(temp);
cout << "Please input gender:";
input>> temp;
in.setGender(temp);
cout << "Please input tel:";
input>> temp;
in.setTel(temp);

queryManger.members.push_back(in);

list<Member> it = queryManger.members;
ofstream fout("record.txt");          //查询结果写入文件
fout <<it.size()<< endl;
while (it.size() != 0) {
fout << it.front().getName() << " " << it.front().getGender() << " "
<< it.front().getTel() << endl;
it.pop_front();
}
fout.close();

return input;
}


测试类:

#include <iostream>
#include <list>
#include <fstream>
#include <sstream>
#include "Member.h"
#include "QueryManger.h"
using namespace std;

int main() {
cout << "!!!Hello,Welcome!!!" <<"\n记录信息为:"<< endl; // prints !!!Hello World!!!
list<Member> members;                  //被查询对象
list<Member> queryMembers;             //查询结果对象
list<Member>::iterator it;

string name,gender,tel,queryL,queryInfo; //定义:姓名,性别,电话号码,列,查询信息
int count=0;

ifstream inRecord("record.txt");       //被查询的文件
ifstream inQuery("query.txt");         //查询信息

for(string s;getline(inRecord,s);){
if(count==0){
count++;
}
else {
cout << s << endl;                                               //输出对象
istringstream isRecord(s);
isRecord >> name >> gender >> tel;

Member member(name,gender,tel);

members.push_back(member);                                         //遍历,得到被查寻对象
}
}

for (string s; getline(inQuery, s);) {

istringstream isQuery(s);
isQuery>> queryL >> queryInfo;                                        //得到查询信息
}

QueryManger queryManger(members,queryL,queryInfo);                        //构造QueryManger

//  queryMembers=queryManger.getMembers();                                    //获取查询结果
//  cout<<"询信息:"<<queryL<<" "<<queryInfo<<"\n查询结果:"<<endl;
cout<<queryManger;                                                       //重构输出方式,输出查询结果
//  ofstream fout("result.txt");          //查询结果写入文件
//  for(it=queryMembers.begin();it!=queryMembers.end();it++){                //
//      Member temp=*it;
//      fout<<temp.getName()<<" "<<temp.getGender()<<" "<<temp.getTel()<<endl;
//      cout<<temp.getName()<<" "<<temp.getGender()<<" "<<temp.getTel()<<endl;
//  }
//
//  fout.close();

cin>>queryManger;                                                        //重构输入方式,写入新的信息
return 0;
}


三、实验结果和截图







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐