通讯录信息管理系统设计

题目:

一.需求功能说明
  编写程序,实现动态链表的插入、删除、输出、查找、统计以及销毁功能。
  动态链表的每个节点存储某个有效联系人的信息,包括:序号、姓名、性别、分类、录入时间 以及家庭住址。
  个人信息结构体的定义如下:
enum gender {male, female};//枚举
typedef struct people
{
 long num;
 char name[10];
 enum gender sex;
 char type[10];
 int time;
 char addr[20];
 struct people *next;
}*person, *node;
  课程设计要求:
⑴一律使用 person 定义个人结构体的变量,一律使用 node 定义指向个人结构体的指针变量
⑵程序运行过程中要有菜单提示,菜单如下:


  • 1.Insert a people *
  • 2.Delete a people *
  • 3.显示通讯录 *
  • 4.分类显示 *
  • 5.Search a people by the name *
  • 6.按录入时间排序通讯录 *
  • 0.Exit the program *

⑶“Insert a people”:插入一个联系人记录,要求按平均分从高到低插入
⑷“Delete a people”:删除指定序号的联系人
⑸“显示通讯录”:输出链表中所有联系人的信息
⑹“分类显示”:输出链表中不同分类的联系人(亲友、同学、同事、好友)
⑺“Search a people by the name”:根据输入的姓名,输出链表中相应联系人的信息
⑻“按录入时间排序通讯录”:输出链表中按时间录入的所有联系人的信息
⑼“Exit the program”:销毁链表,结束程序运行

⑽要求程序首先自动插入若干个联系人记录到链表中
PPEOPLE insert(PPEOPLE head, PPEOPLE pe);
void main( )
{
 PPEOPLE h, s;
 int i;
 //执行输入 语句 建立联系人通讯录
}

代码:

#include
#include
#include
enum  gender {male, female};//枚举
typedef struct people
{
 long num;
 char name[10];
 enum gender sex;
 char  type[10];
 int time;
 char addr[20];
 struct people *next;
}*person, *node;

typedef struct node//*定义单链表结点类型*//
{
	struct people  data;
	struct node *next;
}Node,*link;


void menu_select()
{
	int i;
	printf(
		"\n\n\t***************************************************************\n");
	printf("\t|*    1.Insert a people					      		*");
	printf("\t|*    2.Delete a people							*");
	peintf("\t|*    3.显示通讯录		                        *");
	printf("\t|*    4.分类显示					                *");
	printf("\t|*    5.Search a people by the name				*");
    printf("\t|*    6.按录入时间排序通讯录	                    *");
	printf("\t|*    0.Exit the program							*");
    printf(
		"\t***************************************************************\n");
	do
	{
		printf("\n\t请选择选项:");
		scanf("%d",&i);
	}
	while(i<0||i>6)
	return i;
}



void Insert a people(link L)//插入一个联系人记录,要求按平均分从高到低插入
{
	int i;
	Node *p,*q;
	p=L;
	while(L)
	{
		p=(Node*)malloc(sizeof(Node));//申请内存空间
		if(!p)
		{
			printf("申请空间失败\n");
		}
		for(i=0;i<10;i++)
		scanf("%d",&p->data.num);//输入序号
		scanf("%c",&p->data.name);//输入姓名
		scanf("%c",&p->data.type);//输入分类
		scanf("%e",&p->data.gender);//输入性别
		scanf("%d",&p->data.time);//输入时间
		scanf("%c",&p->data.addr);//输入家庭住址
		q->next=NULL;
		p->next=p;
		p=q;
}

void Delete a people(link L)//删除指定序号的联系人
{
	int i;
   Node *p,*q;
   p=L;
   q=p->next;
   printf("请输入要删除联系人的序号:");
   scanf("%d",&i);
   while(p!=NULL)
   {
	   if(p->data.num==i)
	   {
		   q->next=p->next;//删除节点
		   free(p);//将p节点空间释放
		   printf("删除成功!");
  
	}
	   else
	   {
		   p=q;
		   q=p->next;
	   }
   }

}

void xianshitongxunlu(link L)//输出链表中所有联系人的信息
{
	Node *p;
	while(p!=NULL)
	{
		printf("序号      姓名      性别      类别      录入时间        家庭住址\n");
		printf("%d%8c%16e%21c%27d%35c",p->data.num,p->data.name,p->data.gender,p->data.type,p->data.time,p->data.addr);
		p=p->next;
	}
	printf("\n");


}

void fenleixianshi(link L)//输出链表中不同分类的联系人(亲友、同学、同事、好友)
{ 
	char i;
	Node *p;
	p=L;
	printf("请输入查询联系人的分类:");
	scanf("%c",&i);
	while(p!=NULL)
	{
		if(p->data.type==i)
		{
				printf("序号     姓名      性别      类别      录入时间        家庭住址\n");
				printf("%d%8c%16e%21c%27d%35c",p->data.num,p->data.name,p->data.gender,p->data.type,p->data.time,p->data.addr);
                
		}
		else
		{
			p=p->next;
		}
			

}

void Search a people by the name(link L)//根据输入的姓名,输出链表中相应联系人的信息
{
	char i;
	Node *p;
	p=L;
	printf("请输入查询人姓名:");
	scanf("%c",&i);
	while(p!=NULL)
	{
		if(p->data.name==i)
		{
				printf("序号     姓名      性别      类别      录入时间        家庭住址\n");
				printf("%d%8c%16c%21c%27d%35c",p->data.num,p->data.name,p->data.gender,p->data.type,p->data.time,p->data.addr);
		}
		else
		{
			p=p->next;
		}
	}
                
}

void shijianpaixu(link L)//输出链表中按时间录入的所有联系人的信息
{
	NOde *p,*q;
	int i,j,temp;
    for(i = 0,i < 10,i++)
	{

	    for(j = 0,j< 9-i,j++)
		{
			if(p->data.time > p->next->data.time)
			{
				q=p;
				p=p->next;
				p->next=q;
			}
			
		}
	
	}
	while(p!=NULL)
	{
		printf("序号      姓名      性别      类别      录入时间        家庭住址\n");
		printf("%d%8c%16c%21c%27d%35c",p->data.num,p->data.name,p->data.gender,p->data.type,p->data.time,p->data.addr);
		p=p->next;
	}
	printf("\n");
}

void Exit the program(link L)//销毁链表,结束程序运行
{
	Node *p,*q;
	p=L;
	q=p->next;
	while(q!=NULL)
	{
		free(p);
		p=q;
		q=p->next;
	}
	free(p);

}

PPEOPLE insert(PPEOPLE head, PPEOPLE pe);
void main()
{
	PPEOPLE h, s;
   int i;
    struct people
	Node *L;
	int m;
	L=(Node*)malloc(sizeof(Node));
	switch(menu_select())
	{
	case 0:Exit the program(L);break;
	case 1:Insert a people(L);break;
	case 2:Delete a people(L);break;
	case 3:xianshitongxunlu(L);break;
	case 4:fenleixianshi(L);break;
	case 5:Search a people by the name(L);break;
	case 6:shijianpaixu(L);
	}



你可能感兴趣的:(通讯录信息管理系统设计)