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

C語(yǔ)言實(shí)現(xiàn)通訊錄功能的流程與代碼

 更新時(shí)間:2022年06月18日 09:54:33   作者:烤雞肉玉米煎餅  
通訊錄是一個(gè)可以記錄親人、好友信息的工具,這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)通訊錄管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

用C語(yǔ)言制作一個(gè)擁有添加,刪除,查找,修改,排序,清空,打印功能的通訊錄

用分模塊的方法來(lái)實(shí)現(xiàn)這個(gè)通訊錄,函數(shù)的聲明,類型的聲明放在一個(gè).h文件中,函數(shù)的實(shí)現(xiàn)放在一個(gè).c文件中,在主文件中來(lái)調(diào)用函數(shù)。

首先創(chuàng)建一個(gè)test.c文件用來(lái)測(cè)試并且實(shí)現(xiàn)通訊錄的功能

通訊錄需要顯示一個(gè)菜單來(lái)讓用戶具體選擇哪個(gè)功能,那么在test.c文件中就需要打印出來(lái)一個(gè)菜單,如下代碼:

#include <stdio.h>
void menu()
{
	printf("***********************************\n");
	printf("******  1.add      2.del     ******\n");
	printf("******  3.search   4.modify  ******\n");
	printf("******  5.sort     6.empty   ******\n");
	printf("******  7.print    0.exit    ******\n");
	printf("***********************************\n");
}
int main()
{
	//通訊錄:1.add 2.del 3.search 4,modify 5.sort 6.empty 7.print 0.exit
	do
	{
		menu();
	} while (0);
	return 0;
}

接著就要讓用戶選擇輸入某個(gè)數(shù)組來(lái)使用通訊錄的功能,這時(shí)就可以用一個(gè)switch開(kāi)關(guān)來(lái)實(shí)現(xiàn)了,如下代碼:

	int input = 0;
	do
	{
		menu();
		printf("請(qǐng)選擇功能>:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			break;
		case 2:
			break;
		case 3:
			break;
		case 4:
			break;
		case 5:
			break;
		case 6:
			break;
		case 7:
			break;
		case 0:
			break;
		default:
			printf("請(qǐng)重新輸入\n");
			break;
		}
	} while (input);

在while循環(huán)的條件判斷部分直接寫(xiě)input,這樣選擇輸入0的時(shí)候就直接跳出循環(huán)了,輸入其他數(shù)字可以繼續(xù)使用通訊錄的功能。

case后面跟著的都是數(shù)字,有時(shí)候調(diào)試代碼的時(shí)候比較容易忘記這個(gè)數(shù)字表示的是什么意思,所以這個(gè)時(shí)候可以用創(chuàng)建一個(gè)枚舉類型來(lái)定義對(duì)應(yīng)的枚舉常量。

創(chuàng)建一個(gè)contact.h文件來(lái)放類型的定義,函數(shù)的聲明。

然后把枚舉類型在里面進(jìn)行聲明

enum input
{
	Exit,
	add,
	sub,
	search,
	modify,
	sort,
	empty,
	print
};

之后要在主文件中調(diào)用這個(gè)頭文件

#include "contact.h"

同時(shí)可以把#include <stdio.h>這些庫(kù)函數(shù)的引用都放到contact.h這個(gè)文件當(dāng)中,這樣要引用新的庫(kù)函數(shù)時(shí)只需要在contact.h這個(gè)文件中添加就可以了。

這樣switch開(kāi)關(guān)中的代碼就可以改成這樣了:

		switch (input)
		{
		case add:
			break;
		case sub:
			break;
		case search:
			break;
		case modify:
			break;
		case sort:
			break;
		case empty:
			break;
		case print:
			break;
		case Exit:
			break;
		}

然后開(kāi)始用函數(shù)去實(shí)現(xiàn)每一個(gè)函數(shù)的功能,首先是添加功能,在添加之前,還得需要一個(gè)空的通訊錄,來(lái)存放添加進(jìn)去的通訊人的數(shù)據(jù),而通訊人的數(shù)據(jù)有姓名,年齡,性別,電話號(hào)碼,地址這些數(shù)據(jù),都是一些不同類型的值,這時(shí)可以聲明一個(gè)結(jié)構(gòu)體類型來(lái)包含這些成員

好,切到contact.h文件來(lái)聲明一個(gè)結(jié)構(gòu)體類型:

typedef struct People
{
	char name[20];
	int age;
	char sex[5];
	char phone[20];
	char address[30];
} People;

同時(shí)還對(duì)這個(gè)類型重命名了一下,方便后續(xù)使用這個(gè)結(jié)構(gòu)體類型,這是需要考慮到通訊錄存放數(shù)據(jù)多少的問(wèn)題,如果address里面存放的內(nèi)容放不下了,這是就需要對(duì)數(shù)組的大小進(jìn)行更改,那這時(shí)就要先找到這個(gè)結(jié)構(gòu)體類型才能更改了,如果代碼寫(xiě)的比較多的話就會(huì)比較亂,所以可以用#define定義的標(biāo)識(shí)符常量來(lái)定義這些值,以后要改的話就只需要找到#define就可以了

如下代碼:

#define NameMax 20
#define SexMax 5
#define PhoneMax 20
#define AddressMax 30
typedef struct People
{
	char name[NameMax];
	int age;
	char sex[SexMax];
	char phone[PhoneMax];
	char address[AddressMax];
} People;

因?yàn)檫@里是不同類型的值的定義,所以用#define來(lái)定義而不用枚舉類型來(lái)定義,因?yàn)槊杜e類型是用來(lái)列舉相同類型的值的,比如前面的通訊錄功能都是屬于通訊錄的功能一類的值

下一步,通訊錄不只存放一個(gè)人的數(shù)據(jù),所以需要用這個(gè)結(jié)構(gòu)體類型來(lái)創(chuàng)建一個(gè)數(shù)組,假設(shè)這個(gè)通訊錄可以存放1000個(gè)人的數(shù)據(jù),同時(shí)還能記錄其中已存放了多少個(gè)人

那么可以在主函數(shù)中這么寫(xiě):

int main()
{
	//通訊錄:1.add 2.del 3.search 4,modify 5.sort 6.empty 7.print 0.exit
	People contact[1000];
	int num;

對(duì)于這個(gè)通訊錄和這個(gè)通訊人的數(shù)量,這兩個(gè)變量可以兩者之間是由聯(lián)系的,那么此時(shí)就可以再聲明一個(gè)結(jié)構(gòu)體類型來(lái)包含這兩個(gè)成員。

切到contact.h文件:

typedef struct Contact
{
	People people[1000];
	int num;
} Contact;

聲明好這個(gè)通訊錄類型之后,需要在主文件中用這個(gè)類型創(chuàng)建一個(gè)變量,同時(shí)對(duì)變量的內(nèi)容進(jìn)行初始化

int main()
{
	//通訊錄:1.add 2.del 3.search 4,modify 5.sort 6.empty 7.print 0.exit
	Contact contact;
	InitialContact(&contact);

切到contact.h文件聲明函數(shù):

//函數(shù)的聲明
 
//通訊錄初始化
void InitialContact(Contact* pc);

此時(shí)創(chuàng)建一個(gè)contact.c文件來(lái)實(shí)現(xiàn)函數(shù)的內(nèi)容:

切到contact.c文件:

#include "contact.h"
void InitialContact(Contact* pc)
{
	memset(pc, 0, sizeof(*pc));
}

要記得引這個(gè)contact.h頭文件

在對(duì)通訊錄的內(nèi)容進(jìn)行完初始化之后,可以開(kāi)始往里面添加通訊人的信息了,再聲明一個(gè)函數(shù):

test.c:

		case add:
			printf("添加通訊人\n");
			AddPeople(&contact);
			break;

contact.h:

//添加通訊人
void AddPeople(Contact* pc);

contact.c:

void AddPeople(Contact* pc)
{
	if (pc->num == 1000)
	{
		printf("通訊錄已滿\n");
		return;
	}
	printf("請(qǐng)輸入姓名>:");
	scanf("%s", pc->people[pc->num].name);
	printf("請(qǐng)輸入年齡>:");
	scanf("%d", &pc->people[pc->num].age);
	printf("請(qǐng)輸入性別>:");
	scanf("%s", pc->people[pc->num].sex);
	printf("請(qǐng)輸入電話>:");
	scanf("%s", pc->people[pc->num].phone);
	printf("請(qǐng)輸入地址>:");
	scanf("%s", pc->people[pc->num].address);
	pc->num++;
}

輸入完成之后,要記得讓通訊人數(shù)量+1

接下來(lái)可以嘗試顯示一下通訊錄中的通訊人信息了

contact.h:

//顯示通訊人信息
void PrintContact(const Contact* pc);

contact.c:

void PrintContact(const Contact* pc)
{
	printf("%-20s %-20s %-20s %-20s %-20s\n", "姓名", "年齡", "性別", "電話", "地址");
	int i = 0;
	for (i = 0; i < pc->num; i++)
	{
		printf("%-20s %-20d %-20s %-20s %-20s\n", pc->people[i].name, pc->people[i].age, pc->people[i].sex, pc->people[i].phone, pc->people[i].address);
	}
}

在前面打印個(gè)通訊人列表修飾一下

test.c:

		case print:
			printf("顯示通訊人信息\n");
			PrintContact(&contact);
			break;

接下來(lái),開(kāi)始實(shí)現(xiàn)通訊錄的刪除功能:

可以通過(guò)讓用戶輸入某個(gè)人的名字來(lái)刪除這個(gè)人在通訊錄中的信息,刪除功能的實(shí)現(xiàn)分為兩步,第一步,是需要找到這個(gè)人,第二步,刪除這個(gè)人在通訊錄中的信息

contact.h:

//刪除通訊人信息
void SubPeople(Contact* pc);

contact.c:

int FindByName(Contact* pc, const char* name)
{
	//遍歷每一個(gè)contact結(jié)構(gòu)體中people數(shù)組成員中的已存放數(shù)據(jù)的每一個(gè)結(jié)構(gòu)體
	int i = 0;
	for (i = 0; i < sizeof(pc->num); i++)
	{
		if (strcmp(pc->people[i].name, name) == 0)
		{
			return i;//找到了返回對(duì)應(yīng)結(jié)構(gòu)體的下標(biāo)
		}
	}
	return -1;//找不到就返回-1
}
void SubPeople(Contact* pc)
{
	if (pc->num == 0)//先判斷通訊錄中有無(wú)存儲(chǔ)信息
	{
		printf("通訊錄已清空\(chéng)n");
		return;
	}
	//1.找到
	printf("請(qǐng)輸入要?jiǎng)h除的人的姓名;>");
	char name[NameMax];
	scanf("%s", name);
	int ret = FindByName(pc, name);//用以接收放回的數(shù)組下標(biāo)
	if (ret == -1)
	{
		printf("找不到要?jiǎng)h除的人\n");
		return;//讓函數(shù)直接返回
	}
	//2.刪除
	//從找到的那個(gè)下標(biāo)位置開(kāi)始,后面的數(shù)組元素(通訊人結(jié)構(gòu)體)依次往前賦值
	int j = 0;
	for (j = ret; j < pc->num - 1; j++)
	{
		pc->people[j] = pc->people[j + 1];
	}
	printf("刪除成功\n");
	pc->num--;//通訊人數(shù)量-1
}

test.c:

		case sub:
			SubPeople(&contact);
			break;

每完成一個(gè)功能,都要去嘗試運(yùn)行一下,看有沒(méi)有bug,否則最后才去找bug可能會(huì)比較麻煩。

在刪除功能中,用到了一個(gè)自己寫(xiě)的FindByName函數(shù),然后在接下來(lái)的通訊錄查找功能實(shí)現(xiàn)中,同樣也要依賴這個(gè)函數(shù),不僅如此,在通訊錄修改功能中,也要用到這個(gè)函數(shù),而這個(gè)函數(shù)的實(shí)現(xiàn)是為了刪除、查找和修改功能而聲明的,所以可以不用寫(xiě)在contact.h頭文件中進(jìn)行聲明。

下面,來(lái)開(kāi)始實(shí)現(xiàn)查找功能:

contact.h:

//查找通訊人
void SearchPeople(const Contact* pc);

contact.c:

void SearchPeople(const Contact* pc)
{
	//查找
	printf("請(qǐng)輸入要查找的人的姓名;>");
	char name[NameMax];
	scanf("%s", name);
	int ret = FindByName(pc, name);//用以接收放回的數(shù)組下標(biāo)
	if (ret == -1)
	{
		printf("找不到要查找的人\n");
		return;//讓函數(shù)直接返回
	}
	//顯示
	printf("%-20s %-20s %-20s %-20s %-20s\n", "姓名", "年齡", "性別", "電話", "地址");
	printf("%-20s %-20d %-20s %-20s %-20s\n", pc->people[ret].name, pc->people[ret].age, pc->people[ret].sex, pc->people[ret].phone, pc->people[ret].address);
}

test.c:

		case search:
			SearchPeople(&contact);
			break;

查找功能已經(jīng)實(shí)現(xiàn)了,接下來(lái)就要實(shí)現(xiàn)修改功能了,先通過(guò)通訊人的姓名找到需要修改的結(jié)構(gòu)體對(duì)應(yīng)的下標(biāo),然后重新對(duì)這個(gè)結(jié)構(gòu)體進(jìn)行賦值就可以了

contact.h:

//修改通訊人信息
void ModifyPeople(Contact* pc);

contact.c:

void ModifyPeople(Contact* pc)
{
	//查找
	printf("請(qǐng)輸入要修改的人的姓名;>");
	char name[NameMax];
	scanf("%s", name);
	int ret = FindByName(pc, name);//用以接收放回的數(shù)組下標(biāo)
	if (ret == -1)
	{
		printf("找不到要修改的人\n");
		return;//讓函數(shù)直接返回
	}
	//修改
	printf("請(qǐng)輸入要修改的姓名>:");
	scanf("%s", pc->people[ret].name);
	printf("請(qǐng)輸入要修改的年齡>:");
	scanf("%d", &pc->people[ret].age);
	printf("請(qǐng)輸入要修改的性別>:");
	scanf("%s", pc->people[ret].sex);
	printf("請(qǐng)輸入要修改的電話>:");
	scanf("%s", pc->people[ret].phone);
	printf("請(qǐng)輸入要修改的地址>:");
	scanf("%s", pc->people[ret].address);
}

test.c:

		case modify:
			ModifyPeople(&contact);
			break;

接下來(lái)可以開(kāi)始實(shí)習(xí)通訊錄的排序功能了,這里就按照年齡來(lái)進(jìn)行一個(gè)排序,用到qsort這個(gè)函數(shù),其中cmp函數(shù)需要自己去寫(xiě)

contact.h:

//排序
void SortByAge(Contact* pc);

contact.c:

int cmp(const void* e1, const void* e2)
{
	Contact* p1 = (Contact*)e1;
	Contact* p2 = (Contact*)e2;
	if (p1->people[0].age > p2->people[1].age)
	{
		return 1;
	}
	else if (p1->people[0].age < p2->people[1].age)
	{
		return -1;
	}
	else
	{
		return 0;
	}
}
void SortByAge(Contact* pc)
{
	if (pc->num == 0)
	{
		printf("通訊錄已清空\(chéng)n");
		return;
	}
	int num = pc->num;
	int width = sizeof(pc->people[0]);
	qsort(pc->people, num, width, cmp);
}

test.c:

		case sort:
			printf("按照年齡排序\n");
			SortByAge(&contact);
			PrintContact(&contact);
			break;

到這里通訊錄的功能就只剩下清空了,可以用到一開(kāi)始的初始化函數(shù)InitialContact

test.c:

		case empty:
			printf("清空通訊錄\n");
			InitialContact(&contact);
			break;

現(xiàn)在通訊錄的功能已經(jīng)全部實(shí)現(xiàn)了

可是這個(gè)通訊錄的功能還是有點(diǎn)不太好,就是通訊錄默認(rèn)的大小就是存放1000個(gè)人的數(shù)據(jù),那么能不能創(chuàng)建一個(gè)可以隨著添加人數(shù)的增加而變大的通訊錄呢?鑒于最近學(xué)習(xí)了動(dòng)態(tài)內(nèi)存管理,所以對(duì)通訊錄的功能做出了一點(diǎn)改進(jìn)

對(duì)結(jié)構(gòu)體類型的修改:

contact.h

typedef struct Contact
{
	People* people;
	int num;
	int capacity;//通訊錄的容量
} Contact;

contact.c:

對(duì)InitialContact函數(shù)的修改:

void InitialContact(Contact* pc)
{
	pc->people = (People*)calloc(3, sizeof(People));
	if (pc->people == NULL)
	{
		perror("calloc");
		return;
	}
	pc->num = 0;
	pc->capacity = 3;
}

對(duì)AddPeople函數(shù)的修改:

void AddPeople(Contact* pc)
{
	if (pc->num == pc->capacity)
	{
		pc->people = realloc(pc->people, (pc->capacity + 2) * sizeof(People));
		if (pc->people == NULL)
		{
			perror("realloc");
			return;
		}
		pc->capacity += 2;
	}
	printf("請(qǐng)輸入姓名>:");
	scanf("%s", pc->people[pc->num].name);
	printf("請(qǐng)輸入年齡>:");
	scanf("%d", &pc->people[pc->num].age);
	printf("請(qǐng)輸入性別>:");
	scanf("%s", pc->people[pc->num].sex);
	printf("請(qǐng)輸入電話>:");
	scanf("%s", pc->people[pc->num].phone);
	printf("請(qǐng)輸入地址>:");
	scanf("%s", pc->people[pc->num].address);
	pc->num++;
}

對(duì)排序函數(shù)中cmp函數(shù)的修改:

int cmp(const void* e1, const void* e2)
{
	People* p1 = (People*)e1;
	People* p2 = (People*)e2;
	if (p1->age > p2->age)
	{
		return 1;
	}
	else if (p1->age < p2->age)
	{
		return -1;
	}
	else
	{
		return 0;
	}
}

test.c:

部分修改:

		case empty:
			printf("清空通訊錄\n");
			FreeContact(&contact);
			break;
		case Exit:
			FreeContact(&contact);
			break;

如下是完整的代碼:

contact.h:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
//類型的聲明
#define NameMax 20
#define SexMax 5
#define PhoneMax 20
#define AddressMax 30
enum input
{
	Exit,
	add,
	sub,
	search,
	modify,
	sort,
	empty,
	print
};
typedef struct People
{
	char name[NameMax];
	int age;
	char sex[SexMax];
	char phone[PhoneMax];
	char address[AddressMax];
} People;
typedef struct Contact
{
	People* people;
	int num;
	int capacity;//通訊錄的容量
} Contact;
//函數(shù)的聲明
//通訊錄初始化
void InitialContact(Contact* pc);
//添加通訊人
void AddPeople(Contact* pc);
//顯示通訊人信息
void PrintContact(const Contact* pc);
//刪除通訊人信息
void SubPeople(Contact* pc);
//查找通訊人
void SearchPeople(const Contact* pc);
//修改通訊人信息
void ModifyPeople(Contact* pc);
//排序
void SortByAge(Contact* pc);
//銷毀通訊錄
void FreeContact(Contact* pc);

contact.c:

#include "contact.h"
void InitialContact(Contact* pc)
{
	pc->people = (People*)calloc(3, sizeof(People));
	if (pc->people == NULL)
	{
		perror("calloc");
		return;
	}
	pc->num = 0;
	pc->capacity = 3;
}
void AddPeople(Contact* pc)
{
	if (pc->num == pc->capacity)
	{
		pc->people = realloc(pc->people, (pc->capacity + 2) * sizeof(People));
		if (pc->people == NULL)
		{
			perror("realloc");
			return;
		}
		pc->capacity += 2;
	}
	printf("請(qǐng)輸入姓名>:");
	scanf("%s", pc->people[pc->num].name);
	printf("請(qǐng)輸入年齡>:");
	scanf("%d", &pc->people[pc->num].age);
	printf("請(qǐng)輸入性別>:");
	scanf("%s", pc->people[pc->num].sex);
	printf("請(qǐng)輸入電話>:");
	scanf("%s", pc->people[pc->num].phone);
	printf("請(qǐng)輸入地址>:");
	scanf("%s", pc->people[pc->num].address);
	pc->num++;
}
void PrintContact(const Contact* pc)
{
	printf("%-20s %-20s %-20s %-20s %-20s\n", "姓名", "年齡", "性別", "電話", "地址");
	int i = 0;
	for (i = 0; i < pc->num; i++)
	{
		printf("%-20s %-20d %-20s %-20s %-20s\n", pc->people[i].name, pc->people[i].age, pc->people[i].sex, pc->people[i].phone, pc->people[i].address);
	}
}
int FindByName(Contact* pc, const char* name)
{
	//遍歷每一個(gè)contact結(jié)構(gòu)體中people數(shù)組成員中的已存放數(shù)據(jù)的每一個(gè)結(jié)構(gòu)體
	int i = 0;
	for (i = 0; i < sizeof(pc->num); i++)
	{
		if (strcmp(pc->people[i].name, name) == 0)
		{
			return i;//找到了返回對(duì)應(yīng)結(jié)構(gòu)體的下標(biāo)
		}
	}
	return -1;//找不到就返回-1
}
void SubPeople(Contact* pc)
{
	if (pc->num == 0)//先判斷通訊錄中有無(wú)存儲(chǔ)信息
	{
		printf("通訊錄已清空\(chéng)n");
		return;
	}
	//1.找到
	printf("請(qǐng)輸入要?jiǎng)h除的人的姓名;>");
	char name[NameMax];
	scanf("%s", name);
	int ret = FindByName(pc, name);//用以接收放回的數(shù)組下標(biāo)
	if (ret == -1)
	{
		printf("找不到要?jiǎng)h除的人\n");
		return;//讓函數(shù)直接返回
	}
	//2.刪除
	//從找到的那個(gè)下標(biāo)位置開(kāi)始,后面的數(shù)組元素(通訊人結(jié)構(gòu)體)依次往前賦值
	int j = 0;
	for (j = ret; j < pc->num - 1; j++)
	{
		pc->people[j] = pc->people[j + 1];
	}
	printf("刪除成功\n");
	pc->num--;//通訊人數(shù)量-1
}
void SearchPeople(const Contact* pc)
{
	//查找
	printf("請(qǐng)輸入要查找的人的姓名;>");
	char name[NameMax];
	scanf("%s", name);
	int ret = FindByName(pc, name);//用以接收放回的數(shù)組下標(biāo)
	if (ret == -1)
	{
		printf("找不到要查找的人\n");
		return;//讓函數(shù)直接返回
	}
	//顯示
	printf("%-20s %-20s %-20s %-20s %-20s\n", "姓名", "年齡", "性別", "電話", "地址");
	printf("%-20s %-20d %-20s %-20s %-20s\n", pc->people[ret].name, pc->people[ret].age, pc->people[ret].sex, pc->people[ret].phone, pc->people[ret].address);
}
void ModifyPeople(Contact* pc)
{
	//查找
	printf("請(qǐng)輸入要修改的人的姓名;>");
	char name[NameMax];
	scanf("%s", name);
	int ret = FindByName(pc, name);//用以接收放回的數(shù)組下標(biāo)
	if (ret == -1)
	{
		printf("找不到要修改的人\n");
		return;//讓函數(shù)直接返回
	}
	//修改
	printf("請(qǐng)輸入要修改的姓名>:");
	scanf("%s", pc->people[ret].name);
	printf("請(qǐng)輸入要修改的年齡>:");
	scanf("%d", &pc->people[ret].age);
	printf("請(qǐng)輸入要修改的性別>:");
	scanf("%s", pc->people[ret].sex);
	printf("請(qǐng)輸入要修改的電話>:");
	scanf("%s", pc->people[ret].phone);
	printf("請(qǐng)輸入要修改的地址>:");
	scanf("%s", pc->people[ret].address);
}
int cmp(const void* e1, const void* e2)
{
	People* p1 = (People*)e1;
	People* p2 = (People*)e2;
	if (p1->age > p2->age)
	{
		return 1;
	}
	else if (p1->age < p2->age)
	{
		return -1;
	}
	else
	{
		return 0;
	}
}
void SortByAge(Contact* pc)
{
	if (pc->num == 0)
	{
		printf("通訊錄已清空\(chéng)n");
		return;
	}
	int num = pc->num;
	int width = sizeof(People);
	qsort(pc->people, num, width, cmp);
}
void FreeContact(Contact* pc)
{
	free(pc->people);
	pc->people = NULL;
	pc->num = 0;
	pc->capacity = 0;
}

test.c:

#include "contact.h"
void menu()
{
	printf("***********************************\n");
	printf("******  1.add      2.del     ******\n");
	printf("******  3.search   4.modify  ******\n");
	printf("******  5.sort     6.empty   ******\n");
	printf("******  7.print    0.exit    ******\n");
	printf("***********************************\n");
}
int main()
{
	//通訊錄:1.add 2.del 3.search 4,modify 5.sort 6.empty 7.print 0.exit
	//創(chuàng)建通訊錄
	Contact contact;
	//初始化通訊錄
	InitialContact(&contact);
	int input = 0;
	do
	{
		menu();
		printf("請(qǐng)選擇功能>:");
		scanf("%d", &input);
		switch (input)
		{
		case add:
			printf("添加通訊人\n");
			AddPeople(&contact);
			break;
		case sub:
			SubPeople(&contact);
			break;
		case search:
			SearchPeople(&contact);
			break;
		case modify:
			ModifyPeople(&contact);
			break;
		case sort:
			printf("按照年齡排序\n");
			SortByAge(&contact);
			PrintContact(&contact);
			break;
		case empty:
			printf("清空通訊錄\n");
			FreeContact(&contact);
			break;
		case print:
			printf("顯示通訊人信息\n");
			PrintContact(&contact);
			break;
		case Exit:
			FreeContact(&contact);
			break;
		default:
			printf("請(qǐng)重新輸入\n");
			break;
		}
	} while (input);
	return 0;
}

到此這篇關(guān)于C語(yǔ)言實(shí)現(xiàn)通訊錄功能的流程與代碼的文章就介紹到這了,更多相關(guān)C語(yǔ)言通訊錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)猜數(shù)字小游戲

    C++實(shí)現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • c++中的static修飾符示例詳解

    c++中的static修飾符示例詳解

    在c++中,靜態(tài)成員是屬于整個(gè)類而不是某個(gè)對(duì)象,靜態(tài)成員變量只存儲(chǔ)一份供所有對(duì)象共用,下面這篇文章主要給大家介紹了關(guān)于c++中static修飾符的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-10-10
  • C語(yǔ)言之實(shí)現(xiàn)字符串小寫(xiě)變大寫(xiě)的實(shí)例

    C語(yǔ)言之實(shí)現(xiàn)字符串小寫(xiě)變大寫(xiě)的實(shí)例

    這篇文章主要介紹了C語(yǔ)言之實(shí)現(xiàn)字符串小寫(xiě)變大寫(xiě)的實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 基于C語(yǔ)言char與unsigned char的區(qū)別介紹

    基于C語(yǔ)言char與unsigned char的區(qū)別介紹

    本篇文章小編為大家介紹,基于C語(yǔ)言char與unsigned char的區(qū)別介紹。需要的朋友參考下
    2013-04-04
  • C++簡(jiǎn)單輸出鉆石菱形圖效果

    C++簡(jiǎn)單輸出鉆石菱形圖效果

    這篇文章主要介紹了C++簡(jiǎn)單輸出鉆石菱形圖效果,涉及C++簡(jiǎn)單的數(shù)組操作與圖形打印技巧,需要的朋友可以參考下
    2016-05-05
  • C語(yǔ)言中數(shù)組的使用詳解

    C語(yǔ)言中數(shù)組的使用詳解

    這篇文章主要為大家介紹了C語(yǔ)言中數(shù)組的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • C++?超詳細(xì)示例講解list的使用

    C++?超詳細(xì)示例講解list的使用

    list是一種序列式容器。list容器完成的功能實(shí)際上和數(shù)據(jù)結(jié)構(gòu)中的雙向鏈表是極其相似的,list中的數(shù)據(jù)元素是通過(guò)鏈表指針串連成邏輯意義上的線性表,也就是list也具有鏈表的主要優(yōu)點(diǎn),即:在鏈表的任一位置進(jìn)行元素的插入、刪除操作都是快速的
    2022-07-07
  • C語(yǔ)言之函數(shù)遞歸的實(shí)現(xiàn)

    C語(yǔ)言之函數(shù)遞歸的實(shí)現(xiàn)

    本文主要介紹了C語(yǔ)言之函數(shù)遞歸的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C++應(yīng)用Eigen庫(kù)對(duì)應(yīng)實(shí)現(xiàn)matlab中部分函數(shù)問(wèn)題

    C++應(yīng)用Eigen庫(kù)對(duì)應(yīng)實(shí)現(xiàn)matlab中部分函數(shù)問(wèn)題

    這篇文章主要介紹了C++應(yīng)用Eigen庫(kù)對(duì)應(yīng)實(shí)現(xiàn)matlab中部分函數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Qt如何通過(guò)pos()獲取坐標(biāo)信息

    Qt如何通過(guò)pos()獲取坐標(biāo)信息

    這篇文章主要給大家介紹了關(guān)于Qt如何通過(guò)pos()獲取坐標(biāo)信息的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用qt具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01

最新評(píng)論