代码
#include
#include
#include
#include
#include
#include
//#include
typedef struct {
char name[10];
char ptel[13];//联系号码
char qq[11];
char wtel[13];//办公号码
}ElemType;
typedef struct {
ElemType date[50];
int length;
}SqList;
//初始化线性表
void InitList(SqList *&L){
L=(SqList *)malloc(sizeof(SqList)); //为线性表分别配空间
L->length=0;
}
//输出线性表
void DispList(SqList *L){
int i;
printf(" NO MAME PTEL QQ WTEL\n");
for(i=0;ilength;i++){
printf(" %2d%12s%18s%17s%18s\n",i+1,L->date[i].name,L->date[i].ptel,L->date[i].qq,L->date[i].wtel);
fflush(stdin);//清空输入缓冲区
}
printf("\n");
}
//插入数据元素
bool ListInsert(SqList *&L,int i,ElemType e){ //boolean
int j;
if(e.name=="\0"||i<1||i>L->length+1){
printf("插入失败!\n\n");
return false;
}
i--;//将逻辑序号转化为物理序号
for(j=L->length;j>i;j--){
L->date[j]=L->date[j-1]; //将元素后移
}
L->date[i]=e;
L->length++;
// printf("length=%d\n\n",L->length);
return true;
}
//删除数据元素
bool ListDelete(SqList *&L,int i,ElemType &e){
int j;
if(i<1||i>L->length+1){
printf("删除失败!\n\n");
return false;
}
i--;//将逻辑序号转化为物理序号
e=L->date[i];
for(j=i;jlength;j++){
L->date[j]=L->date[j+1]; //将元素前移
}
L->length--;
printf("删除成功!\n\n");
// printf("length=%d\n\n",L->length);
return true;
}
//查询联系人
int LocateElem(SqList *L,ElemType e){
int i=0;
while(ilength&&strcmp(L->date[i].name,e.name)!=0) //strcmp() 比较字符串 ,相等返回0
i++;
if(i>L->length){
return 0;
}
else{
// puts(L->date[i].name);//puts() 向栈顶添加元素(线性表后面)
// puts(L->date[i].ptel);
// puts(L->date[i].qq);
// puts(L->date[i].wtel);
printf("name:%s ptel:%s qq:%s wtel:%s\n\n",L->date[i].name,L->date[i].ptel,L->date[i].qq,L->date[i].wtel);
return(i+1);
}
}
//输出联系人数
void CountList(SqList *L){
printf("目前联系人总数:%d\n\n",L->length);
}
//摧毁线性表
void DestroyList(SqList *L)
{
free(L->date); //使用free函数,释放空间
L->length = 0;
printf("销毁成功!\n\n");
}
void menu1(){ //打印菜单
printf(" -----------------------------\n");
printf(" 手机通讯录的应用\n");
printf(" -----------------------------\n");
printf(" 1.初始化通讯录\n");
printf(" 2.增加联系人信息\n");
printf(" 3.显示联系人信息\n");
printf(" 4.删除联系人信息\n");
printf(" 5.查找联系人信息\n");
printf(" 6.退出\n");
printf(" 扩展功能:\n");
printf(" 7.查询当前联系人人数\n");
printf(" 8.销毁通讯录\n");
printf(" -----------------------------\n");
}
int main(){
SqList *L;
int flag=1;
int i,j;
ElemType s[4]={ "林一","13845467326","123234675","15278538464",
"林二","12547722234","243624213","12734532894",
"林三","13254678924","317643927","13423137876",
"林四","14219834567","244292934","17683273484"};
ElemType e;
InitList(L);
menu1();
for(int i=0;i<4;i++){
ListInsert(L,i+1,s[i]);
}
DispList(L);
while(flag){
printf("请选择:");
scanf("%d",&j);
switch(j){
case 1:
InitList(L);
printf("初始化成功!\n\n");
break;
case 2:
printf("请以次输入联系人信息:");
scanf("%s %s %s %s",e.name,e.ptel,e.qq,e.wtel);
printf("请输入插入的位置:");
scanf("%d",&i);
fflush(stdin);//清空输入缓冲区,确保不影响后面的数据读取
if(ListInsert(L,i,e)){
printf("插入成功!\n\n");
}
break;
case 3:
DispList(L);
break;
case 4:
printf("请输入删除的联系人位置:");
scanf("%d",&i);
ListDelete(L,i,e);
break;
case 5:
printf("请输入查询的联系人姓名:");
scanf("%s",&e.name);
LocateElem(L,e);
break;
case 6:
flag=0;
printf("退出成功!\n\n");
break;
case 7:
CountList(L);
break;
case 8:
DestroyList(L);
break;
default:
printf("输入有误!\n\n");
break;
}
}
return 0;
}
运行结果
