此通讯录采用vector容器来存储用户信息
contact.h
#ifndef _CONTACT_H_
#define _CONTACT_H_
#include <iostream>
#include <string>
#include <algorithm>
#include <fstream>
//#include <functional>
using namespace std;
class User_info
{
friend ostream & operator<<(ostream &os,User_info &p)//友元函数定义在person类中,可以操作person中的成员。
{
os << p.id << p.name << p.address << p.telephone << p.homephone;
return os;
}
friend bool compareID(const User_info & m1, const User_info & m2);
friend bool compareNAME(const User_info & m1, const User_info & m2);
friend bool compareADDRESS(const User_info & m1, const User_info & m2);
friend bool compareTELEPHONE(const User_info & m1, const User_info & m2);
friend bool compareHOMEPHONE(const User_info & m1, const User_info & m2);
public :
User_info();
void setId();
string getId();
void setName();
string getName();
void setAddress();
string getAddress();
void setTelephone();
string getTelephone();
void setHomephone();
string getHomephone();
void showInfo();
void addInfo(); //增
void deleteInfo();//删
void modifyInfo();//改
void searchInfo();//查
void saveFile();
void loadFile();
void sortInfo();
void quit();
void choice();
~User_info();
private :
string id;
string name;
string address;
string telephone;
string homephone;
};
#endif//_CONTACT_H_
contact.cpp
#include "Contact.h"
#include <vector>
vector<User_info>person;
int OUT = 0;
User_info::User_info()
{
}
User_info::~User_info()
{
}
void User_info::setId()
{
cout << "请输入ID:\n";
cin >> id;
char ch;
while ((ch = getchar()) != '\n');
}
string User_info::getId()
{
return this->id;
}
void User_info::setName()
{
cout << "请输入Name:\n";
cin >> name;
char ch;
while ((ch = getchar()) != '\n');
}
string User_info::getName()
{
return this->name;
}
void User_info::setAddress()
{
cout << "请输入Address:\n";
cin >> address;
char ch;
while ((ch = getchar()) != '\n');
}
string User_info::getAddress()
{
return this->address;
}
void User_info::setTelephone()
{
cout << "请输入Telephone:\n";
cin >> telephone;
char ch;
while ((ch = getchar()) != '\n');
}
string User_info::getTelephone()
{
return this->telephone;
}
void User_info::setHomephone()
{
cout << "请输入Homephone:\n";
cin >> this->homephone;
char ch;
while ((ch = getchar()) != '\n');
}
string User_info::getHomephone()
{
return this->homephone;
}
void User_info::addInfo()
{
vector<User_info>::iterator it;
Loop:
User_info tmp;
loop:
tmp.setId();
for (it = person.begin(); it != person.end(); it++)
{
if (!(it->getId()).compare(tmp.getId()))
{
cout << "ID号重复,请重新输入";
goto loop;
}
}
tmp.setName();
tmp.setAddress();
loop1:
tmp.setTelephone();
while((tmp.getTelephone().length()) != 11)
{
cout << tmp.getTelephone().length() << endl;
tmp.setTelephone();
}
for (it = person.begin(); it != person.end(); it++)
{
if (!(it->getTelephone()).compare(tmp.getTelephone()))
{
cout << "手机号码重复,请重新输入\n";
goto loop1;
}
}
loop2:
tmp.setHomephone();
while((tmp.getHomephone().length()) != 8)
{
tmp.setHomephone();
}
for (it = person.begin(); it != person.end(); it++)
{
if (!(it->getHomephone()).compare(tmp.getHomephone()))
{
cout << "住宅号码重复,请重新输入\n";
goto loop2;
}
}
person.push_back(tmp);
sort(person.begin(), person.end(), compareID);//
cout << "是否继续添加信息: y/n ?\n";
char choice[2] = {0};
cin >> choice;
if ((choice[0] == 'y') || (choice[0] == 'Y'))
{
goto Loop;
}
}
void User_info::showInfo()
{
vector<User_info>::iterator it;
if (person.empty())
{
cout << "通讯录暂无联系人!\n" << endl;
return;
}
printf("学号\t姓名\t地址\t电话\t\t住宅号码\n\n");
for (it = person.begin(); it != person.end(); it++)
{
//printf("%s\n%s\n%s\n%s\n%s\n", it->getId(), it->getName(), it->getAddress(),
//it->getTelephone(), it->getHomephone());
cout << it->getId() << " ";
cout << it->getName() << " ";
cout << it->getAddress() << " ";
cout << it->getTelephone() << " ";
cout << it->getHomephone() << endl << endl;
}
}
void User_info::searchInfo()
{
OUT = 0;
vector<User_info>::iterator it;
char choice[2] = {0};
char select[2] = {0};
if (person.empty())
{
cout << "通讯录暂无联系人!\n" << endl;
return;
}
while(1)
{
if (OUT == 1)
{
return;
}
printf("*************************************************\n");
printf("******************查 询 方 式******************\n");
printf("*************************************************\n");
printf("**1.按学号查询 2.按姓名查询**\n");
printf("**3.按电话查询 4.按地址查询**\n");
char choice[2] = {0};
cout << "请输入查询方式:" << endl;
cin >> choice;
switch(choice[0] - '0')
{
case 1:
{
char id[20] = {0};
cout << "请输入ID号:" << endl;
cin >> id;
for (it = person.begin(); it != person.end(); it++)
{
if (!(it->getId().compare(id)))
{
printf("学号\t姓名\t地址\t电话\t\t住宅号码\n");
cout << it->getId() << " ";
cout << it->getName() << " ";
cout << it->getAddress() << " ";
cout << it->getTelephone() << " ";
cout << it->getHomephone() << endl;
cout << "是否继续查询 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
break;
}
else
{
OUT = 1;
break;
}
}
}
if (it == person.end())
{
cout << "您所查询的对象不存在" << endl;
cout << "是否继续查询 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
break;
}
else
{
OUT = 1;
break;
}
}
}break;
case 2:
{
char name[20] = {0};
cout << "请输入姓名:" << endl;
cin >> name;
for (it = person.begin(); it != person.end(); it++)
{
if (!(it->getName().compare(name)))
{
printf("学号\t姓名\t地址\t电话\t\t住宅号码\n");
cout << it->getId() << " ";
cout << it->getName() << " ";
cout << it->getAddress() << " ";
cout << it->getTelephone() << " ";
cout << it->getHomephone() << endl;
cout << "是否继续查询 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
break;
}
else
{
OUT = 1;
break;
}
}
}
if (it == person.end())
{
cout << "您所查询的对象不存在" << endl;
cout << "是否继续查询 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
break;
}
else
{
OUT = 1;
break;
}
}
}break;
case 3:
{
char telephone[20] = {0};
cout << "请输入电话号码:" << endl;
cin >> name;
for (it = person.begin(); it != person.end(); it++)
{
if (!(it->getTelephone().compare(telephone)))
{
printf("学号\t姓名\t地址\t电话\t\t住宅号码\n");
cout << it->getId() << " ";
cout << it->getName() << " ";
cout << it->getAddress() << " ";
cout << it->getTelephone() << " ";
cout << it->getHomephone() << endl;
cout << "是否继续查询 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
break;
}
else
{
OUT = 1;
break;
}
}
}
if (it == person.end())
{
cout << "您所查询的对象不存在" << endl;
cout << "是否继续查询 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
break;
}
else
{
OUT = 1;
break;
}
}
}break;
case 4:
{
char address[20] = {0};
cout << "请输入地址:" << endl;
cin >> address;
for (it = person.begin(); it != person.end(); it++)
{
if (!(it->getAddress().compare(address)))
{
printf("学号\t姓名\t地址\t电话\t\t住宅号码\n");
cout << it->getId() << " ";
cout << it->getName() << " ";
cout << it->getAddress() << " ";
cout << it->getTelephone() << " ";
cout << it->getHomephone() << endl;
cout << "是否继续查询 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
break;
}
else
{
OUT = 1;
break;
}
}
}
if (it == person.end())
{
cout << "您所查询的对象不存在" << endl;
cout << "是否继续查询 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
break;
}
else
{
OUT = 1;
break;
}
}
}break;
default:
cout << "查询指令输入错误,请重新输入!" << endl;
}
}
}
void User_info::deleteInfo()
{
vector<User_info>::iterator it;
char choice[20] = {0};
char select[20] = {0};
char id[20] = {0};
if (person.empty())
{
cout << "通讯录暂无联系人!\n" << endl;
return;
}
show_loop:
showInfo();
cout << "请输入您所要删除用户的ID号:" << endl;
cin >> id;
for (it = person.begin(); it != person.end(); it++)
{
if (!(it->getId().compare(id)))
{
system("clear");
printf("您所查询的信息如下:\n\n");
printf("学号\t姓名\t地址\t电话\t\t住宅号码\n\n");
cout << it->getId() << " ";
cout << it->getName() << " ";
cout << it->getAddress() << " ";
cout << it->getTelephone() << " ";
cout << it->getHomephone() << endl;
cout << "确认删除该用户 y/n ?" << endl;
cin >> choice;
if ((choice[0] == 'y') || (choice[0] == 'Y'))
{
person.erase(it);
sort(person.begin(), person.end(), compareID);//
cout << "是否继续删除用户 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
goto show_loop;
}
else
{
return;
}
}
else
{
cout << "是否继续删除用户 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
goto show_loop;
}
else
{
return;
}
}
}
}
if ( it == person.end())
{
cout << "通讯录中无此用户!\n" << endl;
cout << "是否继续删除用户 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
goto show_loop;
}
else
{
return;
}
}
}
void User_info::modifyInfo()
{
vector<User_info>::iterator it;
char choice[20] = {0};
char select[20] = {0};
char id[20] = {0};
char name[20] = {0};
char telephone[20] = {0};
char address[20] = {0};
if (person.empty())
{
cout << "通讯录暂无联系人!\n" << endl;
return;
}
modify_loop:
showInfo();
cout << "请输入您所要修改用户的ID号:" << endl;
cin >> id;
for (it = person.begin(); it != person.end(); it++)
{
if (!(it->getId().compare(id)))
{
system("clear");
printf("您所查询的信息如下:\n\n");
printf("学号\t姓名\t地址\t电话\t\t住宅号码\n\n");
cout << it->getId() << " ";
cout << it->getName() << " ";
cout << it->getAddress() << " ";
cout << it->getTelephone() << " ";
cout << it->getHomephone() << endl;
printf("*************************************************\n");
printf("******************修 改 方 式******************\n");
printf("*************************************************\n");
printf("**1.修改学号 2.修改姓名 **\n");
printf("**3.修改电话 4.修改地址 **\n");
printf("*************************************************\n");
cout << "您要修改的是:" << endl;
cin >> choice;
switch(atoi(&choice[0]))
{
case 1:
{
cout << "请您更新学号:" << endl;
it->setId();
cout << "恭喜您更新成功!更新后的信息如下:" << endl << endl;
printf("学号\t姓名\t地址\t电话\t\t住宅号码\n\n");
cout << it->getId() << " ";
cout << it->getName() << " ";
cout << it->getAddress() << " ";
cout << it->getTelephone() << " ";
cout << it->getHomephone() << endl;
sort(person.begin(), person.end(), compareID);//
cout << "是否继续输入用户信息进行修改 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
goto modify_loop;
}
else
{
return;
}
}break;
case 2:
{
cout << "请您更新姓名:" << endl;
it->setName();
cout << "恭喜您更新成功!更新后的信息如下:" << endl << endl;
printf("学号\t姓名\t地址\t电话\t\t住宅号码\n\n");
cout << it->getId() << " ";
cout << it->getName() << " ";
cout << it->getAddress() << " ";
cout << it->getTelephone() << " ";
cout << it->getHomephone() << endl;
cout << "是否继续输入用户信息进行修改 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
goto modify_loop;
}
else
{
return;
}
}break;
case 3:
{
cout << "请您更新电话:" << endl;
it->setTelephone();
cout << "恭喜您更新成功!更新后的信息如下:" << endl << endl;
printf("学号\t姓名\t地址\t电话\t\t住宅号码\n\n");
cout << it->getId() << " ";
cout << it->getName() << " ";
cout << it->getAddress() << " ";
cout << it->getTelephone() << " ";
cout << it->getHomephone() << endl;
cout << "是否继续输入用户信息进行修改 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
goto modify_loop;
}
else
{
return;
}
}break;
case 4:
{
cout << "请您更新地址:" << endl;
it->setAddress();
cout << "恭喜您更新成功!更新后的信息如下:" << endl << endl;
printf("学号\t姓名\t地址\t电话\t\t住宅号码\n\n");
cout << it->getId() << " ";
cout << it->getName() << " ";
cout << it->getAddress() << " ";
cout << it->getTelephone() << " ";
cout << it->getHomephone() << endl;
cout << "是否继续输入用户信息进行修改 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
goto modify_loop;
}
else
{
return;
}
}break;
default:
cout << "请您输入正确的操作指令!\n" << endl;
}
}
}
if (it == person.end())
{
cout << "通讯录中无此用户!\n" << endl;
cout << "是否重新输入用户信息进行修改 y/n ?" << endl;
cin >> select;
if ((select[0] == 'y') || (select[0] == 'Y'))
{
goto modify_loop;
}
else
{
return;
}
}
}
bool compareID(const User_info & user1, const User_info & user2)//排序
{
return user1.id < user2.id;
}
bool compareNAME(const User_info & user1, const User_info & user2)
{
return user1.name < user2.name;
}
bool compareADDRESS(const User_info & user1, const User_info & user2)
{
return user1.address < user2.address;
}
bool compareTELEPHONE(const User_info & user1, const User_info & user2)
{
return user1.telephone < user2.telephone;
}
bool compareHOMEPHONE(const User_info & user1, const User_info & user2)
{
return user1.homephone < user2.homephone;
}
void User_info::sortInfo()
{
char choice[2] = {0};
printf("*************************************************\n");
printf("******************排 序 方 式******************\n");
printf("*************************************************\n");
printf("**1.按学号 2.按姓名 **\n");
printf("**3.按地址 4.按电话 **\n");
printf("**5.按住宅号码 **\n");
printf("*************************************************\n");
cout << "您想按什么排序呢?请选择哦" << endl;
cin >> choice;
switch(atoi(&choice[0]))
{
case 1:
sort(person.begin(), person.end(), compareID);
break;
case 2:
sort(person.begin(), person.end(), compareNAME);
break;
case 3:
sort(person.begin(), person.end(), compareADDRESS);
break;
case 4:
sort(person.begin(), person.end(), compareTELEPHONE);
break;
case 5:
sort(person.begin(), person.end(), compareHOMEPHONE);
break;
default:
cout << "您输入的操作指令有误!" << endl;
}
}
void User_info::saveFile()
{
ofstream fout("User_info.txt", ios::binary);
vector<User_info>::iterator it;
User_info tmp;
memset(&tmp, 0, sizeof(tmp));
for (it = person.begin(); it != person.end(); it++)
{
tmp = *it;
fout.write((char *)&tmp, sizeof(tmp));
memset(&tmp, 0, sizeof(tmp));
}
fout.close();
}
void User_info::loadFile()
{
printf("玩命加载中......\n");
ifstream fin("User_info.txt", ios::binary);
User_info tmp;
while(fin.read((char *)&tmp, sizeof(User_info)))
{
person.push_back(tmp);
memset(&tmp, 0, sizeof(tmp));
}
fin.close();
}
void User_info::quit()
{
char choice[2] = {0};
cout << "保存并退出 y/n ?" << endl;
cin >> choice;
if ((choice[0] == 'y') || (choice[0] == 'Y'))
{
saveFile();
exit(1);
}
else
{
exit(1);
}
}
void User_info::choice()
{
//loadFile();
char choice[20] = {0};
while(1)
{
printf("*************************************************\n");
printf("****************WELCOME TO CONTACT***************\n");
printf("*************************************************\n");
printf("**1.添加用户信息 2.删除用户信息**\n");
printf("**3.修改用户信息 4.查询用户信息**\n");
printf("**5.展示用户信息 6.排序用户信息**\n");
printf("**7.存储用户信息 8.退出通讯录 **\n");
printf("*************************************************\n");
cout << "请输入您的选择:" << endl;
cin >> choice;
switch(atoi(&choice[0]))
{
case 1:
addInfo(); //增
break;
case 2:
deleteInfo();//删
break;
case 3:
modifyInfo();//改
break;
case 4:
searchInfo();//查
break;
case 5:
showInfo(); //显示用户列表
break;
case 6:
sortInfo(); //排序
break;
case 7:
saveFile();
break;
case 8:
quit();
default:
cout << "请您输入正确的操作指令!\n" << endl;
}
}
}
main.cpp
**
#include "Contact.h"
int main()
{
User_info user;
user.choice();
return 0;
}
**