?Hi~ o( ̄▽ ̄)ブ這里是豬豬程序員
? 很高興見到你O(∩_∩)O! ? 現(xiàn)在正在發(fā)芽中…
?歡迎關(guān)注?點(diǎn)贊?收藏??留言?
?本文由豬豬原創(chuàng),CSDN首發(fā)!?首發(fā)時間:?2021年9月25日?
?? 博主水平有限,如果發(fā)現(xiàn)錯誤,一定要及時告知作者哦 o( ̄︶ ̄)o!感謝感謝!
?博主的碼云 gitee,平常博主寫的程序代碼都在里面。
實現(xiàn)一個通訊錄;
通訊錄可以用來存儲1000個人的信息,每個人的信息包括:姓名、性別、年齡、電話、住址
提供方法:
??實現(xiàn)一個通訊錄;
通訊錄可以用來存儲1000個人的信息,每個人的信息包括:姓名、性別、年齡、電話、住址
提供方法:
??注:這是一個簡單的通訊錄,實現(xiàn)方案是初級版。
只能在程序運(yùn)行期間存在(沒有寫入文件)。
void menu(){ printf("=====================/n"); printf(" 1. 新增聯(lián)系人/n"); printf(" 2. 刪除聯(lián)系人/n"); printf(" 3. 查找聯(lián)系人/n"); printf(" 4. 修改聯(lián)系人/n"); printf(" 5. 查看所有聯(lián)系人/n"); printf(" 6. 清空所有聯(lián)系人/n"); printf(" 7. 以名字排序所有聯(lián)系人/n"); printf(" 0. 退出/n"); printf("=====================/n");}
enum Option{ EXIT, ADD, DEL, SEARCH, MODIFY, SHOW, EMPTY, SORT,};
enum
枚舉常量,里面默認(rèn)對應(yīng)的值是從0~7,剛好和菜單中的選項匹配起來了
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 EMPTY: EmptyContact(&con); break; case EXIT: printf("退出通訊錄/n"); break; default: printf("選擇錯誤/n"); break; } } while (input);
#define NAME_MAX 20#define SEX_MAX 5#define TELE_MAX 20#define ADDR_MAX 30struct PeoInfo{ char name[NAME_MAX]; int age; char sex[SEX_MAX]; char tele[TELE_MAX]; char addr[ADDR_MAX];};
??注意事項:
define
定義的常量,這樣要修改最大值的時候更方便struct
結(jié)構(gòu)體可以存放:姓名、性別、年齡、電話、住址#define MAX 1000struct Contact{ struct PeoInfo date[MAX]; int sz;};
??注意事項:
struct PeoInfo date[MAX]
這個數(shù)組可以存放1000
人的信息sz
表示當(dāng)前通訊錄里面的人數(shù)struct PeoInfo con;
#include #include"contact.h"void Initcontact(struct Contact* pc){ pc->sz = 0; memset(pc->date, 0, MAX * sizeof(struct PeoInfo));}
??注意事項:
struct
里面都是隨機(jī)值void AddContact(struct Contact* pc){ struct PeoInfo tmp = { 0 }; if (pc->sz == MAX) { printf("通訊錄已滿1000人"); } else { printf("請輸入名字:>"); scanf("%s", tmp.name); printf("請輸入年齡:>"); scanf("%d", tmp.age)); printf("請輸入性別:>"); scanf("%s", tmp.sex); printf("請輸入電話:>"); scanf("%s", tmp.tele); printf("請輸入地址:>"); scanf("%s", tmp.addr); pc->data[pc->sz] = tmp; printf("添加成功!"); pc->sz++; }}
??注意事項:
每次添加選擇放在下標(biāo)為sz
的data
數(shù)組里面
??注意事項:
int FindContactByName(struct Contact* pc, char name[]){ int i = 0; for (i = 0; i < pc->sz; i++) { if (strcmp(pc->data[i].name, name) == 0) { return i; } } return -1;}
??注意事項:
strcmp
庫函數(shù)來比較data
數(shù)組中的名字與要查找的名字是否相同void SearchContact(struct Contact* pc){ char name[NAME_MAX] = { 0 }; printf("請輸入要查找人的名字:>"); scanf("%s", name); int pos= FindContactByName(pc, name); if (-1 == pos) { printf("查無此人"); } else { printf("%15s/t%5s/t%8s/t%15s/t%30s/n/n", "姓名", "年齡", "性別", "電話", "地址"); printf("%15s/t%5s/t%8s/t%15s/t%30s/n", pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr); }}
void DelContact(struct Contact* pc){ if (pc->sz == 0) { printf("通訊錄為空,無法刪除/n"); } char name[NAME_MAX] = { 0 }; printf("請輸入要刪除人的名字"); scanf_s("%s", name); int pos=FindContactByName(pc,name);//按照名字去查找,找到了就返回下標(biāo),未找到就返回-1 if (pos == -1) { printf("指定聯(lián)系人不存在/n"); } else { int j = 0; for (j = pos; j < pc->sz-1; j++) { pc->data[j] = pc->data[j + 1]; } pc->sz--; printf("刪除成功!/n"); }}
void ModifyContact(struct Contact* pc){ char name[NAME_MAX] = { 0 }; printf("請輸入要修改人的名字:>"); scanf("%s", name); int pos = FindContactByName(pc, name); if (-1 == pos) { printf("要修改的人不存在/n"); } else { printf("請輸入新的名字:>"); scanf("%s", pc->data[pos].name);//選擇放在下標(biāo)為sz的data里面 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); }}
void ShowContact(struct Contact* pc){ int i = 0; printf("%15s/t%5s/t%8s/t%15s/t%30s/n/n", "姓名", "年齡", "性別", "電話", "地址");//打印標(biāo)題 for (i = 0; i < pc->sz; i++) { printf("%15s/t%5s/t%8s/t%15s/t%30s/n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr); }}
void EmptyContact(struct Contact* pc){ pc->sz = 0; memset(pc->data, 0, MAX * sizeof(struct PeoInfo));}
??注意事項:
memset
不是開辟內(nèi)存的 是將內(nèi)存空間中的數(shù)據(jù)清零的
void SortContact(struct Contact* pc){ qsort(pc->data, pc->sz, sizeof(struct PeoInfo), CmpByname);}
??注意事項:
有關(guān)qsort相關(guān)的知識,請參考此篇博客
#define _CRT_SECURE_NO_WARNINGS 1#define _CRT_SECURE_NO_WARNINGS 1#include #define NAME_MAX 20#define SEX_MAX 5#define TELE_MAX 20#define ADDR_MAX 30#define MAX 100#include #include #include struct PeoInfo{ char name[NAME_MAX]; int age; char sex[SEX_MAX]; char tele[TELE_MAX]; char addr[ADDR_MAX];};struct Contact{ struct PeoInfo data[MAX]; int sz;};//初始化通訊錄void InitContact(struct Contact* pc);//清空所有聯(lián)系人void EmptyContact(struct Contact* pc);//增加聯(lián)系人void AddContact(struct Contact* pc);//顯示所有的聯(lián)系人void ShowContact(struct Contact* pc);//刪除指定聯(lián)系人void DelContact(struct Contact* pc);//查找指定聯(lián)系人void SearchContact(const struct Contact* pc);//修改指定聯(lián)系人void ModifyContact(struct Contact* pc);
#define _CRT_SECURE_NO_WARNINGS 1#define _CRT_SECURE_NO_WARNINGS 1#include #include "contact.h"void menu(){ printf("=====================/n"); printf(" 1. 新增聯(lián)系人/n"); printf(" 2. 刪除聯(lián)系人/n"); printf(" 3. 查找聯(lián)系人/n"); printf(" 4. 修改聯(lián)系人/n"); printf(" 5. 查看所有聯(lián)系人/n"); printf(" 6. 清空所有聯(lián)系人/n"); printf(" 7. 以名字排序所有聯(lián)系人/n"); printf(" 0. 退出/n"); printf("=====================/n"); printf(" 請輸入您的選擇:");}enum Option{ EXIT, ADD, DEL, SEARCH, MODIFY, SHOW, EMPTY, SORT,};//枚舉常量,里面對應(yīng)的值是從0~6,剛好和菜單匹配起來了int main(){ int input = 0; struct Contact con; InitContact(&con); do { menu(); printf("請選擇:>"); scanf_s("%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 EMPTY: EmptyContact(&con); break; case EXIT: printf("退出通訊錄/n"); break; default: printf("選擇錯誤/n"); break; } } while (input); return 0;}
#define _CRT_SECURE_NO_WARNINGS 1#include #include "contact.h"void InitContact(struct Contact* pc){ pc->sz = 0; memset(pc->data, 0, MAX * sizeof(struct PeoInfo));}void AddContact(struct Contact* pc){ struct PeoInfo tmp = { 0 }; if (pc->sz == MAX) { printf
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/121138.html
摘要:導(dǎo)航前言功能函數(shù)結(jié)構(gòu)設(shè)定菜單交互主函數(shù)通訊錄初始化新增聯(lián)系人查找聯(lián)系人刪除聯(lián)系人修改聯(lián)系人查看所有聯(lián)系人清空所有聯(lián)系人以名字排序所有聯(lián)系人結(jié)尾語前言本文將實現(xiàn)一個簡易的電話簿管理。信息包括名字,性別,電話號碼,年齡,住址。 ...
??蘇州程序大白一文從基礎(chǔ)手把手教你Python數(shù)據(jù)可視化大佬??《??記得收藏??》 目錄 ????開講啦?。。?!????蘇州程序大白?????博主介紹前言數(shù)據(jù)關(guān)系可視化散點(diǎn)圖 Scatter plots折線圖強(qiáng)調(diào)連續(xù)性 Emphasizing continuity with line plots同時顯示多了圖表 數(shù)據(jù)種類的可視化 Plotting with categorical da...
目錄 一、什么是C語言? 二、第一個C語言程序 代碼 程序分析 ?程序運(yùn)行 一個工程中出現(xiàn)兩個及以上的main函數(shù) 代碼 運(yùn)行結(jié)果 分析 三、數(shù)據(jù)類型 數(shù)據(jù)各種類型 為什么會有這么多的數(shù)據(jù)類型? 計算機(jī)單位 ?各個數(shù)據(jù)類型的大小 ?注意事項 數(shù)據(jù)類型的使用 四、變量和常量 變量的分類 變量的使用 變量的作用域和生命周期 ?常量 五、字符串+轉(zhuǎn)義字符+注釋 字符串 ?轉(zhuǎn)義字符 注釋 六、選擇語句 ?...
目錄 第一章:單片機(jī)概述 單片機(jī)的應(yīng)用領(lǐng)域: STC89C52單片機(jī): 單片機(jī)命名規(guī)則: ?單片機(jī)內(nèi)部結(jié)構(gòu)圖: ?單片機(jī)管腳圖: ?單片機(jī)最小系統(tǒng): 進(jìn)制表: 新建一個工程:? 檢查單片機(jī)驅(qū)動是否安裝完成: 打開Keil uVision集成開發(fā)環(huán)境 選擇Atmel下的AT89C52 創(chuàng)建源文件? ?第二章:LED LED介紹: ?點(diǎn)亮LED:?? 第一章:單片機(jī)概述 單片機(jī)(Micro Contr...
閱讀 2805·2021-10-11 10:57
閱讀 1662·2021-09-26 09:55
閱讀 1372·2021-09-06 15:11
閱讀 3539·2021-08-26 14:16
閱讀 772·2019-08-30 15:54
閱讀 585·2019-08-30 12:43
閱讀 3385·2019-08-29 16:18
閱讀 2651·2019-08-23 16:14