通讯录管理系统 课程设计报告(上交版)

因为复制会有格式错误,所以word文本版请下载

百度云链接:https://pan.baidu.com/s/1v4h158ybyIHCOIe5_k8vOA 密码:crve

通讯录管理系统 课程设计报告(上交版)_第1张图片

源代码:

#include
#include
#include
#include
#include
using namespace std;
bool vis;     //移动复制是否有重复数据的标志

/*****************************界面菜单类*****************************************/

class menu
{
	public:
     void mainmenu();   //主菜单
     void intmenu();    //介绍菜单
     void addmenu();    //添加菜单
     void delmenu();    //删除菜单
     void modmenu();    //修改菜单
     void inqmenu();    //查询菜单
     void dismenu();    //显示菜单
     void mocomenu();    //移动复制菜单
     void sortmenu();    //排序菜单
     void filemenu();    //文件操作菜单
};
void menu::mainmenu()
{
    cout<<"*****************************************************************"<>(istream&in, Phone_contact&p);  //重载>>
	string getname();  //获得姓名
	string gettel();   //获得电话号码

};
int Phone_contact::set(string i,string j)
	{
		name=i;tel=j;
		return 0;
	}
istream&operator >>(istream&in,Phone_contact&p)
	{
		cout<<"请输入姓名:";in>>p.name;
		cout<<"请输入电话号码:";in>>p.tel;
		return in;
	}
ostream&operator <<(ostream&out,Phone_contact&p)
	{


		out<<"姓名:"<>choice)
			{
			switch(choice)
			{
			 case '1':
				 {
				  string ss;
				  cout<<"请输入在手机通讯录该联系人要修改的姓名:"<>ss;
				  name=ss;
				  cout<<"更改成功"<>ss;
				  tel=ss;
				  cout<<"更改成功"<>ss;
				  name=ss;
				  cout<<"请输入在手机通讯录该联系人要修改的电话号码:"<>ss;
				  tel=ss;
				  cout<<"更改成功"<>(istream&in, SIM_contact&s);  //重载>>
	string getorigo();
	string getqq();
};
int  SIM_contact::set(string i,string j,string a,string b)
{
	Phone_contact::set(i,j);origo=a;qq=b;
	return 0;
}
int SIM_contact::modify()
{
	  cout<>choice)
			{
			switch(choice)
			{
			 case '1':
				 {
				  string ss;
				  cout<<"请输入在手机卡通讯录该联系人要修改的姓名:"<>ss;
				  name=ss;
				  cout<<"更改成功"<>ss;
				  tel=ss;
				  cout<<"更改成功"<>ss;
				  origo=ss;
				  cout<<"更改成功"<>ss;
				  qq=ss;
				  cout<<"更改成功"<>ss;
				  name=ss;
				  cout<<"请输入在手机卡通讯录该联系人要修改的电话号码:"<>ss;
				  tel=ss;
				  cout<<"请输入在手机卡通讯录该联系人要修改的籍贯:"<>ss;
				  origo=ss;
				  cout<<"请输入在手机卡通讯录该联系人要修改的QQ号码:"<>ss;
				  qq=ss;
				  cout<<"更改成功"<>(istream&in,SIM_contact&s)
	{
		string pname,ptel;
		cout<<"请输入姓名:";    in>>pname;
		cout<<"请输入电话号码:";in>>ptel;
		s.Phone_contact::set(pname,ptel);
		cout<<"请输入籍贯:";    in>>s.origo;
		cout<<"请输入qq:";      in>>s.qq;
		return in;
	}
ostream&operator <<(ostream&out,SIM_contact&s)
	{
		out<<"*姓名:";
		out.width(25);
		out.setf(ios::left);
		out< p;  //vector实现手机联系人动态数组
public:
	 Phone_book();
	 ~Phone_book();
	 int add();                //增加函数:增加一个联系人
	 int del(string Tel);      //删除操作:删除一个联系人
	 int display();            //Display:显示所有联系人的信息
	 int modify(string Tel);   //修改某一联系人的信息:
     int inquire(string Name); //查询并显示某一联系人的信息
	 int getsum();             //获取已有联系人数量
	 int moco(string sname,string stel);               //移动复制操作
	 string getname(int i);     //获取手机第i个姓名p[i].name
	 string gettel(int i);      //获取手机卡第i个电话号码s[i].tel
	 int read();               //读取手机通讯录文件
	 int write();              //读取手机通讯录文件
     int save();               //保存工作
     int search(int low, int high, string x); //二分查找
     int  clear() ;           //清空

};
Phone_book::Phone_book()
{
	sum=-1;                                      //vector从0开始
	char s[100];
	char  pname[30],ptel[30];
	Phone_contact t;                            //创建手机联系人临时对象
	//ofstream out("d://Phone book.txt",ios::out);
	ifstream in("d://Phone book.txt",ios::in); //读的方式打开文件,读取文本文件中的数据
	if(!in)
	{
		cerr<<"无法打开手机通讯录文件"<>pname>>ptel&&pname!="无姓名")
	 {
	 	t.set(pname,ptel);
	 	p.push_back(t);
	 	sum++;
	 }
	 in.close();
}
Phone_book::~Phone_book()
{
   ofstream out("d://Phone book.txt",ios::out); //写的方式打开文件
   if(!out)
	{
		cerr<<"无法打开手机通讯录文件"<>pname>>ptel&&pname!="无姓名")
	 {
	  cout.width(20);
	  cout<>t;
     out<999){cout<<"手机通讯容量已满,无法添加,即将返回"<>t;
	cout<>s;
	if(s[0]=='Y')
	{
	p.push_back(t);
	sum++;
	cout<<"手机添加联系人成功"<>s;
	  		if(s[0]=='Y')
	  		{
	  			p.erase(p.begin()+i);
	  			sum--;
	  			cout<<"在手机上删除该联系人成功"<>s;
	  			if(s[0]=='Y'){cout<<"继续搜索......"<>s;
	  			if(s[0]=='Y'){cout<<"继续搜索......"<>s;
		if(s[0]=='N')
		break;
		else if(s[0]=='Y')
		{cout<<"请重新输入要删除联系人的电话号码"<>Tel;continue;}
		else
		{cout<<"输入错误,本次删除取消"<>ss;
	  		if(ss[0]=='Y')
	  		{
			    p[i].modify();
				cout<>sss;
				if(sss[0]=='Y') {p[i].modify();}
	  			cout<<"是否在手机继续寻找具有相同电话号码的联系人,Y/N"<>ss;
	  			if(ss[0]=='Y'){cout<<"继续搜素......"<>ss;
	  			if(ss[0]=='Y'){cout<<"继续搜素......"<>ss;
		if(ss[0]=='N')
		break;
		else if(ss[0]=='Y')
		{cout<<"请重新输入要删除联系人的电话号码"<>Tel;continue;}
		else
		{cout<<"输入错误,本次删除取消"<>ss;
		if(ss[0]=='N')
		break;
		else if(ss[0]=='Y')
		{cout<<"请重新输入要查询联系人的电话号码"<>Name;continue;}
		else
		{cout<<"输入错误,本次查询取消"<=0;j--)
	       {
	           if(p[j].getname()==Name)
	           cout<>ch;
	 sort(p.begin(),p.end(),cmp1);//按姓名升序排列 ,一次就够,省时间
	 cout<<"**************************************"<=0;i--)
		 	cout<high)
     {
    high=mid-1;
     }
    else
     {
       if(p[t].getname()==x)
        return t;
       else if(p[t].getname()>x)
        high=mid-1;
       else
        low=t+1;
     }
    }
   return -1;
}
int  Phone_book::clear()
{
     p.clear();
     sum=-1;
}

/***************************手机卡通讯簿类*****************************************/

class SIM_book:public Book      //手机卡通讯簿录基于手机通讯簿录 ,实现基本相同
{
	int sum;                   //手机联系人的数量
	vectors;     //vector实现手机卡联系人动态数组
public:
	 SIM_book();
	 ~SIM_book();
	 int add();                 //增加函数:增加一个联系人
	 int del(string Tel);       //删除操作:删除一个联系人
	 int display();             //Display:显示所有联系人的信息
	 int modify(string Tel);    //修改某一联系人的信息:
     int inquire(string Name);  //查询并显示某一联系人的信息
     int moco(string pname,string ptel);             //复制移动函数
     int getsum();               //获取已有联系人数量
     string getname(int i);       //获取手机卡第i个姓名s[i].name
     string gettel(int i);       //获取手机卡第i个电话号码s[i].tel
     string getorigo(int i);     //获取手机卡第i个籍贯s[i].origo
     string getqq(int i);        //获取手机卡第i个QQs[i].qq
     int read();                 //读取手机卡通讯录文件
     int write();                //写入手机卡通讯录文件
     int save();                 //保存文件
     int search(int low, int high, string x);  //二分搜索
     int  clear();          //清空工作

};
SIM_book::SIM_book()
{
	sum=-1;
	char ss[100];
	char  sname[30],stel[30],sorigo[30],sqq[30];
	SIM_contact t;                            //创建手机联系人临时对象
	 //ofstream out("d://SIM book.txt",ios::out);
	 ifstream in("d://SIM book.txt",ios::in); //读的方式打开文件,读取文本文件中的数据
	 if(!in)
	{
		cerr<<"无法打开手机卡通讯录文件"<>sname>>stel>>sorigo>>sqq&&sname!="无姓名")
	 {
	 	t.set(sname,stel,sorigo,sqq);
	 	s.push_back(t);
	 	sum++;
	 }
	 in.close();
}
SIM_book::~SIM_book()
{
	SIM_contact t;
	if(sum>999) {cout<<"手机卡通讯录文件已满"<>sname>>stel>>sorigo>>sqq&&sname!="无姓名")
	 {
	 cout.setf(ios::left);
	 cout.width(20);
	 cout<>t;
     out.setf(ios::left);
	 out.width(20);
	 out<999){cout<<"手机卡通讯容量已满,无法添加,即将返回"<>t;
	cout<>ss;
	if(ss[0]=='Y')
	{
	s.push_back(t);
	sum++;
	cout<<"手机卡添加联系人成功"<>ss;
	  		if(ss[0]=='Y')
	  		{
	  			s.erase(s.begin()+i);
	  			sum--;
	  			cout<<"在手机卡上删除该联系人成功"<>ss;
	  			if(ss[0]=='N') break;
				if(ss[0]=='Y'){cout<<"继续搜素......"<>ss;
	  			if(ss[0]=='Y'){cout<<"继续搜素......"<>ss;
		if(ss[0]=='N')
		break;
		else if(ss[0]=='Y')
		{cout<<"请重新输入要删除联系人的电话号码"<>Tel;continue;}
		else
		{cout<<"输入错误,本次删除取消"<>ss;
	  		if(ss[0]=='Y')
	  		{
			    s[i].modify();
				cout<>sss;
				if(sss[0]=='Y') {s[i].modify();}
	  			cout<<"是否在手机卡继续寻找具有相同电话号码的联系人,Y/N"<>ss;
	  			if(ss[0]=='Y'){cout<<"继续搜素......"<>ss;
	  			if(ss[0]=='Y'){cout<<"继续搜素......"<>ss;
		if(ss[0]=='N')
		break;
		else if(ss[0]=='Y')
		{cout<<"请重新输入要删除联系人的电话号码"<>Tel;continue;}
		else
		{cout<<"输入错误,本次删除取消"<>ss;
		if(ss[0]=='N')
		break;
		else if(ss[0]=='Y')
		{cout<<"请重新输入要查询联系人的电话号码"<>Name;continue;}
		else
		{cout<<"输入错误,本次查询取消"<=0;j--)
	       {
	           if(s[j].getname()==Name)
	           cout<>ch;
	 sort(s.begin(),s.end(),cmp1);//按姓名升序排列 ,一次就够,省时间
	 cout<<"**************************************"<=0;i--)
		 	cout<high)
     {
    high=mid-1;
     }
    else
     {
       if(s[t].getname()==x)
        return t;
       else if(s[t].getname()>x)
        high=mid-1;
       else
        low=t+1;
     }
   }
   return -1;
}
int  SIM_book::clear()
{
    s.clear();
    sum=-1;
}

/*******************************用户类*******************************************/

class user
 {
 	Phone_book p;
 	SIM_book s;
public:
	 user() ;
	 int add();       //添加联系人
	 int del();       //删除联系人
 	 int modify();    //修改联系人
 	 int inquire();   //查询联系人
 	 int display();   //显示联系人
 	 int moco();      //移动复制
 	 int movp_s();    //把联系人信息从手机移动到手机卡
 	 int movs_p();    //把联系人信息从手机卡移动到手机
 	 int copyp_s();   //把联系人信息从手机移动到手机卡
 	 int copys_p();   //把联系人信息从手机卡复制到手机
	 int file();      //文件操作
	 int save();      //保存工作
 	 ~user();
 };
 user::user()
 {
    cout<<"             **********************************"<>ch)
	{
	 switch(ch)
	 {
	 case '1':
	  q=&p;       //基类指针指向派生类对象 ,实现多态
	  q->add();
	  break;
	 case '2':
	   q=&s;
	   q->add();
	   break;
	 case '3':
	 	q=&p;
	   q->add();
	   q=&s;
	   q->add();

	   break;
	 case '4':
		break;
	 default:
	   cout<<"操作错误,请重新输入"<>ch)
	{

	 switch(ch)
	 {
	 case '1':
	  {
	  q=&p;     //基类指针指向派生类对象 ,实现多态
	  string ss;
	  cout<<"请输入在手机通讯录要删除联系人的电话号码:"<>ss;
	  q->del(ss);
	  break;
	  }
	 case '2':
	   {
	   	q=&s;
	   string ss;
	   cout<<"请输入在手机卡通讯录要删除联系人的电话号码:"<>ss;
	   q->del(ss);
	   break;
	   }
	 case '3':
	   {
	   	q=&p;
	   string ss;
	   cout<<"请输入在手机和手机卡通讯录要删除联系人的电话号码:"<>ss;    //基类指针指向派生类对象 ,实现多态
	   q->del(ss);
	   q=&s;
	   q->del(ss);
	   break;
	   }
	 case '4':
		break;
	 default:
	   cout<<"操作错误,请重新输入"<>ch)
	{
	 switch(ch)
	 {
	 case '1':
	  {
	  q=&p;     //基类指针指向派生类对象 ,实现多态
	  string ss;
	  cout<<"请输入在手机通讯录要修改联系人的电话号码:"<>ss;
	  q->modify(ss);
	  break;
	  }
	 case '2':
	   {
	   	q=&s;
	   string ss;
	   cout<<"请输入在手机卡通讯录要修改联系人的电话号码:"<>ss;
	   q->modify(ss);
	   break;
	   }
	 case '3':
	   {
	   	q=&p;
	   string ss;
	   cout<<"请输入在手机和手机卡通讯录要修改联系人的电话号码:"<>ss;    //基类指针指向派生类对象 ,实现多态
	   q->modify(ss);
	   q=&s;
	   q->modify(ss);
	   break;
	   }
	 case '4':
		break;
	 default:
	   cout<<"操作错误,请重新输入"<>ch)
	 {
	 switch(ch)
	 {
	 case '1':
	  {
	  q=&p;     //基类指针指向派生类对象 ,实现多态
	  string ss;
	  cout<<"请输入在手机通讯录要查询联系人的姓名:"<>ss;
	  q->inquire(ss);
	  break;
	  }
	 case '2':
	   {
	   	q=&s;
	   string ss;
	   cout<<"请输入在手机卡通讯录要查询联系人的姓名:"<>ss;
	   q->inquire(ss);
	   break;
	   }
	 case '3':
	   {
	   	q=&p;
	   string ss;
	   cout<<"请输入在手机和手机卡通讯录要查询联系人的姓名:"<>ss;    //基类指针指向派生类对象 ,实现多态
	   q->inquire(ss);
	   q=&s;
	   q->inquire(ss);
	   break;
	   }
	 case '4':
		break;
	 default:
	   cout<<"操作错误,请重新输入"<>ch)
	 {
	 switch(ch)
	 {
	 case '1':
	  {
	  q=&p;     //基类指针指向派生类对象 ,实现多态
	  q->display();
	  break;
	  }
	 case '2':
	   {
	   	q=&s;
	   q->display();
	   break;

	   }
	 case '3':
		break;
	 default:
	   cout<<"操作错误,请重新输入"<>ch)
	 {
	 switch(ch)
	 {
	 case '1':
	  {
	  movp_s();
	  break;
	  }
	 case '2':
	   {
	   movs_p();
	   break;
	   }
	 case'3':
	 	{
	   copyp_s();
	   break;
	 	}
	 case'4':
	 	{
	  copys_p();
	   break;
	 	}
	 case '5':
		break;
	 default:
	   cout<<"操作错误,请重新输入"<999) {cout<<"手机卡通讯录已满,无法移动,即将返回"<999) {cout<<"手机通讯录已满,无法移动,即将返回"<999) {cout<<"手机卡通讯录已满,无法复制,即将返回"<999) {cout<<"手机通讯录已满,无法复制,即将返回"<>ch)
	{
	 switch(ch)
	 {
	 case '1':
	  q=&p;       //基类指针指向派生类对象 ,实现多态
	  q->read();
	  break;
	 case '2':
	   q=&p;
	   q->write();
	   break;
	 case '3':
	   q=&s;      //基类指针指向派生类对象 ,实现多态
	   q->read();
	   break;
	 case '4':
	   q=&s;
	   q->write();
	   break;
	 case '5':
		break;
	 default:
	   cout<<"操作错误,请重新输入"<save();
	  q=&s;      //基类指针指向派生类对象 ,实现多态
      q->save();
	  return 0;
}

/***************************主函数*****************************************/

int main()
{

	user u;
	m.mainmenu();
	char ch;
	while(cin>>ch)
	{
		switch(ch)
		{

			case '1':m.addmenu();
			         u.add();
				     break;
			case '2':m.delmenu();
				     u.del();
					 break;
			case '3':m.modmenu();
			         u.modify();
			         break;
			case '4':m.inqmenu();
				     u.inquire();
			         break;
			case '5':m.dismenu();
			         u.display();
					break;
	        case '6':m.mocomenu();
	                 u.moco();
		    		 break;
			case '7':m.filemenu();
					 u.file();
					 break;
			case '8':u.save();
                     break;
            case '0':break;
			default:
	        cout<<"选择错误,请重新输入"<


你可能感兴趣的:(c++知识点)