利用线性表编写简单的通讯录程序
2018-01-31 22:40
323 查看
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100
#define TRUE 1
#define FALSE 0
#define 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",
"***********************\n"
};
char *menu_query2[] = {
"***********************\n",
"1.按姓名修改\n",
"2.按手机号码修改\n",
"0.退出\n",
"***********************\n"
};
char *menu_delete1[] = {
"***********************\n",
"1.按姓名删除\n",
"2.按手机号码删除\n",
"0.退出\n",
"***********************\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;
}
int 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;
}
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 = (unsigned char)age;
return TRUE;
}
Status GetElem(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.addr);
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("年龄:%d\n",(int)e.age);
return TRUE;
}
Status ListDelete(Slist *L,int i,DataType *e)
{
int j;
if ( i<0 || i>L->length)
{
return FALSE;
}
*e = L->Element[i]
L->length--;
return TRUE;
}
Status ClearList(Slist *L)
{
L->length = 0;
}
//flag=0 按姓名查询, flag=1 按手机号码查询
//str 传递查询的内容 flag=0 str就是要查询的姓名 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 change(Slist * L)
{
char sel=1,name[12],mphone[12];
int i,j;
DataType e;
while('0' != sel)
{
sel = menu(menu_query2,6);
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);
}
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 '0':break;
default:printf("错误输入\n");break;
}
}
return TRUE;
}
Status delete(Slist *L)
{
char sel=1,name[12],mphone[12];
int i,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",name);
}
else
{
printf("查无此人\n");
}
} break;
case '0':break;
default:printf("错误输入\n");break;
}
}
return TRUE;
}
int main(int argc,char *argv[])
{
Slist txl;
int k;
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;
}
#include <string.h>
#include <stdlib.h>
#define MAX 100
#define TRUE 1
#define FALSE 0
#define 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",
"***********************\n"
};
char *menu_query2[] = {
"***********************\n",
"1.按姓名修改\n",
"2.按手机号码修改\n",
"0.退出\n",
"***********************\n"
};
char *menu_delete1[] = {
"***********************\n",
"1.按姓名删除\n",
"2.按手机号码删除\n",
"0.退出\n",
"***********************\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;
}
int 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;
}
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 = (unsigned char)age;
return TRUE;
}
Status GetElem(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.addr);
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("年龄:%d\n",(int)e.age);
return TRUE;
}
Status ListDelete(Slist *L,int i,DataType *e)
{
int j;
if ( i<0 || i>L->length)
{
return FALSE;
}
*e = L->Element[i]
L->length--;
return TRUE;
}
Status ClearList(Slist *L)
{
L->length = 0;
}
//flag=0 按姓名查询, flag=1 按手机号码查询
//str 传递查询的内容 flag=0 str就是要查询的姓名 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 change(Slist * L)
{
char sel=1,name[12],mphone[12];
int i,j;
DataType e;
while('0' != sel)
{
sel = menu(menu_query2,6);
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);
}
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 '0':break;
default:printf("错误输入\n");break;
}
}
return TRUE;
}
Status delete(Slist *L)
{
char sel=1,name[12],mphone[12];
int i,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",name);
}
else
{
printf("查无此人\n");
}
} break;
case '0':break;
default:printf("错误输入\n");break;
}
}
return TRUE;
}
int main(int argc,char *argv[])
{
Slist txl;
int k;
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;
}
相关文章推荐
- 利用休息时间编写的关于新唐单片机较为简单的ADC+定时器+IO端口程序
- 利用mincemeat编写简单的MapReduce程序
- 利用if,else编写简单java程序
- 课程、问题-利用mincemeat编写简单的MapReduce程序-by小雨
- 利用QT编写一个简单爬虫程序
- C++ :用multimap编写简单的通讯录小程序
- 利用a、s、w、d来控制移动 按下空格会发射子弹 最简单的语法用心编写也会有好的程序
- 使用Delphi,SDK编写Windows简单程序
- 利用Java编写HTML文件分析程序
- 编写简单的java程序
- 利用安卓源码的例子程序编写调用JNI
- 简单编写php验证类,教你如何写好php程序(含多种验证规则)
- 设计程序:利用循环编写程序,帮助小学生练习10以内加减法
- 利用VB编写屏幕保护程序
- 利用Python编写一个程序 统计当前目录下的每个文件类型的文件数目
- 用C语言编写一个Linux下的简单shell程序
- 利用Java编写简单的WebService实例
- 用Qt Creator编写一个简单的窗口程序
- 基于sqlite3实现的简单通讯录程序(控制台)
- 利用Delphi编写Socket通信程序