欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言多功能動態(tài)通訊錄實(shí)現(xiàn)示例

 更新時間:2023年01月31日 10:55:19   作者:in緋  
這篇文章主要為大家介紹了C語言多功能動態(tài)通訊錄實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

本文將模塊化地介紹如何實(shí)現(xiàn)一個動態(tài)開辟空間的通訊錄,其有以下九個功能:

  • 打印主菜單
  • 添加聯(lián)系人
  • 刪除聯(lián)系人
  • 打印通訊錄
  • 查找聯(lián)系人
  • 修改聯(lián)系人
  • 置頂聯(lián)系人
  • 排序聯(lián)系人
  • 退出通訊錄

一、預(yù)設(shè)置

1,頭文件的包含

需要用到的頭文件有以下幾個

#include<stdio.h>//輸入輸出
#include<stdlib.h>//使用qsort
#include<string.h>//使用strcmp
#include<Windows.h>//使用systeam(“cls”)
#include<assert.h>//使用assert()

2,聯(lián)系人的信息格式

在此將每個聯(lián)系人的信息暫定為五項(xiàng),分別是姓名、性別、年齡、電話、住址,因?yàn)橐獮楹竺?strong>第八個功能——聯(lián)系人置頂做準(zhǔn)備,因此多加入一個int型變量,用于判斷該聯(lián)系人是否被置頂,像這樣:

//創(chuàng)建每個聯(lián)系人的信息格式
typedef struct
{
	char name[max_name];
	char sex[max_sex];
	int age;
	char tele[max_tele];
	char add[max_add];
	int first;//聯(lián)系人是否被置頂
}people;//聯(lián)系人類型

以上代碼中以max_開頭的數(shù)據(jù)將在稍后的宏定義中介紹。

3,通訊錄的信息格式

創(chuàng)建關(guān)于通訊錄的信息格式的結(jié)構(gòu)體是為了將當(dāng)前通訊錄人數(shù)通訊錄當(dāng)前可以容納的總?cè)藬?shù)兩個變量放在一個結(jié)構(gòu)體變量里面,便于以后的代碼傳參,像這樣:

//創(chuàng)建通訊錄格式
typedef struct
{
	people* peoples;//開辟空間后用來維護(hù)空間的指針
	int	sz;//當(dāng)前人數(shù)
	int all;//總?cè)菁{人數(shù)
}contact;通訊錄類型

4,通訊錄相關(guān)宏定義

為了便于日后修改,使用宏定義一些常量。

#define _CRT_SECURE_NO_WARNINGS 1//博主的環(huán)境是VS2019
#define init_num_people 10//通訊錄初始的人數(shù)
#define oncetime 5//通訊錄每次擴(kuò)容增加的人數(shù)
#define max_name 10
#define max_sex 4
#define max_tele 11
#define max_add 40

5,通訊錄功能枚舉

用可以看出含義的英文單詞縮寫來代替數(shù)字,可以方便我們寫代碼,像這樣:

enum MyEnum//對九種通訊錄功能進(jìn)行枚舉
{
	MENU = 1,//菜單
	ADD,//添加
	DEL,//刪除
	PRIN,//打印
	FIND,//查找
	CHANGE,//修改
	FIRST,//置頂
	SORT,//排序
	EXIT//退出
};

6,基本主函數(shù)

總的思路是創(chuàng)建一個剛剛設(shè)置的枚舉變量,讓用戶輸入數(shù)字代表其選擇的功能,利用分支語句進(jìn)入不同的函數(shù)。最后不要忘了釋放內(nèi)存哦。

int main()
{
	//創(chuàng)建通訊錄
	contact con;
	//初始化
	init_con(&con);
	enum MyEnum input = 0;
	do
	{
		menu();//打印菜單
		scanf("%d", &input);
			switch (input)
			{
			case MENU:
				system("cls");//清屏后break,自動打印菜單
				break;
			case ADD:
				add_people(&con);//增加聯(lián)系人
				break;
			case DEL:
				del_people(&con);//刪除聯(lián)系人
				break;
			case PRIN:
				PRIN_CON(&con);//打印通訊錄
				break;
			case FIND:
				find_people(&con);//查找聯(lián)系人
				break;
			case CHANGE:
				change_people(&con);//修改聯(lián)系人
				break;
			case FIRST:
				fir_people(&con);//設(shè)置置頂
				break;
			case SORT:
				sort_people(&con);//聯(lián)系人排序
				break;
			case EXIT:
				free(con.peoples);
				con.peoples = NULL;
				system("cls");
				printf("退出通訊錄!\n");
				break;
			}
	} while (input-EXIT);//只有選擇9才退出
	return 0;
}

二、功能函數(shù)實(shí)現(xiàn)

1,初始化函數(shù)

此函數(shù)中將為通訊錄開辟空間,對值進(jìn)行初始化。

//初始化
void init_con(contact* con)
{
	assert(con);
	con->peoples = (people*)malloc(init_num_people * sizeof(people));//為聯(lián)系人信息開辟空間
	if (con->peoples == NULL)
	{
		perror("warning::function::9");//開辟失敗報(bào)錯,顯示錯誤位置
		return 0;
	}
	memset(con->peoples, 0, init_num_people * sizeof(people));//把空間初始化為0
	con->sz = 0;//sz是通訊錄當(dāng)前人數(shù)
	con->all = init_num_people;//all是通訊錄當(dāng)前可以容納的總?cè)藬?shù)
}

2,查找函數(shù)

因?yàn)橥ㄓ嶄浻性S多功能(刪除,查找,修改,置頂)都需要用到查找,于是寫出一個公用函數(shù),用于通過姓名查找通訊錄中的聯(lián)系人,若找到則返回其下標(biāo),若找不到則返回sz。

//查找函數(shù),用于通過姓名查找通訊錄中的聯(lián)系人下標(biāo),若找到返回下標(biāo),若找不到返回sz
int find(contact* con,const char* name)
{
	assert(con);
	int i = 0;
	for (i = 0; i < con->sz; i++)
	{
		if (strcmp(name, con->peoples[i].name) == 0)
		{
			return i;
		}
	}
	return i;
}

3,打印菜單

打印菜單,讓用戶進(jìn)行選擇。

//打印菜單
void menu()
{
	printf("1,打印主菜單\n");
	printf("2,添加聯(lián)系人\n");
	printf("3,刪除聯(lián)系人\n");
	printf("4,打印通訊錄\n");
	printf("5,查找聯(lián)系人\n");
	printf("6,修改聯(lián)系人\n");
	printf("7,置頂聯(lián)系人\n");
	printf("8,聯(lián)系人排序\n");
	printf("9,退出通訊錄\n");
	printf("請選擇:");
}

4,增加聯(lián)系人

為通訊錄添加一個聯(lián)系人。

//增加聯(lián)系人
void add_people(contact* con)
{
	assert(con);
	system("cls");//為了美觀,清屏
	if (con->sz == con->all)
	{
		people* ptr = (people*)realloc(con->peoples, (con->all+oncetime)*sizeof(people));//增加一次擴(kuò)容的空間
		if (ptr == NULL)
		{
			perror("worning::function::40");
			return 0;
		}
		con->peoples = ptr;
		ptr = NULL;
		memset(con->peoples + con->sz, 0, oncetime * sizeof(people));//把空間初始化為0
		con->all++;
		printf("\n擴(kuò)容成功\n");
	}
	printf("請輸入姓名:");
	scanf("%s", con->peoples[con->sz].name);
	printf("請輸入性別:");
	scanf("%s", con->peoples[con->sz].sex);
	printf("請輸入年齡:");
	scanf("%d", &con->peoples[con->sz].age);
	printf("請輸入電話:");
	scanf("%s", con->peoples[con->sz].tele);
	printf("請輸入住址:");
	scanf("%s", con->peoples[con->sz].add);
	con->sz++;
	system("cls");
	printf("添加成功!\n");
}

5,刪除聯(lián)系人

利用查找函數(shù),找到后刪除,不要忘記將后面的聯(lián)系人信息向前移。

//刪除聯(lián)系人
void del_people(contact* con)
{
	assert(con);
	system("cls");
	if (con->sz == 0)
	{
		printf("您的通訊錄目前沒有聯(lián)系人\n");
		return;
	}
	printf("請輸入您要刪除的聯(lián)系人姓名:");
	char h[10];
	scanf("%s", h);
	int flag = find(con, h);
	if (flag == con->sz)
	{
		printf("您的通訊錄中沒有名為“%s”的聯(lián)系人\n", h);
		return;
	}
	memset(con->peoples + flag, 0, sizeof(people));
	int i = 0;
	for (i = flag; i < con->sz-1; i++)
	{
		people tmp = con->peoples[i];
		con->peoples[i] = con->peoples[i + 1];
		con->peoples[i + 1] = tmp;
	}
	con->sz--;
	system("cls");
	printf("刪除成功!\n");
}

6,查找聯(lián)系人

通訊錄人太多了怎么辦?沒關(guān)系,你可以使用查找,該函數(shù)后面的打印格式將與打印函數(shù)模塊相同。

//查找聯(lián)系人
void find_people(contact* con)
{
	system("cls");
	if (con->sz == 0)
	{
		printf("您的通訊錄目前沒有聯(lián)系人\n");
		return;
	}
	printf("請輸入您要查找的聯(lián)系人姓名:");
	char h[10];
	scanf("%s", h);
	int flag = find(con, h);
	if (flag == con->sz)
	{
		system("cls");
		printf("您的通訊錄中沒有名為“%s”的聯(lián)系人\n", h);
		return;
	}
	printf("********************************************\n");
	printf("姓名     性別    年齡  電話       住址\n");
	printf("%-10s%-8s%-6d%-11s%s\n", con->peoples[flag].name, con->peoples[flag].sex, con->peoples[flag].age,
		con->peoples[flag].tele, con->peoples[flag].add);
	printf("********************************************\n");
}

7,修改聯(lián)系人

老樣子,先查找,找到以后讓用戶再輸入一次。

//修改聯(lián)系人
void change_people(contact* con)
{
	system("cls");
	if (con->sz == 0)
	{
		printf("您的通訊錄目前沒有聯(lián)系人\n");
		return;
	}
	printf("請輸入您要修改的聯(lián)系人姓名:");
	char h[10];
	scanf("%s", h);
	int flag = find(con, h);
	if (flag == con->sz)
	{
		printf("您的通訊錄中沒有名為“%s”的聯(lián)系人", h);
		return;
	}
	printf("您想將姓名修改為:");
	scanf("%s", con->peoples[flag].name);
	printf("您想將性別修改為:");
	scanf("%s", con->peoples[flag].sex);
	printf("您想將年齡修改為:");
	scanf("%d", &con->peoples[flag].age);
	printf("您想將電話修改為:");
	scanf("%s", con->peoples[flag].tele);
	printf("您想將住址修改為:");
	scanf("%s", con->peoples[flag].add);
	printf("修改完成!\n");
}

8,設(shè)置置頂

將聯(lián)系人設(shè)為通訊錄的置頂,無論在任何的排序情況下,都會先打印置頂?shù)穆?lián)系人。當(dāng)然,你也可以取消置頂。

//設(shè)置置頂
void fir_people(contact* con)
{
	system("cls");
	if (con->sz == 0)
	{
		printf("您的通訊錄目前沒有聯(lián)系人\n");
		return;
	}
	printf("請輸入您要置頂或取消置頂?shù)穆?lián)系人姓名:");
	char h[10];
	scanf("%s", h);
	int flag = find(con, h);
	if (flag == con->sz)
	{
		printf("您的通訊錄中沒有名為“%s”的聯(lián)系人", h);
		return;
	}
	if (con->peoples[flag].first == 1)//成員變量first為1則已經(jīng)被置頂
	{
		con->peoples[flag].first = 0;
	}
	else if (con->peoples[flag].first == 0)//成員變量first為0則還沒被置頂
	{
		con->peoples[flag].first = 1;
	}
	printf("設(shè)置成功!\n");
}

9,聯(lián)系人排序

在此設(shè)置了三種排序方式,排序方法利用qsort。

1,性別(先女后男)

2,年齡(由小到大)

3,電話(由小到大)

//聯(lián)系人排序
int sex_cmp(const void* str1,const void* str2)//性別排序
{
	people* a = (people*)str1;
	people* b = (people*)str2;
	return -strcmp(a->sex, b->sex);
}
int age_cmp(const void* str1, const void* str2)//年齡排序
{
	people* a = (people*)str1;
	people* b = (people*)str2;
	return (a->age - b->age);
}
int tele_cmp(const void* str1, const void* str2)//電話排序
{
	people* a = (people*)str1;
	people* b = (people*)str2;
	return strcmp(a->tele, b->tele);
}
void sort_people(contact* con)
{
	system("cls");
	printf("請選擇排序標(biāo)準(zhǔn)\n");
	printf("1,性別\n");
	printf("2,年齡\n");
	printf("3,電話\n");
	printf("請選擇:");
	int n = 0;
	scanf("%d", &n);
	if(n==1)
		qsort(con->peoples, con->sz, sizeof(people), sex_cmp);
	else if(n==2)
		qsort(con->peoples, con->sz, sizeof(people), age_cmp);
	else if(n==3)
		qsort(con->peoples, con->sz, sizeof(people), tele_cmp);
	printf("排序成功!\n");
	PRIN_CON(con);
}

10,聯(lián)系人打印

打印所有的聯(lián)系人,因?yàn)橛兄庙敼δ艿拇嬖?,需要遍歷兩次,第一次打印被置頂?shù)穆?lián)系人,第二次打印沒有被置頂?shù)穆?lián)系人,像這樣:

//打印通訊錄
void PRIN_CON(contact* con)
{
	system("cls");
	if (con->sz == 0)
	{
		printf("您的通訊錄目前沒有聯(lián)系人\n");
		return;
	}
	printf("********************************************\n");
	printf("姓名     性別    年齡  電話        住址\n");
	int i = 0;
	for (i = 0; i < con->sz; i++)
	{
		if(con->peoples[i].first==1)
		printf("%-10s%-8s%-6d%-11s%s\n", con->peoples[i].name, con->peoples[i].sex, con->peoples[i].age, 
			con->peoples[i].tele, con->peoples[i].add);
	}
	for (i = 0; i < con->sz; i++)
	{
		if (con->peoples[i].first != 1)
			printf("%-10s%-8s%-6d%-11s%s\n", con->peoples[i].name, con->peoples[i].sex, con->peoples[i].age,
				con->peoples[i].tele, con->peoples[i].add);
	}
	printf("********************************************\n");
}

至于這打印格式,保持一致即可。

三、優(yōu)化思路

1,查找函數(shù)優(yōu)化

利用strstr實(shí)現(xiàn)對信息的檢索,就不必死板地搜索全名了,例如你可以搜索“張三”,以此檢索在姓名、地址、簡介等所有包括“張三”的信息并返回其聯(lián)系人的信息。

2,額外功能優(yōu)化

可以額外增加收藏夾,黑名單,群組等等功能,在聯(lián)系人信息格式里面多加幾個變量即可,只是在打印的時候需要多加注意一些相悖的功能,例如進(jìn)入黑名單后應(yīng)自動取消置頂、收藏等。且打印時不再打印黑名單內(nèi)的聯(lián)系人。

3,打印優(yōu)化

設(shè)置更多的打印方法,例如單獨(dú)打印黑名單,單獨(dú)打印置頂,單獨(dú)打印收藏夾等等。亦可以設(shè)置打印打印聯(lián)系人的某項(xiàng)信息,例如只打印姓名,只打印電話等等。

四、源代碼

下面放出源代碼,可以直接用哦

1,head.h

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<Windows.h>
#include<assert.h>
#define init_num_people 10//通訊錄初始的人數(shù)
#define oncetime 5//通訊錄每次擴(kuò)容增加的人數(shù)
#define max_name 10
#define max_sex 4
#define max_tele 11
#define max_add 40
enum MyEnum//對九種通訊錄功能進(jìn)行枚舉
{
	MENU = 1,
	ADD,
	DEL,
	PRIN,
	FIND,
	CHANGE,
	FIRST,
	SORT,
	EXIT
};
//創(chuàng)建每個聯(lián)系人的信息格式
typedef struct
{
	char name[max_name];
	char sex[max_sex];
	int age;
	char tele[max_tele];
	char add[max_add];
	int first;//聯(lián)系人是否被置頂
}people;
//創(chuàng)建通訊錄格式
typedef struct
{
	people* peoples;//用來維護(hù)聯(lián)系人信息的指針
	int	sz;//當(dāng)前人數(shù)
	int all;//總?cè)菁{人數(shù)
}contact;
//功能函數(shù)
void init_con(contact* con);//初始化
void menu();//打印菜單
void PRIN_CON(contact* con);//打印通訊錄
void find_people(contact* con);//查找聯(lián)系人
void change_people(contact* con);//修改聯(lián)系人
void fir_people(contact* con);//設(shè)置置頂
void sort_people(contact* con);//聯(lián)系人排序
//常用函數(shù)
int find(contact* con, const char* name);//查找函數(shù),參數(shù)2為需要查找的姓名,若找到返回下標(biāo),找不到返回sz

2,sour.c

#include"head.h"
int main()
{
	//創(chuàng)建通訊錄
	contact con;
	//初始化
	init_con(&con);
	enum MyEnum input = 0;
	do
	{
		//打印菜單
		menu();
		scanf("%d", &input);
			switch (input)
			{
			case MENU:
				system("cls");//清屏后break,自動打印菜單
				break;
			case ADD:
				add_people(&con);//增加聯(lián)系人
				break;
			case DEL:
				del_people(&con);//刪除聯(lián)系人
				break;
			case PRIN:
				PRIN_CON(&con);//打印通訊錄
				break;
			case FIND:
				find_people(&con);//查找聯(lián)系人
				break;
			case CHANGE:
				change_people(&con);//修改聯(lián)系人
				break;
			case FIRST:
				fir_people(&con);//設(shè)置置頂
				break;
			case SORT:
				sort_people(&con);//聯(lián)系人排序
				break;
			case EXIT:
				free(con.peoples);
				con.peoples = NULL;
				system("cls");
				printf("退出通訊錄!\n");
				break;
			}
	} while (input-EXIT);//只有選擇9才退出
	return 0;
}

3,function.c

#include"head.h"
//初始化
void init_con(contact* con)
{
	assert(con);
	con->peoples = (people*)malloc(init_num_people * sizeof(people));//為聯(lián)系人信息開辟空間
	if (con->peoples == NULL)
	{
		perror("warning::function::9");//開辟失敗報(bào)錯,顯示錯誤位置
		return 0;
	}
	memset(con->peoples, 0, init_num_people * sizeof(people));//把空間初始化為0
	con->sz = 0;
	con->all = init_num_people;
}
//打印菜單
void menu()
{
	printf("1,打印主菜單\n");
	printf("2,添加聯(lián)系人\n");
	printf("3,刪除聯(lián)系人\n");
	printf("4,打印通訊錄\n");
	printf("5,查找聯(lián)系人\n");
	printf("6,修改聯(lián)系人\n");
	printf("7,置頂聯(lián)系人\n");
	printf("8,聯(lián)系人排序\n");
	printf("9,退出通訊錄\n");
	printf("請選擇:");
}
//增加聯(lián)系人
void add_people(contact* con)
{
	assert(con);
	system("cls");//為了美觀,清屏
	if (con->sz == con->all)
	{
		people* ptr = (people*)realloc(con->peoples, (con->all+oncetime)*sizeof(people));//增加一次擴(kuò)容的空間
		if (ptr == NULL)
		{
			perror("worning::function::40");
			return 0;
		}
		con->peoples = ptr;
		ptr = NULL;
		memset(con->peoples + con->sz, 0, oncetime * sizeof(people));//把空間初始化為0
		con->all++;
		printf("\n擴(kuò)容成功\n");
	}
	printf("請輸入姓名:");
	scanf("%s", con->peoples[con->sz].name);
	printf("請輸入性別:");
	scanf("%s", con->peoples[con->sz].sex);
	printf("請輸入年齡:");
	scanf("%d", &con->peoples[con->sz].age);
	printf("請輸入電話:");
	scanf("%s", con->peoples[con->sz].tele);
	printf("請輸入住址:");
	scanf("%s", con->peoples[con->sz].add);
	con->sz++;
	system("cls");
	printf("添加成功!\n");
}
//查找函數(shù),用于通過姓名查找通訊錄中的聯(lián)系人下標(biāo),若找到返回下標(biāo),若找不到返回sz
int find(contact* con,const char* name)
{
	assert(con);
	int i = 0;
	for (i = 0; i < con->sz; i++)
	{
		if (strcmp(name, con->peoples[i].name) == 0)
		{
			return i;
		}
	}
	return i;
}
//刪除聯(lián)系人
void del_people(contact* con)
{
	assert(con);
	system("cls");
	if (con->sz == 0)
	{
		printf("您的通訊錄目前沒有聯(lián)系人\n");
		return;
	}
	printf("請輸入您要刪除的聯(lián)系人姓名:");
	char h[10];
	scanf("%s", h);
	int flag = find(con, h);
	if (flag == con->sz)
	{
		printf("您的通訊錄中沒有名為“%s”的聯(lián)系人\n", h);
		return;
	}
	memset(con->peoples + flag, 0, sizeof(people));
	int i = 0;
	for (i = flag; i < con->sz-1; i++)
	{
		people tmp = con->peoples[i];
		con->peoples[i] = con->peoples[i + 1];
		con->peoples[i + 1] = tmp;
	}
	con->sz--;
	system("cls");
	printf("刪除成功!\n");
}
//打印通訊錄
void PRIN_CON(contact* con)
{
	system("cls");
	if (con->sz == 0)
	{
		printf("您的通訊錄目前沒有聯(lián)系人\n");
		return;
	}
	printf("********************************************\n");
	printf("姓名     性別    年齡  電話        住址\n");
	int i = 0;
	for (i = 0; i < con->sz; i++)
	{
		if(con->peoples[i].first==1)
		printf("%-10s%-8s%-6d%-11s%s\n", con->peoples[i].name, con->peoples[i].sex, con->peoples[i].age, 
			con->peoples[i].tele, con->peoples[i].add);
	}
	for (i = 0; i < con->sz; i++)
	{
		if (con->peoples[i].first != 1)
			printf("%-10s%-8s%-6d%-11s%s\n", con->peoples[i].name, con->peoples[i].sex, con->peoples[i].age,
				con->peoples[i].tele, con->peoples[i].add);
	}
	printf("********************************************\n");
}
//查找聯(lián)系人
void find_people(contact* con)
{
	system("cls");
	if (con->sz == 0)
	{
		printf("您的通訊錄目前沒有聯(lián)系人\n");
		return;
	}
	printf("請輸入您要查找的聯(lián)系人姓名:");
	char h[10];
	scanf("%s", h);
	int flag = find(con, h);
	if (flag == con->sz)
	{
		system("cls");
		printf("您的通訊錄中沒有名為“%s”的聯(lián)系人\n", h);
		return;
	}
	printf("********************************************\n");
	printf("姓名     性別    年齡  電話        住址\n");
	printf("%-10s%-8s%-6d%-11s%s\n", con->peoples[flag].name, con->peoples[flag].sex, con->peoples[flag].age,
		con->peoples[flag].tele, con->peoples[flag].add);
	printf("********************************************\n");
}
//修改聯(lián)系人
void change_people(contact* con)
{
	system("cls");
	if (con->sz == 0)
	{
		printf("您的通訊錄目前沒有聯(lián)系人\n");
		return;
	}
	printf("請輸入您要修改的聯(lián)系人姓名:");
	char h[10];
	scanf("%s", h);
	int flag = find(con, h);
	if (flag == con->sz)
	{
		printf("您的通訊錄中沒有名為“%s”的聯(lián)系人", h);
		return;
	}
	printf("您想將姓名修改為:");
	scanf("%s", con->peoples[flag].name);
	printf("您想將性別修改為:");
	scanf("%s", con->peoples[flag].sex);
	printf("您想將年齡修改為:");
	scanf("%d", &con->peoples[flag].age);
	printf("您想將電話修改為:");
	scanf("%s", con->peoples[flag].tele);
	printf("您想將住址修改為:");
	scanf("%s", con->peoples[flag].add);
	printf("修改完成!\n");
}
//設(shè)置置頂
void fir_people(contact* con)
{
	system("cls");
	if (con->sz == 0)
	{
		printf("您的通訊錄目前沒有聯(lián)系人\n");
		return;
	}
	printf("請輸入您要置頂或取消置頂?shù)穆?lián)系人姓名:");
	char h[10];
	scanf("%s", h);
	int flag = find(con, h);
	if (flag == con->sz)
	{
		printf("您的通訊錄中沒有名為“%s”的聯(lián)系人", h);
		return;
	}
	if (con->peoples[flag].first == 1)
	{
		con->peoples[flag].first = 0;
	}
	else if (con->peoples[flag].first == 0)
	{
		con->peoples[flag].first = 1;
	}
	printf("設(shè)置成功!\n");
}
//聯(lián)系人排序
int sex_cmp(const void* str1,const void* str2)//性別排序
{
	people* a = (people*)str1;
	people* b = (people*)str2;
	return -strcmp(a->sex, b->sex);
}
int age_cmp(const void* str1, const void* str2)//年齡排序
{
	people* a = (people*)str1;
	people* b = (people*)str2;
	return (a->age - b->age);
}
int tele_cmp(const void* str1, const void* str2)//電話排序
{
	people* a = (people*)str1;
	people* b = (people*)str2;
	return strcmp(a->tele, b->tele);
}
void sort_people(contact* con)
{
	system("cls");
	printf("請選擇排序標(biāo)準(zhǔn)\n");
	printf("1,性別\n");
	printf("2,年齡\n");
	printf("3,電話\n");
	printf("請選擇:");
	int n = 0;
	scanf("%d", &n);
	if(n==1)
		qsort(con->peoples, con->sz, sizeof(people), sex_cmp);
	else if(n==2)
		qsort(con->peoples, con->sz, sizeof(people), age_cmp);
	else if(n==3)
		qsort(con->peoples, con->sz, sizeof(people), tele_cmp);
	printf("排序成功!\n");
	PRIN_CON(con);
}

以上就是C語言多功能動態(tài)通訊錄實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于C語言多功能動態(tài)通訊錄的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 給ActiveX簽名的實(shí)現(xiàn)方法詳解

    給ActiveX簽名的實(shí)現(xiàn)方法詳解

    本篇文章是對給ActiveX簽名的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++數(shù)據(jù)精度問題的解決方案(對浮點(diǎn)數(shù)保存指定位小數(shù))

    C++數(shù)據(jù)精度問題的解決方案(對浮點(diǎn)數(shù)保存指定位小數(shù))

    對浮點(diǎn)數(shù)保存指定位小數(shù),怎么解決這個問題呢?如果有小伙伴對C++數(shù)據(jù)精度問題的解決方案感興趣的朋友一起看看吧
    2017-08-08
  • c/c++靜態(tài)庫之間相互調(diào)用的實(shí)戰(zhàn)案例

    c/c++靜態(tài)庫之間相互調(diào)用的實(shí)戰(zhàn)案例

    C++調(diào)用C的函數(shù)比較簡單,直接使用extern "C" {}告訴編譯器用C的規(guī)則去編譯C代碼就可以了,下面這篇文章主要給大家介紹了關(guān)于c/c++靜態(tài)庫之間相互調(diào)用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • C語言實(shí)現(xiàn)一個簡單的掃雷游戲

    C語言實(shí)現(xiàn)一個簡單的掃雷游戲

    掃雷是電腦上很經(jīng)典的游戲,特意去網(wǎng)上玩了一會,幾次調(diào)試之后,發(fā)現(xiàn)這個比三子棋要復(fù)雜一些,尤其是空白展開算法上和堵截玩家有的一拼,與實(shí)際游戲差別較大,不能使用光標(biāo),下面來詳解每一步分析
    2021-10-10
  • C語言動態(tài)內(nèi)存管理的原理及實(shí)現(xiàn)方法

    C語言動態(tài)內(nèi)存管理的原理及實(shí)現(xiàn)方法

    C語言動態(tài)內(nèi)存管理的原理是通過 malloc() 函數(shù)申請一塊連續(xù)的內(nèi)存空間,并返回其地址,通過 free() 函數(shù)釋放該內(nèi)存空間。實(shí)現(xiàn)方法是通過在程序運(yùn)行時動態(tài)地管理內(nèi)存,即在需要內(nèi)存時申請,不需要時釋放,避免了靜態(tài)內(nèi)存分配的浪費(fèi)和不足
    2023-04-04
  • C語言算法學(xué)習(xí)之雙向鏈表詳解

    C語言算法學(xué)習(xí)之雙向鏈表詳解

    雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數(shù)據(jù)結(jié)點(diǎn)中都有兩個指針,分別指向直接后繼和直接前驅(qū)。本文主要介紹了C語言算法中雙向鏈表的實(shí)現(xiàn),需要的可以參考一下
    2022-05-05
  • C語言數(shù)據(jù)輸入與輸出實(shí)例詳解

    C語言數(shù)據(jù)輸入與輸出實(shí)例詳解

    這篇文章主要介紹了C語言數(shù)據(jù)輸入與輸出實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C語言字符函數(shù)與字符串函數(shù)詳解

    C語言字符函數(shù)與字符串函數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于C語言字符/字符串的相關(guān)函數(shù),文中通過示例代碼總結(jié)的非常詳細(xì),對大家學(xué)習(xí)或者使用C語言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • C語言中的while循環(huán)語句示例詳解

    C語言中的while循環(huán)語句示例詳解

    這篇文章主要介紹了C語言中的while循環(huán)語句,主要包括while循環(huán)的基本信息及常見問題,本文結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • c語言printf實(shí)現(xiàn)同一位置打印輸出的實(shí)例

    c語言printf實(shí)現(xiàn)同一位置打印輸出的實(shí)例

    下面小編就為大家?guī)硪黄猚語言printf實(shí)現(xiàn)同一位置打印輸出的實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論