亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語(yǔ)言小項(xiàng)目實(shí)戰(zhàn)之通訊錄功能

 更新時(shí)間:2025年01月29日 10:23:14   作者:王磊鑫  
這篇文章主要介紹了如何設(shè)計(jì)和實(shí)現(xiàn)一個(gè)簡(jiǎn)單的通訊錄管理系統(tǒng),包括聯(lián)系人信息的存儲(chǔ)、增加、刪除、查找、修改和排序等功能,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

功能介紹:

1.聯(lián)系人信息:姓名+年齡+性別+地址+電話

2.通訊錄中可以存放100個(gè)人的信息

3.功能:

1>增加聯(lián)系人

2>刪除指定聯(lián)系人

3>查找指定聯(lián)系人的信息

4>修改指定聯(lián)系人的信息

5顯示所有聯(lián)系人的信息

6>排序(名字)

  我們將采用模塊化設(shè)計(jì),分為三個(gè)模塊:

1. test.c         ———        測(cè)試通訊錄

2. contact.c   ———        通訊錄的聲明

3. contact.h    ———       函數(shù)的聲明

  首先,我們需要一個(gè)菜單,以及主函數(shù)選擇功能的部分。

```test.c
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
 void menu()
{
    printf("*******************歡迎來到你的通訊錄*******************\n");
    printf("**********1.添加聯(lián)系人************2.刪除聯(lián)系人**********\n");
    printf("**********3.查找聯(lián)系人************4.修改聯(lián)系人**********\n");
    printf("**********5.顯示聯(lián)系人************6.聯(lián)系人排序**********\n");
    printf("**********0.退出通訊錄*********************************\n");
    printf("*******************歡迎來到你的通訊錄*******************\n");
}
int main()
{
    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 0:
        printf("退出通訊錄");
        break;
    default:
        printf("選擇錯(cuò)誤\n");
        break;
    }
   } while (input);
	return 0;
}
```
  • main函數(shù)中,使用do-while循環(huán)不斷調(diào)用menu函數(shù)顯示菜單,并使用scanf函數(shù)獲取用戶的輸入。然后通過switch語(yǔ)句根據(jù)用戶的輸入執(zhí)行相應(yīng)的操作,如果輸入為0,則輸出 “退出通訊錄” 并結(jié)束程序;如果輸入為其他值,則輸出 “選擇錯(cuò)誤”。

那么通訊錄中肯定需要人的信息,那么這些人的信息,我們可以把他封裝成一個(gè)結(jié)構(gòu)體。我們將這些類型信息放進(jìn)頭文件中,在這里我們將它放進(jìn)已經(jīng)創(chuàng)建好的contact.h中。

```contact.h
//人的信息
typedef struct Peopleinform
{
	char name[40];
	int age;
	char sex[5];
	char addr[20];
	char telephone[20];
}Peopleinform;
```

在這里,我們定義了一個(gè)名為Peopleinform的結(jié)構(gòu)體類型,用于存儲(chǔ)人員的信息。我們通過使用typedef關(guān)鍵字,可以為這個(gè)結(jié)構(gòu)體類型定義一個(gè)別名Peopleinform,這樣在后續(xù)的代碼中就可以直接使用Peopleinform來聲明該類型的變量,而不需要每次都寫完整的struct Peopleinform。

我們繼續(xù)往下寫,接下來我們創(chuàng)建通訊錄,我們可以聲明一個(gè)名為data的數(shù)組,數(shù)組的元素類型為Peopleinform結(jié)構(gòu)體,當(dāng)然我們?cè)谶@里必須添加contact.h頭文件才能使用它。代碼部分如下:

```test.c
#include<stdio.h>
#include"contact.h"
/* --省略void menu部分--*/
int main()
{
    int input = 0;
    //創(chuàng)建通訊錄
    Peopleinform data[100];
    do {
        menu();
        printf("請(qǐng)選擇:>");
        scanf("%d", &input);
    
    /*-- 省略switch部分 --*/
        } while (input);
    return 0;
}
```

 在我們的項(xiàng)目中,自己創(chuàng)建的頭文件通常用雙引號(hào)''"包裹起來,這樣我們就可以在.c文件中使用它啦!當(dāng)然,我們?nèi)绻堰@個(gè)通訊錄存放人的信息的容量,以及可以顯示的當(dāng)前創(chuàng)建的人的信息封裝起來,變成一個(gè)結(jié)構(gòu)體。為了方便之后修改我們?cè)黾右粋€(gè)預(yù)處理器指令#define MAX 100

```contact.h
#define MAX 100
typedef struct Contact
{
	Peopleinform data[MAX];//存放人的信息的容量
	int sz;//當(dāng)前存放信息的個(gè)數(shù)
}Contact;
```

那么我們?nèi)绻朐谥骱瘮?shù)中使用,只需要?jiǎng)?chuàng)建一個(gè)名為conContact類型的對(duì)象。這樣就可以使用con來存儲(chǔ)和操作通訊錄相關(guān)的數(shù)據(jù)了。接著我們初始化通訊錄。并在contact.h頭文件中為他聲明。

```test.c
int main()
{
    int input = 0;
    //創(chuàng)建通訊錄
    Contact con;//創(chuàng)建一個(gè)名為con的Contact對(duì)象
    //初始化通訊錄
    InitContact(&con);
    do {
        menu();
        printf("請(qǐng)選擇:>");
        scanf("%d", &input);
        /*-- 省略switch部分 --*/
    } while (input);
```
```contact.h
void InitContact(Contact *pc);
```

接下來,contact.c文件終于出場(chǎng)了,由于我們?cè)赾ontact.h頭文件聲明過void InitContact(Contact *pc); 接下來,我們就可以在contact.c直接使用它。

我們給這個(gè)Contact結(jié)構(gòu)體的函數(shù)初始化一下:

```contact.c
#include"contact.h"
void InitContact(Contact* pc)
{
    pc->sz=0;
   memset(pc->data,0,sizeof(pc->data));
}
```

這里我們選擇使用memset函數(shù)進(jìn)行初始化,

(注:memset函數(shù)是 C 標(biāo)準(zhǔn)庫(kù)中的一個(gè)函數(shù),定義在<string.h>頭文件中。它的作用是將一段內(nèi)存區(qū)域設(shè)置為指定的值。函數(shù)原型為void *memset(void *s, int c, size_t n),其中s是指向要填充的內(nèi)存塊的指針,c是要設(shè)置的值,n是要填充的字節(jié)數(shù)。) 

緊接著,我們?cè)赟witch()語(yǔ)句中,加入我們目前需要的語(yǔ)句,我們現(xiàn)在來寫添加聯(lián)系人模塊。

添加聯(lián)系人模塊

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

(注:在InitContactAddContact函數(shù)中,pc用于訪問和修改調(diào)用者提供的Contact結(jié)構(gòu)體實(shí)例。當(dāng)調(diào)用這些函數(shù)時(shí),傳遞的是Contact結(jié)構(gòu)體變量的地址,函數(shù)內(nèi)部通過這個(gè)指針來操作外部傳入的結(jié)構(gòu)體。)

pc-sz++; 的作用 

假設(shè) sz 初始值為 5,執(zhí)行 pc->sz++; 后,sz 的值變?yōu)?nbsp;6 ,表示通訊錄中聯(lián)系人的數(shù)量從 5 個(gè)增加到了 6 個(gè)。 這對(duì)于跟蹤通訊錄中實(shí)際存儲(chǔ)的聯(lián)系人數(shù)量非常重要,在后續(xù)的操作,如顯示聯(lián)系人列表、檢查通訊錄是否已滿等功能中,都依賴這個(gè)計(jì)數(shù)。

顯示聯(lián)系人模塊

顯示聯(lián)系人模塊也是一樣,我們現(xiàn)將函數(shù)聲明放在頭文件當(dāng)中,

void ShowContact(const Contact* pc);

然后我們用一個(gè)for循環(huán)遍歷pc->data數(shù)組,其中,pc->data數(shù)組存儲(chǔ)了所有聯(lián)系人的信息,循環(huán)條件i < pc->sz確保只遍歷已存儲(chǔ)聯(lián)系人的部分,pc->sz表示當(dāng)前通訊錄中實(shí)際存儲(chǔ)的聯(lián)系人數(shù)量。

```contact.c
void ShowContact(Contact* pc)
{
	int i = 0;
    printf("%s\t%-5s\t%-5s\t%-5s\t%-5s\t\n", "姓名","年齡","性別","地址","電話");
	for (i = 0; i < pc->sz; i++)
	{
		printf("%s\t%d\t%s\t%s\t%s\t",pc->data[i].name,
									  pc->data[i].age,
									  pc->data[i].sex,
									  pc->data[i].addr,
									  pc->data[i].telephone);
	}
}
```

這樣,我們就基本完成了這個(gè)顯示聯(lián)系人的設(shè)計(jì)啦!那么緊接著,我們?nèi)绻胍獎(jiǎng)h除這個(gè)指定的聯(lián)系人,該怎么辦呢?和上面一樣,我們先在頭文件中添加一個(gè)聲明。

void DelContact(Contact* pc);

接著,我們?cè)赾ontact.c文件中去構(gòu)建這個(gè)刪除聯(lián)系人模塊,

刪除聯(lián)系人模塊

void DelContact(Contact* pc)
{
	if (pc->sz ==0)
	{
		printf("無可刪除的聯(lián)系人");
		return;
	}
	//刪除
	//找到要?jiǎng)h除的人
	printf("請(qǐng)輸入要?jiǎng)h除的人的名字:");
	scanf("%s", name);
	int i = 0;
	int del = 0;
	for (i = 0; i<pc->sz; i++)
	{
		if(strcmp(pc->data[i].name,name))==0
		{
			del = i;
			break;
		}
		//刪除
		for (i = 0; i < pc->sz; i++)
		{
			pc->data[i] = pc->data[i + 1];
		}
		pc->sz--;
		printf("刪除成功");
	}
}

當(dāng)我們通訊錄里面沒有聯(lián)系人的時(shí)候,我們輸出“無可刪除的聯(lián)系人”。接著,我們使用 for 循環(huán)遍歷聯(lián)系人列表,使用 strcmp 函數(shù)比較每個(gè)聯(lián)系人的名字和輸入的名字,如果相等則將該元素的索引存儲(chǔ)在 del 中并跳出循環(huán)。

那么接下來,我們可以發(fā)現(xiàn)的是,無論是刪除模塊、查找模塊和修改模塊中,我們都需要先找到聯(lián)系人,才能進(jìn)行下一步的操作,既然都需要,我們似乎就可以把這個(gè)查找部分封裝成一個(gè)函數(shù),

// 根據(jù)姓名查找聯(lián)系人在數(shù)組中的位置,如果找到返回對(duì)應(yīng)索引,未找到返回 -1
int FINDBY_NAME(const Contact* pc, char name[])
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (strcmp(pc->data[i].name, name) == 0) // 比較字符串是否相等
		{
			return i; // 找到返回索引
		}
	}
	return -1; // 未找到返回 -1
}

 替換后代碼如下:

// 刪除聯(lián)系人的函數(shù)
void DelContact(Contact* pc)
{
	if (pc->sz == 0)
	{
		printf("沒有聯(lián)系人可刪除\n");
		return;
	}
	// 輸入要?jiǎng)h除的聯(lián)系人姓名
	char name[40] = { 0 };
	printf("請(qǐng)輸入要?jiǎng)h除的聯(lián)系人姓名: ");
	scanf("%s", name);

	int ret = FINDBY_NAME(pc, name);
	if (ret == -1)
	{
		printf("要?jiǎng)h除的聯(lián)系人不存在\n");
		return;
	}

	// 刪除操作,將后面的元素依次往前移
	for (int i = ret; i < pc->sz - 1; i++)
	{
		pc->data[i] = pc->data[i + 1];
	}
	pc->sz--;
	printf("刪除成功\n");
}

我們來看查找聯(lián)系人模塊,

查找聯(lián)系人模塊

void SerContact(const Contact* pc)
{
	char name[NAME_MAX] = { 0 };
	printf("請(qǐng)輸入要查找人的名字:");
		scanf("%s",name);
	int pos = FINDBY_NAME(pc, name);
	if (-1 == pos)
	{
		printf("要查找的人不存在\n");
		return;
	}
	//打印信息
	printf("%s\t%-5s\t%-5s\t%-5s\t%-5s\t\n", "姓名", "年齡", "性別", "地址", "電話");
	printf("%s\t%-5d\t%-5s\t%-5s\t%-5s\t\n", pc->data[pos].name,
		pc->data[pos].age,
		pc->data[pos].sex,
		pc->data[pos].addr,
		pc->data[pos].telephone);
}

 我們查找模塊,首先輸入要查找的聯(lián)系人姓名,調(diào)用 FINDBY_NAME 函數(shù)查找該聯(lián)系人的位置,如果不存在則提示聯(lián)系人不存在并返回。否則,打印該聯(lián)系人的詳細(xì)信息。

緊接著,我們?cè)賮砜葱薷穆?lián)系人,

修改聯(lián)系人模塊

//修改聯(lián)系人
void ReviContact(Contact* pc)
{
	char name[NAME_MAX] = { 0 };
	printf("請(qǐng)輸入要修改人的名字:");
		scanf("%s", name);
	int pos = FINDBY_NAME(pc, name);
	if (-1 == pos)
	{
		printf("要修改的人不存在\n");
		return;
	}
	printf("請(qǐng)輸入名字:>");
	scanf("%s", pc->data[pos].name);
	printf("請(qǐng)輸入年齡:>");
	scanf("%d", &pc->data[pos].age);
	printf("請(qǐng)輸入性別:>");
	scanf("%s", pc->data[pos].sex);
	printf("請(qǐng)輸入地址:>");
	scanf("%s", pc->data[pos].addr);
	printf("請(qǐng)輸入電話:>");
	scanf("%s", pc->data[pos].telephone);

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

我們想要修改聯(lián)系人,首先肯定需要找到這個(gè)聯(lián)系人,所以我們首先要查找,輸入要修改的聯(lián)系人姓名,調(diào)用FINDBY_NAME函數(shù)可以查找該聯(lián)系人的位置,如果不存在則提示聯(lián)系人不存在并返回。否則,依次輸入新的聯(lián)系人信息。

排序聯(lián)系人模塊

最后一個(gè)模塊,就是對(duì)這些聯(lián)系人進(jìn)行排序,這里使用使用冒泡排序算法,比較相鄰聯(lián)系人的姓名,如果前一個(gè)聯(lián)系人的姓名大于后一個(gè)聯(lián)系人的姓名,則交換它們的位置。

// 排序聯(lián)系人(按姓名升序排序)
void SortContact(Contact* pc)
{
	int i, j;
	Peopleinform temp;
	for (i = 0; i < pc->sz - 1; i++)
	{
		for (j = 0; j < pc->sz - i - 1; j++)
		{
			if (strcmp(pc->data[j].name, pc->data[j + 1].name) > 0)
			{
				temp = pc->data[j];
				pc->data[j] = pc->data[j + 1];
				pc->data[j + 1] = temp;
			}
		}
	}
	printf("聯(lián)系人已按姓名排序\n");
}

strcmp 是 C 語(yǔ)言標(biāo)準(zhǔn)庫(kù) <string.h> 中的一個(gè)字符串比較函數(shù),用于比較兩個(gè)字符串的大小。

函數(shù)原型int strcmp(const char *str1, const char *str2);

在 SortContact 函數(shù)中,strcmp(pc->data[j].name, pc->data[j + 1].name) > 0 表示如果 pc->data[j].name 這個(gè)字符串在字典序上大于 pc->data[j + 1].name 這個(gè)字符串,就交換這兩個(gè)聯(lián)系人的信息,從而實(shí)現(xiàn)按姓名排序的功能。

源代碼如下:

```contact.h
#pragma once
#include<stdio.h>
#include<string.h>
#define MAX 100
#define NAME_MAX 40  // 定義 NAME_MAX 的大小
// 個(gè)人信息
typedef struct Peopleinform
{
    char name[40];
    int age;
    char sex[5];
    char addr[20];
    char telephone[20];
}Peopleinform;
typedef struct Contact
{
    Peopleinform data[MAX];// 存儲(chǔ)個(gè)人信息的數(shù)組
    int sz;// 當(dāng)前存儲(chǔ)信息的數(shù)量
}Contact;

// 初始化通訊錄
void InitContact(Contact* pc);
// 添加聯(lián)系人
void AddContact(Contact* pc);
// 刪除聯(lián)系人
void DelContact(Contact* pc);
// 查找聯(lián)系人
void SerContact(const Contact* pc);
// 修改聯(lián)系人
void ReviContact(Contact* pc);
// 排序聯(lián)系人
void SortContact(Contact* pc);
// 顯示聯(lián)系人
void ShowContact(const Contact* pc);
```
```contact.c
#define _CRT_SECURE_NO_WARNINGS
#include"contact.h"
void InitContact(Contact* pc)
{
	pc->sz = 0;
	memset(pc->data, 0, sizeof(pc->data));
}
void AddContact(Contact* pc)
{
	char name[NAME_MAX] = { 0 };
	if (pc->sz == MAX)
	{
		printf("通訊錄已滿!無法添加!\n");
		return;
	}
	//增加一個(gè)人的信息
	printf("請(qǐng)輸入名字:>");
	scanf("%s", pc->data[pc->sz].name);
	printf("請(qǐng)輸入年齡:>");
	scanf("%d", &pc->data[pc->sz].age);
	printf("請(qǐng)輸入性別:>");
	scanf("%s", pc->data[pc->sz].sex);
	printf("請(qǐng)輸入地址:>");
	scanf("%s", pc->data[pc->sz].addr);
	printf("請(qǐng)輸入電話:>");
	scanf("%s", pc->data[pc->sz].telephone);
	pc->sz++;
}

// 根據(jù)姓名查找聯(lián)系人在數(shù)組中的位置,如果找到返回對(duì)應(yīng)索引,未找到返回 -1
int FINDBY_NAME(const Contact* pc, char name[])
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (strcmp(pc->data[i].name, name) == 0) // 比較字符串是否相等
		{
			return i; // 找到返回索引
		}
	}
	return -1; // 未找到返回 -1
}

// 刪除聯(lián)系人的函數(shù)
void DelContact(Contact* pc)
{
	if (pc->sz == 0)
	{
		printf("沒有聯(lián)系人可刪除\n");
		return;
	}
	// 輸入要?jiǎng)h除的聯(lián)系人姓名
	char name[40] = { 0 };
	printf("請(qǐng)輸入要?jiǎng)h除的聯(lián)系人姓名: ");
	scanf("%s", name);

	int ret = FINDBY_NAME(pc, name);
	if (ret == -1)
	{
		printf("要?jiǎng)h除的聯(lián)系人不存在\n");
		return;
	}

	// 刪除操作,將后面的元素依次往前移
	for (int i = ret; i < pc->sz - 1; i++)
	{
		pc->data[i] = pc->data[i + 1];
	}
	pc->sz--;
	printf("刪除成功\n");
}
//查找聯(lián)系人
void SerContact(const Contact* pc)
{
	char name[NAME_MAX] = { 0 };
	printf("請(qǐng)輸入要查找人的名字:");
		scanf("%s",name);
	int pos = FINDBY_NAME(pc, name);
	if (-1 == pos)
	{
		printf("要查找的人不存在\n");
		return;
	}
	//打印信息
	printf("%s\t%-5s\t%-5s\t%-5s\t%-5s\t\n", "姓名", "年齡", "性別", "地址", "電話");
	printf("%s\t%-5d\t%-5s\t%-5s\t%-5s\t\n", pc->data[pos].name,
		pc->data[pos].age,
		pc->data[pos].sex,
		pc->data[pos].addr,
		pc->data[pos].telephone);
}
//修改聯(lián)系人
void ReviContact(Contact* pc)
{
	char name[NAME_MAX] = { 0 };
	printf("請(qǐng)輸入要修改人的名字:");
		scanf("%s", name);
	int pos = FINDBY_NAME(pc, name);
	if (-1 == pos)
	{
		printf("要修改的人不存在\n");
		return;
	}
	printf("請(qǐng)輸入名字:>");
	scanf("%s", pc->data[pos].name);
	printf("請(qǐng)輸入年齡:>");
	scanf("%d", &pc->data[pos].age);
	printf("請(qǐng)輸入性別:>");
	scanf("%s", pc->data[pos].sex);
	printf("請(qǐng)輸入地址:>");
	scanf("%s", pc->data[pos].addr);
	printf("請(qǐng)輸入電話:>");
	scanf("%s", pc->data[pos].telephone);

	printf("修改完成\n");
}
// 排序聯(lián)系人(按姓名升序排序)
void SortContact(Contact* pc)
{
	int i, j;
	Peopleinform temp;
	for (i = 0; i < pc->sz - 1; i++)
	{
		for (j = 0; j < pc->sz - i - 1; j++)
		{
			if (strcmp(pc->data[j].name, pc->data[j + 1].name) > 0)
			{
				temp = pc->data[j];
				pc->data[j] = pc->data[j + 1];
				pc->data[j + 1] = temp;
			}
		}
	}
	printf("聯(lián)系人已按姓名排序\n");
}

// 顯示所有聯(lián)系人信息的函數(shù)
void ShowContact(const Contact* pc)
{
	int i = 0;
	printf("%s\t%-5s\t%-5s\t%-5s\t%-5s\t\n", "姓名", "年齡", "性別", "地址", "電話");
	for (i = 0; i < pc->sz; i++)
	{
		printf("%s\t%d\t%s\t%s\t%s\n", pc->data[i].name,
			pc->data[i].age,
			pc->data[i].sex,
			pc->data[i].addr,
			pc->data[i].telephone);
	}
}
```
```test.c
#define _CRT_SECURE_NO_WARNINGS
#include"contact.h"
 void menu()
{
    printf("*******************歡迎來到你的通訊錄*******************\n");
    printf("**********1.添加聯(lián)系人************2.刪除聯(lián)系人**********\n");
    printf("**********3.查找聯(lián)系人************4.修改聯(lián)系人**********\n");
    printf("**********5.顯示聯(lián)系人************6.聯(lián)系人排序**********\n");
    printf("**********0.退出通訊錄**********************************\n");
    printf("*******************歡迎來到你的通訊錄*******************\n");
}
int main()
{
    int input = 0;
    //創(chuàng)建通訊錄
    Contact con;//創(chuàng)建一個(gè)名為con的Contact對(duì)象
    //初始化通訊錄
    InitContact(&con);
    do {
        menu();
        printf("請(qǐng)選擇:>");
        if (scanf("%d", &input) != 1) {
            // 處理輸入錯(cuò)誤的情況,例如提示用戶重新輸入
            printf("輸入錯(cuò)誤,請(qǐng)重新輸入\n");
            // 清空輸入緩沖區(qū)
            while (getchar() != '\n');
            
            continue;
        }
    
    switch (input)
    {
    case 1:
        AddContact(&con);
        break;
   case 2:
        DelContact(&con);
        break;
   case 3:
        SerContact(&con);
        break;
    case 4:
        ReviContact(&con);
        break;
    case 5:
        ShowContact(&con);
        break;
    case 6:
        SortContact(&con);
    case 0:
        printf("退出通訊錄");
        break;
    default:
        printf("選擇錯(cuò)誤\n");
        break;
    }
   } while (input!=0);
}
```

總結(jié)

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

相關(guān)文章

  • C語(yǔ)言單鏈表常見操作匯總

    C語(yǔ)言單鏈表常見操作匯總

    這篇文章主要介紹了C語(yǔ)言單鏈表常見操作,需要的朋友可以參考下
    2014-07-07
  • 淺析ORB、SURF、SIFT特征點(diǎn)提取方法以及ICP匹配方法

    淺析ORB、SURF、SIFT特征點(diǎn)提取方法以及ICP匹配方法

    這篇文章主要為大家介紹了常用的特征點(diǎn)提取方法(ORB、SURF、SIFT)和ICP匹配方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2021-12-12
  • 詳解C++中的const關(guān)鍵字及與C語(yǔ)言中const的區(qū)別

    詳解C++中的const關(guān)鍵字及與C語(yǔ)言中const的區(qū)別

    這篇文章主要介紹了C++中的const關(guān)鍵字及與C語(yǔ)言中const的區(qū)別,const將所修飾的變量對(duì)象轉(zhuǎn)化為常量,需要的朋友可以參考下
    2016-04-04
  • C++11 并發(fā)指南之std::mutex詳解

    C++11 并發(fā)指南之std::mutex詳解

    這篇文章主要介紹了C++11 并發(fā)指南之std::mutex詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C語(yǔ)言:十進(jìn)制,BCD碼互換詳解

    C語(yǔ)言:十進(jìn)制,BCD碼互換詳解

    這篇文章主要介紹了C語(yǔ)言十進(jìn)制,BCD碼互換實(shí)例,小編覺得這篇文章寫的還不錯(cuò),實(shí)例簡(jiǎn)單明了,需要的朋友可以參考下
    2021-09-09
  • OpenCV實(shí)現(xiàn)簡(jiǎn)單套索工具

    OpenCV實(shí)現(xiàn)簡(jiǎn)單套索工具

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)簡(jiǎn)單套索工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++11如何實(shí)現(xiàn)無鎖隊(duì)列

    C++11如何實(shí)現(xiàn)無鎖隊(duì)列

    這篇文章主要介紹了C++11如何實(shí)現(xiàn)無鎖隊(duì)列,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 如何判斷一個(gè)數(shù)是否為4的冪次方?若是,并判斷出來是多少次方?

    如何判斷一個(gè)數(shù)是否為4的冪次方?若是,并判斷出來是多少次方?

    本篇文章是對(duì)如何判斷一個(gè)數(shù)是否為4的冪次方?若是,并判斷出來是多少次方的實(shí)現(xiàn)方法,進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++深入詳解單例模式與特殊類設(shè)計(jì)的實(shí)現(xiàn)

    C++深入詳解單例模式與特殊類設(shè)計(jì)的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了C++單例模式和特殊類的設(shè)計(jì),單例模式這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-06-06
  • C++中Pimpl的慣用法詳解

    C++中Pimpl的慣用法詳解

    Pimpl(Pointer?to?Implementation)是一種常見的?C++?設(shè)計(jì)模式,用于隱藏類的實(shí)現(xiàn)細(xì)節(jié),本文將通過一個(gè)較為復(fù)雜的例子,展示如何使用智能指針來實(shí)現(xiàn)?Pimpl?慣用法,需要的可以參考下
    2023-09-09

最新評(píng)論