前言:用到的知识点有枚举、结构体、数组,快速排序(用的名字排序)
下面是测试函数:
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void menu()
{
printf("**********************************\n");
printf("*****请输入你要进行的操作*********\n");
printf("*****1.Add: 添加联系人***********\n");
printf("*****2.Sub: 删除联系人***********\n");
printf("*****3.Mod: 修改联系人***********\n");
printf("*****4.Show: 展示联系人***********\n");
printf("*****5:Sort: 对联系人进行排序*****\n");
printf("*****6:Check:查找联系人*****\n");
printf("*****0:Exit: 退出操作*************\n");
}
int main()
{
int input = 0;
Set arr[MAX_people] = { 0 };
int sz = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case Exit:
printf("退出操作\n");
break;
case Add:
printf("请输入你要添加的联系人个数:>");
scanf("%d", &sz);
Addpeople(arr,sz);
break;
case Sub:
printf("开始输入删除联系人的信息:>\n");
Subpeople(arr, sz);
break;
case Mod:
printf("开始展示联系人信息:>\n");
Modpeople(arr, sz);
break;
case Show:
Showpeople(arr, sz);
break;
case Sort:
//用名字来排序
qsort(arr, sz,sizeof(arr[0]),Sort_quickly);
break;
case Check:
Checkpeople(arr, sz);
break;
default:
printf("您的操作有误,请重新操作\n");
}
} while (input);
return 0;
}
下面是contact.c文件里面的函数实现
#include"contact.h"
void Addpeople(Set arr[], int sz)
{
int i = 0;
for (; i < sz; i++)
{
printf("请输入名字:");
scanf("%s", arr[i].name);
printf("请输入性别:");
scanf("%s", arr[i].sex);
printf("请输入你与他的关系:");
scanf("%s", arr[i].rel);
printf("请输入他的地址:");
scanf("%s", arr[i].address);
printf("请输入电话号码:");
scanf("%lld", &arr[i].phone_number);
putchar('\n');
}
}
void Subpeople(Set arr[], int* sz)
{
printf("输入你要删除的名字:");
char a[20] = { 0 };
scanf("%s", a);
int i = 0;
int j = 0;
for (i = 0; i < sz; i++)
{
if (strcmp(arr[i].name, a) == 0)
{
for (j = i; j < sz; j++)
{
arr[j] = arr[j + 1];
}
sz--;
}
}
if (arr[j].name != '\0')
printf("你删除的联系人不存在\n");
}
void Modpeople(Set arr[], const int sz)
{
printf("请输入你想要修改人的姓名:");
char a[20] = {0};
scanf("%s", a);
int i = 0;
int j = 0;
for (i = 0; i < sz; i++)
{
if (strcmp(arr[i].name, a) == 0)
{
printf("请输入修改后的所有信息:");
scanf("%s%s%s%s%lld",&arr[i].name,
&arr[i].sex,
&arr[i].rel,
&arr[i].address,
&arr[i].phone_number);
}
}
}
void Showpeople(Set* arr, int sz)
{
int i = 0;
printf("姓名 性别 关系 地址 电话号码\n");
for (; i < sz; arr++,i++)
{
printf("%-20s%-10s%-10s%-20s%-13lld\n",
arr->name,
arr->sex,
arr->rel,
arr->address,
arr->phone_number);
}
}
int Sort_quickly(void* p1, void* p2)
{
return strcmp(((Set*)p1)->name , ((Set*)p2)->name);
}
void Checkpeople(Set arr[], int sz)
{
printf("请输入你要查找的联系人姓名:");
char s[20] = { 0 };
scanf("%s", s);
for (int i = 0; i < sz; i++)
{
if (strcmp(arr[i].name, s) == 0)
{
printf("已经寻找到该联系人的信息:>\n");
printf("%-20s%-10s%-10s%-20s%-13lld\n",
arr[i].name,
arr[i].sex,
arr[i].rel,
arr[i].address,
arr[i].phone_number);
}
}
}
下面是头文件contact.h进行函数声明
#pragma once
#define MAX_people 100
#include
#include
enum number
{
Exit,
Add,
Sub,
Mod,
Show,
Sort,
Check,
};
typedef struct Stu
{
char name[20];
char sex[10];
char rel[10];
char address[20];
long long int phone_number;
}Set;
void Addpeople(Set arr[], int sz);//添加联系人
void Subpeople(Set arr[], int* sz);//删除联系人
void Modpeople(Set arr[], int sz);//修改联系人
void Showpeople(Set* arr, int sz);//展示你的联系人
int Sort_quickly(void*, void*);//排序函数
void Checkpeople(Set arr[],int sz);//查找联系人