#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<fstream.h>
#include<dos.h>
#include<windows.h>
#include<winbase.h>
static int length=0;
//------------------------通讯录的数据结构---------------------------
struct Book
{
char name[80]; //姓名
char telnum[80]; //电话号码
char kind[80]; //所在分类
char email[80]; //电子邮箱
int No; //编号
Book *next;
};
Book *Head=NULL; //链表的头指针,声明为全局变量,便于操作
//------------------------通讯录中需要的函数-------------------------
void ClearBook(); //清空链表
int BookSize(); //求表长
bool BookEmpty(); //检查表是否为空
void TraverseBook(); //遍历表
void InsertBook(); //向表中插如元素
void FindBook(); //查询一个元素
void UpdateBook(); //修改一个元素
void DeleteBook(); //删除一个元素
void GetChar(char* chr); //获取字符
bool IsExist(char*,char*);//输入是否重复
bool IsFull(); //是否满了
void Save(); //建立文件
//-------------------------------主函数---------------------------------------
void main()
{
//------------------------通讯录主界面------------------------------------
cout<<" +++++++++++++++欢迎来到手机通讯录系统管理系统+++++++++++++++ "<<endl;
cout<<" ------------------------------------------------------------ "<<endl;
cout<<" ★☆☆☆☆☆☆ 按(0):成员总名单查看; ☆☆☆☆☆☆☆★ "<<endl;
cout<<" ★☆☆☆☆☆☆ 按(1):增加一位成员资料; ☆☆☆☆☆☆☆★ "<<endl;
cout<<" ★☆☆☆☆☆☆ 按(2):删除一位成员资料; ☆☆☆☆☆☆☆★ "<<endl;
cout<<" ★☆☆☆☆☆☆ 按(3):修改一位成员资料; ☆☆☆☆☆☆☆★ "<<endl;
cout<<" ★☆☆☆☆☆☆ 按(4):查询成员资料; ☆☆☆☆☆☆☆★ "<<endl;
cout<<" ★☆☆☆☆☆☆ 按(5):清空通讯录; ☆☆☆☆☆☆☆★ "<<endl;
cout<<" ★☆☆☆☆☆☆ 按(6):安全退出; ☆☆☆☆☆☆☆★ "<<endl;
cout<<" ------------------------------------------------------------ "<<endl;
cout<<"-----------------------"<<endl;
cout<<"※请选择您要执行的功能:";
char a;
GetChar( &a); //用来获取用户选择的选项
cout<<"-----------------------"<<endl;
while(1)
{
switch(a)
{
case '0': //成员总名单查看
TraverseBook();
int i;
i=BookSize();
cout<<"通讯录中的人数:"<<i<<endl;
cout<<"-----------------------"<<endl;
cout<<"※请选择您要执行的功能:";
break;
case '1':
InsertBook(); //增加一位成员资料
cout<<"-----------------------"<<endl;
cout<<"※请选择您要执行的功能:";
break;
case '2': //删除一位成员资料
DeleteBook();
cout<<"-----------------------"<<endl;
cout<<"※请选择您要执行的功能:";
break;
case '3': //修改一位成员资料
UpdateBook();
cout<<"-----------------------"<<endl;
cout<<"※请选择您要执行的功能:";
break;
case '4': //查询成员资料
FindBook();
cout<<"-----------------------"<<endl;
cout<<"※请选择您要执行的功能:";
break;
case '5': //清空通讯录
ClearBook();
cout<<"-----------------------"<<endl;
cout<<"※请选择您要执行的功能:";
break;
case '6': //安全退出
Save();
exit(0);
default:
cout<<"-----------------------"<<endl;
cout<<"输入错误请重新选择:";
break;
}
GetChar( &a);
cout<<"-----------------------"<<endl;
}
}
//------------------------清空链表------------------------------
void ClearBook()
{
Book *cp,*np; //定义两个指针,逐渐移位,指向并删除各结点
cp=Head; //先将一个指针等于头指针
cout<<"----------------------------------------------"<<endl;
cout<<"确定要清空通讯录吗?确认请按(y)撤消请按(n)";
char ch;
GetChar( &ch);
cout<<"----------------------------------------------"<<endl;
if(ch=='y'||ch=='Y')
{
if(cp==NULL) //判断头指针是否为空
{
cout<<"-------------------"<<endl;
cout<<"通讯录中现在无记录!"<<endl;
cout<<"-------------------"<<endl;
}
else
{
while(cp!=NULL) //执行清空操作的循环
{
np=cp->next;
delete cp;
cp=np;
}
Head=NULL;
cout<<"----------"<<endl;
cout<<"清空成功!"<<endl;
cout<<"----------"<<endl;
}
}
else
return;
}
//-----------------------求表长---------------------------------
int BookSize()
{
Book *p=Head; //定义结构指针指向头指针
int i=0;
while(p!=NULL)
{
length++;
i++;
p=p->next;
}
return i;
}
//------------------------检查表是否为空------------------------
bool BookEmpty()
{
return (Head==NULL);
}
//------------------------遍历链表------------------------------
void TraverseBook()
{
Book *p=Head; //定义一个结构指针指向头指针,用来查找
Book *temp=Head; //定义一个结构指针指向头指针,用来编号
int num=1;
while(temp!=NULL)
{
temp->No=num;
num++;
temp=temp->next;
}
while(p!=NULL)
{
cout<<"[编 号] "<<p->No<<"\n"<<"[姓 名] "<<p->name<<endl;
printf("[电话号码] ");
int i;
char ch=7; //定义输出声音的变量
for(i=0;i<(int)strlen(p->telnum);i++)
{
printf("%c",p->telnum[i]);
long j=1000;
Sleep(j); //用Sleep()函数来实现时间延迟
printf("%c",ch); //输出声音
}
cout<<endl;
p=p->next;
}
cout<<endl;
}
//------------------------向链表中插入元素----------------------
void InsertBook()
{
//-----------------判断链表是否已满-------------------------
if ( IsFull() )
{
cout<<"-----------------------"<<endl;
cout<<"(系统提示)存储空间已满!\n";
cout<<"-----------------------"<<endl;
return;
}
//------------------插入新结点------------------------------
Book *new1; //定义新结点
new1=new Book;
//------------------输入新对象的姓名------------------------
cout<<"-----------"<<endl;
cout<<"请输入姓名:";
cin>>new1->name;
cout<<"-----------"<<endl;
//------------------输入新对象的电话号码--------------------
cout<<endl;
cout<<"----------------"<<endl;
cout<<"请输入电话号码:";
cin>>new1->telnum;
cout<<"----------------"<<endl;
//-----------------判断输入对象是否与表中其他对象重复------
bool Flag = false;
Book *p = Head;
while (p != NULL)
{
if ( strcmp(p->name,new1->name)==0 && strcmp(p->telnum,new1->telnum)==0 )
{ //判断姓名与电话号码是否有一起重复的
Flag = true;
break;
}
p = p->next;
}
p = NULL;
//----------------若输入重复,提示重新输入-----------------
if ( Flag )
{
cout<<"---------------------"<<endl;
cout<<"(系统提示)输入重复!\n";
cout<<"---------------------"<<endl;
delete new1;
return;
}
cout<<endl;
//----------------输入新对象所在分类------------------------
bool flag=true;
char choice;
while (flag) //用循环控制用户所输分类符合要求
{
flag = false;
cout<<"---------------------------------------------------------"<<endl;
cout<<"请输入所在分类:[类别]: A.办公类 B.个人类 C.商务类 ==>";
GetChar(&choice);
cout<<"----------------------------------------------------------"<<endl;
if ( choice=='a' || choice=='A' )//用条件语句判断用户所输分类
strcpy(new1->kind,"办公类");
else
if ( choice=='b' || choice=='B' )
strcpy(new1->kind,"个人类");
else
if ( choice=='c' || choice=='C' )
strcpy(new1->kind,"商务类");
else flag =true;
}
cout<<endl;
//-----------------输入新对象的电子邮箱-------------------------
cout<<"----------------"<<endl;
cout<<"请输入电子信箱:";
cin>>new1->email;
cout<<"----------------"<<endl;
cout<<endl;
//--