最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

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

1,頭文件的包含

需要用到的頭文件有以下幾個(gè)

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

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

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

//創(chuàng)建每個(gè)聯(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ù)兩個(gè)變量放在一個(gè)結(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)建一個(gè)剛剛設(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,自動(dòng)打印菜單
				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)錯(cuò),顯示錯(cuò)誤位置
		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多功能(刪除,查找,修改,置頂)都需要用到查找,于是寫出一個(gè)公用函數(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)系人

為通訊錄添加一個(gè)聯(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("請輸入您要?jiǎng)h除的聯(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)系人信息格式里面多加幾個(gè)變量即可,只是在打印的時(shí)候需要多加注意一些相悖的功能,例如進(jìn)入黑名單后應(yīng)自動(dòng)取消置頂、收藏等。且打印時(shí)不再打印黑名單內(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)建每個(gè)聯(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,自動(dòng)打印菜單
				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)錯(cuò),顯示錯(cuò)誤位置
		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("請輸入您要?jiǎng)h除的聯(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語言多功能動(dòng)態(tài)通訊錄實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于C語言多功能動(dòng)態(tài)通訊錄的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C/C++宏替換實(shí)現(xiàn)詳解

    C/C++宏替換實(shí)現(xiàn)詳解

    這篇文章主要介紹了C/C++宏替換實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • C++設(shè)計(jì)模式中的橋模式你了解嗎

    C++設(shè)計(jì)模式中的橋模式你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式中的橋模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++求四個(gè)正整數(shù)最大公約數(shù)的方法

    C++求四個(gè)正整數(shù)最大公約數(shù)的方法

    這篇文章主要介紹了C++求四個(gè)正整數(shù)最大公約數(shù)的方法,涉及C++求余算法的運(yùn)用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-05-05
  • C語言制作表白神器的示例代碼

    C語言制作表白神器的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C語言制作一個(gè)簡單的表白神器,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2023-03-03
  • 淺析C語言中sscanf 的用法

    淺析C語言中sscanf 的用法

    以下是對C語言中sscanf函數(shù)的使用方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • C語言非遞歸后序遍歷二叉樹

    C語言非遞歸后序遍歷二叉樹

    這篇文章主要為大家詳細(xì)介紹了C語言非遞歸后序遍歷二叉樹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 從string類的實(shí)現(xiàn)看C++類的四大函數(shù)(面試常見)

    從string類的實(shí)現(xiàn)看C++類的四大函數(shù)(面試常見)

    C++類一般包括構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)四大函數(shù),非常常見,本文給大家介紹從string類的實(shí)現(xiàn)看C++類的四大函數(shù),一起看看吧
    2016-06-06
  • Qt基于QRencode實(shí)現(xiàn)生成二維碼

    Qt基于QRencode實(shí)現(xiàn)生成二維碼

    QRencode是一個(gè)開源的庫,專門用于生成二維碼(QR?Code),這篇文章主要為大家詳細(xì)介紹了Qt如何使用QRencode實(shí)現(xiàn)生成二維碼功能,需要的可以參考下
    2025-02-02
  • 關(guān)于C++的.cpp文件運(yùn)行全過程

    關(guān)于C++的.cpp文件運(yùn)行全過程

    這篇文章主要介紹了C++的.cpp文件運(yùn)行全過程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++之拼接長字符串問題

    C++之拼接長字符串問題

    這篇文章主要介紹了C++之拼接長字符串問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評論

河北区| 东辽县| 杨浦区| 隆德县| 海兴县| 四川省| 吉林市| 洞口县| 高台县| 浠水县| 大同市| 桦川县| 泗水县| 和硕县| 永安市| 屏南县| 华容县| 甘肃省| 双柏县| 莫力| 邵阳县| 黔江区| 彭州市| 马山县| 弥渡县| 遵义市| 雷波县| 淮滨县| 同仁县| 彭阳县| 个旧市| 彭州市| 张家港市| 社旗县| 奉贤区| 新民市| 隆德县| 湖南省| 沽源县| 乡城县| 滨海县|