当前位置:编程学习 > C/C++ >>

电话簿管理程序设计(一定用c++)

综合实验 电话簿管理程序设计

实验学时:6学时 实验类型:设计型

一、实验目的

综合运用面向对象程序设计的基础知识,设计一个小型的应用程序,提高解决问题的能力。

二、实验内容

设计一个电话簿管理程序,要求:

1、 具有添加、删除、显示、修改和查询联系人电话号码的功能。

2、 联系人的信息保存到文件中。

3、 可以实现为控制台程序或图形界面程序。

4、 按学院实验报告要求格式书写实验报告。

追问:shareboyok@163.com
答案:这是 列表容器 做的 通讯录管理系统:

#include<iostream>
#include<string> //包含字符串头文件
#include<list> //list类的头文件
#include<fstream> //包含文件流头文件
#define SPACE "\t\t" //宏定义SPACE
using namespace std;
struct Cperson
{string name; //姓名
string Tel_num; //电话号码
string Address; //地址
string Post; //邮编
public:
friend ostream& operator<<(ostream& os,const Cperson *rec) //重载"<<"运算符
{return os<<rec->name<<SPACE<<rec->Tel_num<<SPACE
<<rec->Address<<SPACE<<rec->Post<<endl;};
friend istream& operator>>(istream& is,Cperson *rec) //重载">>"运算符
{is>>rec->name;
is>>rec->Tel_num;
is>>rec->Address;
is>>rec->Post;
return is;
}
static comp(string patten,int type,Cperson *rec) //查询操作中的判断选项
{switch(type)
{case 0: {return rec->name==patten;}break;
case 1: {return rec->Tel_num==patten;}break;
}

}
static bool isvan(Cperson *rec) //重载 ">>"运算符的判断
{return (rec->name==""&&rec->Tel_num==""&&rec->Address==""&&rec->Post=="");}

};
class CpersonList:public list<Cperson*> //Cperson指针做CpersonList的数据成员
{public:
friend ostream& operator<<(ostream& os,const CpersonList &c_rl) //重载"<<"运算符
{CpersonList::const_iterator it=c_rl.begin();
while(it!=c_rl.end())
{cout<<SPACE;
os<<*it;
it++;
}
return os;
}
friend istream& operator>>(istream& is,CpersonList &rl) //重载">>"运算符
{CpersonList::const_iterator it;
while(!is.eof())
{Cperson *prec=new Cperson;
is>>prec;
if(Cperson::isvan(prec)) continue;
rl.list<Cperson*>::push_back(prec);
}
return is;
}
void clear(); //清除记录
iterator erase(iterator pos);
~CpersonList() //析构函数
{this->clear();}
};
void CpersonList::clear() //清除链表里的成员
{CpersonList::const_iterator it=this->begin();
while(it!=this->end())
{delete(*it);
it++;
}
this->list<Cperson*>::clear();
}
CpersonList::iterator CpersonList::erase(iterator pos) //清除记录
{ delete(*pos);
return list<Cperson*>::erase(pos);
}
class AddressList
{protected:
CpersonList Cperson_List; //RecordList类的对象为数据成员
public:
const bool empty() const {return Cperson_List.empty();} //判断通讯录是否为空
typedef CpersonList::iterator Iterator;//Iterator是指向每条记录的指针
Iterator FindRecord(string patten,int type,Iterator from); //从通讯录中寻找一个记录
void AddRecord(Cperson* rec); //向通讯录中添加新的记录
void RemoveRecord(Iterator it); //从通讯录中删除一个记录
void EditRecord(Cperson* rec,Iterator it); //修改记录
void SaveRecords(ostream& os); //将通讯录保存到输出流中
void LoadRecords(istream& is); //从输出流中读入数据并追加到当前通讯录的末尾
void AddRecords(istream& is);
~AddressList(); //析构函数
const int size() const{return (int)Cperson_List.size();} //获得通讯录中存储的记录数
const void clear(){Cperson_List.clear();} //删除链表中的所有元素
Iterator begin(){return Cperson_List.begin();} //返回一个itertor,指向此链表的开头
Iterator end() {return Cperson_List.end();} //返回一个itertor,指向此链表的尾端
};
AddressList::Iterator AddressList::FindRecord(string patten,int type,Iterator from)
{Iterator it;
it=from;
while(it!=Cperson_List.end())
{if(Cperson::comp(patten,type,*it)) return it;
it++;
}
return it;
}
void AddressList::AddRecord(Cperson* rec)
{ Cperson_List.push_back(rec);}
void AddressList::RemoveRecord(Iterator it)
{ Cperson_List.erase(it);}
void AddressList::EditRecord(Cperson* rec,Iterator it)
{ delete(*it); *it=rec;}
void AddressList::SaveRecords(ostream& os)
{ os<<Cperson_List;}
void AddressList::LoadRecords(istream& is)
{ is>>Cperson_List;}
void AddressList::AddRecords(istream& is){}
AddressList::~AddressList()
{ Cperson_List.clear();}
class AddressBook : public AddressList
{protected:
bool isModified;
public:
AddressBook(); //构造函数
~AddressBook(); //析够函数
void Start_Records(); //开始通讯录操作
void Handle_Menu(); //通讯录主菜单
void Display_Records(); //显示记录
void Query_Records(); //查询记录
void Add_Record(); //添加记录
void Save_Records(); //保存记录1
void Save_Record(); //保存记录2
void Load_Records(); //读取记录
void Quit_Records(); //退出程序,需要保存
void Clear_Records(); //清空当前记录
char Menu_Select(); //子菜单选项
void Quit_Record(); //退出程序,不需要保存
};
AddressBook::AddressBook(){}
AddressBook::~AddressBook(){;}
char AddressBook::Menu_Select()
{char a=0;
cin>>a;
if(a=='y'||a=='Y'){a='1';}
if(a=='n'||a=='N'){a='2';}
return a;
}
void AddressBook::Start_Records()
{…… }
void AddressBook::Handle_Menu()
{cout<<endl;
cout<<SPACE<<"★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
cout<<SPACE<<"★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆★"<<endl;
cout<<SPACE<<"★☆ ☆★"<<endl;
cout<<SPACE<<"★☆ ☆★"<<endl;
cout<<SPACE<<"★☆ 通 讯 录 管 理 系 统 ☆★"<<endl;
cout<<SPACE<<"★☆ ☆★"<<endl;
cout<<SPACE<<"★☆ ☆★"<<endl;
cout<<SPACE<<"★☆ 1 →→ 添 加 ☆★"<<endl;
cout<<SPACE<<"★☆ ☆★"<<endl;
cout<<SPACE<<"★☆ 2 →→ 删 除 ☆★"<<endl;
cout<<SPACE<<"★☆ ☆★"<<endl;
cout<<SPACE<<"★☆ 3 →→ 查 询 ☆★"<<endl;
cout<<SPACE<<"★☆ ☆★"<<endl;
cout<<SPACE<<"★☆ 4 →→ 显 示 ☆★"<<endl;
cout<<SPACE<<"★☆ ☆★"<<endl;
cout<<SPACE<<"★☆ 5 →→ 保

上一个:think in c++ 哪里有得下载?
下一个:如何学好C++中的类

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,