您的位置:首页 > 其它

用线性表编写通讯录管理系统 实现添加,查询,修改,删除功能

2018-01-31 21:58 896 查看
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAX 100

#define TRUE 1

#define FALSE 0

#defien Status int

typedef struct node

{

 char name[12];

char addr[40];

char mphone[12];

char tel[14];

char sex;

unsigned char age;

}DataType;

typedef struct

{

 DataType Element[MAX];

int length;

}Slist;

char *menu_1[] = {

  "*********************\n",

"1.增加记录\n",

"2.删除记录\n",

"3.修改记录\n",

"4.查询记录\n",

"0.退出\n",

"*********************\n"

};

char *menu_query1[] = {

 "***********************\n",

"1.按姓名查询\n",

"2.按手机号码查询\n",

"3.全部查询\n",

"0.退出",

"*********************\n"

};

char *menu_delete1[] = {

 "***********************\n",

"1.按姓名删除\n",

"2.按手机号码删除\n",

"0.退出",

"*********************\n"

};

char *menu_change1[] = {
 "***********************\n",

"1.按姓名修改\n",
"2.按手机号码修改\n",
"0.退出",
"*********************\n"
};

char menu(char *str[],int len)
{
 char sel;

int i;
for (i =0;i < len;i++)
{
 printf("%s",str[i]);

}
printf("请输入您的选择:");
scanf(" %c",&sel);
getchar();
return sel;
}

Status InitList(Slist *L)
{
 L->length = 0;

return TRUE;
}

Status ListLength(Slist L)
{
 return L.length;

}

Status ListEmpty(Slist L)
{
 if (0 == L.length)

{
 return
TRUE;

}
else
{
 return
FALSE;

}
}

Status ListInsert(Slist *L,int i,DataType e)
{
 int j;

if( MAX == L->length)
{
 return
FALSE;

}
 if( i< 0 || i>L->length)

{
 return
FALSE;

 }
 for ( j=L->length-i; j>0; j--)

{
 L->Element[j+1]
= L->Element[j];

}
L->Element[i] = e;
L->length++;
return TRUE;
}

Status input(DataType *e)
{
 int age;

printf("请输入姓名:");
fgets(e->name,12,stdin);
printf("请输入地址:");
fgets(e->addr,40,stdin);
printf("请输入手机号:");
fgets(e->mphone,12,stdin);
printf("请输入电话号码:");
fgets(e->tel,14,stdin);
 

printf("请输入性别:");

scanf("
%c",&(e->sex));
printf("请输入年龄:");

scanf("%d",&age);
getchar();
e->age
= (unsigend char)age;
return
TRUE;
}

Status GetElement(Slist L,int i,DataType *e)
{
 if ( i<0 || i>L.length)

{
 return
FALSE;

}
*e = L.Element[i];
return TRUE;
}

Status output(DataType e)
{
 char sex[3];

printf("姓名:%s",e.name);
printf("地址:%s",e.sddr);

printf("手机号:%s",e.mphone);

printf("电话号码:%s",e.tel);

if
( '0' == e.sex)
{
 strcpy(sex,"女");

}
else
if ( '1' == e.sex)
{
 strcpy(sex,"男");

 }
 else
 {
 strcpy(sex,"错");

}

printf("性别:%s\n",sex);
printf("年龄:%s\n",(int)e.age);
return TRUE;
}

Status ListDelete(Slist *L,int i,DataType *e)
{
 int j;

if ( i<0 || i>L->length)
{
 return
FLASE;

}
*e = L->Element[i];
for ( j=0;j<L->length-i-1;j++)
{
 L->Element[i+j]
= L->Element[i+j+1];

}
L->length--;
return TRUE;
}

Status ClearList(Slist *L)
{
 L->length = 0;

return TRUE;
}
//flag = 0 按姓名查询,flag = 1按手机号码查询
//str 传递查询内容
int LocateList(Slist L, char *str, int flag)

{
int i;
switch (flag)
{
case 0:
{
for (i=0; i<L.length; i++)
{
if (!strcmp(str,L.Element[i].name)) return i;
}
return -1;
}
break;
case 1:
{
for (i=0; i<L.length; i++)
{
if (!strcmp(str,L.Element[i].mphone)) return i;
}
return -1;
}
break;
default:return -1;
}

}

Status query(Slist L)

{
char sel=1,name[12],mphone[12];
int i,j;
DataType e;
while('0' != sel)
{
sel = menu(menu_query1,6);
switch (sel)
{
case '1':
{
printf("请输入姓名:");
fgets(name,12,stdin);
j = LocateList(L,name,0);
if (-1 != j)
{
GetElem(L,j,&e);
output(e);
}
else
{
printf("查无此人\n");
}
} break;
case '2':
{
printf("请输入手机号:");
fgets(mphone,12,stdin);
j = LocateList(L,mphone,1);
if (-1 != j)
{
GetElem(L,j,&e);
output(e);
}
else
{
printf("查无此人\n");
}
} break;
case '3':
{
for(i=0; i<L.length; i++)
{
printf("第%d条记录\n",i+1);
output(L.Element[i]);
printf("\n");
}
} break;
case '0':break;
default:printf("错误输入\n");break;
}
}
return TRUE;

}

Status delete(Slist *L)

{
char sel=1,name[12],mphone[12];
int j;
DataType e;
while('0' != sel)
{
sel = menu(menu_delete1,5);
switch (sel)
{
case '1':
{
printf("请输入姓名:");
fgets(name,12,stdin);
j = LocateList(*L,name,0);
if (-1 != j)
{
GetElem(*L,j,&e);
output(e);
ListDelete(L,j,&e);
printf("%s已删除\n",name);
}
else
{
printf("查无此人\n");
}
} break;
case '2':
{
printf("请输入手机号:");
fgets(mphone,12,stdin);
j = LocateList(*L,mphone,1);
if (-1 != j)
{
GetElem(*L,j,&e);
output(e);
ListDelete(L,j,&e);
printf("%s已删除\n",mphone);
}
else
{
printf("查无此人\n");
}
} break;
case '0':break;
default:printf("错误输入\n");break;
}
}
return TRUE;

}

Status Change(Slist *L)

{
char sel=1,name[12],mphone[12];
int j;
DataType e;
while('0' != sel)
{
sel = menu(menu_change1,5);
switch (sel)
{
case '1':
{
printf("请输入姓名:");
fgets(name,12,stdin);
j = LocateList(*L,name,0);
if (-1 != j)
{
ListDelete(L,j,&e);
input(&e);
ListInsert(L,j,e);
printf("%s已修改\n",name);
}
else
{
printf("查无此人\n");
}
} break;
case '2':
{
printf("请输入手机号:");
fgets(mphone,12,stdin);
j = LocateList(*L,mphone,1);
if (-1 != j)
{
ListDelete(L,j,&e);
input(&e);
ListInsert(L,j,e);
printf("%s已修改\n",mphone);
}
else
{
printf("查无此人\n");
}
} break;
case '0':break;
default:printf("错误输入\n");break;
}
}
return TRUE;

}

int main(int argc,char *argv[])

{
Slist txl;
DataType e;
char sel;
InitList(&txl);
#if 0
printf("txl length = %d\n",ListLength(txl));
printf("txl is empty? = %d\n",ListEmpty(txl));
input(&e);
ListInsert(&txl,0,e);
printf("length=%d\n",ListLength(txl));
GetElem(txl,0,&e);
output(e);
ListDelete(&txl,0,&e);
output(e);
printf("length=%d\n",ListLength(txl));

    k = LocateList(txl,"feng",0);
printf("k=%d\n",k);
memset(&e,0,sizeof(DataType));
if( FALSE == GetElem(txl,k,&e))
{
printf("在位置%d处没有取到值\n",k);
}
output(e);
#endif
while (1)
{
sel = menu(menu_1,7);
switch (sel)
{
case '1':memset(&e,0,sizeof(DataType));input(&e);ListInsert(&txl,txl.length,e);break;
case '2':delete(&txl);break;
case '3':Change(&txl);break;
case '4':query(txl);break;
case '0':exit(0);break;
default:printf("错误输入\n");break;
}
}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐