欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

??前言:

通訊錄相信每一個人都了解過

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

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

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

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

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

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

由于過程有點長,便于理解,所以一共會用到三個文件

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

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

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

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

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

通訊錄的每一個功能是相對獨立的

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

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>
//通訊錄可以用來存儲1000個人的信息,每個人的信息包括:姓名、性別、年齡、電話、住址
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("請輸入名字>:");
    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("增加聯(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("輸入要刪除人的名字>:\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("請輸入名字>:");
        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("修改成功");
    }
}
 

??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("請輸入一個數(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("選擇錯誤\n");
		}
 
	} while (input);
	return 0;
}

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

??二.通訊錄動態(tài)的實現(xiàn)

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

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

后者則是用動態(tài)申請的內(nèi)存來實現(xiàn)儲存,優(yōu)點是可以節(jié)省內(nèi)存

區(qū)別在于

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

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

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

最后再對釋放的內(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ò)容失敗,請檢查原因\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ò)容失敗,請檢查原因\n");
        }
    }
    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("增加聯(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("輸入要刪除人的名字>:\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("請輸入名字>:");
        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("修改成功");
    }
}
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("請輸入一個數(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("選擇錯誤\n");
		}
 
	} while (input);
	return 0;
}

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

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

相關(guān)文章

  • C++實現(xiàn)聊天小程序

    C++實現(xiàn)聊天小程序

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)聊天小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++使用read()和write()讀寫二進(jìn)制文件

    C++使用read()和write()讀寫二進(jìn)制文件

    以文本形式讀寫文件和以二進(jìn)制形式讀寫文件的區(qū)別,并掌握了用重載的?>>?和?<<?運算符實現(xiàn)以文本形式讀寫文件,在此基礎(chǔ)上,本節(jié)將講解如何以二進(jìn)制形式讀寫文件
    2023-10-10
  • C++掃盲篇之指針詳解

    C++掃盲篇之指針詳解

    C++中一個指針的使用就已經(jīng)讓很多人欲哭無淚,可是更不幸的是他還有指向指針的指針,這篇文章主要給大家介紹了關(guān)于C++掃盲篇之指針的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 深入分析Visual C++進(jìn)行串口通信編程的詳解

    深入分析Visual C++進(jìn)行串口通信編程的詳解

    本篇文章是對Visual C++進(jìn)行串口通信編程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實現(xiàn)實驗設(shè)備管理系統(tǒng)

    C語言實現(xiàn)實驗設(shè)備管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)實驗設(shè)備管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言數(shù)據(jù)結(jié)構(gòu)鏈表隊列的實現(xiàn)

    C語言數(shù)據(jù)結(jié)構(gòu)鏈表隊列的實現(xiàn)

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)鏈表隊列的實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 使用C語言編寫一個關(guān)機(jī)惡搞小程序

    使用C語言編寫一個關(guān)機(jī)惡搞小程序

    system函數(shù)的參數(shù)是"shutdown"時,它將會執(zhí)行系統(tǒng)的關(guān)機(jī)命令,所以本文將利用這一特點制作一個關(guān)機(jī)惡搞小程序,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • 淺談C++ 緩沖區(qū)(buffer)的使用

    淺談C++ 緩沖區(qū)(buffer)的使用

    緩沖區(qū)是用來存放流中的數(shù)據(jù),本文詳細(xì)的介紹了C++ 緩沖區(qū)(buffer)的使用,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語言實現(xiàn)校運動會項目管理系統(tǒng)

    C語言實現(xiàn)校運動會項目管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)校運動會項目管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 常用的C語言編程工具匯總

    常用的C語言編程工具匯總

    c語言編程軟件適于編寫系統(tǒng)軟件,是學(xué)習(xí)編程的同學(xué)們的必備軟件。c語言一種非常強大的計算機(jī)語言,應(yīng)用非常廣泛,不僅僅是在軟件開發(fā)上,而且各類科研都會用到c語言。今天小編給大家匯總下C語言的編程工具
    2018-01-01

最新評論