国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

C語言實(shí)現(xiàn)簡單通訊錄

hover_lew / 2292人閱讀

摘要:因此,我們可以將聯(lián)系人信息和通訊錄中已有聯(lián)系人信息保存在一個(gè)結(jié)構(gòu)體中,這樣后面操作我們就不用每次傳入兩個(gè)變量,即聯(lián)系人信息和當(dāng)前有效信息個(gè)數(shù)。

目錄

1.初始化通訊錄

2.實(shí)現(xiàn)通訊錄中的所有功能:

2.1增加聯(lián)系人

2.2刪除一個(gè)聯(lián)系人信息

2.3查找聯(lián)系人并打印信息

2.4修改指定聯(lián)系人信息

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

2.6通過名字排序通訊錄中聯(lián)系人的先后順序

3.整體代碼

3.1創(chuàng)建test.c文件

3.2創(chuàng)建頭文件

3.3創(chuàng)建contact.c文件


1.初始化通訊錄

經(jīng)過一段c語言的學(xué)習(xí),我們可以嘗試著寫一個(gè)簡單的通訊錄,并實(shí)現(xiàn)簡單的功能。

首先我們需要初始化一個(gè)通訊錄,因?yàn)槊總€(gè)通訊錄的聯(lián)系人都會(huì)包括姓名、年齡、性別、電話、地址這五個(gè),因此我們構(gòu)建一個(gè)聯(lián)合體:

//描述人的信息struct PeoInfo{	char name[NAME_MAX];	int age;	char sex[SEX_MAX];	char tele[TELE_MAX];	char addr[ADDR_MAX];};

但是在增加聯(lián)系人的時(shí)候,我們必須知道通訊錄中的聯(lián)系人是否數(shù)量已經(jīng)達(dá)到上限,如果達(dá)到上限,則無法添加聯(lián)系人。

因此,我們可以將聯(lián)系人信息和通訊錄中已有聯(lián)系人信息保存在一個(gè)結(jié)構(gòu)體中,這樣后面操作我們就不用每次傳入兩個(gè)變量,即聯(lián)系人信息和當(dāng)前有效信息個(gè)數(shù)。

//通訊錄struct Contact {	struct PeoInfo data[MAX];//1000個(gè)人信息放在data數(shù)組中	int sz;//記錄當(dāng)前通訊錄有效信息個(gè)數(shù)};

定義好變量之后,我們要將通訊錄初始化,即將里面起始人個(gè)數(shù)設(shè)置為0

void InitContact(struct Contact* pc){	pc->sz = 0;//默認(rèn)沒有信息	memset(pc->data, 0, sizeof(pc->data));}

這里我們用到了memset函數(shù),而這里需要引用的庫函數(shù)的頭文件我們在后面指出。

2.實(shí)現(xiàn)通訊錄中的所有功能:

2.1增加聯(lián)系人

在增加聯(lián)系人之前,我們必須先判斷通訊錄中聯(lián)系人數(shù)量是否已滿,如果滿了,達(dá)到上限,我們則無法添加,最后我們一定要sz+1.

void AddContact(struct Contact* pc){     //增加一個(gè)人的聯(lián)系信息	if (pc->sz == MAX)	{		printf("通訊錄滿了/n");	}	else	{		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);		printf("添加成功/n");		pc->sz++;	}}

2.2刪除一個(gè)聯(lián)系人信息

首先,我們要先輸入被刪聯(lián)系人的名字,并在通訊錄中查找是否存在此人的名字。因?yàn)楹竺嫖覀冞€要使用查找聯(lián)系人這個(gè)功能,因此我們在這里構(gòu)建一個(gè)函數(shù):

如果找到了此人,我們刪除此聯(lián)系人的方法有兩種

方法一:我們用待刪除聯(lián)系人后面的聯(lián)系人的信息對其前面的信息進(jìn)行逐一覆蓋

?方法二:我們找到要?jiǎng)h除的聯(lián)系人之后,用最后一個(gè)人的信息覆蓋要?jiǎng)h除的聯(lián)系人信息。

?上面兩種方法中,第二種方法顯然移動(dòng)次數(shù)更少,但我們還是選擇第一種方法,因?yàn)榈诙N方法會(huì)改變聯(lián)系人的先后順序,最后記得要sz-1

int Fidname(char name[NAME_MAX], const struct Contact * pc){ 	//查找要?jiǎng)h除的聯(lián)系人名字的下標(biāo)	int i = 0;	for (i = 0; i < pc->sz; i++)	{		if (strcmp(pc->data[i].name, name) == 0)		{			return i;//找到了返回下標(biāo)		}		else			return -1;//找不到的情況	}}void DelContact(struct Contact* pc){	//刪除一個(gè)聯(lián)系人的信息	char name[NAME_MAX];	printf("請輸入要?jiǎng)h除聯(lián)系人的姓名:>");	scanf("%s", name);	//查找名字	int pos = Findname(name, pc);//找到了返回下標(biāo)	if (pos == -1)	{		printf("查無此人/n");	}	else	{		int j = 0;		for (j = pos; j < pc->sz - 1; j++)		{			pc->data[j] = pc->data[j+1];		}		printf("刪除成功/n");		pc->sz - 1;//通訊錄中聯(lián)系人信息-1	}}

2.3查找聯(lián)系人并打印信息

我們先輸入要查找的聯(lián)系人名字,找到之后將其打印

void SearchContact(const struct Contact *pc){	//查找聯(lián)系人并打印信息	char name[NAME_MAX];	printf("請輸入要查找的聯(lián)系人姓名/n");	scanf("%s", name);	int pos = Findname(name, pc);	if (pos == -1)	{		printf("查無此人/n");	}	else	{		//打印該聯(lián)系人的全部內(nèi)容		printf("%15s/t%5s/t%8s/t%15s/t%30s/n/n", "name", "age", "sex", "tele", "addr");		printf("%15s/t%5d/t%8s/t%15s/t%30s/n",			pc->data[pos].name,			pc->data[pos].age,			pc->data[pos].sex,			pc->data[pos].tele,			pc->data[pos].addr);	}}

2.4修改指定聯(lián)系人信息

先輸入要修改的聯(lián)系人名字,找到之后將其修改就行

void ModifyContact(struct Contact* pc){	//修改指定的聯(lián)系人信息	char name[NAME_MAX];	printf("請輸入要查找的聯(lián)系人姓名/n");	scanf("%s", name);	int pos = Findname(name, pc);	if (pos == -1)	{		printf("查無此人/n");	}	else	{		printf("請輸入姓名/n");		scanf("%s", pc->data[pos].name);		printf("請輸入年齡/n");		scanf("%d", pc->data[pos].age); 		printf("請輸入性別/n");		scanf("%s", pc->data[pos].sex);		printf("請輸入電話/n");		scanf("%s", pc->data[pos].tele);		printf("請輸入地址/n");		scanf("%s", pc->data[pos].addr);		printf("修改成功/n");	}//就是將該聯(lián)系人信息重新錄入}

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

首先我們遍歷數(shù)組data[1000]中的所有元素,之后循環(huán)sz次,打印數(shù)組所有信息

void ShowContact(struct Contact* pc){	//顯示所有的聯(lián)系人	printf("%15s/t%5s/t%8s/t%15s/t%30s/n/n", "name", "age", "sex", "tele", "addr");	int i = 0;	for (i = 0; i < pc->sz; i++)	{		printf("%15s/t%5d/t%8s/t%15s/t%30s/n",			pc->data[i].name,			pc->data[i].age,			pc->data[i].sex,			pc->data[i].tele,			pc->data[i].addr);    }}

2.6通過名字排序通訊錄中聯(lián)系人的先后順序

使用qsort函數(shù)進(jìn)行排序

//先實(shí)現(xiàn)一個(gè)冒泡排序函數(shù)int Comname(const void* e1, const void* e2){	return strcmp((const char*)e1, (const char*)e2);}void SortContact(struct Contact* pc){	//通過名字排序通訊錄中聯(lián)系人的先后順序	qsort(pc->data, pc->sz, sizeof(struct PeoInfo), Comname);}

2.7清空所有聯(lián)系人


void Empty(struct Contact *pc){    pc->sz=0;    return;}

3.整體代碼

3.1創(chuàng)建test.c文件

首先我們創(chuàng)建一個(gè)test.c文件,實(shí)現(xiàn)簡單的通訊錄框架

#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"void menu(){	printf("*******************************/n");	printf("*****  1. add     2. del  *****/n");	printf("*****  3. search  4. modify****/n");	printf("*****  5. show    6. sort   ***/n");	printf("*****  7. empty   0. exit    **/n");	printf("*******************************/n");}enum Option{	EXIT,	ADD,	DEL,	SEARCH,	MODIFY,	SHOW,	SORT,    Empty};int main(){	int input = 0;	//創(chuàng)建一個(gè)通訊錄	struct 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 SHOW:			ShowContact(&con);			break;		case SORT:			SortContact(&con);			break;        case EMPTY:            EmptyContact(&con)            break;		case EXIT:			printf("退出通訊錄/n");		default:			printf("選擇錯(cuò)誤/n");			break;		}  } while (input);    return 0;}

3.2創(chuàng)建頭文件

其次我們創(chuàng)建一個(gè)contact.h來存放函數(shù)的聲明和一些庫函數(shù)的頭文件,以及結(jié)構(gòu)體的定義

#pragma once#define NAME_MAX 30#define SEX_MAX 5#define TELE_MAX 12#define ADDR_MAX 30#define MAX 1000#include #include #include //描述人的信息struct PeoInfo{	char name[NAME_MAX];	int age;	char sex[SEX_MAX];	char tele[TELE_MAX];	char addr[ADDR_MAX];};//通訊錄struct Contact {	struct PeoInfo data[MAX];//1000個(gè)人信息放在data數(shù)組中	int sz;//記錄當(dāng)前通訊錄有效信息個(gè)數(shù)};//初始化通訊錄void InitContact(struct Contact* pc);//增加聯(lián)系人void AddContact(struct Contact*pc);//刪除一個(gè)聯(lián)系人的信息void DelContact(const struct Contact* pc);//查找聯(lián)系人并打印信息void SearchContact(const struct Contact *pc);//修改指定聯(lián)系人信息void ModifyContact(struct Contact* pc);//顯示所有的聯(lián)系人void ShowContact(struct Contact* pc);//通過名字排序通訊錄中聯(lián)系人的先后順序void SortContact(struct Contact* pc);//清空所有聯(lián)系人void Empty(struct Contact *pc)

3.3創(chuàng)建contact.c文件

最后我們創(chuàng)建一個(gè)contact.c文件來寫出對頭文件中函數(shù)的具體實(shí)現(xiàn)

#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"void InitContact(struct Contact* pc){	pc->sz = 0;//默認(rèn)沒有信息	memset(pc->data, 0, sizeof(pc->data));}void AddContact(struct Contact* pc){     //增加一個(gè)人的聯(lián)系信息	if (pc->sz == MAX)	{		printf("通訊錄滿了/n");	}	else	{		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);		printf("添加成功/n");		pc->sz++;	}}int Fidname(char name[NAME_MAX], const struct Contact * pc){ 	//查找要?jiǎng)h除的聯(lián)系人名字的下標(biāo)	int i = 0;	for (i = 0; i < pc->sz; i++)	{		if (strcmp(pc->data[i].name, name) == 0)		{			return i;//找到了返回下標(biāo)		}		else			return -1;//找不到的情況	}}void DelContact(struct Contact* pc){	//刪除一個(gè)聯(lián)系人的信息	char name[NAME_MAX];	printf("請輸入要?jiǎng)h除聯(lián)系人的姓名:>");	scanf("%s", name);	//查找名字	int pos = Findname(name, pc);//找到了返回下標(biāo)	if (pos == -1)	{		printf("查無此人/n");	}	else	{		int j = 0;		for (j = pos; j < pc->sz - 1; j++)		{			pc->data[j] = pc->data[j+1];		}		printf("刪除成功/n");		pc->sz - 1;//通訊錄中聯(lián)系人信息-1	}}void SearchContact(const struct Contact *pc){	//查找聯(lián)系人并打印信息	char name[NAME_MAX];	printf("請輸入要查找的聯(lián)系人姓名/n");	scanf("%s", name);	int pos = Findname(name, pc);	if (pos == -1)	{		printf("查無此人/n");	}	else	{		//打印該聯(lián)系人的全部內(nèi)容		printf("%15s/t%5s/t%8s/t%15s/t%30s/n/n", "name", "age", "sex", "tele", "addr");		printf("%15s/t%5d/t%8s/t%15s/t%30s/n",			pc->data[pos].name,			pc->data[pos].age,			pc->data[pos].sex,			pc->data[pos].tele,			pc->data[pos].addr);	}}void ModifyContact(struct Contact* pc){	//修改指定的聯(lián)系人信息	char name[NAME_MAX];	printf("請輸入要查找的聯(lián)系人姓名/n");	scanf("%s", name);	int pos = Findname(name, pc);	if (pos == -1)	{		printf("查無此人/n");	}	else	{		printf("請輸入姓名/n");		scanf("%s", pc->data[pos].name);		printf("請輸入年齡/n");		scanf("%d", pc->data[pos].age); 		printf("請輸入性別/n");		scanf("%s", pc->data[pos].sex);		printf("請輸入電話/n");		scanf("%s", pc->data[pos].tele);		printf("請輸入地址/n");		scanf("%s", pc->data[pos].addr);		printf("修改成功/n");	}//就是將該聯(lián)系人信息重新錄入}void ShowContact(struct Contact* pc){	//顯示所有的聯(lián)系人	printf("%15s/t%5s/t%8s/t%15s/t%30s/n/n", "name", "age", "sex", "tele", "addr");	int i = 0;	for (i = 0; i < pc->sz; i++)	{		printf("%15s/t%5d/t%8s/t%15s/t%30s/n",			pc->data[i].name,			pc->data[i].age,			pc->data[i].sex,			pc->data[i].tele,			pc->data[i].addr);    }}//先實(shí)現(xiàn)一個(gè)冒泡排序函數(shù)int Comname(const void* e1, const void* e2){	return strcmp((const char*)e1, (const char*)e2);}void SortContact(struct Contact* pc){	//通過名字排序通訊錄中聯(lián)系人的先后順序	qsort(pc->data, pc->sz, sizeof(struct PeoInfo), Comname);}void Empty(struct Contact *pc){    pc->sz=0;    return;}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/120807.html

相關(guān)文章

  • 用Go語言借助mgo實(shí)現(xiàn)一個(gè)對MongoDB進(jìn)行增刪改查的demo

    摘要:準(zhǔn)備數(shù)據(jù)結(jié)構(gòu)這個(gè)以對一個(gè)簡單的通訊錄進(jìn)行插入查詢更新刪除記錄為例,中包含和兩個(gè)字段下載還沒出官方的驅(qū)動(dòng)包,是現(xiàn)在比較流行的第三方包,能找到的相關(guān)資料也比較多。準(zhǔn)備實(shí)現(xiàn)對的增刪改查操作,先想了下怎么寫測試案例。查找,通過查找該條記錄。 環(huán)境聲明:go version go1.11MongoDB server version 4.0.3 背景 這是我第一次接觸golang和MongoDB,...

    Jingbin_ 評論0 收藏0
  • C語言實(shí)現(xiàn)訊錄管理系統(tǒng)(結(jié)構(gòu)體+枚舉+動(dòng)態(tài)內(nèi)存開辟+文件操作+線性表存放數(shù)據(jù))

    摘要:本篇文章將用語言代碼實(shí)現(xiàn)一個(gè)通訊錄管理系統(tǒng),本片文章博主將會(huì)運(yùn)用到架構(gòu)提,枚舉,動(dòng)態(tài)內(nèi)存開辟和文件操作等。這里存放數(shù)據(jù)的結(jié)構(gòu)是線性表。這個(gè)指針就可以通過動(dòng)態(tài)開辟內(nèi)存來調(diào)整存放信息的大小。擴(kuò)容成功這樣就實(shí)現(xiàn)了檢查通訊錄是否需要擴(kuò)容的函數(shù)。 ...

    PingCAP 評論0 收藏0
  • C語言----實(shí)現(xiàn)動(dòng)態(tài)訊錄

    摘要:文章目錄前言前言一建立文件二編寫函數(shù)三調(diào)試運(yùn)行四成果展示五代碼匯總總結(jié)前言通訊錄是我們?nèi)粘J謾C(jī)中常見的功能之一,綜合語言中結(jié)構(gòu)體,循環(huán),條件語句,動(dòng)態(tài)內(nèi)存分配等等知識(shí)點(diǎn),我們對手機(jī)通訊錄進(jìn)行一個(gè)簡單的實(shí)現(xiàn),下面我們開始講解準(zhǔn)備工作利用語 文章目錄 前言一、建立文件二、編寫函數(shù)三、調(diào)試運(yùn)...

    whlong 評論0 收藏0
  • ??C語言訊錄管理系統(tǒng)(簡易版)??

    ??C語言通訊錄管理系統(tǒng)(簡易版)?? ?一、通訊錄?二、菜單實(shí)現(xiàn)和用戶交互?三、主函數(shù)????1.enum選項(xiàng)????2.switch判斷 ?四、定義聯(lián)系人和通訊錄????1.定義聯(lián)系人結(jié)構(gòu)體????2.定義通訊錄結(jié)構(gòu)體????3.定義結(jié)構(gòu)體變量 ?五、通訊錄初始化?六、新增聯(lián)系人?七、查找聯(lián)系人?八、刪除聯(lián)系人?九、修改聯(lián)系人?十、查看所有聯(lián)系人?十一、清空所有聯(lián)系人?十二、以名字排序所有...

    justCoding 評論0 收藏0
  • C語言進(jìn)階】C語言實(shí)現(xiàn)訊錄(簡易版)

    摘要:前言我們需要用語言模擬一個(gè)通訊錄可以用來存儲(chǔ)個(gè)人的信息每個(gè)人的信息包括姓名電話性別住址年齡功能包括新增聯(lián)系人查找聯(lián)系人刪除聯(lián)系人修改聯(lián)系人查看所有聯(lián)系人以名字排序所有聯(lián)系人注此版本不包含其他內(nèi)容,后續(xù)會(huì)出更加全面的升級(jí)版本通訊錄語言簡易版 前言: 我們需要用C語言模擬一個(gè)通訊錄可以用來存...

    wums 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<