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

C語言實現(xiàn)簡易通訊錄實例

 更新時間:2022年02月16日 09:32:10   作者:K媾?  
大家好,本篇文章主要講的是C語言實現(xiàn)簡易通訊錄實例,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下

一、問題描述

用C語言來寫一個簡易的通訊錄

二、功能介紹

通訊錄
1.通訊錄中能夠存放1000個人的信息
每個人的信息:
名字,年齡,性別,電話,地址
2.增加人的信息
3.刪除人的信息
4.修改指定人的信息
5.查找指定人的信息
6.排序

二、實現(xiàn)流程

1.創(chuàng)建通訊錄

1.創(chuàng)建頭文件contact.h

頭文件contact.h用來實現(xiàn)類型的定義和函數(shù)的聲明。

2.定義結(jié)構(gòu)體類型(struct peoInfo)

一個人的信息包含名字,年齡,性別,電話,地址,所以我們要定義一個結(jié)構(gòu)體類型才能完整的表述。

寫一個結(jié)構(gòu)體類型struct peoInfo存放一個人的信息

代碼如下:

/類型的定義
typedef struct peoInfo
{
	char name[MAX_NAME];//名字
	char sex[MAX_SEX];//性別
	int age;//年齡
	char tele[MAX_TELE];//電話
	char addr[MAX_ADDR];//地址
}peoInfo;

typedef(類型重命名),struct peoInfo重命名為peoInfo。

3.定義通訊錄結(jié)構(gòu)體類型(struct contact)

因為要存放1000個這樣的人的信息,所以我們創(chuàng)建一個結(jié)構(gòu)體類型的數(shù)組data。再創(chuàng)建一個變量sz來表示這個數(shù)組的下標(biāo),data數(shù)組中存第一個人信息的時候,我們放在下標(biāo)為sz的位置,這個時候讓我們的sz等于0,存第二個人的信息的時候,讓我們的sz等于1,這樣后續(xù)就方便我們通過下標(biāo)的方式找到存入的每一個人的信息。

代碼如下:

peoInfo data[MAX];//存放添加進(jìn)來的人的信息
	int sz;//記錄的是通訊錄中有效信息的個數(shù)

上述代碼加起來就構(gòu)成了我們的通訊錄,很明顯這也是一個結(jié)構(gòu)體。

代碼如下:

//通訊錄
typedef struct contact
{
	peoInfo data[MAX];//存放添加進(jìn)來的人的信息
	int sz;//記錄的是通訊錄中有效信息的個數(shù)
}contact;

4.#define定義標(biāo)識符常量

為了后續(xù)我們方便隨時調(diào)整通訊錄的大小所以我們把數(shù)組的數(shù)字挨個用#define定義標(biāo)識符常量

代碼如下:

#define MAX_NAME 20
#define MAX_SEX 10
#define MAX_TELE 12
#define MAX_ADDR 30
#define MAX 1000

5.功能實現(xiàn)函數(shù)的聲明

/初始化通訊錄
void Initcontact(contact* cp);
 
//增加聯(lián)系人信息
void AddContact(contact* cp);
 
//打印聯(lián)系人信息
void PintContact(const contact* cp);
 
//刪除聯(lián)系人信息
void DelContact(contact* cp);
 
//查找聯(lián)系人信息
void SearchContact(contact* cp);
 
//修改聯(lián)系人信息
void ModifyContact(contact* cp);

2.創(chuàng)建源文件test.c

源文件test.c測試通訊錄的模塊

通訊錄有了之后,我們要寫出通訊錄的基本操作邏輯,選擇增加聯(lián)系人,選擇刪除聯(lián)系人,選擇修改聯(lián)系人......選擇錯誤,重新選擇,選擇重新開始等等。

1.打印菜單

代碼如下:

 
void menu()
{
	printf("******************************\n");
	printf("*****1.add     2.del *********\n");
	printf("*****3.search  4.modify*******\n");
	printf("*****5.sort    6.print *******\n");
	printf("*****0.exit    ***************\n");
	printf("******************************\n");
}

2.枚舉方法定義編號

代碼如下:

enum Option
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SORT,
	PRINT
};

3.主文件的實現(xiàn)

代碼如下

int main()
{
	int input = 0;
	//創(chuàng)建通訊錄
	contact con;//通訊錄
	//初始化通訊錄
	Initcontact(&con);
	do
	{
		menu();
		printf("請選擇:>");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			//增加人的信息
			AddContact(&con);
			break;
		case DEL:
			//刪除人的信息
			DelContact(&con);
			break;
		case SEARCH:
			//查找聯(lián)系人的信息
			SearchContact(&con);
			break;
		case MODIFY:
			//修改聯(lián)系人信息
			ModifyContact(&con);
			break;
		case SORT:
			break;
		case PRINT:
			//打印人的信息
			PintContact(&con);
			break;
		case EXIT:
			printf("退出登錄\n");
			break;
		default:
			printf("選擇錯誤,請重新選擇\n");
			break;
		}
 
	} while (input);
	return 0;
}

寫出一個菜單來供用戶們選擇自己想要的功能,采用枚舉的方式讓程序員看代碼的時候能一目了然,一眼就也可以看出來這里要實現(xiàn)的是什么功能。

3.創(chuàng)建源文件contact.c

源文件contact.c來實現(xiàn)我們想要的功能(函數(shù)的實現(xiàn))

1.初始化通訊錄為0(Initcontact函數(shù)實現(xiàn))

//初始化通訊錄為0
void Initcontact(contact* cp)
{
	cp->sz = 0;//通訊錄中人的數(shù)量先初始化為0
	memset(cp->data, 0, sizeof(cp->data));//數(shù)組內(nèi)存中每個字節(jié)初始化為0

 2.增加通訊錄聯(lián)系人信息(AddContact函數(shù)實現(xiàn))

先判斷通訊錄人數(shù)是不是滿了,滿了就無法添加,沒滿就添加聯(lián)系人信息。

代碼如下:

//增加聯(lián)系人的信息
void AddContact(contact* cp)
{
	if (cp->sz == MAX)
	{
		printf("通訊錄已滿,無法添加\n");
		return;
	}
	//增加一個人的信息
	printf("請輸入名字:>");
	scanf("%s", cp->data[cp->sz].name);
	printf("請輸入年齡:>");
	scanf("%d", &(cp->data[cp->sz].age));
	printf("請輸入性別:>");
	scanf("%s", cp->data[cp->sz].sex);
	printf("請輸入電話:>");
	scanf("%s", cp->data[cp->sz].tele);
	printf("請輸入地址:>");
	scanf("%s", cp->data[cp->sz].addr);
	cp->sz++;
	printf("增加成功\n");
 
}

3.打印通訊錄聯(lián)系人信息( PintContact函數(shù)實現(xiàn))

代碼如下:

//打印聯(lián)系人的信息
void PintContact(const contact* cp)
{
	//打印標(biāo)題
	int i = 0;
	printf("%-5s\t %-5s\t %-5s\t %-12s\t %-20s\n", "名字", "年齡", "性別", "電話", "地址");
	for (i = 0; i < cp->sz; i++)
	{
		printf("%-5s\t %-5d\t %-5s\t %-12s\t %-20s\n", 
			cp ->data[i].name,
			cp -> data[i].age,
			cp -> data[i].sex,
			cp -> data[i].tele,
			cp -> data[i].addr);
	}
}

增加完聯(lián)系人信息之后我們可以打印出來看一看。

4.刪除通訊錄聯(lián)系人信息 (DelContact函數(shù)實現(xiàn))

首先判斷通訊錄里有沒有聯(lián)系人,沒有就無需刪除,有的話就根據(jù)查找函數(shù)查找通訊錄成員名字來刪除所對應(yīng)的信息。

代碼如下:

static int  FindByName(contact* cp, char name[])
{
	int i = 0;
	for (i = 0; i < cp->sz; i++)
	{
		if (strcmp(cp->data[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}
 
//刪除聯(lián)系人信息
void DelContact(contact* cp)
{
	char name[MAX_NAME] = { 0 };
	if (cp->sz == 0)
	{
		printf("通訊錄為空,無需刪除\n");
		return;
	}
	//1.查找要刪除的人
	//有沒有
	printf("請輸入要刪除人的名字\n");
	scanf("%s", name);
	
	int pos = FindByName(cp, name);
	
		if (pos == -1)
		{
			printf("要刪除的人不存在\n");
			return;
		}
		//2.刪除
		int i = 0;
		for (i = pos; i < cp -> sz - 1; i++)
		{
			cp->data[i] = cp->data[i + 1];
		}
		cp->sz--;
		printf("刪除成功\n");
		
}

5.查找通訊錄聯(lián)系人信息( SearchContact函數(shù)實現(xiàn))

根據(jù)查找函數(shù)查找通訊錄成員名字來刪除所對應(yīng)的信息。

代碼如下

/查找聯(lián)系人信息
void SearchContact(contact* cp)
{
	char name[MAX_NAME] = { 0 };
	printf("請輸入要查找人的名字\n");
	scanf("%s", name);
	int pos = FindByName(cp, name);
 
	if (pos == -1)
	{
		printf("要查找的人不存在\n");
		return;
	}
	else 
	{
		printf("%-5s\t %-5s\t %-5s\t %-12s\t %-20s\n", "名字", "年齡", "性別", "電話", "地址");
		printf("%-5s\t %-5d\t %-5s\t %-12s\t %-20s\n",
			cp->data[pos].name,
			cp->data[pos].age,
			cp->data[pos].sex,
			cp->data[pos].tele,
			cp->data[pos].addr);
 
	}
}

6.修改聯(lián)系人信息(ModifyContact函數(shù)實現(xiàn))

根據(jù)查找函數(shù)查找通訊錄成員名字來修改所對應(yīng)的信息。

代碼如下:

//修改聯(lián)系人的信息
void ModifyContact(contact* cp)
{
	char name[MAX_NAME] = { 0 };
	printf("請輸入要修改人的名字\n");
	scanf("%s", name);
	int pos = FindByName(cp, name);
 
	if (pos == -1)
	{
		printf("要修改的人不存在\n");
		return;
	}
	else 
	{
		printf("請輸入名字:>");
		scanf("%s", cp->data[pos].name);
		printf("請輸入年齡:>");
		scanf("%d", &(cp->data[pos].age));
		printf("請輸入性別:>");
		scanf("%s", cp->data[pos].sex);
		printf("請輸入電話:>");
		scanf("%s", cp->data[pos].tele);
		printf("請輸入地址:>");
		scanf("%s", cp->data[pos].addr);
		printf("修改成功\n");
		
	}
}

部分功能結(jié)果圖:

 總結(jié):

上述簡單實現(xiàn)了通訊錄的增刪改查功能,寫出了一個簡易通訊錄

到此這篇關(guān)于C語言實現(xiàn)簡易通訊錄實例的文章就介紹到這了,更多相關(guān)C語言通訊錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • new和malloc的區(qū)別深入解析

    new和malloc的區(qū)別深入解析

    以下是分別是對new和malloc的區(qū)別進(jìn)行了詳細(xì)的分析及介紹,需要的朋友可以過來參考下
    2013-09-09
  • C語言實現(xiàn)隨機(jī)抽取紙牌

    C語言實現(xiàn)隨機(jī)抽取紙牌

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)隨機(jī)抽取紙牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • EasyC++自動存儲持續(xù)性

    EasyC++自動存儲持續(xù)性

    這篇文章主要介紹了EasyC++自動存儲持續(xù)性,下面文章圍繞EasyC++自動存儲持續(xù)性的相關(guān)資料展開全文資料,需要的小伙伴可以參考一下下面文章的具體內(nèi)容,希望對你的學(xué)習(xí)有所幫助
    2021-12-12
  • C++中的策略模式淺析

    C++中的策略模式淺析

    策略模式屬于C++設(shè)計模式中行為模式之一,該模式定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換。本文將通過示例詳細(xì)講解這一模式,需要的可以參考一下
    2023-02-02
  • 由static_cast和dynamic_cast到C++對象占用內(nèi)存的全面分析

    由static_cast和dynamic_cast到C++對象占用內(nèi)存的全面分析

    下面小編就為大家?guī)硪黄蓅tatic_cast和dynamic_cast到C++對象占用內(nèi)存的全面分析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C/C++實現(xiàn)線性順序表的示例代碼

    C/C++實現(xiàn)線性順序表的示例代碼

    使用順序存儲結(jié)構(gòu)的線性存儲結(jié)構(gòu)的表為線性順序表。本文將分別利用C語言和C++實現(xiàn)線性順序表,文中示例代碼講解詳細(xì),需要的可以參考一下
    2022-05-05
  • C語言結(jié)課設(shè)計之計算器功能

    C語言結(jié)課設(shè)計之計算器功能

    這篇文章主要為大家詳細(xì)介紹了C語言結(jié)課設(shè)計之計算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • CLion安裝、漢化、配置圖文詳解

    CLion安裝、漢化、配置圖文詳解

    這篇文章主要介紹了CLion安裝、漢化、激活、配置圖文詳解,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • C++11新特性std::tuple的使用方法

    C++11新特性std::tuple的使用方法

    這篇文章主要介紹了C++11新特性-std::tuple的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • C語言猜兇手及類似題目的實現(xiàn)示例

    C語言猜兇手及類似題目的實現(xiàn)示例

    本文主要介紹了C語言猜兇手及類似題目的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評論

三原县| 吉木乃县| 安宁市| 张家港市| 常宁市| 长葛市| 晋江市| 射阳县| 山东| 临沭县| 灵璧县| 收藏| 都昌县| 阿克陶县| 唐山市| 东丽区| 舒城县| 昭通市| 神池县| 高密市| 卢氏县| 江安县| 临潭县| 镇宁| 宣汉县| 河西区| 海兴县| 正蓝旗| 嘉荫县| 拜泉县| 当涂县| 新巴尔虎右旗| 平定县| 波密县| 凤山县| 大埔县| 公安县| 隆化县| 开江县| 杨浦区| 永福县|