您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么用C語言實現通訊錄功能”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用C語言實現通訊錄功能”吧!
通訊錄可以用來存儲1000個人的信息,每個人的信息包括:姓名、性別、年齡、電話、住址
通訊錄可執行的操作如下:
添加聯系人信息
刪除指定聯系人信息
查找指定聯系人信息
修改指定聯系人信息
顯示所有聯系人信息
清空所有聯系人
以名字排序所有聯系人
二、通訊錄初步準備:
1.創建一個.c文件,編寫主函數main;
2.再創建一個.c文件,用于集中存放1中的.c文件所使用到的自定義函數;
3.創建一個.h頭文件,用于申明1中的.c文件所使用到的函數。
如下圖:
下文將介紹程序的編寫思路:
步驟1、首先根據通訊錄所包含的信息要求,在頭文件中構造結構體PeoIfo,即通訊錄要求包含的信息;再構造結構體contact用于儲存多個聯系人。(注:本段代碼使用#define是因為整個程序中會多次用到這些數值,通過#define的方式若后期要修改值,不需要通篇去修改。)
#define MAX 100 #define nameMAX 20 #define sexMAX 10 #define telMAX 20 #define adrMAX 20 struct PeoIfo { char name[nameMAX]; char sex[sexMAX]; int age; char tel[telMAX]; char adr[adrMAX]; }; struct contact { struct PeoIfo data[MAX]; int sz; };
步驟2、在第一個.c文件中寫主函數main(),對步驟1中所構造的結構體進行初始化,初始化函數次數命名為InitContact(&con)。(注:此處段代碼需要引用頭文件“contact.h”)
#include"contact.h" int main() { int input = 0; struct contact con; //初始化 InitContact(&con); return 0; }
步驟3、在頭文件中申明初始化函數
//初始化 void InitContact(struct contact* pc);
步驟4、再另外一個.c文件中編寫該初始化函數,使其實現初始化功能。
//初始化 void InitContact(struct contact* pc) { pc->sz = 0; memset(pc->data, 0, MAX * sizeof(struct PeoIfo)); }
步驟5、回到主函數main()中。編寫程序菜單menu(),再編寫Switch語句,對應菜單中的選項。此處以1.add為例,1.add選項為增加聯系人。
#include"contact.h" void menu() { printf("*****************************\n"); printf("****1.add 2.del ****\n"); printf("****3.search 4.modify ****\n"); printf("****5.show 6.empty ****\n"); printf("****7.sort 0.exit ****\n"); printf("*****************************\n"); } int main() { int input = 0; struct contact con; //初始化 InitContact(&con); do { menu(); printf("請選擇:"); scanf("%d", &input); switch (input) { case 1: add(&con); break; case 2: del(&con); break; case 3: search(&con); break; case 4: modify(&con); break; case 5: show(&con); break; case 6: InitContact(&con);//直接給他初始化不就清空了。 break; case 7: Sort(&con); break; case 0: printf("已退出通訊錄。\n"); break; default: printf("輸入錯誤,請重新輸入:\n"); break; } } while (input); return 0; }
步驟6、在.h頭文件中申明函數
//添加聯系人 void add(struct contact* pc);
步驟7、在另外一個.c文件中,對add函數編寫,使其達到添加聯系人的功能。此處介紹一下
pc->data[pc->sz].name的含義,pc->data[i],對data中的第i個聯系人的結構體PeoIfo進行解引用,.name便是指該聯系人的姓名。該段代碼末尾pc->sz++,是指聯系人+1。
//添加聯系人 void add(struct contact* pc) { if (pc->sz >= MAX) { printf("通訊錄已滿。\n"); return; } printf("請輸入姓名\n"); scanf("%s", pc->data[pc->sz].name); printf("請輸入性別\n"); scanf("%s", pc->data[pc->sz].sex); printf("請輸入年齡\n"); scanf("%d", &(pc->data[pc->sz].age)); printf("請輸入電話\n"); scanf("%s", pc->data[pc->sz].tel); printf("請輸入住址\n"); scanf("%s", pc->data[pc->sz].adr); pc->sz++; }
步驟8、同理重復步驟6、7,實現剩余的刪除、查找等功能。此處不一一贅述,讀者在學會add的編寫之后,建議獨自進行其他功能的函數實現思考。
1、主函數所在的.c文件原碼
#include"contact.h" void menu() { printf("*****************************\n"); printf("****1.add 2.del ****\n"); printf("****3.search 4.modify ****\n"); printf("****5.show 6.empty ****\n"); printf("****7.sort 0.exit ****\n"); printf("*****************************\n"); } int main() { int input = 0; struct contact con; //初始化 InitContact(&con); do { menu(); printf("請選擇:"); scanf("%d", &input); switch (input) { case 1: add(&con); break; case 2: del(&con); break; case 3: search(&con); break; case 4: modify(&con); break; case 5: show(&con); break; case 6: InitContact(&con);//直接給他初始化不就清空了。 break; case 7: Sort(&con); break; case 0: printf("已退出通訊錄。\n"); break; default: printf("輸入錯誤,請重新輸入:\n"); break; } } while (input); return 0; }
2、.h頭文件原碼
#define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include<stdio.h> #include<string.h> #include<assert.h> #include<stdlib.h> #define MAX 100 #define nameMAX 20 #define sexMAX 10 #define telMAX 20 #define adrMAX 20 struct PeoIfo { char name[nameMAX]; char sex[sexMAX]; int age; char tel[telMAX]; char adr[adrMAX]; }; struct contact { struct PeoIfo data[MAX]; int sz; }; //初始化 void InitContact(struct contact* pc); //添加聯系人 void add(struct contact* pc); //刪除聯系人 void del(struct contact* pc); //查找聯系人 void search(struct contact* pc); //修改聯系人 void modify(struct contact* pc); //展示通訊錄 void show(struct contact* pc); //清空通訊錄 void empty(struct contact* pc); //按姓名排序 void Sort(struct contact* pc);
3、自定義函數所在的.c文件原碼
#include"contact.h" //打印項目 void pri() { printf("%-15s\t%-10s\t%-10s\t%-10s\t%-20s\n", "姓名", "性別", "年齡", "電話", "住址"); } //查找聯系人的位置 int FindPOS(const struct 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 InitContact(struct contact* pc) { pc->sz = 0; memset(pc->data, 0, MAX * sizeof(struct PeoIfo)); } //添加聯系人 void add(struct contact* pc) { if (pc->sz >= MAX) { printf("通訊錄已滿。\n"); return; } printf("請輸入姓名\n"); scanf("%s", pc->data[pc->sz].name); printf("請輸入性別\n"); scanf("%s", pc->data[pc->sz].sex); printf("請輸入年齡\n"); scanf("%d", &(pc->data[pc->sz].age)); printf("請輸入電話\n"); scanf("%s", pc->data[pc->sz].tel); printf("請輸入住址\n"); scanf("%s", pc->data[pc->sz].adr); pc->sz++; } //刪除聯系人 void del(struct contact* pc) { printf("請輸入要刪除的聯系人姓名:\n"); char delname[nameMAX]; scanf("%s", &delname); int ret=FindPOS(pc, delname); if (-1 == ret) { printf("要刪除的聯系人不存在\n"); } else { int i = 0; for (i = ret; i < pc->sz - 1; i++) { pc->data[ret] = pc->data[ret + 1]; } pc->sz--; printf("刪除成功\n"); } } //查找聯系人 void search(struct contact* pc) { char sechname[nameMAX]; printf("請輸入要找的聯系人:\n"); scanf("%s", &sechname); int ret = FindPOS(pc, sechname); if (-1 == ret) { printf("找不到聯系人\n"); return; } pri(); printf("%-15s\t%-10s\t%-10d\t%-10s\t%-20s\n", pc->data[ret].name, pc->data[ret].sex, pc->data[ret].age, pc->data[ret].tel, pc->data[ret].adr); } //修改聯系人 void modify(struct contact* pc) { printf("請輸入要修改的聯系人姓名:\n"); char moname[nameMAX]; scanf("%s", &moname); int ret = FindPOS(pc, moname); if (-1 == ret) { printf("沒有找到聯系人\n"); } else { printf("請輸入姓名\n"); scanf("%s", pc->data[ret].name); printf("請輸入性別\n"); scanf("%s", pc->data[ret].sex); printf("請輸入年齡\n"); scanf("%d", &(pc->data[ret].age)); printf("請輸入電話\n"); scanf("%s", pc->data[ret].tel); printf("請輸入住址\n"); scanf("%s", pc->data[ret].adr); } } //展示通訊錄 void show(struct contact* pc) { pri(); int i = 0; for (i = 0; i < pc->sz; i++) { printf("%-15s\t%-10s\t%-10d\t%-10s\t%-20s\n", pc->data[i].name, pc->data[i].sex, pc->data[i].age, pc->data[i].tel, pc->data[i].adr); } } //按姓名排序 int compare(void* s1, void* s2) { return strcmp(((struct PeoIfo*)s1)->name, ((struct PeoIfo*)s2)->name); } void Sort(struct contact* pc) { qsort(pc->data, pc->sz, sizeof(struct PeoIfo), compare); }
感謝各位的閱讀,以上就是“怎么用C語言實現通訊錄功能”的內容了,經過本文的學習后,相信大家對怎么用C語言實現通訊錄功能這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。