個人怎么注冊小微企業(yè)搜索引擎優(yōu)化面對哪些困境
前言:生活中處處都會看到或是用到通訊錄,今天我們就通過C語言來簡單的模擬實現一下通訊錄。
雞湯:跨越山海,終見曙光!
鏈接:gitee倉庫:代碼鏈接
目錄
- 主函數
- 聲明部分
- 初始化通訊錄
- 實現擴容的函數
- 增加通訊錄所需要人
- 顯示通訊錄
- 選擇刪除的人
- 查找需要找的人
- 修改通訊錄
- 通訊錄的實現
當然了,在模擬實現一個通訊錄前我們依然需要一個大致的框架。
- 可以保存至少100人的信息
- 增加人的信息
- 刪除指定人的信息
- 查找指定人的信息
- 修改指定聯(lián)系人的信息
- 排序通訊錄的信息(這個等作者以后時間充足了再來實現)
- 顯示所有聯(lián)系人的信息
當然了,既然是實現一個通訊錄這樣的功能,我們把在寫這個功能的時候把它分成三個模塊
主函數
話不多說,看代碼:
實現一個功能,當然還是從主函數開始寫,這個主函數的大體思路我們在之前的三子棋功能中也實現過,想要看的可以點這個鏈接:[三子棋]
(https://blog.csdn.net/m0_64826370/article/details/132393038?spm=1001.2014.3001.5501/)
創(chuàng)建一個通訊錄,我們需要創(chuàng)建聯(lián)系人的信息,我們可以選擇用結構體來存放
//類型的聲明
typedef struct PeoInfo
{char name[NAME_MAX];//保存姓名int age;char sex[SEX_MAX];//性別char tele[TELE_MAX];//電話char addr[ADDR_MAX];//地址
}PeoInfo;//創(chuàng)建通訊錄,將聯(lián)系人記錄下來
typedef struct Contact
{PeoInfo* data;//存放數據int sz;//記錄當前通訊錄中存在的人的信息個數int capacity;//記錄的是通訊錄的當前容量
}Contact;
主函數部分:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#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);//創(chuàng)建一塊通訊錄的同時,初始化一塊通訊錄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://排序//qsortbreak;case EXIT://退出DestroyContact(&con);//銷毀空間printf("退出\n");break;default:printf("輸入錯誤,請重新輸入\n");break;}} while (input);return 0;
}
聲明部分
#pragma once
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 12
#define ADDR_MAX 30
#define MAX 100
#define DEFAULT_SZ 3
#define DEFAULT_INC 2//類型的聲明
typedef struct PeoInfo
{char name[NAME_MAX];//保存姓名int age;char sex[SEX_MAX];//性別char tele[TELE_MAX];//電話char addr[ADDR_MAX];//地址
}PeoInfo;
;//動態(tài)
typedef struct Contact
{PeoInfo* data;//存放數據int sz;//記錄當前通訊錄中存在的人的信息個數int capacity;//記錄的是通訊錄的當前容量
}Contact;//初始化通訊錄
void InitContact(Contact* pc);//增加聯(lián)系人
void AddContact(Contact* pc);void DestroyContact(Contact* pc);
//顯示所有聯(lián)系人
void ShowContact(Contact* pc);//刪除指定聯(lián)系人
void DelContact(Contact* pc);//查找指定聯(lián)系人
void SearchContact(Contact* pc);//修改指定聯(lián)系人
void ModifyContact(Contact* pc);//銷毀通訊錄
void DestroyContact(Contact* pc);
初始化通訊錄
void InitContact(Contact* pc)
{assert(pc);pc->sz = 0;pc->capacity = DEFAULT_SZ;pc->data = calloc(pc->capacity, sizeof(PeoInfo));//開辟一個能存放當前容量的空間if (pc->data == NULL)//判斷開辟是否成功{perror("calloc");return;}memset(pc->data, 0, sizeof(pc->data));//將開辟的空間全部初始化為0
}
實現擴容的函數
void CheckCapacity(Contact* pc)//給通訊錄增容
{if (pc->sz == pc->capacity)//判斷是否是需要增容{PeoInfo* ptr = (PeoInfo*)realloc(pc->data, (pc->capacity + DEFAULT_INC) * sizeof(PeoInfo));//擴容if (ptr != NULL)//判斷是否增容成功{pc->data = ptr;pc->capacity += DEFAULT_INC;printf("增容成功\n");}else{perror("AddContact->realloc");return;}}
}
增加通訊錄所需要人
void AddContact(Contact* pc)//增容
{assert(pc);CheckCapacity(pc);//增加信息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(Contact* pc)//顯示通訊錄
{assert(pc);if (pc->sz == 0){printf("通訊錄為空,無需打印\n");return;}int i = 0;//名字 年齡 性別 電話 地址printf("%-20s%-5s%-5s%-12s%-30s\n", "名字", "年齡", "性別", "電話", "地址");for (i = 0; i < pc->sz; i++){//打印每個人信息printf("%-20s%-5d%-5s%-12s%-30s\n",pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);}
}
選擇刪除的人
void DelContact(Contact* pc)//刪除所需要刪除的人
{char name[NAME_MAX];assert(pc);if (pc->sz == 0){printf("通訊錄為空,無法刪除\n");return;}//找到聯(lián)系人printf("輸入刪除人的名字:");scanf("%s", name);//找到名字為name的人int ret = FindByName(pc, name);//找到這個人所在的位置if (ret == -1){printf("要刪除得到人不存在\n");return;}//刪除這個人int i = 0;for (i = ret; i < pc->sz - 1; i++)//刪除這個人,并讓后面的數往前走{pc->data[i] = pc->data[i + 1];}pc->sz--;printf("刪除成功\n");
}
查找需要找的人
void SearchContact(Contact* pc)//查找人
{assert(pc);char name[NAME_MAX];printf("輸入查找人的名字:");scanf("%s", name);//找到名字為name的人int ret = FindByName(pc, name);if (ret == -1){printf("要查找的人不存在\n");return;}//顯示出來printf("%-20s%-5s%-5s%-12s%-30s\n", "名字", "年齡", "性別", "電話", "地址");printf("%-20s%-5d%-5s%-12s%-30s\n",pc->data[ret].name, pc->data[ret].age, pc->data[ret].sex, pc->data[ret].tele, pc->data[ret].addr);
}
修改通訊錄
void ModifyContact(Contact* pc)//修改通訊錄
{assert(pc);char name[NAME_MAX];printf("輸入要修改人的名字:");scanf("%s", name);//找到名字為name的人int ret = FindByName(pc, name);if (ret == -1){printf("要修改的人不存在\n");return;}//修改printf("請輸入名字:");scanf("%s", pc->data[ret].name);printf("請輸入年齡:");scanf("%d", &pc->data[ret].age);printf("請輸入性別:");scanf("%s", pc->data[ret].sex);printf("請輸入電話:");scanf("%s", pc->data[ret].tele);printf("請輸入地址:");scanf("%s", pc->data[ret].addr);
}
通訊錄的實現
#define _CRT_SECURE_NO_WARNINGS
#include "contact.h"//動態(tài)
void InitContact(Contact* pc)
{assert(pc);pc->sz = 0;pc->capacity = DEFAULT_SZ;pc->data = calloc(pc->capacity, sizeof(PeoInfo));//開辟一個能存放當前容量的空間if (pc->data == NULL)//判斷開辟是否成功{perror("calloc");return;}memset(pc->data, 0, sizeof(pc->data));//將開辟的空間全部初始化為0
}void CheckCapacity(Contact* pc)//給通訊錄增容
{if (pc->sz == pc->capacity)//判斷是否是需要增容{PeoInfo* ptr = (PeoInfo*)realloc(pc->data, (pc->capacity + DEFAULT_INC) * sizeof(PeoInfo));//擴容if (ptr != NULL)//判斷是否增容成功{pc->data = ptr;pc->capacity += DEFAULT_INC;printf("增容成功\n");}else{perror("AddContact->realloc");return;}}
}
void DestroyContact(Contact* pc)//刪除通訊錄
{free(pc->data);//釋放所開辟的空間pc->data = NULL;pc->capacity = 0;pc->sz = 0;
}
void AddContact(Contact* pc)//增容
{assert(pc);CheckCapacity(pc);//增加信息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(Contact* pc)//顯示通訊錄
{assert(pc);if (pc->sz == 0){printf("通訊錄為空,無需打印\n");return;}int i = 0;//名字 年齡 性別 電話 地址printf("%-20s%-5s%-5s%-12s%-30s\n", "名字", "年齡", "性別", "電話", "地址");for (i = 0; i < pc->sz; i++){//打印每個人信息printf("%-20s%-5d%-5s%-12s%-30s\n",pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);}
}int FindByName(Contact* pc, char name[])//查找人,判斷這個人的位置與是否存在
{assert(pc);int i = 0;for (i = 0; i < pc->sz; i++){if (strcmp(pc->data[i].name, name) == 0){return i;}}return -1;//找不到
}
void DelContact(Contact* pc)//刪除所需要刪除的人
{char name[NAME_MAX];assert(pc);if (pc->sz == 0){printf("通訊錄為空,無法刪除\n");return;}//找到聯(lián)系人printf("輸入刪除人的名字:");scanf("%s", name);//找到名字為name的人int ret = FindByName(pc, name);//找到這個人所在的位置if (ret == -1){printf("要刪除得到人不存在\n");return;}//刪除這個人int i = 0;for (i = ret; i < pc->sz - 1; i++)//刪除這個人,并讓后面的數往前走{pc->data[i] = pc->data[i + 1];}pc->sz--;printf("刪除成功\n");
}void SearchContact(Contact* pc)//查找人
{assert(pc);char name[NAME_MAX];printf("輸入查找人的名字:");scanf("%s", name);//找到名字為name的人int ret = FindByName(pc, name);if (ret == -1){printf("要查找的人不存在\n");return;}//顯示出來printf("%-20s%-5s%-5s%-12s%-30s\n", "名字", "年齡", "性別", "電話", "地址");printf("%-20s%-5d%-5s%-12s%-30s\n",pc->data[ret].name, pc->data[ret].age, pc->data[ret].sex, pc->data[ret].tele, pc->data[ret].addr);
}void ModifyContact(Contact* pc)//修改通訊錄
{assert(pc);char name[NAME_MAX];printf("輸入要修改人的名字:");scanf("%s", name);//找到名字為name的人int ret = FindByName(pc, name);if (ret == -1){printf("要修改的人不存在\n");return;}//修改printf("請輸入名字:");scanf("%s", pc->data[ret].name);printf("請輸入年齡:");scanf("%d", &pc->data[ret].age);printf("請輸入性別:");scanf("%s", pc->data[ret].sex);printf("請輸入電話:");scanf("%s", pc->data[ret].tele);printf("請輸入地址:");scanf("%s", pc->data[ret].addr);
}
好了,今天的內容博主就講到這里了,如果有講的不好的地方,歡迎各位到評論區(qū)留言,如果覺得博主講的不錯就送上一個三連吧~謝謝各位