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

C語言—通訊錄

這篇具有很好參考價值的文章主要介紹了C語言—通訊錄。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

通訊錄的創(chuàng)建

通訊錄中是存放人的信息的,人的信息包括:姓名、年齡、性別、電話、住址??梢园讶说男畔⒍x成結構體,因為每個聯系人的信息都有這幾個要素。

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

//類型的定義
typedef struct PeoInfo   //定義人的信息類型
{
	char name[MAX_NAME];
	char sex[MAX_SEX];
	int age;
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
}PeoInfo;

注:用#define定義的標識符常量,使用修改時可以降低維護成本。如聯系人的信息中名字的寬度為20,以便之后需要修改時只需修改一處,而不是修改全部用到名字的寬度為20的地方。

定義完結構體類型之后,創(chuàng)建通訊錄(通訊錄需要能夠存放1000個人的信息)可以利用人信息類型創(chuàng)建元素為1000的數組。但是當要操作通訊錄中聯系人的信息內容時,比如增加聯系人信息,這時就需要知道通訊錄中的聯系人是否已經到達上限或者需要知道在哪個位置添加人的信息(需要知道當前通訊錄中有幾個人的信息),如果達到上限就無法再添加聯系人。綜上通訊錄在維護時需要存放數據的空間和通訊錄中當前總共有幾個元素,將這兩個變量放到一起定義成結構體通訊錄。這樣就避免了執(zhí)行每個功能時都要相同地傳入兩個變量(聯系人信息,已有聯系人個數)方便傳參。

//通訊錄定義
typedef struct Contact
{
	PeoInfo data[MAX];//存放添加進來的人的信息
	int sz;//記錄的是當前通訊錄中有效信息的個數
}Contact;

通訊錄的初始化

通訊錄創(chuàng)建完之后,需要將通訊錄進行初始化。內存空間清零并將記錄的是當前通訊錄中有效信息的個數清零

//通訊錄初始化
void InitContact(Contact* pc)
{
	pc->sz = 0;
	//memset();  - 內存設置
	memset(pc->data, 0, sizeof(pc->data));
}

通訊錄添加聯系人信息

添加聯系人時需要注意如果通訊錄滿了就不能再添加了,如果通訊錄沒滿需要注意通訊錄添加聯系人信息的位置正好是已知記錄當前通訊錄中有效信息的個數所在聯系人信息數組的下標的位置。當添加完聯系人信息之后需要對當前通訊錄中有效信息的個數進行加一。

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

	pc->sz++;
	printf("增加成功\n");
}

通訊錄刪除特定聯系人信息

通訊錄刪除特定聯系人信息如果通訊錄為空則不能刪除,如果通訊錄不為空,則需要判斷要刪除的聯系人是否存在于通訊錄中(查找要刪除的人)。如果要刪除的聯系人存在于通訊錄中則刪除。

查找函數是通過聯系人的名字在通訊錄中進行查找,查找的過程就是排除的過程。通過遍歷進行查找,如果找到了返回通訊錄中聯系人信息所在的下標,否則返回-1。

通訊錄刪除特定聯系人信息的方式有兩種:
C語言—通訊錄
注:

  • 第一種方式在刪除的時候需要將要刪除聯系人信息的位置用后一個聯系人信息的位置進行覆蓋即可,依次類推,直到將最后一個聯系人信息的位置覆蓋到倒數第二個聯系人信息的位置即可。不需要將最后一個聯系人的信息也覆蓋這是毫無意義的,因為刪除完信息之后通訊錄中有效信息的個數會減一這時也就看不到最后一個聯系人信息了。這樣也可以避免數組越界訪問
  • 雖然第二種方法操作起來比較簡單,移動的次數也更少,但是還是使用第一種方法進行刪除,因為第二種方法會搗亂聯系人的先后順序。

最后刪除完指定聯系人信息后需要將當前通訊錄中有效信息的個數減一。

static int FindByName(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;//找不到
}

void DelContact(Contact* pc)
{
	char name[MAX_NAME] = { 0 };

	if (pc->sz == 0)
	{
		printf("通訊錄為空,無需刪除\n");
		return;
	}
	printf("請輸入要刪除人的名字:>");
	scanf("%s", name);

	//1. 查找要刪除的人
	//有/沒有
	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("要刪除的人不存在\n");
		return;
	}
	//2. 刪除
	int i = 0;
	for (i = pos; i < pc->sz - 1; i++)
	{
		pc->data[i] = pc->data[i + 1];
	}

	pc->sz--;
	printf("刪除成功\n");
}


通訊錄查找特定聯系人信息

在通訊錄查找特定聯系人信息,如果找到將查找函數返回的通訊錄中聯系人信息所在下標并打印通訊錄中特定聯系人信息的內容。如果未找到則將打印要查找的人不存在。

void SearchContact(Contact* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("請輸入要查找人的名字:>");
	scanf("%s", name);

	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("要查找的人不存在\n");
		return;
	}
	else
	{
		printf("%-20s\t%-5s\t%-5s\t%-12s\t%-20s\n", "名字", "年齡", "性別", "電話", "地址");
		//打印數據
		printf("%-20s\t%-5d\t%-5s\t%-12s\t%-20s\n",
			pc->data[pos].name,
			pc->data[pos].age,
			pc->data[pos].sex,
			pc->data[pos].tele,
			pc->data[pos].addr);
	}
}

通訊錄修改特定聯系人信息

在通訊錄中查找特定聯系人信息,如果找到了則對其特定聯系人信息進行修改(重新錄入)。如果未找到則打印要修改的人不存在。

void ModifyContact(Contact* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("請輸入要修改人的名字:>");
	scanf("%s", name);

	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("要修改的人不存在\n");
		return;
	}
	else
	{
		printf("請輸入名字:>");
		scanf("%s", pc->data[pos].name);
		printf("請輸入年齡:>");
		scanf("%d", &(pc->data[pos].age));
		printf("請輸入性別:>");
		scanf("%s", pc->data[pos].sex);
		printf("請輸入電話:>");
		scanf("%s", pc->data[pos].tele);
		printf("請輸入地址:>");
		scanf("%s", pc->data[pos].addr);

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

通訊錄排序聯系人信息

排序聯系人信息可以通過qosrt函數進行排序,這里只需要寫一個自定義的比較函數即可。


//自定義比較函數
static int CmpByName(const void* e1, const void* e2)
{
	return strcmp((const char*)e1, (const char*)e2);
}


void SortContact(struct Contact* pc)
{
	qsort(pc->data, pc->sz, sizeof(PeoInfo), CmpByName);//排序
	printf("排序成功\n");
}

通訊錄打印聯系人信息

當前通訊錄中有效信息的個數有幾個,通訊錄中聯系人信息就打印幾個。

void PrintContact(const Contact* pc)
{
	int i = 0;
	//打印標題
	printf("%-20s\t%-5s\t%-5s\t%-12s\t%-20s\n", "名字", "年齡", "性別", "電話", "地址");
	//打印數據
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-20s\t%-5d\t%-5s\t%-12s\t%-20s\n",
			pc->data[i].name,
			pc->data[i].age,
			pc->data[i].sex,
			pc->data[i].tele,
			pc->data[i].addr);
	}
}

通訊錄整體代碼

test.c

#define _CRT_SECURE_NO_WARNINGS 1

//通訊錄-靜態(tài)版本
//1.通訊錄中能夠存放1000個人的信息
//每個人的信息:
//名字+年齡+性別+電話+地址
//2. 增加人的信息
//3. 刪除指定人的信息
//4. 修改指定人的信息
//5. 查找指定人的信息
//6. 排序通訊錄的信息



#include "contact.h"

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");
}

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

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:
			//查找
			SearchContact(&con);
			break;
		case MODIFY:
			//修改
			ModifyContact(&con);
			break;
		case SORT:
			//排序
			SortContact(&con);
			break;
		case PRINT:
			//打印
			PrintContact(&con);
			break;
		case EXIT:	
			//退出
			printf("退出通訊錄\n");
			break;
		default:
			printf("選擇錯誤,重新選擇\n");
			break;
		}
	} while (input);

	return 0;
}

contact.c

#define _CRT_SECURE_NO_WARNINGS 1

#include "contact.h"

//通訊錄初始化
void InitContact(Contact* pc)
{
	pc->sz = 0;
	//memset();  - 內存設置
	memset(pc->data, 0, sizeof(pc->data));
}




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

	pc->sz++;
	printf("增加成功\n");
}



void PrintContact(const Contact* pc)
{
	int i = 0;
	//打印標題
	printf("%-20s\t%-5s\t%-5s\t%-12s\t%-20s\n", "名字", "年齡", "性別", "電話", "地址");
	//打印數據
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-20s\t%-5d\t%-5s\t%-12s\t%-20s\n",
			pc->data[i].name,
			pc->data[i].age,
			pc->data[i].sex,
			pc->data[i].tele,
			pc->data[i].addr);
	}
}

static int FindByName(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;//找不到
}

void DelContact(Contact* pc)
{
	char name[MAX_NAME] = { 0 };

	if (pc->sz == 0)
	{
		printf("通訊錄為空,無需刪除\n");
		return;
	}
	printf("請輸入要刪除人的名字:>");
	scanf("%s", name);

	//1. 查找要刪除的人
	//有/沒有
	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("要刪除的人不存在\n");
		return;
	}
	//2. 刪除
	int i = 0;
	for (i = pos; i < pc->sz - 1; i++)
	{
		pc->data[i] = pc->data[i + 1];
	}

	pc->sz--;
	printf("刪除成功\n");
}


void SearchContact(Contact* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("請輸入要查找人的名字:>");
	scanf("%s", name);

	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("要查找的人不存在\n");
		return;
	}
	else
	{
		printf("%-20s\t%-5s\t%-5s\t%-12s\t%-20s\n", "名字", "年齡", "性別", "電話", "地址");
		//打印數據
		printf("%-20s\t%-5d\t%-5s\t%-12s\t%-20s\n",
			pc->data[pos].name,
			pc->data[pos].age,
			pc->data[pos].sex,
			pc->data[pos].tele,
			pc->data[pos].addr);
	}
}


void ModifyContact(Contact* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("請輸入要修改人的名字:>");
	scanf("%s", name);

	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("要修改的人不存在\n");
		return;
	}
	else
	{
		printf("請輸入名字:>");
		scanf("%s", pc->data[pos].name);
		printf("請輸入年齡:>");
		scanf("%d", &(pc->data[pos].age));
		printf("請輸入性別:>");
		scanf("%s", pc->data[pos].sex);
		printf("請輸入電話:>");
		scanf("%s", pc->data[pos].tele);
		printf("請輸入地址:>");
		scanf("%s", pc->data[pos].addr);

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



//自定義比較函數
static int CmpByName(const void* e1, const void* e2)
{
	return strcmp((const char*)e1, (const char*)e2);
}


void SortContact(struct Contact* pc)
{
	qsort(pc->data, pc->sz, sizeof(PeoInfo), CmpByName);//排序
	printf("排序成功\n");
}

contact.h

#pragma once


#include <string.h>
#include <stdio.h>

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


#define MAX 1000




//類型的定義
typedef struct PeoInfo
{
	char name[MAX_NAME];
	char sex[MAX_SEX];
	int age;
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
}PeoInfo;

//通訊錄的定義
typedef struct Contact
{
	PeoInfo data[MAX];//存放添加進來的人的信息
	int sz;//記錄的是當前通訊錄中有效信息的個數
}Contact;



//初始化通訊錄
void InitContact(Contact* pc);

//增加聯系人
void AddContact(Contact* pc);

//打印聯系人信息
void PrintContact(const Contact* pc);

//刪除聯系人的信息
void DelContact(Contact* pc);

//查找指定聯系人
void SearchContact(Contact* pc);

//修改指定聯系人
void ModifyContact(Contact* pc);


//排序聯系人信息
void SortContact(struct Contact* pc);


注:文章來源地址http://www.zghlxwxcb.cn/news/detail-453882.html

  • test.c是用于測試通訊錄的模塊、contact.c用于通訊錄模塊的函數實現、contact.h用于通訊錄模塊的類型定義以及函數聲明
  • 使用枚舉可以增加代碼的可讀性,避免程序員寫代碼以及閱讀代碼時不明確代碼其中的的具體意義。

到了這里,關于C語言—通訊錄的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • C語言通訊錄

    C語言通訊錄

    ????????在本博客中,我們將介紹如何使用C語言構建一個基本的通訊錄。主要涉及C語言的指針、結構體、動態(tài)內存管理、文件操作等方面的知識。我們還將學習如何使用C語言的各種功能和技巧來實現通訊錄的各種操作,如添加聯系人、編輯聯系人、刪除聯系人和搜索聯系

    2024年02月16日
    瀏覽(89)
  • C語言——通訊錄

    C語言——通訊錄

    相信大家都有過通訊錄,今天我來帶大家實現以下最簡單的通訊錄,通過本篇文章,相信可以讓大家對C語言有進一步的認識。 話不多說,我們先放函數的實現 ?是不是看到這里會感到很害怕??不用怕,跟著我的思路,你也可以實現它,我?guī)е阋徊揭徊綄崿F每一個功能 ?

    2024年02月13日
    瀏覽(96)
  • C語言---認識動態(tài)內存管理并實現一個動態(tài)通訊錄:靜態(tài)通訊錄別來沾邊

    C語言---認識動態(tài)內存管理并實現一個動態(tài)通訊錄:靜態(tài)通訊錄別來沾邊

    ??個人主頁:@小沈熬夜禿頭中???? ??小編介紹:歡迎來到我的亂七八糟小星球?? ??專欄:C語言學習 ??本章內容:動態(tài)內存管理 送給各位??:當你的能力還駕馭不了你的目標時那你就應該沉下心來歷練 記得 評論?? +點贊?? +收藏?? +關注??哦~ 提示:以下是本篇

    2024年02月08日
    瀏覽(171)
  • 【c語言】通訊錄(靜態(tài))

    【c語言】通訊錄(靜態(tài))

    小張剛學習完結構體,枚舉,聯合相關的知識,實踐實踐,寫一個通訊錄唄! 通訊錄的功能 1.通訊錄可存放100的信息 2.信息的內容姓名,性別,年齡,電話,地址 3.支持增加聯系人 4.支持刪除聯系人 5.支持查找聯系人 6.支持修改聯系人 7.支持排序聯系人 8.打印數據 文件類型

    2024年02月13日
    瀏覽(106)
  • 通訊錄實現【C語言】

    通訊錄實現【C語言】

    目錄 前言 一、整體邏輯分析 二、實現步驟 1、創(chuàng)建菜單和多次操作問題 2、創(chuàng)建通訊錄 3、初始化通訊錄 4、添加聯系人 5、顯示聯系人 6、刪除指定聯系人 ?7、查找指定聯系人 8、修改聯系人信息 9、排序聯系人信息 三、全部源碼 我們上期已經詳細的介紹了自定義類型,本

    2024年02月11日
    瀏覽(91)
  • 【C語言】動態(tài)通訊錄 -- 詳解

    【C語言】動態(tài)通訊錄 -- 詳解

    前面詳細介紹了靜態(tài)版通訊錄【C語言】靜態(tài)通訊錄 -- 詳解_炫酷的伊莉娜的博客-CSDN博客,但是靜態(tài)版通訊錄的空間是無法被改變的,而且空間利用率也不高。為了解決靜態(tài)通訊錄這一缺點,這時就要有一個能夠隨著存入聯系人數量的增加而增大空間的通訊錄。接下來我們將

    2024年02月12日
    瀏覽(20)
  • 【C語言】通訊錄(文件) -- 詳解

    【C語言】通訊錄(文件) -- 詳解

    前面介紹了 【C語言】靜態(tài)通訊錄 -- 詳解_炫酷的伊莉娜的博客-CSDN博客 和 【C語言】動態(tài)通訊錄 -- 詳解_炫酷的伊莉娜的博客-CSDN博客 。當通訊錄運行起來時,可以對通訊錄中的數據進行增加、刪除或修改等。此時數據是存放在內存中,當程序退出時,通訊錄中的數據自然就

    2024年02月12日
    瀏覽(20)
  • 通訊錄(純C語言實現)

    通訊錄(純C語言實現)

    相信大家都有過通訊錄,今天我來帶大家實現以下最簡單的通訊錄,通過本篇文章,相信可以讓大家對C語言有進一步的認識。 話不多說,我們先放函數的實現 ?是不是看到這里會感到很害怕??不用怕,跟著我的思路,你也可以實現它,我?guī)е阋徊揭徊綄崿F每一個功能 ?

    2024年02月16日
    瀏覽(134)
  • C語言--通訊錄的實現

    人的信息:姓名+年齡+性別+住址+電話 通訊錄中可以存放100個人的信息 增加聯系人 刪除指定聯系人 查找指定聯系人 修改指定聯系人 顯示所有聯系人的信息 test.c----測試通訊錄 contact.c----通訊錄的實現 contact.h----函數的聲明 代碼如下(示例): 代碼如下(示例):

    2024年02月15日
    瀏覽(140)
  • 【C語言】實戰(zhàn)項目——通訊錄

    【C語言】實戰(zhàn)項目——通訊錄

    學會創(chuàng)建一個通訊錄,對過往知識進行加深和鞏固。 文章很長,要耐心學完哦! ? ? ? ? ? ? ? ??? 豬巴戒 :個人主頁? ??????????????? 所屬專欄 :《C語言進階》 ? ? ? ? ?? 跟著豬巴戒 ,一起學習C語言?? 目錄 引言 實戰(zhàn) 建立文件 包含頭文件 結構體的使用?

    2024年02月04日
    瀏覽(87)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包