头文件中的一些声明
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NAME_MAX 20
//#define MAX_SIZE 500
typedef struct base
{
int number;
char name[NAME_MAX];
int age;
int phone;
}base;
typedef struct Con
{
base* arr;
int sz;
int capacity;
}Con;
void Init(Con* obj);
void Remake(Con* obj);
void add(Con* obj);
int search(Con* obj, int number);
void dele(Con* obj,int number);
void modefy(Con* obj, int number);
void Show(Con* obj);
void Clear(Con* obj);
void Sortbyname(Con* obj);
头文件中函数的实现
#include "通讯录.h"
//初始化
void Init(Con* obj)
{
obj->capacity = 3;
obj->arr = (base*)malloc(obj->capacity);
obj->sz = 0;
}
// 重新扩容
void Remake(Con* obj)
{
obj->capacity += 2;
obj->arr = (base*)malloc(obj->capacity);
printf("扩容成功\n");
}
// 添加成员
void add(Con* obj)
{
if (obj->sz == obj->capacity)
{
Remake(obj);
//printf("通讯录满了\n");
//return ;
}
printf("请输入编号\n");
scanf("%d", &obj->arr[obj->sz].number);
printf("请输入姓名\n");
scanf("%s", obj->arr[obj->sz].name);
printf("请输入年龄\n");
scanf("%d", &obj->arr[obj->sz].age);
printf("请输入电话\n");
scanf("%d", &obj->arr[obj->sz].phone);
obj->sz++;
printf("添加完成\n");
return;
}
//搜索成员
int search(Con* obj, int number)
{
int i = 0;
for (i = 0; i < obj->sz; i++)
{
if (obj->arr[i].number == number)
return i;
}
return -1;
}
//删除成员
void dele(Con* obj,int number)
{
int i = search(obj, number);
obj->arr[i].number = obj->arr[obj->sz - 1].number;
strcpy(obj->arr[i].name, obj->arr[obj->sz - 1].name);
obj->arr[i].age = obj->arr[obj->sz - 1].age;
obj->arr[i].phone = obj->arr[obj->sz - 1].phone;
obj->sz--;
return;
}
// 修改成员
void modefy(Con* obj, int number)
{
int i = search(obj, number);
printf("请输入编号\n");
scanf("%d", &obj->arr[i].number);
printf("请输入姓名\n");
scanf("%s", obj->arr[i].name);
printf("请输入年龄\n");
scanf("%d", &obj->arr[i].age);
printf("请输入电话\n");
scanf("%d", &obj->arr[i].phone);
printf("修改成功\n");
return;
}
//显示成员
void Show(Con* obj)
{
int i = 0;
for (i = 0; i < obj->sz; i++)
{
printf("编号:");
printf("%d\n", obj->arr[i].number);
printf("姓名:");
printf("%s\n", obj->arr[i].name);
printf("年龄:");
printf("%d\n", obj->arr[i].age);
printf("电话:");
printf("%d\n\n", obj->arr[i].phone);
}
return;
}
// 销毁
void Clear(Con* obj)
{
obj->sz = 0;
obj->capacity = 0;
free(obj->arr);
obj->arr = NULL;
}
// 交换两个元素
void my_swap(base* a1, base* a2)
{
base tmp;
tmp.age = a1->age;
strcpy(tmp.name, a1->name);
tmp.number = a1->number;
tmp.phone = a1->phone;
a1->age = a2->age;
strcpy(a1->name, a2->name);
a1->number = a2->number;
a1->phone = a2->phone;
a2->age = tmp.age;
strcpy(a2->name, tmp.name);
a2->number = tmp.number;
a2->phone = tmp.phone;
}
//按名字来排序
void Sortbyname(Con* obj)
{
int i = 0;
int j = 0;
for (i = 0; i < obj->sz - 1; i++)
{
for (j = 0; j < obj->sz - i - 1; j++)
{
if (strcmp(obj->arr[j].name, obj->arr[j + 1].name) < 0)
{
my_swap(&obj->arr[j], &obj->arr[j + 1]);
}
}
}
}
main 函数
#include "通讯录.h"
void menu()
{
printf("*******************************\n");
printf("***** 1.add 2.delete ****\n");
printf("***** 3.search 4.modefy *****\n");
printf("***** 5.Show 6.clear *******\n");
printf("*** 7.sortbyname **********\n");
printf("**** 0.exit *********\n");
printf("*******************************\n");
}
int main()
{
Con obj;
Init(&obj);
int input;
do
{
menu();
printf("请选择\n");
scanf("%d", &input);
int number = 0;;
switch (input)
{
case 1:add(&obj); break;
case 2:printf("请输入编号\n"); dele(&obj, number); break;
case 3:printf("请输入编号\n"); search(&obj, number); break;
case 4:printf("请输入编号\n"); modefy(&obj, number); break;
case 5:Show(&obj); break;
case 6:Clear(&obj); break;
case 7:Sortbyname(&obj); break;
case 0: break;
}
}while(input);
return 0;
}