<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
實現一個通訊錄
通訊錄可以用來儲存100個人的資訊,每個人的資訊包括:姓名、性別、年齡、電話、住址
提供方法:
#pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <assert.h> #include <string.h> #include <stdlib.h> #define MAX_NAME 20 #define MAX_SEX 10 #define MAX_TELE 12 #define MAX_ADDR 30 #define MAX_CAPACITY 100 typedef struct PeoInfo { char name[MAX_NAME]; char sex[MAX_SEX]; char tele[MAX_TELE]; char addr[MAX_ADDR]; int age; }PeoInfo; typedef struct Contact { PeoInfo date[MAX_CAPACITY]; int size; }Contact; void ContactInit(Contact* pc);//初始化通訊錄 void ContactPrint(const Contact* pc);//列印 void ContactAdd(Contact* pc);//增加聯絡人資訊 void ContactDel(Contact* pc);//刪除聯絡人資訊 void ContactFind(const Contact* pc);//查詢資訊 void ContactModify(Contact* pc);//修改資訊 void ContactSortByName(Contact* pc);//排序 void ContactEmpty(Contact* pc);//清空通訊錄
先定義一個PeoInfo的結構體型別,裡面包含了人的資訊。
再將PeoInfo的陣列和陣列有效元素個數size包含至Contact,作為通訊錄的模板。
static int FindByName(const Contact* pc,const char arr[])//通過名字查詢 { assert(pc&&arr); for (int i = 0; i < pc->size; i++) { if (strcmp(pc->date[i].name, arr) == 0) { return i; } } return -1; }
可以通過名字查詢通訊錄中是否存在聯絡人,存在返回下標,不存在返回-1
void ContactInit(Contact* pc)//初始化通訊錄 { assert(pc); pc->size = 0; memset(pc->date, 0, sizeof(pc->date)); }
將size置為0,使用memset函數將pc->date的記憶體按位元組全部置為0
void ContactPrint(const Contact* pc)//列印 { assert(pc); printf("姓名t性別t電話t地址t年齡n"); for (int i = 0; i < pc->size; i++) { printf("%st%st%st%st%dn", pc->date[i].name, pc->date[i].sex, pc->date[i].tele, pc->date[i].addr, pc->date[i].age); } }
for迴圈遍歷列印pc->date中的結構體成員
void ContactAdd(Contact* pc)//增加聯絡人資訊 { assert(pc&&pc->size<= MAX_CAPACITY); printf("請輸入姓名:n"); scanf("%s", pc->date[pc->size].name); printf("請輸入性別:n"); scanf("%s", pc->date[pc->size].sex); printf("請輸入電話:n"); scanf("%s", pc->date[pc->size].tele); printf("請輸入地址:n"); scanf("%s", pc->date[pc->size].addr); printf("請輸入年齡:n"); scanf("%d", &(pc->date[pc->size].age)); pc->size++; }
注意增加聯絡人後pc->size++
void ContactFind(const Contact* pc)//查詢資訊 { assert(pc); printf("請輸入姓名查詢:"); char arr[20] = { 0 }; scanf("%s", arr); int pos = FindByName(pc, arr); if (pos != -1) { printf("查詢到如下資訊:n"); printf("姓名t性別t電話t地址t年齡n"); printf("%st%st%st%st%dn", pc->date[pos].name, pc->date[pos].sex, pc->date[pos].tele, pc->date[pos].addr, pc->date[pos].age); } else printf("通訊錄查無此人!n"); }
先判斷查詢的資訊是否在通訊錄中,再列印該下標的資訊。
void ContactDel(Contact* pc)//刪除聯絡人資訊 { assert(pc); printf("請輸入姓名查詢:"); char arr[20]={0}; scanf("%s", arr); int pos = FindByName(pc, arr);//記錄size的位置 if (pos==-1) { printf("通訊錄沒有該資訊n"); return; } for (int i = pos; i < pc->size - 1; i++)//移動元素 { pc->date[i] = pc->date[i + 1]; } pc->size--; printf("刪除成功!n"); }
通過靜態函數FindByName返回的下標,通過for迴圈將後續元素逐個進行覆蓋。
void ContactModify(Contact* pc)//修改資訊 { assert(pc); printf("請輸入姓名查詢:"); char arr[20] = { 0 }; scanf("%s", arr); int pos = FindByName(pc, arr); if (pos == -1) { printf("找不到n"); return; } else { printf("請輸入更改後的姓名:n"); scanf("%s", pc->date[pos].name); printf("請輸入更改後的性別:n"); scanf("%s", pc->date[pos].sex); printf("請輸入更改後的電話:n"); scanf("%s", pc->date[pos].tele); printf("請輸入更改後的地址:n"); scanf("%s", pc->date[pos].addr); printf("請輸入更改後的年齡:n"); scanf("%d", &(pc->date[pos].age)); } }
先判斷查詢的資訊是否在通訊錄中,再列印該下標的資訊。
int name_cmp(const void* e1, const void* e2) { return strcmp(((PeoInfo*)e1)->name,((PeoInfo*)e2)->name); } void ContactSortByName(Contact* pc)//排序 { assert(pc&&pc->size!=0); qsort(pc->date, pc->size, sizeof(PeoInfo), name_cmp); printf("排序完成n"); }
使用qsort函數排序通訊錄,可參照本文學習qsort排序結構體的方法
void ContactEmpty(Contact* pc)//清空通訊錄 { assert(pc); ContactInit(pc); printf("通訊錄已清空n"); }
本文為靜態通訊錄,非動態開闢記憶體,此處使用初始化函數即可。
#include "contact.h" void menu() { printf("###########################n"); printf("#####1、add 2、del######n"); printf("#####3、find 4、modify###n"); printf("#####5、print 6、sort#####n"); printf("#####7、empty 8、exit#####n"); printf("###########################n"); } enum option { ADD=1, DEL, FIND, MODIFY, PRINT, SORT, EMPTY, EXIT }; int main() { int input = 0; Contact c;//建立一個通訊錄 ContactInit(&c);//初始化通訊錄 while (1) { menu(); printf("請輸入選項:n"); scanf("%d", &input); if (input == ADD) ContactAdd(&c);//增加聯絡人資訊 else if (input == DEL) ContactDel(&c);//刪除聯絡人資訊 else if (input == FIND) ContactFind(&c);//查詢聯絡人資訊 else if (input == MODIFY) ContactModify(&c);//修改聯絡人資訊 else if (input == PRINT) ContactPrint(&c);//列印 else if (input == SORT) ContactSortByName(&c);//排序 else if (input == EMPTY) ContactEmpty(&c);//清空通訊錄 else if (input == EXIT) break;//退出 else printf("輸入錯誤!請重新輸入!n"); } return 0; }
使用enum列舉選項。
以上就是基於C語言實現靜態通訊錄的範例程式碼的詳細內容,更多關於C語言靜態通訊錄的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45