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

C語言動(dòng)態(tài)與靜態(tài)分別實(shí)現(xiàn)通訊錄詳細(xì)過程

 更新時(shí)間:2022年02月25日 16:26:43   作者:誠摯的喬治  
這篇文章主要為大家介紹了C語言動(dòng)態(tài)與靜態(tài)分別實(shí)現(xiàn)通訊錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

??前言:

通訊錄相信每一個(gè)人都了解過

它的功能包括簡單包括:增刪查改

這一期就來實(shí)現(xiàn)一個(gè)C語言實(shí)現(xiàn)的通訊錄

續(xù)上次所聊到的--動(dòng)態(tài)內(nèi)存的分配

那么我會(huì)從標(biāo)題所給的兩個(gè)方式來實(shí)現(xiàn)

??一.靜態(tài)通訊錄的實(shí)現(xiàn)

??1.環(huán)境的分工邏輯

由于過程有點(diǎn)長,便于理解,所以一共會(huì)用到三個(gè)文件

分別是兩個(gè)源文件test.c、contact.c ,還有一個(gè)頭文件contact.h來實(shí)現(xiàn)

??test.c是主體,是通訊錄的測(cè)試邏輯

??contact.c是通訊錄的實(shí)現(xiàn)邏輯

??contact.h是實(shí)現(xiàn)通訊錄函數(shù)的聲明

??2.待實(shí)現(xiàn)的功能

通訊錄的每一個(gè)功能是相對(duì)獨(dú)立的

所以可以分別用不同的函數(shù)來實(shí)現(xiàn)各個(gè)部分的功能

contact.c包含的函數(shù)分別以下內(nèi)容:

??1.結(jié)構(gòu)體的初始化

??2.添加聯(lián)系人

??3.展示聯(lián)系人

??4.刪除聯(lián)系人

??5.查找聯(lián)系人

??6.修改聯(lián)系人

??具體代碼如下:

??3.contact.h

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
//通訊錄可以用來存儲(chǔ)1000個(gè)人的信息,每個(gè)人的信息包括:姓名、性別、年齡、電話、住址
typedef struct  Introduction
{
	char name[20];
	char sex[10];
	int  age;
	char tele[20];
	char addr[30];
} Introduction;
typedef struct contact
{
	Introduction data[1000];
	int sz;
}contact;
 
//結(jié)構(gòu)體的初始化
void Initcontact(contact* pc);
//添加聯(lián)系人
void Add(contact* pc);
//展示聯(lián)系人
void show(contact* pc);
//刪除聯(lián)系人
void Dele(contact* pc);
//查找聯(lián)系人
void Find(contact* pc);
//修改聯(lián)系人
void Exchange(contact* pc);

??4.contact.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void Initcontact(contact* pc)//結(jié)構(gòu)體的初始化
{
    pc->sz = 0;
    memset(pc->data, 0, sizeof(pc->data));
}
 
void Add(contact* pc)//添加聯(lián)系人
{
    //判斷是否未滿
    if (pc->sz == 1000)
    {
        printf("通訊錄已滿\n");
        return;
    }
    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].tele);
    printf("請(qǐng)輸入地址:>");
    scanf("%s", pc->data[pc->sz].addr);
    pc->sz++;
    printf("增加聯(lián)系人成功\n");
}
 
void show(contact* pc)//展示聯(lián)系人
{
    int i = 0;
    printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t\n ", "名字", "年齡", "性別", "電話", "地址");
    for (i = 0; i < pc->sz; i++)
    {
        printf("%-10s\t%-10d\t%-10s\t%-10s\t%-10s\t\n ",
        pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
    }
}
 
int SearchByName(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 Dele(contact* pc)//刪除聯(lián)系人
{
    int i = 0; char name[10];
    printf("輸入要?jiǎng)h除人的名字>:\n");
    scanf("%s", name);
    if (pc->sz == 0)
    {
        printf("通訊錄為空,無法刪除\n");
    }
    //判斷是否有聯(lián)系人
    int pos = SearchByName(pc, name);
    if (pos == -1)
    {
        printf("找不到聯(lián)系人\n");
    }
    else
    {
        for (i = pos; i < pc->sz - 1; i++)
        {
            pc->data[i] = pc->data[i + 1];
        }
        pc->sz--;
        printf("刪除聯(lián)系人成功\n");
    }
}
 
 
void Find(contact* pc)//查找聯(lián)系人
{
    char name[10];
    printf("輸入要查找人的名字>:\n");
    scanf("%s", name);
    int pos = SearchByName(pc, name);
    if (pos == -1)
    {
        printf("通訊錄中無查找人的名字");
    }
    else
    {
        printf("查找的人信息為:>");
        printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t\n ", "名字", "年齡", "性別", "電話", "地址");
        printf("%-10s\t%-10d\t%-10s\t%-10s\t%-10s\t\n ",
        pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr);
    }
}
 
 
void Exchange(contact* pc)//修改聯(lián)系人
{
    char name[10];
    printf("輸入要修改人的名字>:\n");
    scanf("%s", name);
    int pos = SearchByName(pc, name);
    if (pos == -1)
    {
        printf("通訊錄中無修改人的名字");
    }
    else
    {
        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].tele);
        printf("請(qǐng)輸入地址:>");
        scanf("%s", pc->data[pos].addr);
        printf("修改成功");
    }
}
 

??5.test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void menu()
{
	printf("**********************************************\n");
	printf("*******     1.Add        2.Dele      *********\n");
	printf("*******     3.Find       4.Exchange **********\n");
	printf("*******     5.show       0.exit     **********\n");
	printf("**********************************************\n");
}
int main()
{
	int input = 0;
	contact con;
    Initcontact(&con);
	do
	{
		menu();
		printf("請(qǐng)輸入一個(gè)數(shù)>:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			Add(&con);
			break;
		case 2:
			Dele(&con);
			break;
		case 3:
			Find(&con);
			break;
		case 4:
			Exchange(&con);
			break;
		case 5:
			show(&con);
			break;
		case 0:
			printf("退出通訊錄\n");
			break;
		default:
			printf("選擇錯(cuò)誤\n");
		}
 
	} while (input);
	return 0;
}

??6.實(shí)現(xiàn)效果

??二.通訊錄動(dòng)態(tài)的實(shí)現(xiàn)

相較于靜態(tài)的實(shí)現(xiàn),兩者的差別并不大

前者是用一個(gè)固定數(shù)組來實(shí)現(xiàn)元素的儲(chǔ)存

后者則是用動(dòng)態(tài)申請(qǐng)的內(nèi)存來實(shí)現(xiàn)儲(chǔ)存,優(yōu)點(diǎn)是可以節(jié)省內(nèi)存

區(qū)別在于

通訊錄的初始化,這里引用了capcity容量來比較已有的容量

來判斷內(nèi)存的使用量,便于擴(kuò)容

其次就是Add函數(shù),增加聯(lián)系人

最后再對(duì)釋放的內(nèi)存進(jìn)行釋放

??代碼如下:

??1.contact.h

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
 
typedef struct Introduction
{
	char name[20];
	char sex[10];
	int  age;
	char tele[20];
	char addr[30];
}Introduction;
 
typedef struct contact
{
	Introduction* data;
	int sz;
	int capcity;
}contact;
 
//結(jié)構(gòu)體的初始化
void Initcontact(contact* pc);
//添加聯(lián)系人
void Add(contact* pc);
//展示聯(lián)系人
void show(contact* pc);
//刪除聯(lián)系人
void Dele(contact* pc);
//查找聯(lián)系人
void Find(contact* pc);
//修改聯(lián)系人
void Exchange(contact* pc);
//銷毀通訊錄
void destroy(contact*pc);

??2.contact.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
#define TARGET_sz 3   //初始通訊錄目標(biāo)容量 
 
void Initcontact(contact* pc)//結(jié)構(gòu)體的初始化
{
    assert(pc);//判斷指針的有效性
    pc->sz = 0;
    contact* tmp = 0;
    tmp=(contact*)malloc(sizeof(Introduction)*TARGET_sz);
    if (tmp!=NULL)
    {
        pc->data = tmp;
    }
    else
    {
        printf("擴(kuò)容失敗,請(qǐng)檢查原因\n");
        return;
    }
    pc->capcity = TARGET_sz;
}
 
void Add(contact* pc)//添加聯(lián)系人
{
    assert(pc);
    if (pc->capcity == pc->sz)
    {
        Introduction* tmp = 0;
        tmp=(Introduction*)realloc(pc->data,sizeof(Introduction)*(pc->capcity+2));
        if (tmp != NULL)
        {
            pc->capcity += 2;
            pc->data = tmp;
            printf("擴(kuò)容成功\n");
        }
        else
        {
            printf("擴(kuò)容失敗,請(qǐng)檢查原因\n");
        }
    }
    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].tele);
    printf("請(qǐng)輸入地址:>");
    scanf("%s", pc->data[pc->sz].addr);
    pc->sz++;
    printf("增加聯(lián)系人成功\n");
}
 
void show(contact* pc)//展示聯(lián)系人
{
    int i = 0;
    printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t\n ", "名字", "年齡", "性別", "電話", "地址");
    for (i = 0; i < pc->sz; i++)
    {
        printf("%-10s\t%-10d\t%-10s\t%-10s\t%-10s\t\n ",
            pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
    }
}
 
int SearchByName(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 Dele(contact* pc)//刪除聯(lián)系人
{
    int i = 0; char name[10];
    printf("輸入要?jiǎng)h除人的名字>:\n");
    scanf("%s", name);
    if (pc->sz == 0)
    {
        printf("通訊錄為空,無法刪除\n");
    }
    //判斷是否有聯(lián)系人
    int pos = SearchByName(pc, name);
    if (pos == -1)
    {
        printf("找不到聯(lián)系人\n");
    }
    else
    {
        for (i = pos; i < pc->sz - 1; i++)
        {
            pc->data[i] = pc->data[i + 1];
        }
        pc->sz--;
        printf("刪除聯(lián)系人成功\n");
    }
}
 
 
void Find(contact* pc)//查找聯(lián)系人
{
    char name[10];
    printf("輸入要查找人的名字>:\n");
    scanf("%s", name);
    int pos = SearchByName(pc, name);
    if (pos == -1)
    {
        printf("通訊錄中無查找人的名字");
    }
    else
    {
        printf("查找的人信息為:>");
        printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t\n ", "名字", "年齡", "性別", "電話", "地址");
        printf("%-10s\t%-10d\t%-10s\t%-10s\t%-10s\t\n ",
        pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr);
    }
}
 
 
void Exchange(contact* pc)//修改聯(lián)系人
{
    char name[10];
    printf("輸入要修改人的名字>:\n");
    scanf("%s", name);
    int pos = SearchByName(pc, name);
    if (pos == -1)
    {
        printf("通訊錄中無修改人的名字");
    }
    else
    {
        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].tele);
        printf("請(qǐng)輸入地址:>");
        scanf("%s", pc->data[pos].addr);
        printf("修改成功");
    }
}
void destroy(contact* pc)
{
    assert(pc);
    free(pc->data);
    pc->data = NULL;
    pc->capcity = 0;
    pc->sz = 0;
}
 

??3.test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void menu()
{
	printf("**********************************************\n");
	printf("*******     1.Add        2.Dele      *********\n");
	printf("*******     3.Find       4.Exchange **********\n");
	printf("*******     5.show       0.exit     **********\n");
	printf("**********************************************\n");
}
int main()
{
	int input = 0;
	contact con;
	Initcontact(&con);
	do
	{
		menu();
		printf("請(qǐng)輸入一個(gè)數(shù)>:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			Add(&con);
			break;
		case 2:
			Dele(&con);
			break;
		case 3:
			Find(&con);
			break;
		case 4:
			Exchange(&con);
			break;
		case 5:
			show(&con);
			break;
		case 0:
			destroy(&con);
			printf("退出通訊錄\n");
			break;
		default:
			printf("選擇錯(cuò)誤\n");
		}
 
	} while (input);
	return 0;
}

歡迎點(diǎn)贊收藏加關(guān)注,如若有問題可以提出來?????????

到此這篇關(guān)于C語言動(dòng)態(tài)與靜態(tài)分別實(shí)現(xiàn)通訊錄詳細(xì)過程的文章就介紹到這了,更多相關(guān)C語言 實(shí)現(xiàn)通訊錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)LeetCode(162.求數(shù)組的局部峰值)

    C++實(shí)現(xiàn)LeetCode(162.求數(shù)組的局部峰值)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(162.求數(shù)組的局部峰值),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Qt 儀表盤的實(shí)現(xiàn)示例

    Qt 儀表盤的實(shí)現(xiàn)示例

    儀表盤在很多汽車和物聯(lián)網(wǎng)相關(guān)的系統(tǒng)中很常用,本文就來介紹一下Qt 儀表盤的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C語言對(duì)CSV文件從最后往前一行一行讀取的實(shí)現(xiàn)方法

    C語言對(duì)CSV文件從最后往前一行一行讀取的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇關(guān)于C語言對(duì)CSV文件從最后往前一行一行讀取的實(shí)現(xiàn)方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 詳解C語言中的符號(hào)常量、變量與算術(shù)表達(dá)式

    詳解C語言中的符號(hào)常量、變量與算術(shù)表達(dá)式

    這篇文章主要介紹了C語言中的符號(hào)常量、變量與算術(shù)表達(dá)式,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • QT應(yīng)用程序cout輸出中文亂碼解決方法

    QT應(yīng)用程序cout輸出中文亂碼解決方法

    本文主要介紹了QT應(yīng)用程序cout輸出中文亂碼解決方法,文中通過圖文的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • 詳解C語言中的指針與數(shù)組的定義與使用

    詳解C語言中的指針與數(shù)組的定義與使用

    這篇文章主要介紹了C語言中的指針與數(shù)組的定義與使用,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Qt音視頻開發(fā)之實(shí)現(xiàn)ffmpeg視頻旋轉(zhuǎn)顯示

    Qt音視頻開發(fā)之實(shí)現(xiàn)ffmpeg視頻旋轉(zhuǎn)顯示

    這篇文章主要為大家詳細(xì)介紹了在Qt音視頻開發(fā)中如何利用ffmpeg實(shí)現(xiàn)視頻旋轉(zhuǎn)顯示,文中的實(shí)現(xiàn)步驟講講清晰,感興趣的小伙伴可以了解一下
    2023-03-03
  • c++驗(yàn)證哥德巴赫猜想

    c++驗(yàn)證哥德巴赫猜想

    這篇文章主要介紹了c++驗(yàn)證哥德巴赫猜想,哥德巴赫猜想就是任一大于2的偶數(shù),都可表示成兩個(gè)素?cái)?shù)之和,需要的朋友可以參考下
    2014-04-04
  • 詳解C++編程中的變量相關(guān)知識(shí)

    詳解C++編程中的變量相關(guān)知識(shí)

    這篇文章主要介紹了詳解C++編程中的變量相關(guān)知識(shí),是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲(chǔ)

    VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲(chǔ)

    本文主要介紹了VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲(chǔ),實(shí)現(xiàn)了視頻,拍照,保存這三個(gè)功能。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05

最新評(píng)論

肇州县| 嘉鱼县| 开阳县| 饶阳县| 富锦市| 胶南市| 通山县| 如皋市| 福建省| 磐安县| 宿松县| 唐山市| 榆林市| 铁岭县| 巴马| 南皮县| 浦县| 崇阳县| 石景山区| 晋中市| 罗甸县| 宝丰县| 塔城市| 新乡市| 临夏市| 德州市| 和硕县| 奉化市| 崇仁县| 姚安县| 台南县| 菏泽市| 奉节县| 朔州市| 绥宁县| 清涧县| 普兰店市| 桐乡市| 荣成市| 金乡县| 武鸣县|