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

📄 phonebook.cpp

📁 用VC++实现的一个简单通讯录
💻 CPP
字号:
#include"iostream.h"
#include"fstream.h"
#include"string.h"


#define MAX 30


class PhoneBook{	
public:
	char Telephone[20];
	char Name[10];
	char Adress[100];
	PhoneBook *next;
	
	PhoneBook()
	{
		strcpy(Telephone,"");
		strcpy(Name,"");
		strcpy(Adress,"");
		next=NULL;
	}
	PhoneBook(char a1[20],char a2[10],char a3[100])
	{
		strcpy(Telephone,a1);
		strcpy(Name,a2);
		strcpy(Adress,a3);
	}
}Phonebook[MAX];


int intHash(int num)					//再哈希函数
{
	int key;
	key=(num%21)+1;
	return key;
}

int charHash(char num[20])					//哈希函数
{
	
	int i=strlen(num)-5;
	int key=0;//=(int)num[0];//-48;
	while(num[i]!=NULL)
	{
		
		key =num[i]+ (key << 5);
		i++;
		
	}
	key=key%13;
	return key;
}

void List()					//显示通讯录中的所有记录
{	
	cout<<"电话号码------用户名-------地址"<<endl;
	for(int i=0;i<MAX;i++)
	{
		if(Phonebook[i].next!=NULL)
		{
			cout<<Phonebook[i].next->Telephone<<" "<<Phonebook[i].next->Name<<" "<<Phonebook[i].next->Adress<<endl;
		}
	}
}

void Creat()				//创建新的通讯录。
{
	
	PhoneBook *tmp=new PhoneBook();
	
	cin>>tmp->Telephone>>tmp->Name>>tmp->Adress;
	tmp->next=NULL;
	int a=charHash(tmp ->Telephone);
	
mark:	if(Phonebook[a].next->Telephone!=NULL)
		{
			a=intHash(a);
			goto mark;
		}
		else
		{
			tmp->next=&Phonebook[a];
			Phonebook[a].next=tmp;
		}
		
		
}

void Delete(char a[10])				//删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。
{
	int mark=-1;
    int i=charHash(a);
	while(1)
	{
		if(Phonebook[i].next!=NULL)
		{
			if(!strcmp(Phonebook[i].next->Telephone,a))
			{
				mark=i;
				break;
			}
			else
			{
				i=intHash(i);
			}
		}
		else break;
		
	}
	
	
	if(mark!=-1)
	{
		Phonebook[mark].next->next=NULL;
		Phonebook[mark].next=NULL;
		cout<<"删除中........\n"<<"现在数据为:"<<endl;
		List();
	}
	else
	{
		cout<<"查无此人!"<<endl;
	}
}




void Alter(char a[20])				//修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。
{
	int mark=-1;
    int i=charHash(a);
	while(1)
	{
		if(Phonebook[i].next!=NULL)
		{

			if(!strcmp(Phonebook[i].next->Telephone,a))
			{
				mark=i;
				break;
			}
			else
			{
				i=intHash(i);
			}
		}
		else break;
		
	}
	if(mark!=-1)
	{
		
		cout<<"你要修改的用户姓名和住址"<<endl;
		cin>>Phonebook[mark].next->Name>>Phonebook[mark].next->Adress;
		cout<<"修改中........\n"<<"现在数据为:"<<endl;
		List();
	}
	else
	{
		cout<<"查无此号码的记录。"<<endl;
	}
	
	
	
	
}


void Find(char a[20])					//查询某人的信息,如果找到了,则显示该人的信息,如果没有则提示通讯录中没有此人的信息,并返回选单。
{
	int mark=-1;
    int i=charHash(a);
	while(1)
	{
		if(Phonebook[i].next!=NULL)
		{
			if(strcmp(Phonebook[i].next->Telephone,a)==0)
			{
				mark=i;
				break;
			}
			else
			{
				i=intHash(i);
			}
		}
		else break;
		
	}
	if(mark!=-1)
	{
		cout<<Phonebook[mark].next->Telephone<<" "<<Phonebook[mark].next->Name<<" "<<Phonebook[mark].next->Adress<<endl;
		
	}
	else
	{
		cout<<"查无此号码的相关信息!"<<endl;
	}
}



void Append()				//在通讯录的末尾写入新的信息,并返回选单。
{
	PhoneBook *tmp=new PhoneBook();
	cout<<"请输入你要输入的电话号码,用户姓名,住址"<<endl;
	cin>>tmp->Telephone>>tmp->Name>>tmp->Adress;
	tmp->next=NULL;
	int a=charHash(tmp ->Telephone);
	
mark:	if(Phonebook[a].next->Telephone!=NULL)
		{
			a=intHash(a);
			goto mark;
		}
		else
		{
			tmp->next=&Phonebook[a];
			Phonebook[a].next=tmp;
		}
	
	
}


void Save()					//保存通讯录中的所有记录到指定的文件中。
{
	int i;
	
	fstream iiout("out.txt",ios::out);
	for(i=0;i<20;i++)
	{
		if(Phonebook[i].next!=NULL)
		{
			
			iiout<<Phonebook[i].next->Telephone<<"\t"<<Phonebook[i].next->Name<<"\t"<<Phonebook[i].next->Adress<<"\0"<<endl;
		}	
	}	
}

void Load()					//从指定文件中读取通讯录中的记录。
{
	int i;
	int a;
	fstream inf("out.txt",ios::in);
	for(i=0;i<5;i++)
	{
		PhoneBook *tmp=new PhoneBook();
		
		inf>>tmp->Telephone>>tmp->Name>>tmp->Adress;
		a=charHash(tmp->Telephone);
mark:	if(Phonebook[a].next->Telephone!=NULL)
		{
			a=intHash(a);
			goto mark;
		}
		else
		{
			tmp->next=&Phonebook[a];
			Phonebook[a].next=tmp;
		}
	}
}


int Quit()					//退出选单。
{
	return 0;
}


void Menu()					//显示中文选单
{cout<<"*******************************************************"<<endl;
cout<<"*                                                     *"<<endl;
cout<<"*	0.新建"<<" 1.添加"<<" 2.修改"<<" 3.删除"<< "4.查找	      *"<<endl;
cout<<"*	5.列表"<<" 6.读取"<<" 7.保存"<<" 8.退出                   *"<<endl;
cout<<"*                                                     *"<<endl; 
cout<<"*******************************************************"<<endl;
}

int main()
{
	cout<<"简易通讯录(电话号码大于五位)Designer:Tom CAT,Date:2007-7-24"<<endl; 
	int i=0;
	while(1)
	{
		
		Menu();
		cin>>i;
		
		switch(i)
		{
		case 0:	
			cout<<"请输入电话号码---姓名----地址 :"<<endl;
			for(i=0;i<5;i++)
			{
				Creat();
				
			}break;
		case 1:
			cout<<"请输入你要添加的电话号码、姓名和地址:"<<endl;
			Append();
			cout<<"添加中........\n"<<"现在数据为:"<<endl;
			List();
			break;
		case 2:
			cout<<"请输入你要修改的电话号码:"<<endl;
			char num1[20];
			cin>>num1;
			Alter(num1);
			
			break;
		case 3:
			cout<<"请输入你要删除的电话号码:"<<endl;
			char num2[20];
			cin>>num2;
			Delete(num2);
			
			break;
		case 4:
			cout<<"请输入你要查询的电话号码:"<<endl;
			char num3[20];
			cin>>num3;
			Find(num3);
			break;
		case 5:
			List();
			break;
		case 6:
			cout<<"数据读取中....."<<endl;
			Load();
			cout<<"现在数据为:"<<endl;
			List();
			break;
		case 7:
			cout<<"数据保存中...."<<endl;
			Save();
			break;
		case 8:
			Quit();
			return 0;
			break;
		default:
			cout<<"输入错误!"<<endl;
			break;
		}
	}
	
	
	return 0;
}

⌨️ 快捷键说明

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