C語言實現(xiàn)動態(tài)版通訊錄的示例代碼
更新時間:2022年08月11日 15:38:15 作者:摸魚王胖嘟嘟
這篇文章主要為大家詳細(xì)介紹了如何利用C語言實現(xiàn)一個簡單的動態(tài)版通訊錄,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定幫助,需要的可以參考一下
前言
大家好~今天是通訊錄的動態(tài)版本實現(xiàn),希望對大家對知識的掌握有所提升!
contact.c
#include"contact.h" //初始化通訊錄 void InitContact(Contact* pc) { assert(pc); pc->sz = 0; pc->data = (PeoInfo*)calloc(DEFAULT_SZ, sizeof(PeoInfo)); if (NULL == pc->data) { printf("InitContact: :%s\n", strerror(errno)); return; } pc->capacity = DEFAULT_SZ; } static void CheckCapacity(Contact* pc) { if (pc->capacity == pc->sz) { PeoInfo* prt = (PeoInfo*)realloc(pc->data, (pc->capacity + INCREASE_SZ) * sizeof(PeoInfo)); if (NULL == prt) { printf("AddContact: :%s\n", strerror(errno)); return; } else { pc->data = prt; pc->capacity += INCREASE_SZ; printf("增容成功\n"); } } } //增加聯(lián)系人信息 void AddContact(Contact* pc) { assert(pc); CheckCapacity(pc); printf("請輸入姓名:>"); scanf("%s", pc->data[pc->sz].name); printf("請輸入性別:>"); scanf("%s", pc->data[pc->sz].sex); printf("請輸入年齡:>"); scanf("%d", &(pc->data[pc->sz].age)); printf("請輸入電話:>"); scanf("%s", pc->data[pc->sz].tele); printf("請輸入地址:>"); scanf("%s", pc->data[pc->sz].addr); pc->sz++; printf("增加聯(lián)系人信息成功\n"); } void DestroyContact(Contact* pc) { assert(pc); free(pc->data); pc->data = NULL; } //打印聯(lián)系人信息 void PrintContact(Contact* pc) { assert(pc); if (0 == pc->sz) { printf("通訊錄為空\n"); return; } int i = 0; printf("%-10s\t%-5s\t%-5s\t%-12s\t%-50s\n", "姓名", "年齡", "性別", "電話", "地址"); for (i = 0; i < pc->sz; i++) { printf("%-10s\t%-5d\t%-5s\t%-12s\t%-50s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr); } } static int Find_By_NAME(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; } //刪除聯(lián)系人信息 void DelContact(Contact* pc) { assert(pc); char name[NAME_MAX] = { 0 }; if (pc->sz == 0) { printf("通訊錄為空,無法刪除信息\n"); return; } else { printf("請輸入要刪除聯(lián)系人的姓名:>"); scanf("%s", name); int pos = Find_By_NAME(pc, name); if (pos == -1) { printf("要刪除的聯(lián)系人不存在\n"); return; } int i = 0; for (i = pos; i < (pc->sz - 1); i++) { pc->data[i] = pc->data[i + 1]; } pc->sz--; printf("刪除聯(lián)系人信息成功\n"); } } //查找聯(lián)系人信息 void SearchContact(const Contact* pc) { assert(pc); char name[NAME_MAX] = { 0 }; printf("請輸入要查找聯(lián)系人的姓名:>"); scanf("%s", name); int pos = Find_By_NAME(pc, name); if (pos == -1) { printf("要查找的聯(lián)系人不存在\n"); return; } printf("%-10s\t%-5s\t%-5s\t%-12s\t%-50s\n", "姓名", "年齡", "性別", "電話", "地址"); printf("%-10s\t%-5d\t%-5s\t%-12s\t%-50s\n", pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr); } //修改聯(lián)系人信息 void ModifyContact(Contact* pc) { assert(pc); char name[NAME_MAX] = { 0 }; printf("請輸入要修改聯(lián)系人的姓名:>"); scanf("%s", name); int pos = Find_By_NAME(pc, name); if (pos == -1) { printf("要修改的聯(lián)系人不存在\n"); return; } else { 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].addr); printf("請輸入修改后人員的電話:>"); scanf("%s", pc->data[pos].tele); printf("修改聯(lián)系人員信息成功\n"); } } //排序聯(lián)系人信息 static int cmp_Per_by_name(const void* e1, const void* e2) { return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name); } void SortContact(Contact* pc) { assert(pc); qsort(pc->data, pc->sz, sizeof(PeoInfo), cmp_Per_by_name); PrintContact(pc); } //清空聯(lián)系人信息 void ClearContact(Contact* pc) { assert(pc); InitContact(pc); printf("清空成功\n"); }
contact.h
#pragma once //頭文件的包含 #include<stdio.h> #include<assert.h> #include<string.h> #include<stdlib.h> #include<errno.h> //定義結(jié)構(gòu)體類型 #define NAME_MAX 20 #define SEX_MAX 10 #define TELE_MAX 12 #define ADDR_MAX 30 #define MAX 1000 #define DEFAULT_SZ 3 #define INCREASE_SZ 2 //創(chuàng)建通訊錄 typedef struct PeoInfo { char name[NAME_MAX]; char sex[SEX_MAX]; int age; char tele[TELE_MAX]; char addr[ADDR_MAX]; }PeoInfo; //動態(tài)版本 typedef struct Contact { PeoInfo* data;//存放人的信息,維護(hù)通訊錄的指針 int sz;//記錄通訊錄中實際聯(lián)系人的個數(shù) int capacity;//當(dāng)前通訊錄的容量 }Contact; //初始化通訊錄 void InitContact(Contact* pc); //增加聯(lián)系人信息 void AddContact(Contact* pc); //打印聯(lián)系人信息 void PrintContact(Contact* pc); //刪除聯(lián)系人信息 void DelContact(Contact* pc); //查找聯(lián)系人信息 void SearchContact(const Contact* pc); //修改聯(lián)系人信息 void ModifyContact(Contact* pc); //排序聯(lián)系人信息 void SortContact(Contact* pc); //清空聯(lián)系人信息 void ClearContact(Contact* pc); //釋放通訊錄動態(tài)內(nèi)存 void DestroyContact(Contact* pc);
test.c
#include"contact.h" menu() { printf("********************************************\n"); printf("********* 1.add 2.del *********\n"); printf("********* 3.search 4.modify *********\n"); printf("********* 5.sort 6.print *********\n"); printf("********* 7.clear 0.exit *********\n"); printf("********************************************\n"); } enum Option { EXIT, ADD, DEL, SEARCH, MODIFY, SORT, PRINT, CLEAR }; int main() { int input = 0; //創(chuàng)建通訊錄 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 SORT: SortContact(&Con); break; case PRINT: PrintContact(&Con); break; case CLEAR: ClearContact(&Con); break; case EXIT: DestroyContact(&Con); printf("退出通訊錄\n"); break; default: printf("輸入錯誤,請重新輸入\n"); break; } } while (input); return 0; }
以上就是C語言實現(xiàn)動態(tài)版通訊錄的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于C語言動態(tài)通訊錄的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++實現(xiàn)leetcode(3.最長無重復(fù)字符的子串)
這篇文章主要介紹了C++實現(xiàn)leetcode(3.最長無重復(fù)字符的子串),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07c語言的cps實現(xiàn)求fibonacci數(shù)列示例
這篇文章主要介紹了c語言的cps實現(xiàn)求fibonacci數(shù)列示例,需要的朋友可以參考下2014-03-03