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

C語(yǔ)言實(shí)現(xiàn)通訊錄的示例代碼

 更新時(shí)間:2022年10月12日 17:02:14   作者:畫(huà)畫(huà)的北北164  
這篇文章主要為大家詳細(xì)介紹了如何錄音C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、Contact.h文件

包含函數(shù)的聲明

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>

#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 10
#define MAX_TELE 20
#define MAX_ADDR 30
#define MAX_LEG 5

//結(jié)構(gòu)體的定義,用于儲(chǔ)存通訊錄數(shù)據(jù)
struct Contact
{
	char name[MAX_NAME];
	char sex[MAX_SEX];
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
	int age;
};

struct PeoInfo
{
	struct Contact* data;
	int length;
	int capacity;
};

//定義游戲菜單函數(shù)
void menu();

//定義初始結(jié)構(gòu)體函數(shù)
void InitContact(struct PeoInfo* abs);

//添加通訊錄消息函數(shù)的聲明
void AddConInfo(struct PeoInfo* abs);

//查詢信息是否存在函數(shù)
int IsExist(struct PeoInfo* abs, char* name);

//刪除指定信息函數(shù)的定義
void DelConInfo(struct PeoInfo* abs);

//修改指定信息函數(shù)的定義
void ModefiInfo(struct PeoInfo* abs);

//查詢指定信息函數(shù)的定義
void SearchInfo(struct PeoInfo* abs);

//展示通訊錄信息函數(shù)的定義
void ShowInfo(struct PeoInfo* abs);

//清空通訊錄列表函數(shù)的定義
void ClearInfo(struct PeoInfo* abs);

//排序通訊錄信息函數(shù)的定義
void SortInfo(struct PeoInfo* abs);

//擴(kuò)容函數(shù)的定義
int IncMemmery(struct PeoInfo* abs);

//釋放內(nèi)存函數(shù)的定義
void FreeInfo(struct PeoInfo* abs);

//保存通訊錄函數(shù)的定義
void saveInfo(struct PeoInfo* abs);

//加載通訊錄函數(shù)的定義
void loadInfo(struct PeoInfo* abs);

二、Contact.c文件

包含函數(shù)的實(shí)現(xiàn)

#include "contact.h";



//游戲菜單函數(shù)的實(shí)現(xiàn)
void menu()
{
	printf("***********************************\n");
	printf("*******1.Add          2.Del********\n");
	printf("*******3.Modefi       4.Search*****\n");
	printf("*******5.show         6.Clear******\n");
	printf("*******7.sort         0.exit*******\n");
	printf("***********************************\n");
}


//擴(kuò)容函數(shù)的實(shí)現(xiàn)
int IncMemmery(struct PeoInfo* abs)
{
	struct Contact* ptr = (struct Contact*)realloc(abs->data, (abs->capacity + 3) * sizeof(struct Contact));
	if (ptr == NULL)
	{
		perror("GetMemmery():");
		return -1;
	}
	else
	{
		abs->data = ptr;
		abs->capacity += 3;
		return 1;
	}
}

//初始化通訊錄函數(shù)的實(shí)現(xiàn)
void loadInfo(struct PeoInfo* abs)
{
	FILE* pf;
	pf = fopen("Contact.txt", "rb");
	if (pf == NULL)
	{
		perror("InitContact():");
		return;
	}
	struct Contact tmp = { 0 };
	while (fread(&tmp, sizeof(struct Contact), 1, pf))
	{
		if (abs->length == abs->capacity)
		{
			IncMemmery(abs);
		}
		*(abs->data + abs->length) = tmp;
		abs->length++;
	}
	fclose(pf);
	pf == NULL;
}

void InitContact(struct PeoInfo* abs)
{
	assert(abs);
	abs->length = 0;
	abs->data = (struct Contact*)malloc(MAX_LEG * sizeof(struct Contact));
	abs->capacity = MAX_LEG;
	loadInfo(abs);
}

//查詢信息是否存在函數(shù)的實(shí)現(xiàn)
int IsExist(struct PeoInfo* abs, char* name)
{
	for (int i = 0; i < abs->length; i++)
	{
		if (strcmp(abs->data[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}

//添加通訊錄消息函數(shù)的實(shí)現(xiàn)
void AddConInfo(struct PeoInfo* abs)
{
	assert(abs);
	if (abs->capacity == abs->length)
	{
		int ret  = IncMemmery(abs);
		if (ret == 1)
		{
			printf("擴(kuò)容成功!\n");
		}
		else
		{
			printf("擴(kuò)容失敗,內(nèi)存不足!\n");
			return;
		}
	}
	
	printf("請(qǐng)輸入添加的姓名:>");
	scanf("%s", abs->data[abs->length].name);
	printf("請(qǐng)輸入添加的姓別:>");
	scanf("%s", abs->data[abs->length].sex);
	printf("請(qǐng)輸入添加的聯(lián)系方式:>");
	scanf("%s", abs->data[abs->length].tele);
	printf("請(qǐng)輸入添加的住址:>");
	scanf("%s", abs->data[abs->length].addr);
	printf("請(qǐng)輸入添加的年齡:>");
	scanf("%d", &(abs->data[abs->length].age));

	abs->length++;
	printf("已成功添加聯(lián)系人!\n");
}

//刪除指定信息函數(shù)的實(shí)現(xiàn)
void DelConInfo(struct PeoInfo* abs)
{
	assert(abs);
	char name[MAX_NAME];
	printf("請(qǐng)輸入要?jiǎng)h除通訊錄的姓名:>");
	scanf("%s", name);
	int ret = IsExist(abs, name);
	if (ret == -1)
	{
		printf("不存在此聯(lián)系人!\n");
	}
	else
	{
		for (int i = ret; i < abs->length; i++)
		{
			abs->data[i] = abs->data[i + 1];
		}
		abs->length--;
	}
}

//修改制定信息函數(shù)的實(shí)現(xiàn)
void ModefiInfo(struct PeoInfo* abs)
{
	char name[MAX_NAME];
	printf("請(qǐng)輸入要修改通訊錄信息的姓名:>");
	scanf("%s", name);
	int ret = IsExist(abs, name);
	if (ret == -1)
	{
		printf("要修改指定聯(lián)系人不存在!\n");
	}
	else
	{
		printf("請(qǐng)輸入要修改的姓名:>");
		scanf("%s", abs->data[ret].name);
		printf("請(qǐng)輸入要修改的性別:>");
		scanf("%s", abs->data[ret].sex);
		printf("請(qǐng)輸入要修改的聯(lián)系方式:>");
		scanf("%s", abs->data[ret].tele);
		printf("請(qǐng)輸入要修改的住址:>");
		scanf("%s", abs->data[ret].addr);
		printf("請(qǐng)輸入要修改的年齡:>");
		scanf("%d", &(abs->data[ret].age));

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

	}
}

//查詢指定信息函數(shù)的實(shí)現(xiàn)
void SearchInfo(struct PeoInfo* abs)
{
	assert(abs);
	char name[MAX_NAME];
	printf("請(qǐng)輸入要查詢通訊錄的姓名:>");
	scanf("%s", name);
	int ret = IsExist(abs, name);
	if (ret == -1)
	{
		printf("要查找的信息不存在!");
	}
	else
	{
		printf("%-20s\t%-10s\t%-20s\t%-20s\t%-10s\n","姓名","性別","聯(lián)系方式","住址","年齡");
		printf("%-20s\t%-10s\t%-20s\t%-20s\t%-10d\n",
			abs->data[ret].name,
			abs->data[ret].sex,
			abs->data[ret].tele,
			abs->data[ret].addr,
			abs->data[ret].age);

		printf("查詢成功!\n");
	}
	
}

//展示通訊錄信息函數(shù)的實(shí)現(xiàn)
void ShowInfo(struct PeoInfo* abs)
{
	assert(abs);
	printf("%-20s\t%-10s\t%-20s\t%-20s\t%-10s\n", "姓名", "性別", "聯(lián)系方式", "住址", "年齡");
	for (int i = 0; i < abs->length; i++)
	{
		printf("%-20s\t%-10s\t%-20s\t%-20s\t%-10d\n",
			abs->data[i].name,
			abs->data[i].sex,
			abs->data[i].tele,
			abs->data[i].addr,
			abs->data[i].age);
	}
}

//清空通訊錄列表函數(shù)的實(shí)現(xiàn)
void ClearInfo(struct PeoInfo* abs)
{
	assert(abs);
	struct Contact* ptr = (struct Contact*)realloc(abs->data, MAX_LEG * (sizeof(struct Contact)));
	if (ptr == NULL)
	{
		perror("ClearInfo():");
	}
	else
	{
		abs->length = 0;
		abs->data = ptr;
		memset(abs->data, 0, MAX_LEG * sizeof(struct Contact));
		abs->capacity = MAX_LEG;
		printf("清空通訊錄成功!\n");
	}
}


//排序通訊錄函數(shù)的實(shí)現(xiàn)
int CmpByAge(const void* e1, const void* e2)
{
	return ((struct Contact*)e1)->age - ((struct Contact*)e2)->age;
}

int CmpByName(const void* e1, const void* e2)
{
	return strcmp(((struct Contact*)e1)->name, ((struct Contact*)e2)->name);
}

void SortInfo(struct PeoInfo* abs)
{
	getchar();
	char ch;
	printf("請(qǐng)輸入排序的方式:>N(姓名)、A(年齡),N or A:>");
	ch = getchar();
	if (ch == 'A')
	{
		qsort(abs->data, abs->length, sizeof(struct Contact), CmpByAge);
		printf("已按照年齡排序成功!\n");
	}
	else if(ch == 'N')
	{
		qsort(abs->data, abs->length, sizeof(struct Contact), CmpByName);
		printf("已按照姓名排序成功!\n");
	}
	else
	{
		printf("輸入錯(cuò)誤!\n");
	}
}

//釋放內(nèi)存函數(shù)的實(shí)現(xiàn)
void FreeInfo(struct PeoInfo* abs)
{
	free(abs->data);
	abs->data = NULL;
}


//保存通訊錄函數(shù)的實(shí)現(xiàn)
void saveInfo(struct PeoInfo* abs)
{
	FILE* pf;
	pf = fopen("Contact.txt", "wb");
	if (pf == NULL)
	{
		perror("saveInfo():");
		return;
	}
	for (int i = 0; i < abs->length; i++)
	{
		fwrite(abs->data + i, sizeof(struct Contact), 1, pf);
	}
	fclose(pf);
	pf = NULL;
}

三、test.c文件

包含主函數(shù)即代碼思想

#include "contact.h";

int main()
{
	int input = 0;
	struct PeoInfo con;
	//初始化結(jié)構(gòu)體
	InitContact(&con);
	do
	{
		menu();
		printf("請(qǐng)選擇:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			AddConInfo(&con);
			break;
		case 2:
			DelConInfo(&con);
			break;
		case 3:
			ModefiInfo(&con);
			break;
		case 4:
			SearchInfo(&con);
			break;
		case 5:
			ShowInfo(&con);
			break;
		case 6:
			ClearInfo(&con);
			break;
		case 7:
			SortInfo(&con);
			break;
		case 0:
			saveInfo(&con);
			FreeInfo(&con);
			printf("退出通訊錄!");
			break;
		default:
			printf("選擇錯(cuò)誤!\n");
		}
	} while (input);
	return 0;
}

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

相關(guān)文章

  • C語(yǔ)言lidar_align雷達(dá)里程計(jì)校準(zhǔn)功能詳解

    C語(yǔ)言lidar_align雷達(dá)里程計(jì)校準(zhǔn)功能詳解

    這篇文章主要為大家介紹了C語(yǔ)言lidar_align雷達(dá)里程計(jì)校準(zhǔn)功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • C語(yǔ)言職工管理系統(tǒng)設(shè)計(jì)

    C語(yǔ)言職工管理系統(tǒng)設(shè)計(jì)

    這篇文章主要為大家分享了一份C語(yǔ)言職工管理系統(tǒng)設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 深入理解C語(yǔ)言中指針常量和常量指針

    深入理解C語(yǔ)言中指針常量和常量指針

    本文介紹了C語(yǔ)言中的指針常量和常量指針,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • C++中關(guān)鍵字Struct和Class的區(qū)別

    C++中關(guān)鍵字Struct和Class的區(qū)別

    這篇文章主要介紹了C++中關(guān)鍵字Struct和Class的區(qū)別,本文用大量實(shí)例講解了Struct和Class的區(qū)別,需要的朋友可以參考下
    2014-09-09
  • 基于c語(yǔ)言中調(diào)試工具的用法匯總(不包含gdb)

    基于c語(yǔ)言中調(diào)試工具的用法匯總(不包含gdb)

    本篇文章是對(duì)c語(yǔ)言中調(diào)試工具的用法進(jìn)行了匯總,需要的朋友參考下
    2013-05-05
  • 用C語(yǔ)言實(shí)現(xiàn)計(jì)算器功能

    用C語(yǔ)言實(shí)現(xiàn)計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了用C語(yǔ)言實(shí)現(xiàn)計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++ Boost Algorithm算法超詳細(xì)精講

    C++ Boost Algorithm算法超詳細(xì)精講

    Boost.Algorithm 提供了補(bǔ)充標(biāo)準(zhǔn)庫(kù)算法的算法。與 Boost.Range 不同,Boost.Algorithm 沒(méi)有引入新概念。 Boost.Algorithm 定義的算法類似于標(biāo)準(zhǔn)庫(kù)中的算法
    2022-10-10
  • C++基礎(chǔ) class、struct、union詳細(xì)

    C++基礎(chǔ) class、struct、union詳細(xì)

    這篇文章主要 給大家介紹的是C++基礎(chǔ) class、struct、union,主要由三部分組成,分別是、類class、結(jié)構(gòu)體struct、共用體union,需要的朋友可以參考一下
    2021-09-09
  • 使用C++實(shí)現(xiàn)Range序列生成器的示例代碼

    使用C++實(shí)現(xiàn)Range序列生成器的示例代碼

    在C++編程中,經(jīng)常需要迭代一系列數(shù)字或其他可迭代對(duì)象,本文將使用C++來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Range封裝,文中的示例代碼講解詳細(xì),感興趣的可以了解下
    2023-11-11
  • C++實(shí)現(xiàn)LeetCode(137.單獨(dú)的數(shù)字之二)

    C++實(shí)現(xiàn)LeetCode(137.單獨(dú)的數(shù)字之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(137.單獨(dú)的數(shù)字之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評(píng)論

格尔木市| 巍山| 汪清县| 太仓市| 遂昌县| 涿州市| 彭山县| 无为县| 蓝田县| 大厂| 池州市| 天台县| 巫山县| 尼木县| 上栗县| 敦煌市| 新平| 万安县| 霍林郭勒市| 青岛市| 宝鸡市| 塔河县| 平远县| 台江县| 龙胜| 土默特右旗| 安远县| 临清市| 沂南县| 陆河县| 泰兴市| 黎平县| 丰顺县| 杭州市| 宁夏| 浦城县| 拉孜县| 尚志市| 新和县| 嘉禾县| 康乐县|