⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 contacts.cpp

📁 对通讯录进行分组(比如家人、朋友、同事、重要人士等); 能够根据姓名对通讯录进行查询
💻 CPP
字号:
//系统密码为"hanxiaojin"
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <string>
using namespace std;
#define NULL 0
struct telbook
{
int num;
string name;
string telnum;
string addr;
string email;
string relation;
telbook *next;
};

int n;
int main()
{  system("color 6");
   telbook *head;
	int m;
	string n,a="no",b="hanxiaojin";
	string name,relation;
	telbook *tel;
    telbook *creat(void);
	void print(telbook *);
	telbook *insert(telbook*,telbook*);
	telbook *del_name(telbook*,string);
	void find_name(telbook *,string);
	telbook *change_name(telbook *,string);
	void sort_relation(telbook *,string);
   
	cout<<"******************************通讯录管理系统*********************************"<<endl;

	cout<<"                                                 作者:计算机062002班 韩小晋"<<endl;
    cout<<"欢迎使用本通讯录系统"<<endl;
	cout<<"请输入管理员权限:"<<endl;
    n=getch();
	cout<<"*";
    while(n!=a)

	{
      if(n==b)
	{
	cout<<"============================================================================"<<endl;

	cout<<"请选择要执行的操作:"<<endl;
	cout<<"1:输入某个成员信息(按6个0退出);"<<endl;
	cout<<"2:修改某个成员信息;"<<endl;
	cout<<"3:添加某个成员信息;"<<endl;
    cout<<"4:查询某个成员信息;"<<endl;
	cout<<"5:删除某个成员信息;"<<endl;
	cout<<"6: 成员信息按组分类;"<<endl;
	cout<<"0:退出操作。"<<endl;

	cout<<"============================================================================"<<endl;
	cout<<"请输入操作指令:";
	cin>>m;
	cout<<endl;
	while(m!=0)
	{switch(m)
		{
		case 1:{
			cout<<"请输入某个成员信息(按6个0退出):"<<endl<<endl;
			cout<<setiosflags(ios::left)<<setw(12)<<"序号"<<setw(10)<<"姓名"<<setw(15)<<"电话号码"
				<<setw(10)<<"地址"<<setw(20)<<"电子邮箱"<<setw(4)<<"组别"<<endl;
			head=creat();
            cout<<"输出成员信息为:"<<endl;
			cout<<endl;
            cout<<setiosflags(ios::left)<<setw(12)<<"序号"<<setw(10)<<"姓名"<<setw(15)
				<<"电话号码"<<" "<<setw(10)<<"地址"<<setw(20)<<"电子邮箱"<<setw(4)<<"组别"<<endl;
			print(head);
			cout<<endl;
			   }break;


         case 2:{
			cout<<"输入你要修改的某个成员信息:";
			cin>>name;
			cout<<endl;
	        head=change_name(head,name);
		    print(head);
		    cout<<endl;
			   }break;


		case 3:{
			cout<<"输入你要添加的某个成员信息:";
			tel=new telbook;
			cin>>tel->num>>tel->name>>tel->telnum>>tel->addr>>tel->email>>tel->relation;
	        head=insert(head,tel);
			cout<<endl;
			cout<<"添加后的成员信息为:"<<endl<<endl;
            cout<<setiosflags(ios::left)<<setw(12)<<"序号"<<setw(10)<<"姓名"<<setw(15)<<"电话号码"
				<<setw(10)<<"地址"<<setw(20)<<"电子邮箱"<<setw(4)<<"组别"<<endl;
			print(head);
		    cout<<endl;
			   }break;


		case 4:{
			cout<<"输入你要查找的某个成员信息:";
			cin>>name;
			cout<<endl;
			cout<<"你要查找的成员信息:"<<endl<<endl<<setiosflags(ios::left)<<setw(12)<<"序号"<<setw(10)
	        <<"姓名"<<setw(15)<<"电话号码"<<" "<<setw(10)<<"地址"<<setw(20)<<"电子邮箱"<<setw(4)<<"组别"<<endl;
			find_name(head,name);
	        cout<<endl;
			   }break;


		case 5:{
			cout<<"输入你要删除的某个成员信息:";
			cin>>name;
			cout<<endl;
            head=del_name(head,name);
			print(head);
		    cout<<endl;
			   }break;

		
        case 6:{
            cout<<"输入你想按何种组别分组:";
			cin>>relation;
			cout<<endl;
        cout<<"你要分组的成员信息为:"<<endl<<endl<<setiosflags(ios::left)<<setw(12)<<"序号"<<setw(10)<<"姓名"
			<<setw(15)<<"电话号码"<<" "<<setw(10)<<"地址"<<setw(20)<<"电子邮箱"<<setw(4)<<"组别"<<endl;
	        sort_relation(head,relation);
		    cout<<endl;
			   }break;

	}

	
	
        cout<<"================================================================================"<<endl;
	    cout<<"请选择要执行的操作:"<<endl;
	    cout<<"1:输入某个成员信息(按6个0退出);"<<endl;
	    cout<<"2:修改某个成员信息;"<<endl;
	    cout<<"3:添加某个成员信息;"<<endl;
        cout<<"4:查询某个成员信息;"<<endl;
	    cout<<"5:删除某个成员信息;"<<endl;
	    cout<<"6: 成员信息按组分类;"<<endl;
	    cout<<"0:退出操作。"<<endl;

	    cout<<"==============================================================================="<<endl;
    	cout<<"请输入操作指令:";
	    cin>>m;
		cout<<endl;

      }		
	
	}
	else cout<<"你不具备使用本系统的权限,请确认密码正确后再次输入;"<<endl;
    cout<<"请输入管理员权限:"<<endl;
	cin>>n;
	}
	
	return 0;
}


telbook *creat(void) //创建链表函数
{
	telbook *head;
	telbook *p1,*p2;
	n=0;
	p1=p2=new telbook;//开辟一个新的单元,并使p1,p2指向它
	cin>>p1->num>>p1->name>>p1->telnum>>p1->addr>>p1->email>>p1->relation;
	head=NULL;
	while(p1->num!=0)
	{
		n=n+1;
		if(n==1)head=p1;
		else p2->next=p1;
		p2=p1;
		p1=new telbook;
		cin>>p1->num>>p1->name>>p1->telnum>>p1->addr>>p1->email>>p1->relation;
	}
	p2->next=NULL;
	return(head);
} 

void print(telbook *head)//输出链表函数
{telbook *p;
p=head;
if(head!=NULL)
do
{
cout<<setiosflags(ios::left)<<setw(12)<<p->num<<setw(10)<<p->name<<setw(15)<<p->telnum<<" "
<<setw(10)<<p->addr<<setw(20)<<p->email<<setw(4)<<p->relation<<endl;
p=p->next;
}while(p!=NULL);
}


telbook *change_name(telbook *head,string name)//按姓名修改函数
{
	telbook *p1,*p2;
	if(head==NULL)//是空表
		cout<<"不存在此成员的信息!"<<endl;
	p1=head;//使p1指向第一个结点
	while(name!=p1->name&&p1->next!=NULL)//p1指向的不是所要找的结点且后面还有结点
	{
		p2=p1;
		p1=p1->next;//p1后移一个结点
	}
	if(name==p1->name)//找到了
	{
		cout<<"你要修改的成员信息为:"<<endl<<setiosflags(ios::left)<<setw(12)<<"序号"
			<<setw(10)<<"姓名"<<setw(15)<<"电话号码"<<" "<<setw(10)<<"地址"<<setw(20)
			<<"电子邮箱"<<setw(4)<<"组别"<<endl;
		
		cout<<setiosflags(ios::left)<<setw(12)<<p1->num<<setw(10)<<p1->name<<setw(15)
			<<p1->telnum<<" "<<setw(10)<<p1->addr<<setw(20)<<p1->email<<setw(4)
			<<p1->relation<<endl;
        cout<<endl;
		cout<<"请输入所要修改的信息:"<<endl<<setiosflags(ios::left)<<setw(12)<<"序号"
			<<setw(10)<<"姓名"<<setw(15)<<"电话号码"<<" "<<setw(10)<<"地址"<<setw(20)
			<<"电子邮箱"<<setw(4)<<"组别"<<endl;
		cin>>p1->num>>p1->name>>p1->telnum>>p1->addr>>p1->email>>p1->relation;
        cout<<endl;
		cout<<"你修改后的成员信息为:"<<endl<<endl<<setiosflags(ios::left)<<setw(12)<<"序号"
			<<setw(10)<<"姓名"<<setw(15)<<"电话号码"<<" "<<setw(10)<<"地址"<<setw(20)
			<<"电子邮箱"<<setw(4)<<"组别"<<endl;
        
	}
	else cout<<"所要修改的成员信息不存在!"<<endl;
	return(head);
}


telbook*insert(telbook*head,telbook*tel)//插入链表函数
{telbook *p0,*p1,*p2;
p1=head;//使p1指向第一个结点
p0=tel;//指向要插入的结点
if(head==NULL)//原来的链表是空表
{head=p0;p0->next=NULL;}//使p0指向的结点作为头结点
else 
{while((p0->num>p1->num)&&(p1->next!=NULL))
{
	p2=p1;p1=p1->next;}//使p2指向p1指向的结点,p1后移一个结点
if(p0->num<=p1->num)
{
 if(head==p1)head=p0;//插入到原来第一个结点之前
 else p2->next=p0;//插到p2指向的结点之后
 p0->next=p1;}
else {p1->next=p0;p0->next=NULL;}//插入到最后的结点之后
}
n=n+1;//结点数加1
return(head);
}


void find_name(telbook *head,string name)//按姓名查找函数
{int n=0;
	telbook *p1;
	if(head==NULL)//是空表
	cout<<"不存在此成员的信息!"<<endl;
	for(p1=head;p1!=NULL;p1=p1->next)//p1指向头指针,p1指向的结点不为0,p1向后移
	{if(p1->name==name)
		{n=n+1;
	 cout<<setiosflags(ios::left)<<setw(12)<<p1->num<<setw(10)<<p1->name<<setw(15)
	 <<p1->telnum<<" "<<setw(10)<<p1->addr<<setw(20)<<p1->email<<setw(4)<<p1->relation<<endl;
	}
	
	}	
	
	 if(n==0) cout<<"查询的成员信息不存在!"<<endl;
}


telbook *del_name(telbook *head,string name)//按姓名删除函数
{telbook*p1,*p2;
if(head==NULL)//是空表
{cout<<"不存在成员信息!"<<endl;return(head);}
p1=head;//使p1指向第一个结点
while(name!=p1->name &&p1->next!=NULL)//p1指向的不是所要找的结点且后面还有结点
{
	p2=p1;p1=p1->next ;}//p1后移一个结点
if(name==p1->name)//找到了
{
	if(p1==head)head=p1->next;//若p1指向的是首结点,把第二个结点地址赋给head
else p2->next=p1->next;//否者将下一个结点地址赋给前一个结点地址
 cout<<"删除后的成员信息为:"<<endl;
 cout<<endl;
 cout<<setiosflags(ios::left)<<setw(12)<<"序号"<<setw(10)<<"姓名"
<<setw(15)<<"电话号码"<<" "<<setw(10)<<"地址"<<setw(20)<<"电子邮箱"<<setw(4)<<"组别"<<endl;	
 n=n-1;}
else cout<<"未找到成员信息"<<endl;
return(head);
}


void sort_relation(telbook *head,string relation)//按组分类函数
{int n=0;
	telbook *p1;
	if(head==NULL)//是空表
		cout<<"不存在此类分组!"<<endl;
for(p1=head;p1!=NULL;p1=p1->next)//p1指向头指针,p1指向的结点不为0,p1向后移
{if(p1->relation==relation)
	  {n=n+1;
	 cout<<setiosflags(ios::left)<<setw(12)<<p1->num<<setw(10)
	 <<p1->name<<setw(15)<<p1->telnum<<" "<<setw(10)<<p1->addr<<setw(20)<<p1->email<<setw(4)
	 <<p1->relation<<endl;
	}
 
}
	if(n==0)cout<<"没有此类分组信息"<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -