番外篇之通讯录

前言:用到的知识点有枚举、结构体、数组,快速排序(用的名字排序)

下面是测试函数:

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);//查找联系人

猜你喜欢

转载自blog.csdn.net/2301_79811170/article/details/134635170