动态通讯录包括了动态申请内存,
**插入联系人;
删除联系人;
查找联系人;
排序联系人;
清空联系人;
修改联系人;
显示所有联系人;**
下面来看代码
首先,我们要做好我们的准备工作
**
**
#pragma once
#include
#include
#include
#include
#include
#define MAX 3
#define NAME_LENGTH 20
#define SEX_LENGTH 5
#define AGE_LENGTH 3
#define TELE_LENGTH 20
#define ADDR_LENGTH 30
typedef struct user{
char name[NAME_LENGTH];
char sex[SEX_LENGTH];
char age[AGE_LENGTH];
char tele[TELE_LENGTH];
char addr[ADDR_LENGTH];
}user;
typedef struct contacts{
user *person;
int user_count;
int capacity;
}contacts;
enum op
{
EXIT,
ADD,
ERASE,
CLEAR,
FID,
MODIFY,
SHOW,
SORT
};
int add_contacts(contacts *men);
int erase_contacts(contacts *men);
int clear_contacts(contacts *men);
int find_contacts(contacts *men);
int remove_contacts(contacts *men);
void sort_contacts(contacts *men);
void check(contacts *men);
void menu();
下面我们来看下一些辅助工作
#include "adress.h"
void menu()//打印服务菜单!!
{
printf("===========服务菜单===========\n");
printf("==============================\n");
printf(" 1.添加联系人\n");
printf(" 2.删除联系人\n");
printf(" 3.清空联系人\n");
printf(" 4.查找联系人\n");
printf(" 5.修改联系人\n");
printf(" 6.显示所有联系人\n");
printf(" 7.排序联系人\n");
printf(" 0.退出\n");
printf("==============================\n");
}
void init_contacts(contacts *men)//初始化我们的通讯录
{
men->capacity = MAX;
men->user_count = 0;
men->person = (user *)malloc(sizeof(user)*MAX);
}
int _find(contacts *men)//辅助查找函数,成功返回查找的位置,失败返回-1
{
int i = 0;
char name[NAME_LENGTH];
printf("请输入名字:");
scanf("%s",name);
for(i = 0;i < men->user_count;i++)
{
if(strcmp(men->person[i].name,name) == 0)
{
return i;
}
}
return -1;
}
插入联系人函数
int add_contacts(contacts *men)
{
if(men == NULL)
{
return -1;
}
if(men->user_count == men->capacity)
{
user *tmp = (user *)realloc(men->person,(men->capacity +3)*sizeof(user));
if(tmp == NULL)
{
printf("内存不足\n");
return -1;
}
else
{
men->person = tmp;
(men->capacity)+= 3;
return 1;
}
}
else
{
printf("请输入名字:");
scanf("%s",men->person[men->user_count].name);
printf("请输入性别:");
scanf("%s",men->person[men->user_count].sex);
printf("请输入年龄:");
scanf("%s",men->person[men->user_count].age);
printf("请输入电话:");
scanf("%s",men->person[men->user_count].tele);
printf("请输入地址:");
scanf("%s",men->person[men->user_count].addr);
printf("添加成功!\n");
men->user_count++;
return 1;
}
}
删除联系人函数
int erase_contacts(contacts *men)
{
if( men == NULL )
{
return -1;
}
int i = 0;
int ret = _find(men);
if(ret == -1)
{
return -1;
}
for(i = ret;i < men->user_count-1;i++)
{
men->person[i] = men->person[i+1];
}
printf("删除成功!\n");
men->user_count--;
return 1;
}
显示联系人函数
void show_contacts(contacts *men)
{
int i = 0;
printf("%10s\t%4s\t%3s\t%13s\t%10s\n","姓名","性别","年龄","电话","地址");
for(;i< men->user_count;i++)
{
printf("%10s\t%4s\t%3s\t%13s\t%10s\n",men->person[i].name,men->person[i].sex,
men->person[i].age,men->person[i].tele,men->person[i].addr);
}
printf("\n");
}
清空通讯录
int clear_contacts(contacts *men)
{
if(men == NULL)
{
return -1;
}
men->user_count = 0;
printf("清空成功!\n");
return 1;
}
查询联系人
int find_contacts(contacts *men)
{
if(men == NULL)
{
return -1;
}
int ret = _find(men);
if(ret == -1)
{
printf("找不到该联系人\n");
return -1;
}
printf("该联系人的信息为:\n");
printf("姓名:%-5s\n",men->person[ret].name);
printf("性别:%-5s\n",men->person[ret].sex);
printf("年龄:%-5s\n",men->person[ret].age);
printf("电话:%-5s\n",men->person[ret].tele);
printf("地址:%-5s\n",men->person[ret].addr);
return 1;
}
修改联系人
int remove_contacts(contacts *men)
{
if(men == NULL)
{
return -1;
}
int ret = _find(men);
if(ret == -1)
{
printf("该用户不存在\n");
return -1;
}
printf("请重新输入该联系人信息\n");
printf("请输入名字:");
scanf("%s",men->person[ret].name);
printf("请输入性别:");
scanf("%s",men->person[ret].sex);
printf("请输入年龄:");
scanf("%s",men->person[ret].age);
printf("请输入电话:");
scanf("%s",men->person[ret].tele);
printf("请输入地址:");
scanf("%s",men->person[ret].addr);
printf("修改成功!\n");
return 1;
}
排序联系人
void sort_contacts(contacts *men)
{
if(men == NULL)
{
return;
}
int i = 0;
int j = 0;
for(i = 0;i < men->user_count-1;i++)
{
for(j = 0;j < men->user_count-1;j++)
{
if((strcmp(men->person[j].name,men->person[j+1].name)) > 0)
{
user tmp = men->person[j];
men->person[j] = men->person[j+1];
men->person[j+1] = tmp;
}
}
}
printf("排序完成!\n");
}
主函数
int main()
{
int input = 1;
contacts user;
init_contacts(&user);
// contacts user = {0};
// user.capacity = MAX;
// user.user_count = 0;
// user.person = (user *)malloc(sizeof(user)*MAX);
if(user.person == NULL)
{
printf("内存不足\n");
return;
}
else
{
menu();
while(input)
{
printf("请输入数字编号\n");
scanf("%d",&input);
switch(input)
{
case ADD:
add_contacts(&user);
menu();
break;
case ERASE:
erase_contacts(&user);
menu();
break;
case CLEAR:
clear_contacts(&user);
menu();
break;
case FID:
find_contacts(&user);
menu();
break;
case MODIFY:
remove_contacts(&user);
menu();
break;
case SHOW:
show_contacts(&user);
menu();
break;
case SORT:
sort_contacts(&user);
show_contacts(&user);
menu();
break;
case EXIT:
printf("谢谢使用,再见!\n");
break;
dafault:
printf("输入错误,请重新输入\n");
break;
}
}
}
free(user.person);
user.person = NULL;
return 0;
}