文章来源:https://www.toymoban.com/news/detail-599362.html
作者:敲代码の流川枫
博客主页:流川枫的博客
专栏:C语言从入门到进阶
语录:Stay hungry stay foolish
工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器——牛客网
点击免费注册和我一起刷题吧
目录
1.contact.h——通讯录相关的声明
2.contact.c——通讯录相关的实现
2.1 初始化通讯录
2.2 增加联系人信息
2.3 删除联系人信息
2.4 查找指定联系人
2.5 修改联系人信息
2.6 显示联系人信息
2.7 对联系人排序
3.test.c——测试功能
文章来源地址https://www.toymoban.com/news/detail-599362.html
test.c——测试功能
contact.c——通讯录相关的实现
contact.h——通讯录相关的声明
1.contact.h——通讯录相关的声明
#pragma once #include<stdio.h> #include<string.h> #include<assert.h> #include<stdlib.h> #define MAX 100 #define MAX_NAME 20 #define MAX_SEX 10 #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[100];//存放人的信息 int count;//记录当前通讯录有多少人的信息 }Contact; //初始化通讯录函数 void InitContact(Contact *pc); //增加联系人到通讯录 void addContact(Contact* pc); //打印通讯录信息 void showContact(const Contact* pc); //删除指定联系人 void delContact(Contact* pc); //查找指定联系人 void SearchContact(Contact* pc); //修改指定联系人 void modifyContact(Contact* pc); //按照名字排序通讯录内容 void sortContact(Contact* pc);
2.contact.c——通讯录相关的实现
2.1 初始化通讯录
#include"contact.h" //初始化通讯录函数 void InitContact(Contact* pc) { pc->count = 0; memset(pc->data, 0, sizeof(pc->data)); }
2.2 增加联系人信息
//增加联系人到通讯录 void addContact(Contact* pc) { assert(pc); //判断通讯录是否充满 if (pc->count == MAX) { printf("\n通讯录已满,无法添加\n"); return; } //添加信息 printf("\n请输入名字:>"); //每次放进去的信息都是放进data 下标为count的数组 scanf("%s", pc->data[pc->count].name); printf("\n请输入年龄:>"); //因为name是存放在数组中,数组名本身就是地址,不需要再取地址 //这里的年龄是int 型变量,需要取地址 scanf("%d", &(pc->data[pc->count].age)); printf("\n请输入性别:>"); scanf("%s", pc->data[pc->count].sex); printf("\n请输入电话:>"); scanf("%s", pc->data[pc->count].tele); printf("\n请输入地址:>"); scanf("%s", pc->data[pc->count].addr); pc->count++; printf("\n增加成功\n"); }
2.3 删除联系人信息
//查找联系人的函数,这个函数不需要进行声明,它是代码内部逻辑的需要 static int findByName(Contact* pc, char name[]) { assert(pc); int i = 0; for (i = 0; i < pc->count; i++) { if (0 == strcmp(pc->data[i].name, name)) return i; } return -1; } //删除指定联系人 void delContact(Contact* pc) { char name[MAX_NAME] = { 0 }; assert(pc); int i = 0; if (pc->count == 0) { printf("\n通讯录为空\n"); return; } printf("\n请输入要删除的人名字:>"); scanf("%s", name); //进行删除 //1.查找,因为各种操作都需要先进行查找,可以独立分装一个函数 int pos = findByName(pc, name); if (pos == -1) { printf("要删除的人不存在\n"); return; } //2.删除 for (i = pos; i < pc->count-1; i++) { //用i+1位置的数据覆盖掉pos位置的数据,完成删除 pc->data[i] = pc->data[i + 1];//i+1最大99 } pc->count--; //这里是为了解决当要删除最后一个人的信息时, //后面没有数据来覆盖最后一个联系人的数据。 //count--;最后一个元素为99,就访问不到最后一个元素了,起到删除的作用 printf("\n删除成功\n"); }
2.4 查找指定联系人
//查找指定联系人 void SearchContact(Contact* pc) { char name[MAX_NAME] = { 0 }; assert(pc); printf("\n请输入要查找的人名字:>"); scanf("%s", name); //查找 int pos = findByName(pc, name); if (pos == -1) { printf("要查找的人不存在\n"); return; } //打印 printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "年龄", "性别", "电话", "地址"); printf("%-20s\t%-5d\t%-5s\t%-12s\t%-30s\n", pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr); }
2.5 修改联系人信息
//修改指定联系人 void modifyContact(Contact* pc) { char name[MAX_NAME] = { 0 }; assert(pc); printf("\n请输入要修改的人名字:>"); scanf("%s", name); //查找 int pos = findByName(pc, name); if (pos == -1) { printf("要修改的人不存在\n"); return; } //2.修改 printf("\n请输入名字:>"); //每次放进去的信息都是放进data 下标为count的数组 scanf("%s", pc->data[pos].name); printf("\n请输入年龄:>"); //因为name是存放在数组中,数组名本身就是地址,不需要再取地址 //这里的年龄是int 型变量,需要取地址 scanf("%d", &(pc->data[pos].age)); printf("\n请输入性别:>"); scanf("%s", pc->data[pos].sex); printf("\n请输入电话:>"); scanf("%s", pc->data[pos].tele); printf("\n请输入地址:>"); scanf("%s", pc->data[pos].addr); printf("\n修改成功\n"); }
2.6 显示联系人信息
//打印通讯录信息 void showContact(const Contact* pc) { assert(pc); //打印 int i = 0; printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "年龄", "性别", "电话", "地址"); for (i = 0; i < pc->count; i++) { printf("%-20s\t%-5d\t%-5s\t%-12s\t%-30s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr); }
2.7 对联系人排序
int cmo_peo_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->count,sizeof(PeoInfo), cmo_peo_by_name); printf("\n排序成功\n"); }
3.test.c——测试功能
#define _CRT_SECURE_NO_WARNINGS #include"contact.h" void menu() { printf("\n"); 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" ); printf("\n"); } int main() { int input = 0; Contact con;//创建通讯录 //写一个函数初始化通讯录 //模块化处理;大括号初始化不方便 InitContact(&con);//要改变con内容,因此要传地址 do { menu(); printf("\n请选择:>\n"); scanf("%d", &input); switch (input) { case 1: addContact(&con); break; case 2: delContact(&con); break; case 3: SearchContact(&con); break; case 4: modifyContact(&con); break; case 5: showContact(&con); break; case 6: sortContact(&con); break; case 0: printf("\n退出通讯录\n"); break; default: printf("\n选择错误\n"); break; } } while (input); return 0; }
“ 本期的分享就到这里了, 记得给博主一个三连哈,你的支持是我创作的最大动力!”
到了这里,关于C语言进阶——静态通讯录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!