您好,登錄后才能下訂單哦!
這篇文章主要介紹“C語言靜態版通訊錄怎么實現”,在日常操作中,相信很多人在C語言靜態版通訊錄怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言靜態版通訊錄怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
本通訊錄運用到了三個文件
test.c //測試通訊錄的相關功能
contact.h //聲明
contact.c //通訊錄的實現模塊
想要做通訊錄,首要任務就是要把模塊想好。
先打印一個通訊錄的界面菜單
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"); }
通訊錄的功能有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
//增加通訊錄信息 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++; }
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); } }
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"); }
#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"); }
#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);
#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; }
缺點:
通訊錄的大小是固定的 - 100個元素當通訊錄退出后,重新運行,之前的信息都丟了
當前通訊錄中的信息都是保存在內存中的,程序退出,內存就回收了,下一次重新運行程序,內存重新分配,之前的數據就不見了
到此,關于“C語言靜態版通訊錄怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。