前言:用到的知识点有枚举、结构体、数组,快速排序(用的名字排序)
下面是测试函数:
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<stdio.h>
#include<string.h>
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);//查找联系人