国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

靜態(tài)版通訊錄——C語言【詳解+全部碼源】

這篇具有很好參考價值的文章主要介紹了靜態(tài)版通訊錄——C語言【詳解+全部碼源】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言:

我們用C語言實現一個可以存放100個人信息的通訊錄
每個人的信息包括:
姓名、性別、年齡、住址、電話
通訊錄的功能包括:

  1. 增加聯系人
  2. 刪除指定聯系人
  3. 查找指定聯系人
  4. 修改指定聯系人
  5. 顯示聯系人信息
  6. 排序聯系人(按照年齡/名字)

通訊錄的實現

1. 設計框架

與我們之前的掃雷和三子棋項目設計一樣,把程序分裝在三個文件中:

test.c:通訊錄的總體邏輯,測試通訊錄的相關功能
contact.c:通訊錄的實現模塊
contact.h:通訊錄的各種聲明,包括庫函數、自定義函數以及自定義結構體的聲明

2. 菜單函數的實現

實現通訊錄建立一個菜單是很重要的,并且菜單要包含通訊錄所有的功能,以便于用戶的操作

代碼如下:

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

3. 菜單選項功能函數的實現

有了菜單之后我們還需要創(chuàng)建一個函數來進行菜單的選擇功能,比如輸入1,就會增加聯系人,輸入0,就可以退出程序

看代碼:

enum Option//使用枚舉變量來定義
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SHOW,
	SORT
};
int main()
{
	int input = 0;
	Contact con;//通訊錄
	//初始化通訊錄
	//加載文件的信息到通訊錄中
	InitContact(&con);
	int input = 0;
	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 EXIT:
			printf("退出通訊錄\n");
			break;
		default:
			printf("選擇錯誤\n");
			break;
		}
	} while (input);

	return 0;
}

這里我們用了switch語句和do····while語句來實現

4. 聯系人結構體的創(chuàng)建

用第一個結構體 PeoInfo存放人的信息,第二個結構體Contact是通訊錄的信息,data是以第一個結構體為類型的數組,用sz記錄通訊錄里當前有幾個人的信息。

代碼如下:

//表示一個人的信息
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[MAX];//存放數據
	int sz;//記錄通訊錄中的有效信息個數
}Contact;

5. 全局變量的定義

為了后期處理數據方便,我們用宏來實現這個功能

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

#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30

通訊錄功能的實現

1. 初始化通訊錄

在對data初始化時,我們使用一個memset函數來實現
此函數需要引用string的頭文件

void InitContact(Contact* pc)
{
	pc->sz = 0;
	memset(pc->data, 0, sizeof(pc->data));
}

2. 增加聯系人信息

訪問通訊錄結構體里的數組中的元素然后輸出就可以了
結構體對象訪問用:.
指針訪問用:->

代碼如下:

void AddContact(Contact* pc)
{
	if (pc->sz == MAX)
	{
		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("添加成功\n");
}

3. 打印通訊錄

這里我們用for循環(huán)來打印通訊錄

void ShowContact(const Contact* pc)
{
	int i = 0;
	//打印標題
	printf("%-10s %-4s %-5s %-12s %-30s\n", "姓名", "年齡", "性別", "電話", "地址");
	//打印數據
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-10s %-4d %-5s %-12s %-30s\n",
			pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
	}
}

4. 刪除指定聯系人

因為在刪除聯系人和查找聯系人時都需要查找的功能,所以我們在這里分裝了一個查找函數
代碼如下:

static int FindByName(const Contact* pc, char name[])
//加上static使得函數只能在自己所在的.c文件內部使用
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (0 == strcmp(pc->data[i].name, name))
		{
			return i;
		}
	}
	return -1;
}

我們利用查找函數查找下標,查找到我們需要刪除的聯系人的下標,然后對他進行刪除,刪除后我們要把后邊的元素向前移動,利用for循環(huán)來移動

代碼如下:

void DelContact(Contact* pc)
{
	char name[MAX_NAME] = { 0 };
	if (pc->sz == 0)
	{
		printf("通訊錄為空,無法刪除\n");
		return;
	}
	//刪除
	//1. 找到要刪除的人 - 位置(下標)
	printf("輸入要刪除人的名字:>");
	scanf("%s", name);
	int pos = FindByName(pc, name);
typedef struct Contact
{
	PeoInfo data[MAX];//存放數據
	int sz;//記錄通訊錄中的有效信息個數
}Contact, *pContact;
	if (pos == -1)
	{
		printf("要刪除的人不存在\n");
		return;
	}
	int i = 0;
	//2. 刪除 - 刪除pos位置上的數據
	for (i = pos; i < pc->sz - 1; i++)
	{
		pc->data[i] = pc->data[i + 1];
	}
	pc->sz--;
	printf("刪除成功\n");
}

另一種寫法:

typedef struct Contact
{
	PeoInfo data[MAX];//存放數據
	int sz;//記錄通訊錄中的有效信息個數
}Contact, *pContact;
void DelContact(pContact pc);
void SearchContact(pContact pc);

5. 查找聯系人

代碼如下:

void SearchContact(const Contact* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("請輸入要查找人的名字:>");
	scanf("%s", name);
	//查找
	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("要查找的人不存在\n");
		return;
	}
	//打印
	printf("%-10s %-4s %-5s %-12s %-30s\n", "姓名", "年齡", "性別", "電話", "地址");
	//打印數據
	printf("%-10s %-4d %-5s %-12s %-30s\n",
		pc->data[pos].name,
		pc->data[pos].age,
		pc->data[pos].sex,
		pc->data[pos].tele,
		pc->data[pos].addr);
}

6. 修改通訊錄

代碼如下:

void ModifyContact(Contact* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("請輸入要修改人的名字:>");
	scanf("%s", name);
	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("要修改的人不存在\n");
		return;
	}
	//修改
	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("修改成功\n");
}

7. 排序通訊錄

用qsort函數來排序,需要提供比較函數,這里假設我們用名字來排序

代碼如下:

//按照名字來排序
int cmp_by_name(const void* e1, const void* e2)
{
	return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
}

void SortContact(Contact* pc)
{
	qsort(pc->data, pc->sz, sizeof(PeoInfo), cmp_by_name);
	printf("排序成功\n");
}

完整代碼

contact.h

#pragma once

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

#define MAX 100
#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[MAX];//存放數據
	int sz;//記錄通訊錄中的有效信息個數
}Contact;

//初始化通訊錄
void InitContact(Contact* pc);

//增加指定聯系人
void AddContact(Contact* pc);

//顯示聯系人信息
void ShowContact(const Contact* pc);

//刪除指定聯系人
void DelContact(Contact* pc);

//查找指定聯系人
void SearchContact(const Contact* pc);

//修改通訊錄
void ModifyContact(Contact* pc);

//排序通訊錄元素
void SortContact(Contact* pc);

contact.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
//初始化通訊錄
void InitContact(Contact* pc)
{
	pc->sz = 0;
	memset(pc->data, 0, sizeof(pc->data));
}

//增加聯系人
void AddContact(Contact* pc)
{
	if (pc->sz == MAX)
	{
		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("添加成功\n");
}

//顯示聯系人信息
void ShowContact(const Contact* pc)
{
	int i = 0;
	//打印標題
	printf("%-10s %-4s %-5s %-12s %-30s\n", "姓名", "年齡", "性別", "電話", "地址");
	//打印數據
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-10s %-4d %-5s %-12s %-30s\n",
			pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
	}
}

static int FindByName(const Contact* pc, char name[])
//加上static使得函數只能在自己所在的.c文件內部使用
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (0 == strcmp(pc->data[i].name, name))
		{
			return i;
		}
	}
	return -1;
}

//刪除指定聯系人
void DelContact(Contact* pc)
{
	char name[MAX_NAME] = { 0 };
	if (pc->sz == 0)
	{
		printf("通訊錄為空,無法刪除\n");
		return;
	}
	//刪除
	//1. 找到要刪除的人 - 位置(下標)
	printf("輸入要刪除人的名字:>");
	scanf("%s", name);
	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("要刪除的人不存在\n");
		return;
	}
	int i = 0;
	//2. 刪除 - 刪除pos位置上的數據
	for (i = pos; i < pc->sz - 1; i++)
	{
		pc->data[i] = pc->data[i + 1];
	}
	pc->sz--;
	printf("刪除成功\n");
}

//查找指定聯系人
void SearchContact(const Contact* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("請輸入要查找人的名字:>");
	scanf("%s", name);
	//查找
	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("要查找的人不存在\n");
		return;
	}
	//打印
	printf("%-10s %-4s %-5s %-12s %-30s\n", "姓名", "年齡", "性別", "電話", "地址");
	//打印數據
	printf("%-10s %-4d %-5s %-12s %-30s\n",
		pc->data[pos].name,
		pc->data[pos].age,
		pc->data[pos].sex,
		pc->data[pos].tele,
		pc->data[pos].addr);
}

//修改通訊錄
void ModifyContact(Contact* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("請輸入要修改人的名字:>");
	scanf("%s", name);
	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("要修改的人不存在\n");
		return;
	}
	//修改
	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("修改成功\n");
}

//排序通訊錄元素
//按照名字來排序
int cmp_by_name(const void* e1, const void* e2)
{
	return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
}

void SortContact(Contact* pc)
{
	qsort(pc->data, pc->sz, sizeof(PeoInfo), cmp_by_name);
	printf("排序成功\n");
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
void menu()
{
	printf("********************************\n");
	printf("*****       1. add           ***\n");
	printf("*****       2. del           ***\n");
	printf("*****       3. search        ***\n");
	printf("*****       4. modify        ***\n");
	printf("*****       5. show          ***\n");
	printf("*****       6. sort          ***\n");
	printf("*****       0. exit          ***\n");
	printf("********************************\n");
}
enum Option//使用枚舉變量來定義
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SHOW,
	SORT
};

int main()
{
	int input = 0;
	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 EXIT:
			printf("退出通訊錄\n");
			break;
		default:
			printf("選擇錯誤\n");
			break;
		}
	} while (input);

	return 0;
}

運行結果如圖所示:

靜態(tài)版通訊錄——C語言【詳解+全部碼源】

這個靜態(tài)版通訊錄還是有很多不足的地方

1.通訊錄大小是固定大?。ㄖ荒苁?00個元素)
2.當通訊錄退出之后,重新運行,之前的信息都丟了
這是因為當前的通訊錄信息保存在內存中的,程序退出,內存就收回,下一次重新運行程序,內存重新分配,之前的數據就不見了
數據能否永久保存?——文件

下次七七會更新動態(tài)版的通訊錄,來解決這個問題,一起期待吧!
靜態(tài)版通訊錄——C語言【詳解+全部碼源】文章來源地址http://www.zghlxwxcb.cn/news/detail-418927.html

到了這里,關于靜態(tài)版通訊錄——C語言【詳解+全部碼源】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【c語言】通訊錄(靜態(tài))

    【c語言】通訊錄(靜態(tài))

    小張剛學習完結構體,枚舉,聯合相關的知識,實踐實踐,寫一個通訊錄唄! 通訊錄的功能 1.通訊錄可存放100的信息 2.信息的內容姓名,性別,年齡,電話,地址 3.支持增加聯系人 4.支持刪除聯系人 5.支持查找聯系人 6.支持修改聯系人 7.支持排序聯系人 8.打印數據 文件類型

    2024年02月13日
    瀏覽(106)
  • C語言進階——靜態(tài)通訊錄

    C語言進階——靜態(tài)通訊錄

    作者: 敲代碼の流川楓 博客主頁:流川楓的博客 專欄:C語言從入門到進階 語錄: Stay hungry stay foolish 工欲善其事必先利其器,給大家介紹一款超牛的斬獲大廠offer利器——牛客網 點擊免費注冊和我一起刷題吧 目錄 1.contact.h——通訊錄相關的聲明 2.contact.c——通訊錄相關的

    2024年02月16日
    瀏覽(22)
  • C語言——靜態(tài)通訊錄的實現

    C語言——靜態(tài)通訊錄的實現

    今天我們來實現一下一個靜態(tài)的通訊錄: 我就先展示一下幾個功能: 實現一個通訊錄; 通訊錄可以用來存儲100個人的信息,每個人的信息包括:姓名、性別、年齡、電話、住址 提供方法: 添加聯系人信息 刪除指定聯系人信息 查找指定聯系人信息 修改指定聯系人信息 顯示

    2024年01月22日
    瀏覽(93)
  • C語言實現通訊錄--靜態(tài)版

    C語言實現通訊錄--靜態(tài)版

    實現一個通訊錄 ,里面存放100個人的信息,完成通訊錄的基本操作功能:增刪查改聯系人 (1)通訊錄存放100個人的信息? 創(chuàng)建一個數組作為通訊錄,100個元素,每個元素里面存放每個人的信息,所以數組里面的每個元素應該是結構體類型。 (2)每個人的信息應該包括哪些

    2024年02月16日
    瀏覽(69)
  • C語言---認識動態(tài)內存管理并實現一個動態(tài)通訊錄:靜態(tài)通訊錄別來沾邊

    C語言---認識動態(tài)內存管理并實現一個動態(tài)通訊錄:靜態(tài)通訊錄別來沾邊

    ??個人主頁:@小沈熬夜禿頭中???? ??小編介紹:歡迎來到我的亂七八糟小星球?? ??專欄:C語言學習 ??本章內容:動態(tài)內存管理 送給各位??:當你的能力還駕馭不了你的目標時那你就應該沉下心來歷練 記得 評論?? +點贊?? +收藏?? +關注??哦~ 提示:以下是本篇

    2024年02月08日
    瀏覽(171)
  • c語言實踐——通訊錄(1)(靜態(tài)版)

    目錄 前言 一、確定思路和框架 1.聯系人的信息存儲 2.通訊錄的菜單設置 3.初始化通訊錄 4.模塊的實現 (1)傳參問題 (2)實現查找函數? (3)新增聯系人 (4)刪除聯系人 (5)查找聯系人 (6)修改聯系人 (7)展示通訊錄 (8)對聯系人進行排序 二、代碼實操 1.創(chuàng)建文件

    2023年04月24日
    瀏覽(27)
  • 【C語言】通訊錄的實現(靜態(tài)版)

    【C語言】通訊錄的實現(靜態(tài)版)

    本文將會用c語言實現一個通訊錄的系統(tǒng),并且存儲若干人的信息,每個人的信息包括:姓名,性別,年齡,電話號碼,住址。此通訊錄系統(tǒng)的功能包括: 1.增加聯系人 2.刪除對應的聯系人 3.查找聯系人 4.修改聯系人的信息 5.排序此通訊錄 6.顯示通訊錄每個人的信息 。 建立菜

    2023年04月18日
    瀏覽(23)
  • 手機通訊錄的實現——C語言(靜態(tài)版本)

    手機通訊錄的實現——C語言(靜態(tài)版本)

    目錄 一:通訊錄的思想 二:通訊錄的實現 1.創(chuàng)建文件 2.打印菜單 3.創(chuàng)建聯系人結構體 4.初始化菜單 5.實現菜單的功能 a.增加聯系人 b.刪除聯系人 c.查找聯系人 d.修改聯系人 e.打印聯系人 三:總結 我們將每一位聯系人的姓名,性別,年齡,電話,地址來用一個結構體保存,用

    2024年02月09日
    瀏覽(25)
  • 【C語言】——通訊錄(靜態(tài)-動態(tài)增長-文件儲存)

    【C語言】——通訊錄(靜態(tài)-動態(tài)增長-文件儲存)

    ? 目錄 前言: 一:整體框架 關于通訊錄結構體的創(chuàng)建? 二:通訊錄的功能實現(靜態(tài)) 2.1初始化通訊錄 2.2增加聯系人 2.3打印通訊錄 2.4刪除聯系人 ?2.5?查找聯系人 2.6修改聯系人? 2.7排序聯系人 三:通訊錄優(yōu)化——動態(tài)內存 ?3.1通訊錄的創(chuàng)建 3.2初始化通訊錄? 3.3增加聯系

    2024年02月07日
    瀏覽(20)
  • 通訊錄詳解(靜態(tài)版,動態(tài)版,文件版)

    通訊錄詳解(靜態(tài)版,動態(tài)版,文件版)

    ??博客主頁:江池俊的博客 ?收錄專欄:C語言進階之路 ??專欄推薦:?C語言初階之路 ?數據結構探索?C語言刷題專欄 ??代碼倉庫:江池俊的代碼倉庫 ??歡迎大家點贊??評論??收藏? 前言 在現代社會中,通訊錄已經成為了我們生活中不可或缺的一部分。無論是工作還

    2024年02月05日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包