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

基于C語言打造高效便捷的通訊錄管理系統(tǒng)

 更新時間:2024年02月18日 10:34:01   作者:Betty’sSweet  
這篇文章主要為大家詳細介紹了如何基于C語言打造高效便捷的通訊錄管理系統(tǒng),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

引言

在我們大致學習完C語言之后,我們就可以利用目前所學的知識去做一些有意思的項目,而今天貝蒂就帶大家完成一個通訊錄的簡易實現(xiàn),

本章你可能需要的知識:

動態(tài)內存的使用:動態(tài)內存管理

文件的創(chuàng)建與使用:文件操作

1. 通訊錄要求

通訊錄包括每個人的姓名,性別,年齡,電話與地址。

玩家可以自由選擇通訊錄的進出。

玩家可以自由增刪查改通訊錄中的數(shù)據(jù)。

2. 多文件管理

為了方便代碼的管理和保證通訊錄實現(xiàn)邏輯的清晰性,我們將采用多文件管理的模式。

創(chuàng)建頭文件contact.c,包含所有頭文件(其他源文件只需引用它即可),以及所有通訊錄功能的展現(xiàn)。

創(chuàng)建源文件contact.c,負責通訊錄所有功能的具體代碼實現(xiàn)。

創(chuàng)建源文件text.c,負責展現(xiàn)通訊錄實現(xiàn)的總體邏輯。

3. 通訊錄的準備

3.1 預處理信息

為了方便我們后續(xù)更換通訊的信息,我們可以利用來定義通訊錄的具體信息的大小。

#define MAX 100//最大人數(shù)
#define MAX_NAME 20//名字最大長度
#define MAX_SEX 5//性別最大長度
#define MAX_TELE 12//電話最大長度
#define MAX_ADDR 30//地址最大長度

3.2 結構體定義

每個人的通訊錄都要包含姓名,性別,年齡,電話與地址等信息,這時就需要我們創(chuàng)建一個結構體來方便管理。

typedef struct PeoInfo
{
	char name[MAX_NAME];//名字
	int age;//年齡
	char sex[MAX_SEX];//性別
	char tele[MAX_TELE];//電話
	char addr[MAX_ADDR];//地址
}PeoInfo;

而我們需要用這個結構體創(chuàng)建一個大小為100的數(shù)組,并且我們還需要知道當前通訊錄的大小才能進行增刪查改的操作,這兩者息息相關,為了簡化代碼和增加代碼的可讀性,我們可以將這兩者重新定義一個結構體。

typedef struct contact
{
	PeoInfo data[MAX];//一百個人的數(shù)據(jù)
	int sz;//通訊錄的大小
}contact;

4. 簡易菜單

void menu()
{
    printf("***********************************\n");
    printf("**    1.add          2.delete    **\n");
    printf("**    3.search       4.modify    **\n");
    printf("**    5.display      6.sort      **\n");
    printf("**             0.exit            **\n");
    printf("***********************************\n");
}

畫面展示:

5. 通訊錄具體功能

5.1 初始化

我們首先對通訊錄進行初始化。

void InitContact(contact* pc)//初始化
{
	assert(pc);
	pc->sz = 0;
	memset(pc->data, 0, sizeof(pc->data));
}

5.2 展示聯(lián)系人

當用戶選擇5時自動展示通訊錄中的用戶,并且展示用戶過程中需要進行對齊,便于用戶觀看。

void DisplayContact(contact* pc)//打印信息
{
	assert(pc);
	printf("%-15s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "年紀",
		"性別", "電話", "地址");//默認右對齊,修改為左對齊
	//中間也要留下足夠的空間
	for (int i = 0; i < pc->sz; i++)
	{
		printf("%-15s\t%-5d\t%-5s\t%-12s\t%-30s\n", pc->data[i].name,
			pc->data[i].age,
			pc->data[i].sex,
			pc->data[i].tele,
			pc->data[i].addr);
	}
}

5.3 添加聯(lián)系人

用戶選擇1可以自由添加聯(lián)系人,如果通訊錄已滿,則提醒用戶通訊錄已滿,請先清理通訊錄。

(1) 檢查通訊錄是否已滿

如果通訊錄滿了返回0,未滿則返回1。

int CheckContact(contact*pc)//檢查大小
{
	assert(pc);
	if (pc->sz == 100)
	{
		return 0;
	}
	return 1;
}

(2) 添加

當通訊錄未滿時,用戶可以輸入數(shù)據(jù)添加新用戶。

void AddContact(contact* pc)//增加聯(lián)系人
{
	assert(pc);
	int ret = CheckContact(pc);//檢查是否滿了
	if (ret == 0)
	{
		printf("通訊錄已滿,請先清理通訊錄?。n");
		return;
	}
	printf("請輸入聯(lián)系人的姓名:> ");
	scanf("%s", pc->data[pc->sz].name);
	printf("請輸入聯(lián)系人的年齡:> ");
	scanf("%d", &(pc->data[pc->sz].age));
	printf("請輸入聯(lián)系人的性別:> ");
	scanf("%s", pc->data[pc->sz].sex);
	printf("請輸入聯(lián)系人的電話:> ");
	scanf("%s", pc->data[pc->sz].tele);
	printf("請輸入聯(lián)系人的地址:> ");
	scanf("%s", pc->data[pc->sz].addr);
	printf("用戶添加成功!\n");
	pc->sz++;
}

5.4 刪除聯(lián)系人

用戶可以選擇2清理通訊錄,刪除指定聯(lián)系人。

(1) 尋找下標

在刪除指定練習人時我們需通過其姓名尋找該聯(lián)系人的下標。找到返回其下標,否則返回-1、

int FindName(contact* pc, char name[])
{
	assert(pc&&name);
	for (int pos = 0; pos < pc->sz; pos++)
	{
		if (strcmp(pc->data[pos].name, name) == 0)
		{
			return pos;
		}
	}
	return -1;
}

(2) 刪除

通過尋找到的下標,我們可以利用后面的數(shù)據(jù)依次覆蓋來達到刪除的目的。

注意:我們不能覆蓋最后一個數(shù)據(jù)否則就會發(fā)生數(shù)組越界,這時我們只需減去通訊錄此時的大小就好了。

void DeleteContact(contact* pc)//刪除聯(lián)系人
{
	assert(pc);
         assert(pc->sz >= 0);
	char name[MAX_NAME];
	printf("請輸入需要刪除人的姓名:> ");
	scanf("%s", name);
	int pos = FindName(pc, name);
	if (pos == -1)
	{
		printf("通訊錄中并沒有這個人!!\n");
		return;
	}
	for (int i = pos; i < pc->sz - 1; i++)
	{
		pc->data[i] = pc->data[i + 1];//覆蓋
	}
    	printf("刪除成功\n");
	pc->sz--;
}

刪除前:

刪除后 :

5.5 查找聯(lián)系人

通過選擇3查找指定聯(lián)系人,沒有找到則提醒用戶沒有該用戶,查找到就打印其信息。

void SearchContact(contact* pc)//查找聯(lián)系人
{
	assert(pc);
	char name[MAX_NAME];
	printf("請輸入需要查找人的姓名:> ");
	scanf("%s", name);
	int pos = FindName(pc, name);
	if (pos == -1)
	{
		printf("通訊錄中并沒有這個人!!\n");
		return;
	}
	printf("%-15s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "年紀",
		"性別", "電話", "地址");
	printf("%-15s\t%-5d\t%-5s\t%-12s\t%-30s", pc->data[pos].name,
		pc->data[pos].age,
		pc->data[pos].sex,
		pc->data[pos].tele,
		pc->data[pos].addr);
}

5.6 修改聯(lián)系人

我們可以通過選擇4修改指定聯(lián)系人的信息。

void ModifyContact(contact* pc)//修改聯(lián)系人
{
	assert(pc);
	char name[MAX_NAME];
	printf("請輸入需要修改人的姓名:> ");
	scanf("%s", name);
	int pos = FindName(pc, name);
	if (pos == -1)
	{
		printf("通訊錄中并沒有這個人!!\n");
		return;
	}
	printf("請輸入聯(lián)系人的姓名:> ");
	scanf("%s", pc->data[pos].name);
	printf("請輸入聯(lián)系人的年齡:> ");
	scanf("%d", &(pc->data[pos].age));
	printf("請輸入聯(lián)系人的性別:> ");
	scanf("%s", pc->data[pos].sex);
	printf("請輸入聯(lián)系人的電話:> ");
	scanf("%s", pc->data[pos].tele);
	printf("請輸入聯(lián)系人的地址:> ");
	scanf("%s", pc->data[pos].addr);
	printf("修改成功\n");
}

修改前:

修改后:

5.7 排序聯(lián)系人

我們可以選擇6對通訊錄進行排序,可以按照姓名,年紀,性別,電話,地址排序。

int cmp1(const void* p1, const void* p2)
{
	return strcmp(((PeoInfo*)p1)->name, ((PeoInfo*)p2)->name);
}
int cmp2(const void* p1, const void* p2)
{
	return ((PeoInfo*)p1)->age- ((PeoInfo*)p2)->age;
}
int cmp3(const void* p1, const void* p2)
{
	return strcmp(((PeoInfo*)p1)->sex, ((PeoInfo*)p2)->sex);
}
int cmp4(const void* p1, const void* p2)
{
	return strcmp(((PeoInfo*)p1)->tele, ((PeoInfo*)p2)->tele);
}
int cmp5(const void* p1, const void* p2)
{
	return strcmp(((PeoInfo*)p1)->addr, ((PeoInfo*)p2)->addr);
}
void SortByName(contact* pc)
{
	qsort(pc, pc->sz, sizeof(PeoInfo), cmp1);
}
void SortByAge(contact* pc)
{
	qsort(pc, pc->sz, sizeof(PeoInfo), cmp2);
}
void SortBySex(contact* pc)
{
	qsort(pc, pc->sz, sizeof(PeoInfo), cmp3);
}
void SortByTele(contact* pc)
{
	qsort(pc, pc->sz, sizeof(PeoInfo), cmp4);
}
void SortByAddr(contact* pc)
{
	qsort(pc, pc->sz, sizeof(PeoInfo), cmp4);
}
void SortContact(contact* pc)//排序聯(lián)系人
{
	assert(pc);
	printf("請選擇如何排序:> ");
	char input[20];
	scanf("%s", input);
	if (strcmp(input, "姓名")==0)
	{
		SortByName(pc);//按姓名排序
	}
	else if (strcmp(input, "年齡") == 0)
	{
		SortByAge(pc);//按年齡排序
	}
	else if (strcmp(input, "性別") == 0)
	{
		SortBySex(pc);//按性別排序
	}
	else if (strcmp(input, "電話") == 0)
	{
		SortByTele(pc);//按電話排序
	}
	else if (strcmp(input, "地址") == 0)
	{
		SortByAddr(pc);//按地址排序
	}
	else
	{
		printf("輸入非法,請重新輸入\n");
	}
}

6. 改進通訊錄

6.1 動態(tài)內存開辟

上述通訊錄有一個致命的缺點——通訊錄大小固定,為了解決這個問題我可以使用我們前面學過的動態(tài)內存開辟

(1) 新增變量

為了方便我們知道此時的容量大小,我們將在結構體中加入新的變量。

typedef struct contact
{
	PeoInfo *data;//動態(tài)開辟的數(shù)據(jù)
	int sz;//通訊錄的大小
	int capacity;//通訊錄的容量
}contact;

(2) 初始化

void InitContact(contact* pc)//初始化
{
	assert(pc);
	pc->sz = 0;
	pc->data = (PeoInfo*)calloc(2, sizeof(PeoInfo));
	if (pc->data == NULL)
	{
		perror("InitContact:");
		return;
	}
	pc->capacity = 2;
	/*memset(pc->data, 0, sizeof(pc->data));*/
}

(3) 增容

當通訊錄用戶數(shù)量滿時增加內存空間。

void CheckCapacity(contact* pc)//增容
{
	if (pc->sz == pc->capacity)
	{
		PeoInfo* tmp = (PeoInfo*)realloc(pc->data, (pc->capacity + 2) * sizeof(PeoInfo));
		if (tmp != NULL)
		{
			pc->data = tmp;
		}
		else
		{
			perror("CheckCapacity:");
			return;
		}
		pc->capacity += 2;
		printf("增容成功\n");
	}
}

6.2 文件保存

我們發(fā)現(xiàn)每當我們關閉程序時我們寫入的數(shù)據(jù)會被清空,我們要想保存上次寫入的數(shù)據(jù)就應該使用文件操作。

(1) 加載數(shù)據(jù)

每次初始化時就要將上次文件的數(shù)據(jù)導入進來。

void LoadContact(contact* pc)//加載上次數(shù)據(jù)
{
	PeoInfo tmp = { 0 };
	FILE* pf = fopen("contact.txt", "rb");
	if (pf == NULL)
	{
		return;
	}
	//讀取文件,存放到通訊錄
	while (fread(&tmp, sizeof(PeoInfo), 1, pf))
	//返回值為0就是遇見文件末尾
	{
		CheckCapacity(pc);
		pc->data[pc->sz] = tmp;
		pc->sz++;
	}

	fclose(pf);
	pf = NULL;
}

(2) 保存數(shù)據(jù)

當程序正常結束時保存數(shù)據(jù)。

void SaveContact(contact* pc)//保存數(shù)據(jù)
{
	FILE* pfWrite = fopen("contact.txt", "wb");
	if (pfWrite == NULL)
	{
		perror("fopen:");
		return;
	}
	//寫通訊錄中數(shù)據(jù)到文件中
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		fwrite(&(pc->data[i]), sizeof(PeoInfo), 1, pfWrite);
	}
	fclose(pfWrite);
	pfWrite = NULL;
	printf("保存成功\n");

}

7. 通訊錄邏輯的搭建

用戶通過數(shù)字選擇功能。

每次選擇完之后返回菜單。

選擇退出之后保存數(shù)據(jù),程序結束。

enum Option
	//利用枚舉增加代碼的可讀性
{
	EXIT,//0
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	DISPLAY,
	SORT
};
void test()
{
	int input = 0;
	contact con;
	InitContact(&con);
	do
	{
		menu();
		printf("請輸入你的選擇:>");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			AddContact(&con);
			break;
		case DEL:
			DeleteContact(&con);
			break;
		case SEARCH:
			SearchContact(&con);
			break;
		case MODIFY:
			ModifyContact(&con);
			break;
		case DISPLAY:
			DisplayContact(&con);
			break;
		case SORT:
			SortContact(&con);
			break;
		case EXIT:
			SaveContact(&con);//退出保存數(shù)據(jù)
		    DestroyContact(&con);
			break;
		default:
			printf("非法輸入,請重新輸入\n");
			break;
		}
	} while (input);
}
int main()
{
	test();
	return 0;
}

8. 完整代碼

8.1 contact.h

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<assert.h>
#define MAX_NAME 20//名字最大長度
#define MAX_SEX 5//性別最大長度
#define MAX_TELE 12//電話最大長度
#define MAX_ADDR 30//地址最大長度
typedef struct PeoInfo
{
	char name[MAX_NAME];//名字
	int age;//年齡
	char sex[MAX_SEX];//性別
	char tele[MAX_TELE];//電話
	char addr[MAX_ADDR];//地址
}PeoInfo;
typedef struct contact
{
	PeoInfo *data;//動態(tài)開辟的數(shù)據(jù)
	int sz;//通訊錄的大小
	int capacity;//通訊錄的容量
}contact;
void InitContact(contact* pc);//初始化
void DisplayContact(contact* pc);//打印信息
void AddContact(contact* pc);//增加聯(lián)系人
void DeleteContact(contact* pc);//刪除聯(lián)系人
void SearchContact(contact* pc);//查找聯(lián)系人
void ModifyContact(contact* pc);//修改聯(lián)系人
void SortContact(contact* pc);//排序聯(lián)系人
void SaveContact(contact* pc);//保存數(shù)據(jù)
void DestroyContact(contact* pc);//銷毀內存

8.2 contact.c

#include"contact.h"
void CheckCapacity(contact* pc)//增容
{
	if (pc->sz == pc->capacity)
	{
		PeoInfo* tmp = (PeoInfo*)realloc(pc->data, (pc->capacity + 2) * sizeof(PeoInfo));
		if (tmp != NULL)
		{
			pc->data = tmp;
		}
		else
		{
			perror("CheckCapacity:");
			return;
		}
		pc->capacity += 2;
		printf("增容成功\n");
	}
}
void LoadContact(contact* pc)//加載上次數(shù)據(jù)
{
	PeoInfo tmp = { 0 };
	FILE* pf = fopen("contact.txt", "rb");
	if (pf == NULL)
	{
		return;
	}
	//讀取文件,存放到通訊錄
	while (fread(&tmp, sizeof(PeoInfo), 1, pf))
	//返回值為0就是遇見文件末尾
	{
		CheckCapacity(pc);
		pc->data[pc->sz] = tmp;
		pc->sz++;
	}

	fclose(pf);
	pf = NULL;
}

void InitContact(contact* pc)//初始化
{
	assert(pc);
	pc->sz = 0;
	pc->data = (PeoInfo*)calloc(2, sizeof(PeoInfo));
	if (pc->data == NULL)
	{
		perror("InitContact:");
		return;
	}
	pc->capacity = 2;
	LoadContact(pc);
	/*memset(pc->data, 0, sizeof(pc->data));*/
}
void DisplayContact(contact* pc)//打印信息
{
	assert(pc);
	printf("%-15s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "年紀",
		"性別", "電話", "地址");//默認右對齊,修改為左對齊
	//中間也要留下足夠的空間
	for (int i = 0; i < pc->sz; i++)
	{
		printf("%-15s\t%-5d\t%-5s\t%-12s\t%-30s\n", pc->data[i].name,
			pc->data[i].age,
			pc->data[i].sex,
			pc->data[i].tele,
			pc->data[i].addr);
	}
}

void AddContact(contact* pc)//增加聯(lián)系人
{
	assert(pc);
	CheckCapacity(pc);//檢查是否滿了
	printf("請輸入聯(lián)系人的姓名:> ");
	scanf("%s", pc->data[pc->sz].name);
	printf("請輸入聯(lián)系人的年齡:> ");
	scanf("%d", &(pc->data[pc->sz].age));
	printf("請輸入聯(lián)系人的性別:> ");
	scanf("%s", pc->data[pc->sz].sex);
	printf("請輸入聯(lián)系人的電話:> ");
	scanf("%s", pc->data[pc->sz].tele);
	printf("請輸入聯(lián)系人的地址:> ");
	scanf("%s", pc->data[pc->sz].addr);
	printf("用戶添加成功!\n");
	pc->sz++;
}
int FindName(contact* pc, char name[])
{
	assert(pc&&name);
	for (int pos = 0; pos < pc->sz; pos++)
	{
		if (strcmp(pc->data[pos].name, name) == 0)
		{
			return pos;
		}
	}
	return -1;
}
void DeleteContact(contact* pc)//刪除聯(lián)系人
{
	assert(pc);
	assert(pc->sz >= 0);
	char name[MAX_NAME];
	printf("請輸入需要刪除人的姓名:> ");
	scanf("%s", name);
	int pos = FindName(pc, name);
	if (pos == -1)
	{
		printf("通訊錄中并沒有這個人!!\n");
		return;
	}
	for (int i = pos; i < pc->sz - 1; i++)
	{
		pc->data[i] = pc->data[i + 1];//覆蓋
	}
	printf("刪除成功\n");
	pc->sz--;
}
void SearchContact(contact* pc)//查找聯(lián)系人
{
	assert(pc);
	char name[MAX_NAME];
	printf("請輸入需要查找人的姓名:> ");
	scanf("%s", name);
	int pos = FindName(pc, name);
	if (pos == -1)
	{
		printf("通訊錄中并沒有這個人!!\n");
		return;
	}
	printf("%-15s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "年紀",
		"性別", "電話", "地址");
	printf("%-15s\t%-5d\t%-5s\t%-12s\t%-30s", pc->data[pos].name,
		pc->data[pos].age,
		pc->data[pos].sex,
		pc->data[pos].tele,
		pc->data[pos].addr);
}
void ModifyContact(contact* pc)//修改聯(lián)系人
{
	assert(pc);
	char name[MAX_NAME];
	printf("請輸入需要修改人的姓名:> ");
	scanf("%s", name);
	int pos = FindName(pc, name);
	if (pos == -1)
	{
		printf("通訊錄中并沒有這個人!!\n");
		return;
	}
	printf("請輸入聯(lián)系人的姓名:> ");
	scanf("%s", pc->data[pos].name);
	printf("請輸入聯(lián)系人的年齡:> ");
	scanf("%d", &(pc->data[pos].age));
	printf("請輸入聯(lián)系人的性別:> ");
	scanf("%s", pc->data[pos].sex);
	printf("請輸入聯(lián)系人的電話:> ");
	scanf("%s", pc->data[pos].tele);
	printf("請輸入聯(lián)系人的地址:> ");
	scanf("%s", pc->data[pos].addr);
	printf("修改成功\n");
}
int cmp1(const void* p1, const void* p2)
{
	return strcmp(((PeoInfo*)p1)->name, ((PeoInfo*)p2)->name);
}
int cmp2(const void* p1, const void* p2)
{
	return ((PeoInfo*)p1)->age- ((PeoInfo*)p2)->age;
}
int cmp3(const void* p1, const void* p2)
{
	return strcmp(((PeoInfo*)p1)->sex, ((PeoInfo*)p2)->sex);
}
int cmp4(const void* p1, const void* p2)
{
	return strcmp(((PeoInfo*)p1)->tele, ((PeoInfo*)p2)->tele);
}
int cmp5(const void* p1, const void* p2)
{
	return strcmp(((PeoInfo*)p1)->addr, ((PeoInfo*)p2)->addr);
}
void SortByName(contact* pc)
{
	qsort(pc, pc->sz, sizeof(PeoInfo), cmp1);
}
void SortByAge(contact* pc)
{
	qsort(pc, pc->sz, sizeof(PeoInfo), cmp2);
}
void SortBySex(contact* pc)
{
	qsort(pc, pc->sz, sizeof(PeoInfo), cmp3);
}
void SortByTele(contact* pc)
{
	qsort(pc, pc->sz, sizeof(PeoInfo), cmp4);
}
void SortByAddr(contact* pc)
{
	qsort(pc, pc->sz, sizeof(PeoInfo), cmp4);
}
void SortContact(contact* pc)//排序聯(lián)系人
{
	assert(pc);
	printf("請選擇如何排序:> ");
	char input[20] = { 0 };
	scanf("%s", input);
	if (strcmp(input, "姓名")==0)
	{
		SortByName(pc);//按姓名排序
	}
	else if (strcmp(input, "年齡") == 0)
	{
		SortByAge(pc);//按年齡排序
	}
	else if (strcmp(input, "性別") == 0)
	{
		SortBySex(pc);//按性別排序
	}
	else if (strcmp(input, "電話") == 0)
	{
		SortByTele(pc);//按電話排序
	}
	else if (strcmp(input, "地址") == 0)
	{
		SortByAddr(pc);//按地址排序
	}
	else
	{
		printf("輸入非法,請重新輸入\n");
	}
}
void DestroyContact(contact* pc)
{
	free(pc->data);
	pc->data= NULL;
	pc->capacity = 0;
	pc->sz = 0;
	printf("銷毀成功\n");
}
void SaveContact(contact* pc)//保存數(shù)據(jù)
{
	FILE* pfWrite = fopen("contact.txt", "wb");
	if (pfWrite == NULL)
	{
		perror("fopen:");
		return;
	}
	//寫通訊錄中數(shù)據(jù)到文件中
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		fwrite(&(pc->data[i]), sizeof(PeoInfo), 1, pfWrite);
	}
	fclose(pfWrite);
	pfWrite = NULL;
	printf("保存成功\n");

}

8.3 text.c

#include"contact.h"

enum Option
	//利用枚舉增加代碼的可讀性
{
	EXIT,//0
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	DISPLAY,
	SORT
};

void menu()
{
    printf("***********************************\n");
    printf("**    1.add          2.delete    **\n");
    printf("**    3.search       4.modify    **\n");
    printf("**    5.display      6.sort      **\n");
    printf("**             0.exit            **\n");
    printf("***********************************\n");
}
void test()
{
	int input = 0;
	contact con;
	InitContact(&con);
	do
	{
		menu();
		printf("請輸入你的選擇:>");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			AddContact(&con);
			break;
		case DEL:
			DeleteContact(&con);
			break;
		case SEARCH:
			SearchContact(&con);
			break;
		case MODIFY:
			ModifyContact(&con);
			break;
		case DISPLAY:
			DisplayContact(&con);
			break;
		case SORT:
			SortContact(&con);
			break;
		case EXIT:
			SaveContact(&con);//退出保存數(shù)據(jù)
		    DestroyContact(&con);
			break;
		default:
			printf("非法輸入,請重新輸入\n");
			break;
		}
	} while (input);
}

int main()
{
	test();
	return 0;
}

以上就是基于C語言打造高效便捷的通訊錄管理系統(tǒng)的詳細內容,更多關于C語言通訊錄管理系統(tǒng)的資料請關注腳本之家其它相關文章!

相關文章

  • 基于C++11手擼前端Promise及應用與優(yōu)勢

    基于C++11手擼前端Promise及應用與優(yōu)勢

    本文將從一個手寫的 C++ Promise實現(xiàn)(基于 C++11)出發(fā),分析其工作原理,并與 std::promise 進行對比,探討兩者的異同點以及適用場景,感興趣的朋友跟隨小編一起看看吧
    2025-10-10
  • C語言調試手段:鎖定錯誤的實現(xiàn)方法

    C語言調試手段:鎖定錯誤的實現(xiàn)方法

    本篇文章是對在C語言調試中,鎖定錯誤的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 浮點數(shù)乘法和整形乘除法的效率經驗比較

    浮點數(shù)乘法和整形乘除法的效率經驗比較

    這篇文章主要為大家介紹了浮點數(shù)乘法和整形乘除法的效率經驗比較,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 應用程序操作NorFlash示例代碼分享(norflash接口使用方法)

    應用程序操作NorFlash示例代碼分享(norflash接口使用方法)

    相對于操作NandFlash,操作NorFlash相對簡單,因為基本不需要考慮壞塊,NorFlash也沒有OOB區(qū)域,也跟ECC沒有關系。讀寫擦除相對容易,下面看個例子吧
    2013-12-12
  • C語言用棧模擬實現(xiàn)隊列問題詳解

    C語言用棧模擬實現(xiàn)隊列問題詳解

    本片文章帶你分析如何用兩個棧,并且只使用棧的基本功能來模擬實現(xiàn)隊列,其中同樣只實現(xiàn)隊列的基本功能,感興趣的朋友來看看吧
    2022-04-04
  • C語言基礎 strlen 函數(shù)

    C語言基礎 strlen 函數(shù)

    這篇文章主要介紹了C語言基礎 strlen 函數(shù),在C 語言中,char 字符串也是一種非常重要的數(shù)據(jù)類型,我們可以使用 strlen 函數(shù)獲取字符串長度,這就是C語言strlen 函數(shù)的作用,下面我們來簡單介紹該內容,需要的朋友可以參考以下
    2021-10-10
  • 深入了解一下C語言中的柔性數(shù)組

    深入了解一下C語言中的柔性數(shù)組

    柔性數(shù)組是在C99中定義的,即結構體的最后一個元素允許是未知大小的數(shù)組,這就叫柔性數(shù)組。這篇文章將通過簡單的示例為大家介紹一下柔性數(shù)組的使用,感興趣的可以了解一下
    2023-02-02
  • C++操作SQLite簡明教程

    C++操作SQLite簡明教程

    這篇文章主要介紹了C++操作SQLite簡明教程,包含創(chuàng)建表、插入數(shù)據(jù)、查詢數(shù)據(jù)等常用操作,需要的朋友可以參考下
    2014-06-06
  • OpenCV基于距離變換和分水嶺實現(xiàn)圖像分割

    OpenCV基于距離變換和分水嶺實現(xiàn)圖像分割

    圖像分割是根據(jù)灰度、顏色、紋理和形狀等特征,把圖像分成若干個特定的、具有獨特性質的區(qū)域。本文將基于距離變換和分水嶺實現(xiàn)圖像分割,需要的可以了解一下
    2022-09-09
  • c語言求1+2+...+n的解決方法

    c語言求1+2+...+n的解決方法

    本篇文章是對在c語言中求1+2+...+n的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

瑞金市| 兖州市| 冷水江市| 宁明县| 新宾| 芦溪县| 商都县| 宜兰县| 永善县| 衡山县| 航空| 土默特左旗| 东兴市| 巴彦县| 儋州市| 乌拉特后旗| 昌图县| 松滋市| 屏山县| 丹江口市| 宜兴市| 新乡市| 遂川县| 应城市| 金溪县| 南澳县| 武汉市| 昔阳县| 根河市| 松原市| 陆川县| 通辽市| 连州市| 大洼县| 夹江县| 安泽县| 冷水江市| 富阳市| 永靖县| 周至县| 九江市|