上代码
=================================================================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;
}
===========================================================