动态顺序表写一个通讯录

上代码

=================================================================test.h



#ifndef _TEST_H__
#define _TEST_H__
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#pragma warning(disable:4996)
enum Select {EXTI,ADD,DEL,SEEK,ALTER,SHOW,CLEAR,SORT};


//定义一个联系人结构体  
typedef struct Contacts
{
	char name[20];//姓名  
	char address[20];//地址  
	char sex[5];//性别  
	int age;//年龄  
	char phone[20];//电话  
	struct Contacts* next;//指向下一个结点  
}Contacts,*pContacts;


typedef struct Contacts_list
{
	pContacts people;
	unsigned int size;
	unsigned int cap;
}Contacts_list;


//1.    添加联系人信息  
void add_Contacts(Contacts_list *p);


//2.    删除指定联系人信息  
void delete_Contacts(Contacts_list *p);


//3.    查找指定联系人信息  
void seek_Contacts(Contacts_list *p);


//4.    修改指定联系人信息  
void alter_Contacts(Contacts_list *p);


//5.    显示所有联系人信息  
void show_all(Contacts_list *p);


//6.    清空所有联系人  
void clear_all(Contacts_list *p);


//7.    以名字排序所有联系人  
void sort_by_name(Contacts_list *p);


//8.打印菜单  
void menu();


void contact_init(Contacts_list *p);


#endif

















=================================================================test.c






#include "test.h"
#pragma warning(disable:4996)


//寻找函数
static int find(Contacts_list *p)
{


	int i;
	char string[20];
	printf("输入要查找人的姓名>");
	scanf("%s", string);
	for (i = 0;i < p->size;i++)
	{
		if (0==strcmp(p->people[i].name,string))
		{
			return i;
		}
	}
	return -1;
}


//交换内存函数
void meme_swap(char *p1, char *p2, unsigned int num)
{
	char tmp;
	while (num--)
	{
		tmp = *p1;
		*p1 = *p2;
		*p2 = tmp;
		p1++;
		p2++;
	}
}


void menu()
{
	printf("         通讯录       \n");
	printf("    0.退出   1.添加   \n");
	printf("    2.删除   3.查找   \n");
	printf("    4.修改   5.显示   \n");
	printf("    6.清空   7.排序   \n");
}


//1.    添加联系人信息  
void add_Contacts(Contacts_list *p)
{
	if (NULL == p->people)
	{
		if (p->cap == p->size)
		{
			p->people = (pContacts)malloc(sizeof(Contacts));
			if (p->people == NULL)
			{
				printf("扩容成功\n");
				//			printf("%s\n",strerror(errno));
			}
		}
	}
	else
	{
		if (p->cap == p->size)
		{


			pContacts tmp = (pContacts)realloc(p->people, (p->size + 1) * sizeof(Contacts));
			if (tmp != NULL)
			{
				p->people = tmp;
				printf("扩容成功\n");
			}
			else
			{
				//	printf("%s\n", strerror(errno));
			}
		}
	}
	
	printf("姓名>");
	scanf("%s", p->people[p->size].name);
	printf("地址>");
	scanf("%s", p->people[p->size].address);
	printf("性别>");
	scanf("%s", p->people[p->size].sex);
	printf("年龄>");
	scanf("%d", &(p->people[p->size].age));
	printf("电话>");
	scanf("%s", p->people[p->size].phone);
	if (p->cap == p->size)
	{
		p->size++;
		p->cap = p->size;
	}
	else
	{
		p->size++;
	}
	printf("添加成功\n");
}




//2.    删除指定联系人信息  
void delete_Contacts(Contacts_list *p)
{
	int i;
	if (NULL == p->people)
	{
		printf("通讯录空\n");


	}
	else
	{
		i = find(p);
		if (-1 == i)
		{
			printf("无此人\n");
		}
		else
		{
			printf("要删除人的信息:\n");
			printf("%-20s\t%-20s\t%-10s\t%-20s\t%-20s\n", "姓名", "地址", "年龄", "性别", "电话");
			printf("%-20s\t%-20s\t%-10d\t%-20s\t%-20s\n", p->people[i].name, p->people[i].address, p->people[i].age, p->people[i].sex, p->people[i].phone);
			meme_swap((char *)(p->people+i),(char *)(p->people+p->size-1),sizeof(Contacts));
			p->size--;
		}
	}
}


//3.    查找指定联系人信息  
void seek_Contacts(Contacts_list *p)
{
	int i;
	if (NULL == p->people)
	{
		printf("通讯录空\n");
	
	}
	else
	{
		i = find(p);
		if (-1 == i)
		{
			printf("无此人\n");
		}
		else
		{
			printf("查询结果:\n");
			printf("%-20s\t%-20s\t%-10s\t%-20s\t%-20s\n", "姓名", "地址", "年龄", "性别", "电话");
			printf("%-20s\t%-20s\t%-10d\t%-20s\t%-20s\n", p->people[i].name, p->people[i].address, p->people[i].age, p->people[i].sex, p->people[i].phone);
		}
	}


}


//4.    修改指定联系人信息  
void alter_Contacts(Contacts_list *p)
{
	char input[20] = { 0 };
	int inp = 0;
	int i;
	if (NULL == p->people)
	{
		printf("通讯录空\n");


	}
	else
	{
		i = find(p);
		if (-1 == i)
		{
			printf("无此人\n");
		}
		else
		{
			do
			{
				printf("%-20s\t%-20s\t%-10s\t%-20s\t%-20s\n", "姓名", "地址", "年龄", "性别", "电话");
				printf("%-20s\t%-20s\t%-10d\t%-20s\t%-20s\n", p->people[i].name, p->people[i].address, p->people[i].age, p->people[i].sex, p->people[i].phone);
				printf("修改选项\n");
				printf("0.退出修改程序   1.姓名         2.地址\n");
				printf("3.性别           4.年龄         5.电话\n");
				scanf("%s", input);
				if (strlen(input) == 1 && input[0] <= '7'&&input[0] >= '0')
				{
					inp = input[0] - '0';
				}
				else
				{
					inp = -1;//输入错误
				}
				switch (inp)
				{
				case 1:printf("新名字>"); scanf("%s", p->people[i].name); break;
				case 2:printf("新地址>"); scanf("%s", p->people[i].address); break;
				case 3:printf("新性别>"); scanf("%s", p->people[i].sex); break;
				case 4:printf("新年龄>"); scanf("%d",&(p->people[i].age)); break;
				case 5:printf("新电话>"); scanf("%s", p->people[i].phone); break;
				case 0: break;
				default:printf("输入错误\n");
				}
			} while (inp);
		}
	}
}


//5.    显示所有联系人信息  
void show_all(Contacts_list *p)
{
	int i;
	if (p->people==NULL||p->size==0)
	{
		printf("通讯录空\n");
	}
	else
	{
		printf("%-20s\t%-20s\t%-10s\t%-20s\t%-20s\n","姓名","地址","年龄","性别","电话");
		for (i = 0; i < p->size; i++)
		{
			printf("%-20s\t%-20s\t%-10d\t%-20s\t%-20s\n",p->people[i].name, p->people[i].address, p->people[i].age, p->people[i].sex, p->people[i].phone);
		}
	}
}


//6.    清空所有联系人  
void clear_all(Contacts_list *p)
{
	free(p->people);
	p->people = NULL;
	p->size = 0;
	p->cap = 0;
	printf("清空\n");
}


//7.    以名字排序所有联系人  
void sort_by_name(Contacts_list *p)
{
	int i;
	int j;
	for(i=0;i< p->size-1;i++)
		for (j = 0; j < p->size-i-1; j++)
		{
			if (strcmp(p->people[j].name, p->people[j + 1].name) > 0)
			{
				meme_swap((char *)(p->people+j),(char *)(p->people+j+1),sizeof(Contacts));
			}
		}
}


//初始化通讯录
void contact_init(Contacts_list *p)
{
	p->people = NULL;
	p->size = 0;
	p->cap = 0;
}







===============================================main.c




#include "test.h"




int main()
{
	char input[20] = {0};
	int inp = 0;
	Contacts_list con;
	contact_init(&con);//初始化
	do
	{
		menu();
		printf("请输入>");
		scanf("%s", input);
		if (strlen(input) == 1 && input[0] <= '7'&&input[0] >= '0')
		{
			inp = input[0] - '0';
		}
		else
		{
			inp = -1;//输入错误
		}
		switch (inp)
		{
		case ADD:  add_Contacts(&con); break;//EXTI,ADD,DEL,SEEK,ALTER,SHOW,CLEAR,SORT
		case DEL: delete_Contacts(&con); break;
		case SEEK: seek_Contacts(&con); break;
		case ALTER: alter_Contacts(&con); break;
		case SHOW: show_all(&con); break;
		case CLEAR:clear_all(&con); break;
		case SORT:sort_by_name(&con); break;
		case EXTI:break;
		default:printf("输入错误\n");
		}
	} while (inp);
	system("pause");
	return 0;
}





===========================================================

猜你喜欢

转载自blog.csdn.net/qq1910084514/article/details/80504653