中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言靜態版通訊錄怎么實現

發布時間:2023-04-19 11:27:03 來源:億速云 閱讀:77 作者:iii 欄目:開發技術

這篇文章主要介紹“C語言靜態版通訊錄怎么實現”,在日常操作中,相信很多人在C語言靜態版通訊錄怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言靜態版通訊錄怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    1. 配置運行環境

    本通訊錄運用到了三個文件

    test.c //測試通訊錄的相關功能

    contact.h //聲明

    contact.c //通訊錄的實現模塊

    2. 通訊錄的實現

    想要做通訊錄,首要任務就是要把模塊想好。

    先打印一個通訊錄的界面菜單

    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");
    }

    2.1 通訊錄的功能目錄

    通訊錄的功能有7種:

    • 增加聯系人

    • 刪除指定聯系人

    • 查找聯系人

    • 修改聯系人的信息

    • 對聯系人的排序

    • 顯示聯系人的信息

    • 退出通訊錄

    創建人的信息的結構體類型

    第一步是封裝一個人的信息的結構體類型

    由于封裝的結構體類型的名字太長,總是寫的話感覺太麻煩了

    對 struct PeoInfo進行了typdef類型重命名

    struct PeoInfp 改成 PeoInfp

    //表示一個人的信息
    typedef struct PeoInfo
    {
    	char name[20];
    	int age;
    	char sex[5];
    	char tele[12];
    	char addr[30];
    }PeoInfo;

    以上的數值如果以后會經常用到的話,可以用#define 來定義,方便以后修改

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

    2.2 增加信息功能代碼的實現

    //增加通訊錄信息
    void AddContact(Contact* pc)
    {
    	if (DATA_MAX == pc->sz)
    	{
    		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);
    	printf("信息添加成功!\n");
    	pc->sz++;
    }

    2.3 顯示信息功能代碼的實現

    void ShowContact(const Contact* pc)
    {
    	int i = 0;
    	//姓名      年齡      性別     電話      地址
    	//zhangsan 20        男      123456    北京
    	//
    	//打印標題
    	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);
    	}
    }

    2.4 刪除信息功能代碼的實現

    void DelContact(pContact 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");
    }

    2.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);
    }

    2.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");
    }

    2.7 按名字排序信息功能代碼的實現

    //按照名字來排序
    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");
    }

    3. 完整靜態版本通訊錄的全部源碼

    3.1 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;
    	//姓名      年齡      性別     電話      地址
    	//hengchuan 20        男      123456    北京
    	//
    	//打印標題
    	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[])
    {
    	int i = 0;
    	for (i = 0; i < pc->sz; i++)
    	{
    		if (0 == strcmp(pc->data[i].name, name))
    		{
    			return i;
    		}
    	}
    	return -1;
    }
    void DelContact(pContact 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");
    }

    3.2 contact.h

    #pragma once
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <errno.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, *pContact;
    //初始化通訊錄
    void InitContact(Contact* pc);
    //增加指定聯系人
    void AddContact(Contact* pc);
    //顯示聯系人信息
    void ShowContact(const Contact* pc);
    //刪除指定聯系人
    //void DelContact(Contact* pc);
    void DelContact(pContact pc);
    //查找指定聯系人
    void SearchContact(const Contact* pc);
    //修改通訊錄
    void ModifyContact(Contact* pc);
    //排序通訊錄元素
    void SortContact(Contact* pc);

    3.3 test.c

    #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("*****    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;
    }

    4. 靜態版本通訊錄的缺點

    缺點:

    通訊錄的大小是固定的 - 100個元素當通訊錄退出后,重新運行,之前的信息都丟了

    當前通訊錄中的信息都是保存在內存中的,程序退出,內存就回收了,下一次重新運行程序,內存重新分配,之前的數據就不見了

    到此,關于“C語言靜態版通訊錄怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    洞口县| 波密县| 灵山县| 达日县| 云南省| 铁岭县| 凤凰县| 湄潭县| 湟中县| 韩城市| 通渭县| 永寿县| 定安县| 通山县| 东丰县| 板桥市| 南充市| 江源县| 六枝特区| 淮滨县| 金寨县| 伊金霍洛旗| 阳山县| 新乐市| 岑溪市| 阿瓦提县| 万州区| 星座| 苏州市| 阆中市| 甘肃省| 安庆市| 汝南县| 肇源县| 鄄城县| 平远县| 赫章县| 梅州市| 南城县| 嘉兴市| 保定市|