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

#include <stdio.h>
#include <stdlib.h>
#include <string.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"
};

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;
}

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值