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

C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易通訊錄完整流程

 更新時(shí)間:2022年02月11日 10:35:15   作者:i跑跑  
這篇文章主要為大家介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易通訊錄的完整流程,每個(gè)環(huán)節(jié)都有完整代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助

目標(biāo):通訊錄可以存放1000個(gè)人信息,人的信息:性別名字年齡電話住址 菜單打印

1.增加聯(lián)系人

2.刪除聯(lián)系人

3.查找聯(lián)系人(修改)

4.名字排序聯(lián)系人

5.展示

6.清空

分析:

首先通訊錄存放聯(lián)系人信息,還需知曉聯(lián)系人個(gè)數(shù),因此是個(gè)結(jié)構(gòu)體類型

其次人的信息類型多,因此每個(gè)聯(lián)系人也應(yīng)為結(jié)構(gòu)體類型

說(shuō)明:

每個(gè)標(biāo)題下展示的代碼順序:test.c (主函數(shù)測(cè)試運(yùn)行)? ->? contact.h? (功能函數(shù)聲明)?->? contact.c? (功能函數(shù)實(shí)現(xiàn))

菜單打?。?/h2>
void menu()
{
	printf("***************************\n");
	printf("***  1.add    2.del     ***\n");
	printf("***  3.serch  (modify)  ***\n");
	printf("***  4.sort   5.show    ***\n");
	printf("***  0.exit   6.clear   ***\n");
	printf("***************************\n");
}
 
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("請(qǐng)選擇->");
		scanf("%d",&input);
		switch (input)
		{
		case 1:
			//增加信息
			break;
		case 2:
			//刪除
			break;
		case 3:
			//查找(修改)
			break;
		case 4:
            //按名字排序
			break;
		case 5:
			//顯示聯(lián)系人信息
			break;
		case 6:
			//清空聯(lián)系人
			break;
		case 0:
			//退出通訊錄
			break;
		dafault:
			break;
		}
	} while (input);
}

枚舉優(yōu)化:

上述菜單可以用枚舉對(duì)代碼可讀性進(jìn)行優(yōu)化,改進(jìn)如下:

enum Oprion
{
	Exit,
	Add,
	Del,
	Serch,
	Sort,
	Show,
	Clear
};
 
void menu()
{
	printf("***************************\n");
	printf("***  1.add    2.del     ***\n");
	printf("***  3.serch  (modify)  ***\n");
	printf("***  4.sort   5.show    ***\n");
	printf("***  0.exit   6.clear   ***\n");
	printf("***************************\n");
}
 
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("請(qǐng)選擇->");
		scanf("%d",&input);
		switch (input)
		{
		case Add:
			//增加信息
			break;
		case Del:
			//刪除
			break;
		case Serch:
			//查找(修改)
			break;
		case Sort:
            //按名字排序
			break;
		case Show:
			//顯示聯(lián)系人信息
			break;
		case Clear:
			//清空聯(lián)系人
			break;
		case Exit:
			//退出通訊錄
			break;
		dafault:
			break;
		}
	} while (input);
}

定義結(jié)構(gòu)體?

#define Max 1000
#define name_Max 20
#define sex_Max 5
#define addr_Max 30
#define phone_Max 12
 
//結(jié)構(gòu)體人的信息
typedef struct Peoinfo
{
	char name[name_Max];
	int age;
	char sex[sex_Max];
	char addr[addr_Max];
	char phone[phone_Max];
}Peoinfo;
 
//結(jié)構(gòu)體通訊錄的信息
typedef struct Contact
{
	Peoinfo data[1000]; //存放數(shù)據(jù)
	int sz;  //通訊錄中有效信息的個(gè)數(shù)(里面有幾個(gè)人)
}Contact;

初始化

//完善菜單主函數(shù)部分
int main()
{
	int input = 0;
	Contact con;//通訊錄
	InitContact(&con);//初始化通訊錄
	do
//初始化通訊錄
void InitContact(Contact* pc);
 
 
//初始化通訊錄
void InitContact(Contact* pc)
{
	assert(pc);
	pc->sz = 0;
	memset(pc->data,0,sizeof(pc->data));   //將數(shù)組初始化為0
}

增加信息?

	case Add:
		//增加信息
		AddContact(&con);
		break;
 
 
//增加信息到通訊錄
void AddContact(Contact* pc);
 
 
//增加信息
void AddContact(Contact* pc)
{
	assert(pc);
	if (pc->sz==Max)
	{
		printf("通訊錄滿了,無(wú)法添加\n");
		return 0;
	}
	//輸入信息
	printf("請(qǐng)輸入名字:");
	scanf("%s",pc->data[pc->sz].name);  //增加的信息應(yīng)該在原有效信息位置后,用pc->sz指向?qū)?yīng)位置
	printf("請(qǐng)輸入年齡:");
	scanf("%d", &(pc->data[pc->sz].age)); //age是個(gè)變量,注意需要取地址
	printf("請(qǐng)輸入性別:");
	scanf("%s", pc->data[pc->sz].sex);
	printf("請(qǐng)輸入地址:");
	scanf("%s", pc->data[pc->sz].addr);
	printf("請(qǐng)輸入電話:");
	scanf("%s", pc->data[pc->sz].phone);
 
	pc->sz++;    //元素個(gè)數(shù)加一
	printf("添加成功\n");
}

這里要注意通訊錄已滿的情況,并且添加信息時(shí)要注意是在原有效信息后得地址開(kāi)始添加,防止重復(fù)。

刪除信息?

	case Del:
		//刪除
		DeletContact(&con);
		break;
 
 
//刪除
void DeletContact(Contact* pc);
 
 
int FindByname(Contact*pc, char name[])
{
	int i = 0;
	for (i = 0;i<pc->sz;i++)
	{
		if (strcmp(pc->data[i].name, name)==0)
		{
 
			return i;
		}
	}
	printf("沒(méi)找到\n");
	return -1;
}
 
//刪除信息
void DeletContact(Contact* pc)
{
	char name[name_Max];
	if (pc->sz == 0)
	{
		printf("通訊錄為空,無(wú)法刪除\n");
	}
	printf("請(qǐng)輸入要?jiǎng)h除人的名字:");
	scanf("%s",name);
	//實(shí)現(xiàn)查找函數(shù)
	int pos=FindByname(pc,name); //若找到返回下標(biāo),找不到則返回-1
	if (pos==-1)
	{
		printf("無(wú)此人\n");
	}
	else
	{
		//刪除--要?jiǎng)h除元素后面的元素依次向前覆蓋
		int j = 0;
		for (j = pos;j<pc->sz-1;j++)
		{
			pc->data[j] = pc->data[j + 1];
		}
		pc->sz--;
		printf("刪除成功\n");
	}
}

這里要注意一個(gè)查找函數(shù),輸入名字來(lái)查找聯(lián)系人,找到才能刪除。

查找(修改)?

	case Serch:
		printf("請(qǐng)輸入要查找人的名字:");
		scanf("%s", name);
		FindByname(&con,name);
		break;
 
 
//查找
int FindByname(const Contact*pc, char name[]);
 
 
int FindByname(Contact*pc, char name[])
{
	int i = 0;
	for (i = 0;i<pc->sz;i++)
	{
		if (strcmp(pc->data[i].name, name)==0)
		{
			int put = 0;
			printf("%-10s\t%-5d\t%-5s\t%-15s\t%-20s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].addr, pc->data[i].phone);
            //找到后可以將內(nèi)容展現(xiàn)出來(lái)
			printf("找著了\n請(qǐng)選擇是否修改:1.是   0.否\n");
			scanf("%d",&put);
			if (1 == put)
			{
				Modify(pc->data,i);
			}
			return i;
		}
	}
	printf("沒(méi)找到\n");
	return -1;
}

這里我將第二項(xiàng)刪除功能的查找函數(shù)進(jìn)行聲明使用,并且將修改函數(shù)加入到查找函數(shù)中,兩個(gè)功能聯(lián)合到一起,但是在使用刪除功能的時(shí)候會(huì)出現(xiàn)重復(fù),這里要注意。

修改函數(shù)如下:

//修改
void Modify(Contact* pc,int i)
{
	int bud = 0;
	do
	{
		printf("請(qǐng)選擇需要修改的內(nèi)容\n1.名字     2.年齡     3.性別     4.地址     5.電話     0.取消\n請(qǐng)輸入:");
		scanf("%d", &bud);
		switch (bud)
		{
			char chars[30] = { 0 };
		case 1:
		{
				  printf("請(qǐng)輸入內(nèi)容->");
				  scanf("%s", chars);
				  strcpy(pc->data[i].name , chars);
		}
			break;
		case 2:
		{
				  int num = 0;
				  printf("請(qǐng)輸入內(nèi)容->");
				  scanf("%d", &num);
				  pc->data[i].age = num;
		}
			break;
		case 3:
		{
				  printf("請(qǐng)輸入內(nèi)容->");
				  scanf("%s", chars);
				  strcpy(pc->data[i].sex , chars);
		}
			break;
		case 4:
				  printf("請(qǐng)輸入內(nèi)容->");
				  scanf("%s", chars);
				  strcpy(pc->data[i].addr , chars);
			break;
		case 5:
		{
				  printf("請(qǐng)輸入內(nèi)容->");
				  scanf("%s", chars);
				  strcpy(pc->data[i].phone , chars);
		}
			break;
		dafault:
			break;
		}
	} while (bud);
}

修改用到了字符串函數(shù)strcpy

名字排序?

	case Sort:
		Sortname(&con);
		break;
 
 
//名字排序
void Sortname(Contact* pc);
 
 
//name排序
int cmp_int(const void*e1,const void*e2)
{
	return (strcmp(((Peoinfo*)e1)->name, ((Peoinfo*)e2)->name));
}
 
void Sortname(Contact* pc)
{
	qsort(pc->data,pc->sz,sizeof(pc->data[0]),cmp_int);
	ShowContact(pc);
}

按名字排序這里,我用到了快速排序qsort函數(shù)來(lái)進(jìn)行。排序后調(diào)用展示函數(shù)進(jìn)行打印,來(lái)觀察排序效果。

展示信息?

	case Show:
		//顯示
		ShowContact(&con);
		break;
 
 
//展示信息
void ShowContact(const Contact* pc);
 
 
//展示信息
void ShowContact(const Contact* pc)
{
	assert(pc);
	int i = 0;
	for (i = 0;i < pc->sz;i++)
	{
		printf("%-10s\t%-5d\t%-5s\t%-15s\t%-20s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].addr, pc->data[i].phone);
		//加負(fù)號(hào)左對(duì)齊,加/t統(tǒng)一每個(gè)元素間的距離
	}
}

清空聯(lián)系人?

	case Clear:
	    ClearContact(&con);
		break;
 
 
//清空所有聯(lián)系人
void ClearContact(Contact* pc);
 
 
//清空所有聯(lián)系人
void ClearContact(Contact* pc)
{
	InitContact(pc);
}

清空聯(lián)系人,相當(dāng)于再進(jìn)行一遍初始化通訊錄。

頭文件統(tǒng)一在contact.h里面包含:

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>

?test.c 和 contact.c 統(tǒng)一引用頭文件 contact.h

#include "contact.h"

總程序如下

test.c

#include "contact.h"
 
enum Oprion
{
	Exit,
	Add,
	Del,
	Serch,
	Sort,
	Show,
	Clear
};
 
void menu()
{
	printf("***************************\n");
	printf("***  1.add    2.del     ***\n");
	printf("***  3.serch  (modify)  ***\n");
	printf("***  4.sort   5.show    ***\n");
	printf("***  0.exit   6.clear   ***\n");
	printf("***************************\n");
}
 
int main()
{
	int input = 0;
	Contact con;//通訊錄
	InitContact(&con);//初始化通訊錄
	do
	{
		char name[name_Max];
		menu();
		printf("請(qǐng)選擇->");
		scanf("%d",&input);
		switch (input)
		{
		case Add:
			//增加信息
			AddContact(&con);
			break;
		case Del:
			//刪除
			DeletContact(&con);
			break;
		case Serch:
			printf("請(qǐng)輸入要查找人的名字:");
			scanf("%s", name);
			FindByname(&con,name);
			break;
		//case 4:
		//	//修改
		//	Modify(&con);
		//	break;
		case Sort:
			Sortname(&con);
			break;
		case Show:
			//顯示
			ShowContact(&con);
			break;
		case Clear:
			ClearContact(&con);
			break;
		case Exit:
			printf("退出通訊錄\n");
			break;
		dafault:
			break;
		}
	} while (input);
}

contact.h

//聲明
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
 
#define Max 1000
#define name_Max 20
#define sex_Max 5
#define addr_Max 30
#define phone_Max 12
 
//結(jié)構(gòu)體人的信息
typedef struct Peoinfo
{
	char name[name_Max];
	int age;
	char sex[sex_Max];
	char addr[addr_Max];
	char phone[phone_Max];
}Peoinfo;
 
//結(jié)構(gòu)體通訊錄的信息
typedef struct Contact
{
	Peoinfo data[1000]; //存放數(shù)據(jù)
	int sz;  //通訊錄中有效信息的個(gè)數(shù)(里面有幾個(gè)人)
}Contact;
 
//初始化通訊錄
void InitContact(Contact* pc);
 
//增加信息到通訊錄
void AddContact(Contact* pc);
 
//展示信息
void ShowContact(const Contact* pc);
 
//刪除
void DeletContact(Contact* pc);
 
//查找
int FindByname(const Contact*pc, char name[]);
 
//名字排序
void Sortname(Contact* pc);
 
 
//修改
void Modify(Contact* pc, int i);
 
//清空所有聯(lián)系人
void ClearContact(Contact* pc);

contact.c

#include "contact.h"
 
//初始化通訊錄
void InitContact(Contact* pc)
{
	assert(pc);
	pc->sz = 0;
	memset(pc->data,0,sizeof(pc->data));   //將數(shù)組初始化為0
}
 
//增加信息
void AddContact(Contact* pc)
{
	assert(pc);
	if (pc->sz==Max)
	{
		printf("通訊錄滿了,無(wú)法添加\n");
		return 0;
	}
	//輸入信息
	printf("請(qǐng)輸入名字:");
	scanf("%s",pc->data[pc->sz].name);  //增加的信息應(yīng)該在原有效信息位置后,用pc->sz指向?qū)?yīng)位置
	printf("請(qǐng)輸入年齡:");
	scanf("%d", &(pc->data[pc->sz].age)); //age是個(gè)變量,注意需要取地址
	printf("請(qǐng)輸入性別:");
	scanf("%s", pc->data[pc->sz].sex);
	printf("請(qǐng)輸入地址:");
	scanf("%s", pc->data[pc->sz].addr);
	printf("請(qǐng)輸入電話:");
	scanf("%s", pc->data[pc->sz].phone);
 
	pc->sz++;    //元素個(gè)數(shù)加一
	printf("添加成功\n");
}
 
//展示信息
void ShowContact(const Contact* pc)
{
	assert(pc);
	int i = 0;
	for (i = 0;i < pc->sz;i++)
	{
		printf("%-10s\t%-5d\t%-5s\t%-15s\t%-20s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].addr, pc->data[i].phone);
		//加負(fù)號(hào)左對(duì)齊,加/t統(tǒng)一每個(gè)元素間的距離
	}
}
 
 
int FindByname(Contact*pc, char name[])
{
	int i = 0;
	for (i = 0;i<pc->sz;i++)
	{
		if (strcmp(pc->data[i].name, name)==0)
		{
			int put = 0;
			printf("%-10s\t%-5d\t%-5s\t%-15s\t%-20s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].addr, pc->data[i].phone);
			printf("找著了\n請(qǐng)選擇是否修改:1.是   0.否\n");
			scanf("%d",&put);
			if (1 == put)
			{
				Modify(pc->data,i);
			}
			return i;
		}
	}
	printf("沒(méi)找到\n");
	return -1;
}
 
//刪除信息
void DeletContact(Contact* pc)
{
	char name[name_Max];
	if (pc->sz == 0)
	{
		printf("通訊錄為空,無(wú)法刪除\n");
	}
	printf("請(qǐng)輸入要?jiǎng)h除人的名字:");
	scanf("%s",name);
	//實(shí)現(xiàn)查找函數(shù)
	int pos=FindByname(pc,name); //若找到返回下標(biāo),找不到則返回-1
	if (pos==-1)
	{
		printf("無(wú)此人\n");
	}
	else
	{
		//刪除--要?jiǎng)h除元素后面的元素依次向前覆蓋
		int j = 0;
		for (j = pos;j<pc->sz-1;j++)
		{
			pc->data[j] = pc->data[j + 1];
		}
		pc->sz--;
		printf("刪除成功\n");
	}
}
 
 
//name排序
int cmp_int(const void*e1,const void*e2)
{
	return (strcmp(((Peoinfo*)e1)->name, ((Peoinfo*)e2)->name));
}
 
void Sortname(Contact* pc)
{
	qsort(pc->data,pc->sz,sizeof(pc->data[0]),cmp_int);
	ShowContact(pc);
}
 
//修改
void Modify(Contact* pc,int i)
{
	int bud = 0;
	do
	{
		printf("請(qǐng)選擇需要修改的內(nèi)容\n1.名字     2.年齡     3.性別     4.地址     5.電話     0.取消\n請(qǐng)輸入:");
		scanf("%d", &bud);
		switch (bud)
		{
			char chars[30] = { 0 };
		case 1:
		{
				  printf("請(qǐng)輸入內(nèi)容->");
				  scanf("%s", chars);
				  strcpy(pc->data[i].name , chars);
		}
			break;
		case 2:
		{
				  int num = 0;
				  printf("請(qǐng)輸入內(nèi)容->");
				  scanf("%d", &num);
				  pc->data[i].age = num;
		}
			break;
		case 3:
		{
				  printf("請(qǐng)輸入內(nèi)容->");
				  scanf("%s", chars);
				  strcpy(pc->data[i].sex , chars);
		}
			break;
		case 4:
				  printf("請(qǐng)輸入內(nèi)容->");
				  scanf("%s", chars);
				  strcpy(pc->data[i].addr , chars);
			break;
		case 5:
		{
				  printf("請(qǐng)輸入內(nèi)容->");
				  scanf("%s", chars);
				  strcpy(pc->data[i].phone , chars);
		}
			break;
		dafault:
			break;
		}
	} while (bud);
}
 
//清空所有聯(lián)系人
void ClearContact(Contact* pc)
{
	InitContact(pc);
}

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

相關(guān)文章

  • C語(yǔ)言全面梳理文件操作方法

    C語(yǔ)言全面梳理文件操作方法

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的文件操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-05-05
  • C語(yǔ)言中設(shè)置進(jìn)程優(yōu)先順序的方法

    C語(yǔ)言中設(shè)置進(jìn)程優(yōu)先順序的方法

    這篇文章主要介紹了C語(yǔ)言中設(shè)置進(jìn)程優(yōu)先順序的方法,包括setpriority()函數(shù)和getpriority()函數(shù)以及nice()函數(shù),需要的朋友可以參考下
    2015-08-08
  • C++語(yǔ)言基礎(chǔ) this和static關(guān)鍵字

    C++語(yǔ)言基礎(chǔ) this和static關(guān)鍵字

    這篇文章主要介紹了C++語(yǔ)言基礎(chǔ) this和static關(guān)鍵字,需要的朋友可以參考下
    2020-01-01
  • C語(yǔ)言文件讀寫(xiě)操作介紹與簡(jiǎn)單示例

    C語(yǔ)言文件讀寫(xiě)操作介紹與簡(jiǎn)單示例

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言文件讀寫(xiě)操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C指針原理教程之編譯原理-小型計(jì)算器實(shí)現(xiàn)

    C指針原理教程之編譯原理-小型計(jì)算器實(shí)現(xiàn)

    本文給大家分享的是如何使用C語(yǔ)言編寫(xiě)一個(gè)小型計(jì)算器的實(shí)例代碼,有需要的小伙伴可以參考下
    2019-02-02
  • C語(yǔ)言實(shí)現(xiàn)為無(wú)聲avi視頻添加wave音樂(lè)

    C語(yǔ)言實(shí)現(xiàn)為無(wú)聲avi視頻添加wave音樂(lè)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言如何實(shí)現(xiàn)為無(wú)聲avi視頻添加wave音樂(lè),文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下
    2023-11-11
  • C++中的boost::function庫(kù)簡(jiǎn)介

    C++中的boost::function庫(kù)簡(jiǎn)介

    這篇文章介紹了C++中的boost::function庫(kù),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 深入理解Qt 初始項(xiàng)目代碼

    深入理解Qt 初始項(xiàng)目代碼

    本文解析了Qt項(xiàng)目創(chuàng)建后的主要文件,包括main.cpp、mywidget.h、mywidget.cpp、mywidget.ui和.pro,main.cpp這五個(gè)文件,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • C++基于hook iat改變Messagebox實(shí)例

    C++基于hook iat改變Messagebox實(shí)例

    這篇文章主要介紹了C++基于hook iat改變Messagebox的方法,以實(shí)例形式展示了針對(duì)IAT(即導(dǎo)入地址表)以及hook的操作,有助于深入理解Windows程序設(shè)計(jì)原理,需要的朋友可以參考下
    2014-10-10
  • 冒泡算法的改進(jìn)具體實(shí)現(xiàn)

    冒泡算法的改進(jìn)具體實(shí)現(xiàn)

    這篇文章主要介紹了冒泡算法的改進(jìn)具體實(shí)現(xiàn),有需要的朋友可以參考一下
    2013-12-12

最新評(píng)論

泽普县| 龙南县| 南昌县| 莒南县| 梧州市| 磐安县| 乐至县| 册亨县| 威远县| 吐鲁番市| 兴和县| 电白县| 望城县| 京山县| 汽车| 许昌市| 阳城县| 万山特区| 天气| 德庆县| 榆树市| 塔城市| 科技| 全州县| 共和县| 会泽县| 青冈县| 武义县| 四川省| 绥江县| 临猗县| 周至县| 加查县| 洛扎县| 延川县| 乐昌市| 志丹县| 平乡县| 新兴县| 贵溪市| 鄄城县|