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

C語(yǔ)言實(shí)現(xiàn)靜態(tài)存儲(chǔ)通訊錄的示例代碼

 更新時(shí)間:2022年09月21日 16:19:46   作者:王少climax  
這篇文章主要為大家詳細(xì)介紹了如何利用C語(yǔ)言實(shí)現(xiàn)一個(gè)靜態(tài)存儲(chǔ)的通訊錄,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語(yǔ)言有一定幫助,需要的可以參考一下

最初的構(gòu)思與規(guī)劃

產(chǎn)品在制作之前一定要進(jìn)行一定的構(gòu)思,把要設(shè)計(jì)和實(shí)現(xiàn)的功能羅列出來(lái)。

所需要的功能

我們可以打開(kāi)手機(jī)通訊錄發(fā)現(xiàn)有很多聯(lián)系人都已經(jīng)按照拼音順序排列的整整齊齊,想要找名字便可以搜索他的名字,誰(shuí)更換號(hào)碼了可以進(jìn)行修改,把誰(shuí)拉黑了,就可以刪除信息,認(rèn)識(shí)新朋友可以添加他的號(hào)碼。這就包括了 增、刪、查、改、展示、排序等功能。

現(xiàn)在設(shè)計(jì)的通訊錄是靜態(tài)版本下的通訊錄,之后會(huì)教大家制作動(dòng)態(tài)版本和文件版本。

顯示菜單以及main函數(shù)

那么我們要制作一個(gè)菜單把以上功能都加入進(jìn)去。

//菜單
    void menu()
{
    printf("***************************\n");
    printf("     1.add     2.del       \n");
    printf("     3.search  4.modify    \n");
    printf("     5.show    6.sort      \n");
    printf("          0.exit           \n");
    printf("***************************\n");
}

有了慘淡我們當(dāng)然要讓他是可以用的,不能當(dāng)花瓶呀。那我們就要寫一下我們的主函數(shù)(main)。

頭文件的聲明:

//contact.h
#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30


//表示一個(gè)人的信息

typedef struct PeoInfo
{
	char name[MAX_NAME];//20字節(jié)
	char sex[MAX_SEX];//5字節(jié)
	char tele[MAX_TELE];//12字節(jié)
	int age;
	char addr[MAX_ADDR];//30字節(jié)
}PeoInfo;
//通訊錄
typedef struct Contact
{
	PeoInfo data[MAX];
	int sz;
}Contact;

頭文件定義了一個(gè)結(jié)構(gòu)體存放個(gè)人信息 PeoInfo,但是我們這個(gè)通訊錄是有人數(shù)限制的,需要存一個(gè)人數(shù)進(jìn)去,那于是乎又設(shè)計(jì)了一個(gè)結(jié)構(gòu)體Contact 存放個(gè)人信息和已經(jīng)存了多少人的統(tǒng)計(jì)數(shù)sz。

//主函數(shù)
int main()
{
    int input = 0;
    Contact con;
    InitContact(&con);
    do
    {    
        menu();
        printf("請(qǐng)選擇>:");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            AddContact(&con);
            break;
        case 2:
            DelContact(&con);
            break;
        case 3:
            SearchContact(&con);
            break;
        case 4:
            ModifyContact(&con);
            break;
        case 5:
            ShowContact(&con);
            break;
        case 6:
            SortContact(&con);
            break;
        case 0:
            break;
        default:
            break;
        }
    } while (input);
    return 0;
}

以上必須要重申一下,函數(shù)和變量的命名方式我比較推薦駝峰法,最好不要用拼音和英文的縮寫,更不要都是小寫或者都是大寫,作為一個(gè)合格的程序員要養(yǎng)成良好的編碼習(xí)慣。define 的變量最好全是大寫,但是每個(gè)單詞都要用_隔開(kāi),例如:#define MAX_SEX 5。

增加個(gè)人信息

void AddContact(Contact* pc)//這里重點(diǎn)說(shuō)一下,一定要確定好接收的是結(jié)構(gòu)體指針變量,形參和實(shí)參要多多復(fù)習(xí)。
{
    if (pc->sz == MAX)//頭文件中定義了 MAX是100,不要忘記結(jié)合頭文件
    {
        printf("已經(jīng)滿了\n");
        return;
    }
    else
    {
        printf("請(qǐng)輸入名字;》\n");
        scanf("%s", pc->data[pc->sz].name);//這里我們要剖析一下,請(qǐng)看下面注釋
        printf("請(qǐng)輸入性別:》\n");
        scanf("%s", pc->data[pc->sz].sex);
        printf("請(qǐng)輸入年齡:》\n");
        scanf("%d", &(pc->data[pc->sz].age));
        printf("請(qǐng)輸入電話:》\n");
        scanf("%s", pc->data[pc->sz].tele);
        printf("請(qǐng)輸入地址:》\n");
        scanf("%s", pc->data[pc->sz].addr);
        pc->sz++;
        printf("成功增加聯(lián)系人\n");
    }
}

注釋:

因?yàn)槲覀儌鞯氖墙Y(jié)構(gòu)體指針pc 結(jié)構(gòu)體指針引用數(shù)據(jù)要用剪頭->,之后引用到的數(shù)據(jù)data是結(jié)構(gòu)體數(shù)組需要添加下標(biāo)[pc->sz]就是它的下標(biāo),其中的pc->sz也是結(jié)構(gòu)體指針引用總個(gè)數(shù)sz的方式,最后已經(jīng)引用過(guò)的data里面的內(nèi)容要進(jìn)行引用需要用 . 這個(gè)符號(hào)引用(就是 普通結(jié)構(gòu)體的引用)。

提醒:

在這里還要再說(shuō)一下關(guān)于 if else中大括號(hào)的注意事項(xiàng),一定要縮進(jìn)和對(duì)齊,這還是一個(gè)程序員的基本功。另外還要提一下,else只會(huì)和最近的if結(jié)合,如果怕迷糊,請(qǐng)一定要在if結(jié)束后做大括號(hào){}。

顯示所有聯(lián)系人的信息

想要驗(yàn)證我們是不是真的添加了信息,那我們直接把他展示出來(lái)就好了,那順便把顯示所有聯(lián)系人函數(shù)也做出來(lái)。

//顯示所有聯(lián)系人
void ShowContact(Contact* pc)
{
    int i = 0;
    for (i = 0; i < pc->sz; i++)
    {
        printf("%d: 姓名:%-10s 性別:%-5s 年齡:%-5d 電話:%-12s 地址:%-30s\n",
            pc->sz,
            pc->data[i].name,
            pc->data[i].sex,
            pc->data[i].age,
            pc->data[i].tele,
            pc->data[i].addr);

???????    }
}

刪除個(gè)人信息

刪除個(gè)人信息之前需要先查到這個(gè)人,于是設(shè)計(jì)了一個(gè)搜索姓名函數(shù),根據(jù)搜索到的結(jié)果找到該聯(lián)系人的位置,再刪除。其實(shí)是這個(gè)搜索姓名函數(shù)是至關(guān)重要的,最后的查找、修改個(gè)人信息也要用到。

//搜索姓名函數(shù)
int FindByName(Contact* pc, char name[])
{
    int i = 0;
    for (i=0; i < pc->sz; i++)
    {
        if (0 == strcmp(pc->data[i].name, name))
        {
            return i;
        }
    }
    return -1;
}
//刪除個(gè)人信息函數(shù)
void DelContact(Contact* pc)
{
    int ret = 0;
    char name[MAX_NAME];
    printf("請(qǐng)輸入要?jiǎng)h除的名字:》");
    scanf("%s", name);
    //查找以下是否存在
    ret=FindByName(pc, name);
    if (ret ==-1)
        printf("刪除的人不存在\n");
    else
    {
        //del
        int j = 0;
        for (j = ret; j < pc->sz-1; j++)
        {
            pc->data[j]=pc->data[j + 1];
        }
        pc->sz--;
        printf("成功刪除!\n");
    }
}

查找個(gè)人信息

//搜索個(gè)人信息
void SearchContact(Contact* pc)
{
    char name[MAX_NAME];
    printf("請(qǐng)輸入要查找的姓名:》");
    scanf("%s", name);
    int ret = FindByName(pc, name);
    if (ret == -1)
    {
        printf("輸入的是個(gè)球~\n");
    }
    else
    {
        int i = ret;
        printf("姓名:%-10s 性別:%-5s 年齡:%-5d 電話:%-12s 地址:%-30s\n",
            pc->data[i].name,
            pc->data[i].sex,
            pc->data[i].age,
            pc->data[i].tele,
            pc->data[i].addr);
    }

???????}

更改個(gè)人信息

//修改個(gè)人信息
void ModifyContact(Contact* pc)
{
    char name[MAX_NAME];
    printf("請(qǐng)輸入要修改的的名字:》");
    scanf("%s", name);
    int ret = FindByName(pc, name);
    if (ret == -1)
    {
        printf("輸入的是個(gè)球~\n");
    }
    else
    {
        printf("請(qǐng)輸入名字;》\n");
        scanf("%s", pc->data[ret].name);
        printf("請(qǐng)輸入性別:》\n");
        scanf("%s", pc->data[ret].sex);
        printf("請(qǐng)輸入年齡:》\n");
        scanf("%d", &(pc->data[ret].age));
        printf("請(qǐng)輸入電話:》\n");
        scanf("%s", pc->data[ret].tele);
        printf("請(qǐng)輸入地址:》\n");
        scanf("%s", pc->data[ret].addr);
        printf("成功修改聯(lián)系人\n");
    }
}

這里有一個(gè)不足之處就是要更改就必須全部更改,不能只改一項(xiàng)信息,隨后會(huì)更新升級(jí)。

對(duì)聯(lián)系人信息進(jìn)行排序

//按年齡排序
int CompareOld(const void* st1, const void* st2)
{
	return (((PeoInfo*)st1)->age - ((PeoInfo*)st2)->age);
}

//按姓名排序
int CompareName(const void* st1, const void* st2)
{
	return strcmp(((PeoInfo*)st1)->name , ((PeoInfo*)st2)->name);
}
//排序信息
void SortContact(Contact* pc)
{
	qsort(pc->data,pc->sz,sizeof(PeoInfo),CompareName);//這里就按姓名排序
}

這里的排序比較簡(jiǎn)單,用到了qsort函數(shù),如果對(duì)qsort函數(shù)有疑問(wèn),那之后會(huì)做一個(gè)針對(duì)排序的博客詳細(xì)講解。只需要記得qsort不管數(shù)組是什么類型都可以進(jìn)行排序(字符串,字符,數(shù)組等)。

最后產(chǎn)品展示

contart.h 頭文件

//contart.h 頭文件
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<assert.h>
#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30


//表示一個(gè)人的信息

typedef struct PeoInfo
{
	char name[20];
	char sex[5];
	char tele[12];
	int age;
	char addr[30];
}PeoInfo;
//通訊錄
typedef struct Contact
{
	PeoInfo data[100];
	int sz;
}Contact;
//初始化通訊錄
void InitContact(Contact* pc);

//增加人的信息
void AddContact(Contact* pc);

//打印通訊錄信息
void ShowContact(Contact* pc);

//刪除個(gè)人信息
void DelContact(Contact* pc);

//搜索信息
void SearchContact(Contact* pc);

//修改信息
void ModifyContact(Contact* pc);

//排序信息
void SortContact(Contact* pc);

contart. c文件

//contart.c 文件
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"

void InitContact(Contact* pc)
{
	pc->sz = 0;
	memset(pc->data, 0, 100 * sizeof(PeoInfo));
}
//增加聯(lián)系人
void AddContact(Contact* pc)
{
	if (pc->sz == MAX)
	{
		printf("已經(jīng)滿了\n");
		return;
	}
	else
	{
		printf("請(qǐng)輸入名字;》\n");
		scanf("%s", pc->data[pc->sz].name);
		printf("請(qǐng)輸入性別:》\n");
		scanf("%s", pc->data[pc->sz].sex);
		printf("請(qǐng)輸入年齡:》\n");
		scanf("%d", &(pc->data[pc->sz].age));
		printf("請(qǐng)輸入電話:》\n");
		scanf("%s", pc->data[pc->sz].tele);
		printf("請(qǐng)輸入地址:》\n");
		scanf("%s", pc->data[pc->sz].addr);
		pc->sz++;
		printf("成功增加聯(lián)系人\n");


	}
}
//顯示所有聯(lián)系人
void ShowContact(Contact* pc)
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		printf("%d: 姓名:%-10s 性別:%-5s 年齡:%-5d 電話:%-12s 地址:%-30s\n",
			pc->sz,
			pc->data[i].name,
			pc->data[i].sex,
			pc->data[i].age,
			pc->data[i].tele,
			pc->data[i].addr);

	}
}
//搜索姓名函數(shù)
int FindByName(Contact* pc, char name[])
{
	int i = 0;
	for (i=0; i < pc->sz; i++)
	{
		if (0 == strcmp(pc->data[i].name, name))
		{
			return i;
		}
	}
	return -1;
}

//刪除個(gè)人信息
void DelContact(Contact* pc)
{
	int ret = 0;
	char name[MAX_NAME];
	printf("請(qǐng)輸入要?jiǎng)h除的名字:》");
	scanf("%s", name);
	//查找以下是否存在
	ret=FindByName(pc, name);
	if (ret ==-1)
		printf("刪除的人不存在\n");
	else
	{
		//del
		int j = 0;
		for (j = ret; j < pc->sz-1; j++)
		{
			pc->data[j]=pc->data[j + 1];
		}
		pc->sz--;
		printf("成功刪除!\n");
	}
}

//搜索信息
void SearchContact(Contact* pc)
{
	char name[MAX_NAME];
	printf("請(qǐng)輸入要查找的姓名:》");
	scanf("%s", name);
	int ret = FindByName(pc, name);
	if (ret == -1)
	{
		printf("輸入的是個(gè)球~\n");
	}
	else
	{
		int i = ret;
		printf("姓名:%-10s 性別:%-5s 年齡:%-5d 電話:%-12s 地址:%-30s\n",
			pc->data[i].name,
			pc->data[i].sex,
			pc->data[i].age,
			pc->data[i].tele,
			pc->data[i].addr);
	}

}

//修改信息
void ModifyContact(Contact* pc)
{
	char name[MAX_NAME];
	printf("請(qǐng)輸入要修改的的名字:》");
	scanf("%s", name);
	int ret = FindByName(pc, name);
	if (ret == -1)
	{
		printf("輸入的是個(gè)球~\n");
	}
	else
	{
		printf("請(qǐng)輸入名字;》\n");
		scanf("%s", pc->data[ret].name);
		printf("請(qǐng)輸入性別:》\n");
		scanf("%s", pc->data[ret].sex);
		printf("請(qǐng)輸入年齡:》\n");
		scanf("%d", &(pc->data[ret].age));
		printf("請(qǐng)輸入電話:》\n");
		scanf("%s", pc->data[ret].tele);
		printf("請(qǐng)輸入地址:》\n");
		scanf("%s", pc->data[ret].addr);
		printf("成功修改聯(lián)系人\n");
	}
}
//按年齡排序
int CompareOld(const void* st1, const void* st2)
{
	return (((PeoInfo*)st1)->age - ((PeoInfo*)st2)->age);
}

//按姓名排序
int CompareName(const void* st1, const void* st2)
{
	return strcmp(((PeoInfo*)st1)->name , ((PeoInfo*)st2)->name);
}
//排序信息
void SortContact(Contact* pc)
{
	qsort(pc->data,pc->sz,sizeof(PeoInfo),CompareName);
}

main.c文件

//main.c 主函數(shù)文件代碼 
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
//一個(gè)漢字占兩個(gè)字節(jié)
void menu()
{
	printf("***************************\n");
	printf("     1.add     2.del       \n");
	printf("     3.search  4.modify    \n");
	printf("     5.show    6.sort      \n");
	printf("          0.exit           \n");
	printf("***************************\n");
}

int main()
{
	int input = 0;
	Contact con;
	InitContact(&con);
	do
	{	
		menu();
		printf("請(qǐng)選擇>:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			AddContact(&con);
			break;
		case 2:
			DelContact(&con);
			break;
		case 3:
			SearchContact(&con);
			break;
		case 4:
			ModifyContact(&con);
			break;
		case 5:
			ShowContact(&con);
			break;
		case 6:
			SortContact(&con);
			break;
		case 0:
			break;
		default:
			break;
		}
	} while (input);
	return 0;
}

以上就是C語(yǔ)言實(shí)現(xiàn)靜態(tài)存儲(chǔ)通訊錄的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言靜態(tài)存儲(chǔ)通訊錄的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論