程序如下:在删除和修改函数中若重名,则指定具体手机号进行操作,请问这个功能如何实现,求大神指教
#include <stdio.h>#include <malloc.h>
#include <string.h>
#define MaxSize 100
typedef struct
{ char num[100];
char name[100];
char addr[100];
}ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
} TelNum;
//…………………………………………………………添加联系人…………………………………………………………
void NumAdd(TelNum *&L) //添加联系人信息
{ int a=0;
printf("请输入联系人信息!\n");
printf("手机号(限五位短号!) 姓名 家庭住址\n");
scanf("%s %s %s",L->data[L->length].num,L->data[L->length].name,L->data[L->length].addr);
printf("\n");
for(int i=0;i<L->length;i++)
{
if(strcmp(L->data[i].num,L->data[L->length].num)==0)
{
printf("该联系人已经存在,请重新输入!");a=1;break;
}
}
if(a==0)
{L->length++;}
}
//……………………………………………………………………修改联系人信息………………………………………………………………
void ChangeNum(TelNum *&L) //按号码
{
printf("请输入你要修改的联系人的号码:\n");
char num[100];
scanf("%s",&num);
int m=0;
while(m<L->length&&strcmp(L->data[m].num,num)!=0)
m++;
if(m>=L->length)
printf("通讯录内没有此联系人!\n");
else
{
printf("请输入联系人信息!\n");
printf("手机号 姓名 家庭住址\n");
scanf("%s %s %s",L->data[m].num,L->data[m].name,L->data[m].addr);
printf("\n");
printf("修改联系人信息成功!");
}
}
void ChangeName(TelNum *&L) //按姓名
{
printf("请输入你要修改的联系人的姓名:\n");
char name[100];
scanf("%s",&name);
int n=0;
while(n<L->length&&strcmp(L->data[n].name,name)!=0)
n++;
if(n>=L->length)
printf("通讯录内没有此联系人!\n");
else
{
printf("请输入要修改的联系人的姓名!\n");
printf("手机号 姓名 家庭住址\n");
scanf("%s %s %s",L->data[n].num,L->data[n].name,L->data[n].addr);
printf("\n");
printf("修改联系人信息成功!");
}
}
void NumChange(TelNum *&L) //修改联系人信息
{ printf("1.按号码修改\n");
printf("2.按姓名修改\n");
int c;
printf("请输入您的选择:\n");
scanf("%d",&c);
switch(c)
{
case 1:ChangeNum(L);break;
case 2:ChangeName(L);break;
default:{printf("错误!你只能输入1,2!请重新输入!\n");}
}
}
//………………………………………………删除联系人………………………………………………………………………………
void NumDelete(TelNum *&L) //按号码
{
printf("请输入你要删除的联系人的号码!\n");
char num[100];
scanf("%s",&num);
int i=0;
while(i<L->length&&strcmp(L->data[i].num,num)!=0)
i++;
printf("该联系人已被删除!\n");
if(i>=L->length)
printf("通讯录内没有此联系人!\n");
else
{
int j;
for (j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];
L->length--;
}
}
void NameDelete(TelNum *&L) //按姓名
{
printf("请输入你要删除的联系人的姓名!\n");
char name[100];
scanf("%s",&name);
int i=0;
while(i<L->length&&strcmp(L->data[i].name,name)!=0)
i++;
printf("该联系人已被删除!\n");
if(i>=L->length)
printf("通讯录内没有此联系人!\n");
else
{
int j;
for (j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];
L->length--;
}
}
void DeleteNum(TelNum *&L) //删除联系人
{ printf("1.按号码删除\n");
printf("2.按姓名删除\n");
int c;
printf("请输入您的选择:\n");
scanf("%d",&c);
switch(c)
{
case 1:NumDelete(L);break;
case 2:NameDelete(L);break;
default:{printf("错误!你只能输入1,2!请重新输入!\n");}
}
}
//……………………………………………………查找联系人…………………………………………………………………………
void NumSearch(TelNum *&L) //按号码查找
{
printf("请输入你想要查找联系人的号码!\n");
char num[100];
scanf("%s",&num);
int i=0;
while(i<L->length&&strcmp(L->data[i].num,num)!=0)
i++;
if(i>=L->length)
printf("通讯录内没有此联系人!\n");
else
{
printf("手机号 姓名 家庭住址\n");
printf("%s %s %s",L->data[i].num,L->data[i].name,L->data[i].addr);
printf("\n");
}
}
void NameSearch(TelNum *&L) //按姓名查找
{
printf("请输入你想要查找联系人的姓名!\n");
char name[100];
scanf("%s",&name);
int i=0;
while(i<L->length&&strcmp(L->data[i].name,name)!=0)
i++;
if(i>=L->length)
printf("通讯录内没有此联系人!\n");
else
{
printf("手机号 姓名 家庭住址\n");
printf("%s %s %s",L->data[i].num,L->data[i].name,L->data[i].addr);
printf("\n");
}
}
void SearchNum(TelNum *&L) //查找联系人
{ printf("1.按号码查询\n");
printf("2.按姓名查询\n");
int c;
printf("请输入您的选择:\n");
scanf("%d",&c);
switch(c)
{
case 1:NumSearch(L);break;
case 2:NameSearch(L);break;
default:{printf("错误!你只能输入1,2!请重新输入!\n");}
}
}
//……………………………………………………排序…………………………………………………………
void PaiXuNum(TelNum *&L) //按号码排序
{
int i,j;
ElemType t;
for(i=0;i<L->length-1;i++)
{
for(j=L->length-1;j>i;j--)
{
if(strcmp(L->data[j].num,L->data[j-1].num)<0)
{
t=L->data[j];
L->data[j]=L->data[j-1];
L->data[j-1]=t;
}
}
}
for(i=0;i<L->length;i++)
{
printf("%s %s %s\n",L->data[i].num,L->data[i].name,L->data[i].addr);
}
}
void PaiXuName(TelNum *&L) //按姓名排序
{
int i,j;
ElemType t;
for(i=0;i<L->length-1;i++)
{
for(j=L->length-1;j>i;j--)
{
if(strcmp(L->data[j].name,L->data[j-1].name)<0)
{
t=L->data[j];
L->data[j]=L->data[j-1];
L->data[j-1]=t;
}
if(strcmp(L->data[j].name,L->data[j-1].name)==0)
{
if(strcmp(L->data[j].num,L->data[j-1].num)<0)
{
t=L->data[j];
L->data[j]=L->data[j-1];
L->data[j-1]=t;
}
}
}
}
for(i=0;i<L->length;i++)
{
printf("%s %s %s\n",L->data[i].num,L->data[i].name,L->data[i].addr);
}
}
void PaiXu(TelNum *&L)
{
printf("1.按号码排序\n");
printf("2.按姓名排序\n");
int c;
printf("请输入您的选择:\n");
scanf("%d",&c);
switch(c)
{
case 1:PaiXuNum(L);break;
case 2:PaiXuName(L);break;
default:{printf("错误!你只能输入1,2!请重新输入!\n");}
}
}
//……………………………………………………统计联系人………………………………………………
int ListTotal(TelNum *L) //统计联系人个数
{
printf("联系人总数为:%d\n",L->length);
return 0;
}
void InitList(TelNum *&L)
{
L=(TelNum *)malloc(sizeof(TelNum));
L->length=0;
}
void DestroyList(TelNum *L)
{
free(L);
}
int ListLength(TelNum *L)
{
return(L->length);
}
int GetElem(TelNum *L,int i,ElemType &e)
{
if (i<1 || i>L->length)
return 0;
e=L->data[i-1];
return 1;
}
int LocateElem(TelNum *L, ElemType e)
{
int i=0;
while (i<L->length && L->data[i].num!=e.num) i++;
if (i>=L->length)
return 0;
else
return i+1;
}
int ListInsert(TelNum *&L,int i,ElemType e)
{
int j;
if (i<1 || i>L->length+1)
return 0;
i--;
for (j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return 1;
}
int ListDelete(TelNum *&L,int i,ElemType &e)
{
int j;
if (i<1 || i>L->length)
return 0;
i--;
e=L->data[i];
for (j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];
L->length--;
return 1;
}
void DispList(TelNum *&L) //输出联系人信息
{
int i;
if(ListTotal(L)) return;
for (i=0;i<L->length;i++)
printf("%s %s %s\n",L->data[i].num,L->data[i].name,L->data[i].addr);
printf("\n");
}
void main()
{
TelNum *L;
InitList(L);
printf("初始化通讯录成功!\n");
int num;
while(1)
{
printf("\n");
printf(" 欢迎进入手机通讯录管理系统! \n");
printf(" 1.添加:将联系人的基本信息添加到通讯录中。 \n");
printf(" 2.修改:对联系人信息进行修改。 \n");
printf(" 3.删除:删除符合条件的联系人。 \n");
printf(" 4.查询:输出符合条件的联系人。 \n");
printf(" 5.排序:对联系人排序。 \n");
printf(" 6.统计:统计联系人总数。 \n");
printf(" 7.退出系统。 \n");
printf("\n");
printf("请选择你要进行的操作:");
scanf("%d",&num);
switch(num)
{
case 1:NumAdd(L);break;
case 2:NumChange(L);break;
case 3:DeleteNum(L);break;
case 4:SearchNum(L);break;
case 5:PaiXu(L);break;
case 6:ListTotal(L);break;
case 7:;return;
default:{printf("错误!你只能输入1,2,3,4,5或6!请重新输入!\n");}
}
}
}