📄 phonebook.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 + -