首頁 > 軟體

C語言實現簡易通訊錄範例

2022-02-16 10:00:40

一、問題描述

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

二、功能介紹

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

二、實現流程

1.建立通訊錄

1.建立標頭檔案contact.h

標頭檔案contact.h用來實現型別的定義和函數的宣告。

2.定義結構體型別(struct peoInfo)

一個人的資訊包含名字,年齡,性別,電話,地址,所以我們要定義一個結構體型別才能完整的表述。

寫一個結構體型別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.定義通訊錄結構體型別(struct contact)

因為要存放1000個這樣的人的資訊,所以我們建立一個結構體型別的陣列data。再建立一個變數sz來表示這個陣列的下標,data陣列中存第一個人資訊的時候,我們放在下標為sz的位置,這個時候讓我們的sz等於0,存第二個人的資訊的時候,讓我們的sz等於1,這樣後續就方便我們通過下標的方式找到存入的每一個人的資訊。

程式碼如下:

peoInfo data[MAX];//存放新增進來的人的資訊
	int sz;//記錄的是通訊錄中有效資訊的個數

上述程式碼加起來就構成了我們的通訊錄,很明顯這也是一個結構體。

程式碼如下:

//通訊錄
typedef struct contact
{
	peoInfo data[MAX];//存放新增進來的人的資訊
	int sz;//記錄的是通訊錄中有效資訊的個數
}contact;

4.#define定義識別符號常數

為了後續我們方便隨時調整通訊錄的大小所以我們把陣列的數位挨個用#define定義識別符號常數

程式碼如下:

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

5.功能實現函數的宣告

/初始化通訊錄
void Initcontact(contact* cp);
 
//增加聯絡人資訊
void AddContact(contact* cp);
 
//列印聯絡人資訊
void PintContact(const contact* cp);
 
//刪除聯絡人資訊
void DelContact(contact* cp);
 
//查詢聯絡人資訊
void SearchContact(contact* cp);
 
//修改聯絡人資訊
void ModifyContact(contact* cp);

2.建立原始檔test.c

原始檔test.c測試通訊錄的模組

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

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.主檔案的實現

程式碼如下

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

寫出一個選單來供使用者們選擇自己想要的功能,採用列舉的方式讓程式設計師看程式碼的時候能一目瞭然,一眼就也可以看出來這裡要實現的是什麼功能。

3.建立原始檔contact.c

原始檔contact.c來實現我們想要的功能(函數的實現)

1.初始化通訊錄為0(Initcontact函數實現)

//初始化通訊錄為0
void Initcontact(contact* cp)
{
	cp->sz = 0;//通訊錄中人的數量先初始化為0
	memset(cp->data, 0, sizeof(cp->data));//陣列記憶體中每個位元組初始化為0

 2.增加通訊錄聯絡人資訊(AddContact函數實現)

先判斷通訊錄人數是不是滿了,滿了就無法新增,沒滿就新增聯絡人資訊。

程式碼如下:

//增加聯絡人的資訊
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.列印通訊錄聯絡人資訊( PintContact函數實現)

程式碼如下:

//列印聯絡人的資訊
void PintContact(const contact* cp)
{
	//列印標題
	int i = 0;
	printf("%-5st %-5st %-5st %-12st %-20sn", "名字", "年齡", "性別", "電話", "地址");
	for (i = 0; i < cp->sz; i++)
	{
		printf("%-5st %-5dt %-5st %-12st %-20sn", 
			cp ->data[i].name,
			cp -> data[i].age,
			cp -> data[i].sex,
			cp -> data[i].tele,
			cp -> data[i].addr);
	}
}

增加完聯絡人資訊之後我們可以列印出來看一看。

4.刪除通訊錄聯絡人資訊 (DelContact函數實現)

首先判斷通訊錄裡有沒有聯絡人,沒有就無需刪除,有的話就根據查詢函數查詢通訊錄成員名字來刪除所對應的資訊。

程式碼如下:

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;
}
 
//刪除聯絡人資訊
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.查詢通訊錄聯絡人資訊( SearchContact函數實現)

根據查詢函數查詢通訊錄成員名字來刪除所對應的資訊。

程式碼如下

/查詢聯絡人資訊
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("%-5st %-5st %-5st %-12st %-20sn", "名字", "年齡", "性別", "電話", "地址");
		printf("%-5st %-5dt %-5st %-12st %-20sn",
			cp->data[pos].name,
			cp->data[pos].age,
			cp->data[pos].sex,
			cp->data[pos].tele,
			cp->data[pos].addr);
 
	}
}

6.修改聯絡人資訊(ModifyContact函數實現)

根據查詢函數查詢通訊錄成員名字來修改所對應的資訊。

程式碼如下:

//修改聯絡人的資訊
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");
		
	}
}

部分功能結果圖:

 總結:

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

到此這篇關於C語言實現簡易通訊錄範例的文章就介紹到這了,更多相關C語言通訊錄內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com