国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】

這篇具有很好參考價(jià)值的文章主要介紹了學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

=========================================================================

相關(guān)代碼gitee自取:C語(yǔ)言學(xué)習(xí)日記: 加油努力 (gitee.com)

?=========================================================================

接上期

學(xué)C的第三十天【自定義類型:結(jié)構(gòu)體、枚舉、聯(lián)合】_高高的胖子的博客-CSDN博客

?=========================================================================

? ? ? ? ? ? ? ? ? ? ?

通訊錄需求:

? ? ? ? ? ? ?

實(shí)現(xiàn)一個(gè)通訊錄,

通訊錄中存放保存人的信息

名字年齡、性別、

電話、地址

? ? ? ? ? ? ?

????????通訊錄相關(guān)功能

  • 通訊錄中可以存放100個(gè)人的信息
  • 增加聯(lián)系人
  • 刪除指定聯(lián)系人
  • 修改指定聯(lián)系人
  • 查找指定聯(lián)系人
  • 顯示所有聯(lián)系人的信息
  • 排序功能

? ? ? ? ?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

? ? ? ? ? ? ?

多文件實(shí)現(xiàn)通訊錄

(1). contact.h文件 -- 相關(guān)函數(shù)和結(jié)構(gòu)體類型的聲明:

? ? ? ? ? ? ? ?

1 . 結(jié)構(gòu)體 struct PeoInfo -- 存放通訊錄聯(lián)系人的信息:

? ? ? ? ? ? ? ??

使用 typedef 重命名結(jié)構(gòu)體,

struct PeoInfo 重命名PeoInfo,

方便后續(xù)使用

? ? ? ? ? ? ??

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ??

? ? ? ? ? ? ??

2 .?結(jié)構(gòu)體 struct contact -- 通訊錄類型:

? ? ? ? ? ? ? ??

使用 typedef 重命名結(jié)構(gòu)體,?

? ? ? ? ? ? ? ? ? ? ?

創(chuàng)建通訊錄信息結(jié)構(gòu)體變量數(shù)組

? ? ? ? ? ? ? ? ? ??

創(chuàng)建一個(gè)變量來(lái)記錄當(dāng)前通訊錄data的人數(shù)

? ? ? ? ? ? ? ? ? ? ??

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ??

3 . 函數(shù) InitContact() 的聲明 -- 初始化通訊錄類型變量

? ? ? ? ? ? ? ??

參數(shù)接收 -- 通訊錄類型變量地址

返回類型 -- void

? ? ? ? ? ? ? ? ? ?

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ??

4 .?函數(shù) AddContact() 的聲明 -- 增加通訊錄成員:

? ? ? ? ? ? ? ??

參數(shù)接收 -- 通訊錄類型變量地址

返回類型 -- void

? ? ? ? ? ? ? ? ?

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ??

5 . 對(duì)常量使用進(jìn)行優(yōu)化 -- 設(shè)置 全局變量 和 枚舉

? ? ? ? ? ? ? ? ?

(一).?

設(shè)置 全局變量

contact.h 中,

定義全局變量 MAX 100 -- 設(shè)置通訊錄最多人數(shù),

其它通訊錄信息也是同理

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ??

(二).?

設(shè)置 枚舉

對(duì)測(cè)試中,用戶輸入的選項(xiàng)進(jìn)行枚舉,

用對(duì)應(yīng)的功能名字代表對(duì)應(yīng)的選項(xiàng)

? ? ? ? ? ? ? ? ?

在 contact.h 文件中設(shè)置好后,

在 test.c 文件中進(jìn)行修改

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ??

6 .?函數(shù) ShowContact() 的聲明 -- 打印通訊錄所有成員信息:

? ? ? ? ? ? ? ??

參數(shù)接收 -- const Contact* pc

只是打印,不用修改所以設(shè)置為常量

? ? ? ? ? ?

返回類型 -- void

? ? ? ? ? ? ? ? ??

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ??

7 .?函數(shù) FindByName() 的聲明 -- 刪除指定通訊錄成員信息:

? ? ? ? ? ? ? ??

參數(shù)接收 -- 通訊錄類型變量地址 要查找的名字字符串

返回類型 -- int,返回找到的元素下標(biāo) 或 未找到情況的-1

? ? ? ? ?

注:

該函數(shù)只在 contact.c文件 中支持其它函數(shù),
為了保密可以不在該文件聲明

? ? ? ? ? ? ? ?

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ??

8 .?函數(shù) DelContact() 的聲明 -- 刪除指定通訊錄成員信息:

? ? ? ? ? ? ? ??

參數(shù)接收 -- 通訊錄類型變量地址

返回類型 -- void

? ? ? ? ? ? ? ? ?

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ?

9 .?函數(shù) SearchContact() 的聲明 -- 查找指定通訊錄成員信息:

? ? ? ? ? ? ? ??

參數(shù)接收 -- const Contact* pc

只是打印,不用修改所以設(shè)置為常量

? ? ? ? ? ?

返回類型 -- void

? ? ? ? ? ? ? ? ? ?

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ??

10 .?函數(shù) ModifyContact() 的聲明 -- 查找指定通訊錄成員信息:

? ? ? ? ? ? ? ??

參數(shù)接收 -- 通訊錄類型變量地址

返回類型 -- void

? ? ? ? ? ? ? ? ?

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

該文件對(duì)應(yīng)代碼:

#define _CRT_SECURE_NO_WARNINGS 1

//contact.h文件 -- 相關(guān)函數(shù)和類型的聲明:

//包含頭文件:
#include <string.h>
#include <assert.h>
#include <stdio.h>


//定義全局變量 MAX 100 -- 設(shè)置通訊錄最多人數(shù)
#define MAX 100
//通訊錄信息也是同理:
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30


//對(duì)測(cè)試中,用戶輸入的選項(xiàng)進(jìn)行枚舉,
//用對(duì)應(yīng)的功能名字代表對(duì)應(yīng)的選項(xiàng):
enum OPTION
{
	//枚舉中的內(nèi)容默認(rèn)0開(kāi)始往后排:
	EXIT,	// 0 對(duì)應(yīng) 退出
	ADD,	// 1 對(duì)應(yīng) 增加
	DEL,	// 2 對(duì)應(yīng) 刪除
	SEARCH, // 3 對(duì)應(yīng) 搜索
	MODIFY, // 4 對(duì)應(yīng) 修改
	SHOW,	// 5 對(duì)應(yīng) 顯示所有
	SORT	// 6 對(duì)應(yīng) 排序
};


//1.結(jié)構(gòu)體 struct PeoInfo -- 存放保存人的信息:
//使用 typedef 重命名結(jié)構(gòu)體,
typedef struct PeoInfo
{
	char name[MAX_NAME]; //名字
	int age; //年齡
	char sex[MAX_SEX]; //性別
	char tele[MAX_TELE]; //電話
	char addr[MAX_ADDR]; //地址
}PeoInfo;


//2.結(jié)構(gòu)體 struct contact -- 通訊錄類型:
//使用 typedef 重命名結(jié)構(gòu)體,
typedef struct contact
{
	//創(chuàng)建通訊信息錄結(jié)構(gòu)體變量數(shù)組:
	PeoInfo data[MAX];

	//創(chuàng)建一個(gè)變量來(lái)記錄當(dāng)前通訊錄data的人數(shù):
	int sz;
}Contact;


//3.函數(shù) InitContact() 的聲明 -- 初始化通訊錄類型變量
void InitContact(Contact* pc);

//4.函數(shù) AddContact() 的聲明 -- 增加通訊錄成員:
void AddContact(Contact* pc);

//6.函數(shù) ShowContact() 的聲明 -- 打印通訊錄所有成員信息:
void ShowContact(const Contact* pc);

//7.函數(shù) FindByName() 的聲明?-- 刪除指定通訊錄成員信息:
//該函數(shù)只在 contact.c文件 中支持其它函數(shù),
//為了保密可以不在該文件聲明
int FindByName(Contact* pc, char name[]);

//8.函數(shù) DelContact() 的聲明 -- 刪除指定通訊錄成員信息:
void DelContact(Contact* pc);

//9.函數(shù) SearchContact() 的聲明 -- 查找指定通訊錄成員信息:
void SearchContact(const Contact* pc);

//10 .?函數(shù) ModifyContact() 的聲明 -- 查找指定通訊錄成員信息:
void ModifyContact(Contact* pc);

? ? ? ? ? ? ? ? ? ? ?

————————————————————————————————————————

? ? ? ? ? ? ? ? ? ??

(2). contact.c文件 -- 自定義函數(shù)的實(shí)現(xiàn):

? ? ? ? ? ? ??

1 .?函數(shù) InitContact()?-- 初始化通訊錄類型變量

? ? ? ? ? ? ? ??

contact.h文件包含 <string.h> 頭文件

再在 contact.c文件包含通訊錄函數(shù)聲明頭文件:<contact.h>

? ? ? ? ? ? ??

使用 memset系統(tǒng)函數(shù),初始化data數(shù)組

參數(shù)1被設(shè)置的空間 -- data

參數(shù)2要設(shè)置的值?-- 0 (全部初始化為0)

參數(shù)3要設(shè)置的空間大小 -- sizeof(pc->data) ,直接計(jì)算出大小

? ? ? ? ? ? ? ? ? ??

聯(lián)系人個(gè)數(shù) sz 初始化為0

? ? ? ? ? ? ? ? ? ?

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ??

2 .?函數(shù) AddContact()?-- 增加通訊錄成員:

? ? ? ? ? ? ? ??

增加的前提還沒(méi)放滿,

判斷通訊錄是否人數(shù)已滿

? ? ? ? ? ? ? ? ?

如果未滿則開(kāi)始添加信息

sz data數(shù)組 的下標(biāo)對(duì)應(yīng)的,
所以可以通過(guò) sz 找到 data 的對(duì)應(yīng)元素,
通過(guò)對(duì)應(yīng)元素找到對(duì)應(yīng)元素的相應(yīng)信息,

如果對(duì)應(yīng)的信息是數(shù)組,可以不加 取地址符&,

使用 scanf()函數(shù) 將信息放進(jìn)去

? ? ? ? ? ? ? ?

添加完一個(gè)聯(lián)系人后,將指針移向下一個(gè)聯(lián)系人位置

? ? ? ? ? ? ? ?

打印添加成功信息

? ? ? ? ? ? ? ? ? ?

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ??

3 .?函數(shù) ShowContact()?-- 打印通訊錄所有成員信息:

? ? ? ? ? ? ? ??

打印列標(biāo)題

再使用 for循環(huán) 循環(huán)打印信息,

注意巧用 printf()函數(shù)

? ? ? ? ? ??

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ??

4 .?函數(shù) FindByName()?-- 刪除指定通訊錄成員信息:

? ? ? ? ? ? ? ??

使用 for循環(huán) 循環(huán)在通訊錄中查找該人坐標(biāo)

使用 strcmp函數(shù) 進(jìn)行判斷名字是否存在,

如果找到了則返回下標(biāo),未找到則返回-1

? ? ? ? ? ? ? ??

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ??

5 .?函數(shù) DelContact()?-- 刪除指定通訊錄成員信息:

? ? ? ? ? ? ? ??

判斷通訊錄是否為空為空沒(méi)法刪除則直接返回,

? ? ? ? ? ? ? ??

不為空

輸入接收刪除的聯(lián)系人名字

? ? ? ? ? ? ? ? ?

調(diào)用 FindByName()函數(shù) 在通訊錄中查找該人下標(biāo),

? ? ? ? ? ? ? ?

未找到打印相應(yīng)信息并返回

? ? ? ? ?

找到了刪除該下標(biāo)的聯(lián)系人,

? ? ? ? ? ??

刪除后,將指針向前移一位

? ? ? ? ? ??

最后打印刪除成功

? ? ? ? ? ? ? ? ?

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ??

6 .?函數(shù) SearchContact()?-- 查找指定通訊錄成員信息:

? ? ? ? ? ? ? ??

輸入接收查找的聯(lián)系人名字,

? ? ? ? ? ? ? ? ?

調(diào)用 FindByName()函數(shù) 在通訊錄中查找該人下標(biāo),

? ? ? ? ? ? ? ?

未找到打印相應(yīng)信息并返回,

? ? ? ? ?

找到了打印該下標(biāo)的聯(lián)系人信息

? ? ? ? ? ? ? ?

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ??

7 .?函數(shù) ModifyContact()?-- 查找指定通訊錄成員信息:

? ? ? ? ? ? ? ??

輸入接收修改的聯(lián)系人名字,

? ? ? ? ? ? ? ? ?

調(diào)用 FindByName()函數(shù) 在通訊錄中查找該人下標(biāo)

? ? ? ? ? ? ? ?

未找到打印相應(yīng)信息并返回,

? ? ? ? ?

找到了修改該下標(biāo)聯(lián)系人信息

? ? ? ? ? ? ? ?
?圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

該文件對(duì)應(yīng)代碼:

#define _CRT_SECURE_NO_WARNINGS 1

//contact.c文件 -- 自定義函數(shù)的實(shí)現(xiàn):

//包含頭文件:
#include "contact.h"


//1.函數(shù) InitContact()?--初始化通訊錄類型變量
void InitContact(Contact* pc)
{
	//斷言:
	assert(pc);

	memset(pc->data, 0, sizeof(pc->data));
	/*使用 memset系統(tǒng)函數(shù),初始化data數(shù)組。
	參數(shù)1:被設(shè)置的空間 -- data
	參數(shù)2:要設(shè)置的指-- 0 (全部初始化為0)
	參數(shù)3:要設(shè)置的空間大小-- sizeof(pc->data) ,
		   直接計(jì)算出大小*/

	//聯(lián)系人個(gè)數(shù)初始化為0:
	pc->sz = 0;
}


//2.函數(shù) AddContact() 的聲明 -- 增加通訊錄成員:
void AddContact(Contact* pc)
{
	//斷言:
	assert(pc);

	//增加的前提是還沒(méi)放滿:
	if (pc->sz == MAX)
	{
		printf("通訊錄已滿,無(wú)法添加\n");
		//無(wú)法添加直接返回:
		return;
	}

	//沒(méi)滿則開(kāi)始增加信息:
	// sz 和 data數(shù)組 的下標(biāo)是對(duì)應(yīng)的,
	// 所以可以通過(guò) sz 找到 data 的對(duì)應(yīng)元素,
	// 再通過(guò)對(duì)應(yīng)元素找到對(duì)應(yīng)元素的相應(yīng)信息
	// 如果對(duì)應(yīng)的信息是數(shù)組??梢圆患?amp;

	//名字:
	printf("請(qǐng)輸入名字:>");
	//使用 scanf()函數(shù) 將信息放進(jìn)去
	scanf("%s", pc->data[pc->sz].name);

	//年齡:
	printf("請(qǐng)輸入年齡:>");
	//使用 scanf()函數(shù) 將信息放進(jìn)去
	scanf("%d", &pc->data[pc->sz].age);

	//性別:
	printf("請(qǐng)輸入性別:>");
	//使用 scanf()函數(shù) 將信息放進(jìn)去
	scanf("%s", pc->data[pc->sz].sex);

	//電話:
	printf("請(qǐng)輸入電話:>");
	//使用 scanf()函數(shù) 將信息放進(jìn)去
	scanf("%s", pc->data[pc->sz].tele);

	//地址:
	printf("請(qǐng)輸入地址:>");
	//使用 scanf()函數(shù) 將信息放進(jìn)去
	scanf("%s", pc->data[pc->sz].addr);

	//添加完一個(gè)聯(lián)系人后,將指針移向下一個(gè)聯(lián)系人位置:
	pc->sz++;

	//打印添加成功信息:
	printf("成功添加聯(lián)系人\n");
}


//3 .?函數(shù) ShowContact()?-- 打印通訊錄所有成員信息:
void ShowContact(const Contact* pc)
{
	//斷言:
	assert(pc);

	printf("\n");

	//打印列標(biāo)題:
	printf("%-10s\t%-4s\t%-5s\t%-12s\t%-30s\n", 
		   "名字", "年齡", "性別", "電話", "地址");

	//使用 for循環(huán) 循環(huán)打印信息:
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-10s\t%-4d\t%-5s\t%-12s\t%-30s\n", pc->data[i].name,
											   pc->data[i].age,
											   pc->data[i].sex,
											   pc->data[i].tele,
											   pc->data[i].addr
			  );
		// %20S:打印20個(gè)字符,這里名字是20個(gè)字符
		// \t: 使用制表符進(jìn)行對(duì)齊
		// %4d:打印4個(gè)整型,這里是年齡
		// “-”號(hào) :左對(duì)齊
	}


	printf("\n");

}


//4 .?函數(shù) FindByName()?-- 刪除指定通訊錄成員信息:
int FindByName(const Contact* pc, char name[])
{
	//遍歷查找該人坐標(biāo):
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (strcmp(pc->data[i].name, name) == 0)
			//如果 找到了一個(gè)下標(biāo)元素的name 和 要找的name 一樣
		{
			return i; //返回此時(shí)找到的下標(biāo)
		}
	}

	return -1; //未找到則返回-1
}


//5 . 函數(shù) DelContact()?--刪除指定通訊錄成員信息:
void DelContact(Contact* pc)
{
	//斷言:
	assert(pc);

	//先判斷通訊錄是否為空:
	if (pc->sz == 0)
	{
		//為空就沒(méi)法刪除了,直接返回
		printf("通訊錄為空,無(wú)法刪除\n");
		return;
	}

	//創(chuàng)建存放要?jiǎng)h除聯(lián)系人名字的字符數(shù)組:
	char name[MAX_NAME] = { 0 };

	//輸入并接收刪除聯(lián)系人名字:
	printf("請(qǐng)輸入要?jiǎng)h除的人名字:>");
	scanf("%s", name);

	//因?yàn)樵谕ㄓ嶄浿胁檎夷橙耸嵌鄠€(gè)功能所需要的,
	//所以可以將其封裝成函數(shù),再調(diào)用:
	int del = FindByName(pc, name);

	//如果del為-1,說(shuō)明未找到:
	if (del == -1)
	{
		printf("要?jiǎng)h除的人不存在\n");
		return; //直接返回
	}

	//如果找到了則刪除坐標(biāo)為del的聯(lián)系人:
	int i = 0;
	for (i = del; i < pc->sz-1; i++)
		//從del下標(biāo)開(kāi)始,到倒數(shù)第二個(gè)元素
	{
		pc->data[i] = pc->data[i + 1];
		//把del后1個(gè)元素賦給del,循環(huán)覆蓋掉del的元素
		//倒數(shù)第二個(gè)元素+1 為最后一個(gè)元素為止
	}

	//刪除一個(gè)后,將pc指針向前移一位:
	pc->sz--;

	//打印提示:
	printf("成功刪除該聯(lián)系人\n");
}


//6 .?函數(shù) SearchContact()?-- 查找指定通訊錄成員信息:
void SearchContact(const Contact* pc)
{
	//斷言:
	assert(pc);

	//創(chuàng)建存放要查找的聯(lián)系人名字的字符數(shù)組:
	char name[MAX_NAME] = { 0 };

	//輸入并接收要查找聯(lián)系人名字:
	printf("請(qǐng)輸入要查找的聯(lián)系人名字:>");
	scanf("%s", name);

	//使用 FindByName() 函數(shù)查找該人在通訊錄中的下標(biāo):
	int pos = FindByName(pc, name);

	//如果del為-1,說(shuō)明未找到:
	if (pos == -1)
	{
		printf("要查找的人不存在\n");
		return; //直接返回
	}
	else //找到了則打印該人信息: 
	{
		//打印列標(biāo)題:
		printf("%-10s\t%-4s\t%-5s\t%-12s\t%-30s\n",
			"名字", "年齡", "性別", "電話", "地址");
		//打印對(duì)應(yīng)信息:
		printf("%-10s\t%-4d\t%-5s\t%-12s\t%-30s\n", pc->data[pos].name,
													pc->data[pos].age,
													pc->data[pos].sex,
													pc->data[pos].tele,
													pc->data[pos].addr);
	}

}


//7 .?函數(shù) ModifyContact()?-- 查找指定通訊錄成員信息:
void ModifyContact(Contact* pc)
{
	//斷言:
	assert(pc);

	//創(chuàng)建存放要修改的聯(lián)系人名字的字符數(shù)組:
	char name[MAX_NAME] = { 0 };

	//輸入并接收要修改聯(lián)系人名字:
	printf("請(qǐng)輸入要修改的聯(lián)系人名字:>");
	scanf("%s", name);

	//使用 FindByName() 函數(shù)查找該人在通訊錄中的下標(biāo):
	int pos = FindByName(pc, name);

	//如果del為-1,說(shuō)明未找到:
	if (pos == -1)
	{
		printf("要修改的人不存在\n");
		return; //直接返回
	}
	else //找到了則修改該人信息: 
	{
		//名字:
		printf("請(qǐng)輸入名字:>");
		//使用 scanf()函數(shù) 將信息放進(jìn)去
		scanf("%s", pc->data[pos].name);

		//年齡:
		printf("請(qǐng)輸入年齡:>");
		//使用 scanf()函數(shù) 將信息放進(jìn)去
		scanf("%d", &pc->data[pos].age);

		//性別:
		printf("請(qǐng)輸入性別:>");
		//使用 scanf()函數(shù) 將信息放進(jìn)去
		scanf("%s", pc->data[pos].sex);

		//電話:
		printf("請(qǐng)輸入電話:>");
		//使用 scanf()函數(shù) 將信息放進(jìn)去
		scanf("%s", pc->data[pos].tele);

		//地址:
		printf("請(qǐng)輸入地址:>");
		//使用 scanf()函數(shù) 將信息放進(jìn)去
		scanf("%s", pc->data[pos].addr);

		printf("修改成功\n");
	}
}

? ? ? ? ? ? ? ? ? ? ?

————————————————————————————————————————

? ? ? ? ? ? ? ? ? ??

(3). test.c文件 -- 測(cè)試通訊錄:

? ? ? ? ? ? ??

1 . 函數(shù) void menu() -- 打印通訊錄菜單:

? ? ? ? ? ? ? ??

告知使用者輸入對(duì)應(yīng)數(shù)字實(shí)現(xiàn)對(duì)應(yīng)功能

? ? ? ? ? ? ? ?

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ??

2 .?函數(shù) void test() -- 完成通訊錄測(cè)試:

? ? ? ? ? ? ? ??

(一).?

使用 do while 循環(huán),

? ? ? ? ? ? ? ? ??

打印菜單,

? ? ? ? ? ? ??

根據(jù)輸入的選項(xiàng)來(lái)判斷是否需要再進(jìn)行服務(wù),

可以使用 switch 語(yǔ)句進(jìn)行篩選判斷

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ?

(二).

包含<contact.h>頭文件,

通過(guò)結(jié)構(gòu)體 struct contact?(Contact),

創(chuàng)建通訊錄類型變量 -- con,

包含data數(shù)組,存放有效的通訊錄數(shù)據(jù),

sz,記錄存放數(shù)據(jù)的個(gè)數(shù)

? ? ? ? ? ? ? ? ? ??

創(chuàng)建后還需要初始化,

調(diào)用 函數(shù)InitContact() 進(jìn)行初始化,

參數(shù)接收通訊錄類型變量的地址 -- &con

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ?

(三).

如果用戶輸入 1

則調(diào)用 函數(shù)AddContact() ,

增加聯(lián)系人,

參數(shù)接收 &con 對(duì)通訊錄進(jìn)行對(duì)應(yīng)操作

? ? ? ? ? ??

如果用戶輸入 2?,

則調(diào)用 函數(shù)DelContact() ,

刪除指定通訊錄成員,

參數(shù)接收 &con 對(duì)通訊錄進(jìn)行對(duì)應(yīng)操作

? ? ? ? ? ??

如果用戶輸入 3?,

則調(diào)用 函數(shù)SearchContact()

查找指定聯(lián)系人信息,

參數(shù)接收 &con 對(duì)通訊錄進(jìn)行對(duì)應(yīng)操作

? ? ? ? ? ??

如果用戶輸入 4?,

則調(diào)用 函數(shù)ModifyContact()

修改指定聯(lián)系人信息,

參數(shù)接收 &con 對(duì)通訊錄進(jìn)行對(duì)應(yīng)操作

? ? ? ? ? ??

如果用戶輸入 5?,

則調(diào)用 函數(shù)ShowContact() ,

打印所有聯(lián)系人信息,

參數(shù)接收 &con 對(duì)通訊錄進(jìn)行對(duì)應(yīng)操作

? ? ? ? ? ??

如果用戶輸入 0,

打印對(duì)應(yīng)信息退出程序

? ? ? ? ? ? ? ?

如果用戶 輸入非法?,

打印對(duì)應(yīng)信息重新輸入

? ? ? ? ? ? ??

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ??

3 . 主函數(shù)

? ? ? ? ? ? ? ??

直接調(diào)用 test()測(cè)試函數(shù)即可

? ? ? ? ? ? ? ??

圖示:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++

? ? ? ? ? ? ? ? ? ? ?

該文件對(duì)應(yīng)代碼:

#define _CRT_SECURE_NO_WARNINGS 1

//test.c文件 -- 測(cè)試通訊錄:

//包含<contact.h>頭文件:
#include "contact.h"

//1 . 函數(shù) void menu() -- 打印通訊錄菜單:
void menu()
{
	// 選1:增加聯(lián)系人		選2:刪除聯(lián)系人
	// 選3:搜索聯(lián)系人		選4:修改聯(lián)系人信息
	// 選5:顯示所有聯(lián)系人	選6:對(duì)聯(lián)系人進(jìn)行排序
	//				選0:退出通訊錄
	printf("*****************************************************\n");
	printf("*****		1. add		2. del		*****\n");
	printf("*****		3. search	4. modify	*****\n");
	printf("*****		5. show		6. sort		*****\n");
	printf("*****			0. exit			*****\n");
	printf("*****************************************************\n");
}


//函數(shù) void test() -- 完成通訊錄測(cè)試:
void test()
{
	//創(chuàng)建通訊錄類型變量:
	Contact con;
	//調(diào)用函數(shù)初始化通訊錄類型變量:
	InitContact(&con);

	int input = 0;//接收輸入的數(shù)據(jù)
	do
	{
		//調(diào)用菜單函數(shù)打印菜單:
		menu();

		//接收輸入數(shù)據(jù):
		printf("請(qǐng)選擇:>");
		scanf("%d", &input);

		//使用switch語(yǔ)句進(jìn)行篩選判斷:
		switch (input)
		{
		case ADD:
			//如果用戶輸入1,
			//則調(diào)用AddContact()函數(shù)
			//添加聯(lián)系人:
			AddContact(&con);
			//參數(shù)接收 &con ,對(duì)通訊錄進(jìn)行對(duì)應(yīng)操作
			break;

		case DEL:
			//如果用戶輸入2,
			//則調(diào)用DelContact()函數(shù)
			//刪除指定聯(lián)系人:
			DelContact(&con);
			//參數(shù)接收 &con ,對(duì)通訊錄進(jìn)行對(duì)應(yīng)操作
			break;

		case SEARCH:
			//如果用戶輸入3,
			//則調(diào)用SearchContact()函數(shù)
			//查找指定聯(lián)系人:
			SearchContact(&con);
			//參數(shù)接收 &con ,對(duì)通訊錄進(jìn)行對(duì)應(yīng)操作
			break;

		case MODIFY:
			//如果用戶輸入 4?,
			//則調(diào)用ModifyContact()函數(shù)
			//修改指定聯(lián)系人信息
			ModifyContact(&con);
			//參數(shù)接收 &con ,對(duì)通訊錄進(jìn)行對(duì)應(yīng)操作
			break;

		case SHOW:
			//如果用戶輸入5,
			//則調(diào)用ShowContact()函數(shù)
			//打印所有聯(lián)系人信息:
			ShowContact(&con);
			//參數(shù)接收 &con ,對(duì)通訊錄進(jìn)行對(duì)應(yīng)操作
			break;

		case SORT:
			//待定
			break;

		case EXIT:
			//如果用戶輸入0,
			//打印對(duì)應(yīng)信息并退出程序:
			printf("退出通訊錄\n");
			break;

		default:
			//如果用戶 輸入非法,
			//打印對(duì)應(yīng)信息并程序輸入:
			printf("選擇錯(cuò)誤,重新選擇\n");
			break;
		}

	} while (input);
	//只要輸入數(shù)據(jù)不為0就繼續(xù)進(jìn)行
}

//主函數(shù):
int main()
{
	//調(diào)用測(cè)試函數(shù)進(jìn)行測(cè)試:
	test();

	return;
}

? ? ? ? ? ? ?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

? ? ? ? ? ? ?

最終實(shí)現(xiàn)效果:

學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】,CCC全是C,c語(yǔ)言,c++文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-617311.html

到了這里,關(guān)于學(xué)C的第三十一天【通訊錄的實(shí)現(xiàn)】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 代碼隨想錄第二十一天

    題目鏈接 : 二叉搜索樹(shù)的最小絕對(duì)差 自己的思路 :和驗(yàn)證二叉搜索樹(shù)一樣的思路!可以求每個(gè)相鄰節(jié)點(diǎn)的差值的絕對(duì)值,然后和之前的差值的絕對(duì)值進(jìn)行比較,取最小的為新的res;遞歸三部曲:1、傳入?yún)?shù):當(dāng)前節(jié)點(diǎn);2、終止條件:如果當(dāng)前節(jié)點(diǎn)為空,直接返回;3、單層遞

    2024年02月16日
    瀏覽(25)
  • node 第二十一天 webpack 初見(jiàn)

    為什么需要學(xué)習(xí)(了解)webpack webpack是前端工程化的基石,webpack又是基于node進(jìn)行文件打包bundle,所以作為前端起手學(xué)習(xí)node服務(wù)端開(kāi)發(fā),同時(shí)學(xué)習(xí)webpack是很有必要的。 隨著vite的出現(xiàn),vue這一脈可能也許不再需要學(xué)習(xí)webpack了,但是需要知道的是, 打包一定是前端工程化繞不

    2024年01月16日
    瀏覽(26)
  • 15天學(xué)習(xí)MySQL計(jì)劃-MySQL工具(進(jìn)階篇)-第十一天

    1.mysql 該mysql 不是指MySQL服務(wù),而是指MySQL的客戶端工具。 -e選項(xiàng)可以在MySQL客戶端執(zhí)行SQL語(yǔ)句,而不用連接到MySQL數(shù)據(jù)庫(kù)再執(zhí)行,對(duì)于一些批處理腳本,這種方式尤其方便。 2.mysqladmin mysqladmin是一個(gè)執(zhí)行管理操作的客戶端程序??梢杂盟鼇?lái)檢查服務(wù)器的配置和當(dāng)前狀態(tài),創(chuàng)建并

    2024年02月01日
    瀏覽(22)
  • 從零開(kāi)始的力扣刷題記錄-第五十一天

    題目描述: 給你一棵二叉搜索樹(shù)的 root ,請(qǐng)你 按中序遍歷 將其重新排列為一棵遞增順序搜索樹(shù),使樹(shù)中最左邊的節(jié)點(diǎn)成為樹(shù)的根節(jié)點(diǎn),并且每個(gè)節(jié)點(diǎn)沒(méi)有左子節(jié)點(diǎn),只有一個(gè)右子節(jié)點(diǎn)。 題解: 中序遍歷存儲(chǔ)節(jié)點(diǎn)后按順序連接即可 代碼(Go): 題目描述: 小扣在秋日市集發(fā)

    2024年02月08日
    瀏覽(25)
  • 谷粒商城第十一天-完善商品分組(主要添上關(guān)聯(lián)屬性)

    谷粒商城第十一天-完善商品分組(主要添上關(guān)聯(lián)屬性)

    目錄 一、總述 二、前端部分 2.1 改良前端獲取分組列表接口及其調(diào)用 2.2 添加關(guān)聯(lián)的一整套邏輯 三、后端部分 四、總結(jié) 前端部分和之前的商品品牌添加分類差不多。 也是修改一下前端的分頁(yè)獲取列表的接口,還有就是加上關(guān)聯(lián)的那一套邏輯,包括基本構(gòu)件的引入、數(shù)據(jù)域的

    2024年02月13日
    瀏覽(104)
  • 從零開(kāi)始的力扣刷題記錄-第六十一天

    題目描述: 給定由一些正數(shù)(代表長(zhǎng)度)組成的數(shù)組 nums ,返回 由其中三個(gè)長(zhǎng)度組成的、面積不為零的三角形的最大周長(zhǎng) 。如果不能形成任何面積不為零的三角形,返回 0。 題解: 排序后從后往前遍歷,取最大的三個(gè)邊,如果滿足兩邊之和大于第三邊則返回,否則整體向前

    2024年02月09日
    瀏覽(25)
  • 【三十天精通Vue 3】第十一天 Vue 3 過(guò)渡和動(dòng)畫(huà)詳解

    【三十天精通Vue 3】第十一天 Vue 3 過(guò)渡和動(dòng)畫(huà)詳解

    ?創(chuàng)作者:陳書(shū)予 ??個(gè)人主頁(yè):陳書(shū)予的個(gè)人主頁(yè) ??陳書(shū)予的個(gè)人社區(qū),歡迎你的加入: 陳書(shū)予的社區(qū) ??專欄地址: 三十天精通 Vue 3

    2023年04月17日
    瀏覽(20)
  • 秒懂百科,C++如此簡(jiǎn)單丨第二十一天:棧和隊(duì)列

    秒懂百科,C++如此簡(jiǎn)單丨第二十一天:棧和隊(duì)列

    目錄 前言 Everyday English 棧(Stack) 圖文解釋 實(shí)現(xiàn)添加刪除元素 實(shí)現(xiàn)查看清空棧 完整代碼 運(yùn)行示例 棧的選擇題 隊(duì)列(Queue) 圖文解釋 隊(duì)列的基本用法 完整代碼? 運(yùn)行結(jié)果? 隊(duì)列的好處? 結(jié)尾? 今天我們將學(xué)習(xí)兩個(gè)新的數(shù)據(jù)結(jié)構(gòu)——棧和隊(duì)列。 A friend in need is a friend indeed

    2024年02月20日
    瀏覽(24)
  • 【算法第十一天7.25】二叉樹(shù)前、中、后遞歸、非遞歸遍歷

    樹(shù)的結(jié)構(gòu) ================================================ 鏈接 :力扣94-二叉樹(shù)中序遍歷 遞歸 思路 1、 確定返回值和方法參數(shù) :需要集合來(lái)存放樹(shù)各節(jié)點(diǎn)的值,最后打印出來(lái),所以需要一個(gè)list集合作為參數(shù),不斷迭代;除此之外不需要有返回值 2、 確定終止條件 :當(dāng)前節(jié)點(diǎn)為空時(shí),

    2024年02月15日
    瀏覽(46)
  • 第六十一天學(xué)習(xí)記錄:C語(yǔ)言進(jìn)階:C語(yǔ)言預(yù)處理1

    第六十一天學(xué)習(xí)記錄:C語(yǔ)言進(jìn)階:C語(yǔ)言預(yù)處理1

    在ANSI C的任何一種實(shí)現(xiàn)中,存在兩個(gè)不同的環(huán)境。 第一種是翻譯環(huán)境,在這個(gè)環(huán)境中源代碼被轉(zhuǎn)換為可執(zhí)行的機(jī)器指令。第2種是執(zhí)行環(huán)境,它用于實(shí)際執(zhí)行代碼。 翻譯環(huán)境 ![在這里插入圖片描述](https://img-blog.csdnimg.cn/04bd03e2cb554aa298fb6a8349722f89.png 上圖截取自比特科技免費(fèi)課程

    2024年02月07日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包