时间:2021-08-26 08:11:28 | 栏目:C代码 | 点击:次
本文实例为大家分享了C语言简易通讯录的具体代码,供大家参考,具体内容如下
通讯录的实现:
一.介绍:
运用C语言的数组、指针、结构体等相关知识:实现一个简易的通讯录:
此通讯录的大概内容为:
通讯录可存储1000个人的信息:
每个人的基本信息有:名字+ 年龄+性别 + 电话+ QQ + 地址
此通讯录所具有的功能:增加+ 删除 + 查询 + 修改 + 排序 + 退出
此通讯录在设计时:总共设计了三个文件:
contact.h: 类型的声明和函数的声明
contact.c:函数功能的具体实现
test.c: 测试文件
二.具体实现:
1. contact.h:
此文件中定义该通讯录中所设计的功能的函数声明以及两个结构体:
PeoInfo:存储通讯录中每个人的基本信息
Contact:存储通讯录中的数据以及通讯录中的已存储的人数
具体代码实现如下:
// //类型的声明+函数的声明 // #include <stdio.h> #include <string.h> #define MAX 1000 #define MAX_NAME 20 #define MAX_TELE 12 #define MAX_ADDR 100 #define MAX_QQ 12 #define MAX_SEX 5 typedef struct PeoInfo { char name[MAX_NAME]; char tele[MAX_TELE]; char addr[MAX_ADDR]; char qq[MAX_QQ]; char sex[MAX_SEX]; short age; }PeoInfo; //通讯录 typedef struct Contact { PeoInfo data[MAX];//数据 int sz;//有效个数 }Contact; //添加一个人的信息 void add_contact(Contact* pc); //显示通讯录中的信息 void show_contact(Contact* pc); //删除指定的联系人 void del_contact(Contact* pc); //查找指定联系人 void search_contact(Contact* pc); //修改指定联系人 void modify_contact(Contact* pc); //排序通讯录的数据 void sort_contact(Contact* pc);
2. contact.c:
此文件是该通讯录所设计的功能的具体实现:具体包括:
(1) 添加一个人的信息 void add_contact(Contact* pc);
(2)显示通讯录中的信息 void show_contact(Contact* pc);
(3)删除指定的联系人 void del_contact(Contact* pc);
(4)查找指定联系人 void search_contact(Contact* pc);
(5)修改指定联系人 void modify_contact(Contact* pc);
(6)排序通讯录的数据 void sort_contact(Contact* pc);
具体代码实现如下:
#define _CRT_SECURE_NO_WARNINGS 1 #include "contact.h" void add_contact(Contact* pc) { if (pc->sz == MAX) { printf("通讯录已满\n"); } else { printf("请输入名字:>"); scanf("%s", pc->data[pc->sz].name); printf("请输入电话:>"); scanf("%s", pc->data[pc->sz].tele); printf("请输入地址:>"); scanf("%s", pc->data[pc->sz].addr); printf("请输入QQ:>"); scanf("%s", pc->data[pc->sz].qq); printf("请输入性别:>"); scanf("%s", pc->data[pc->sz].sex); printf("请输入年龄:>"); scanf("%d", &(pc->data[pc->sz].age)); pc->sz++; printf("添加成功\n"); } } void show_contact(Contact* pc) { int i = 0; printf("%10s %12s %20s %5s %12s %5s\n", "名字", "电话", "地址", "年龄", "QQ", "性别"); for (i = 0; i < pc->sz; i++) { printf("%10s %12s %20s %5d %12s %5s\n", pc->data[i].name, pc->data[i].tele, pc->data[i].addr, pc->data[i].age, pc->data[i].qq, pc->data[i].sex); } } static int find_peo_by_name(Contact* pc, char name[]) { int i = 0; for (i = 0; i < pc->sz; i++) { if (strcmp(name, pc->data[i].name) == 0) { return i;//找到了,返回下标 } } return -1;//找不到 } void del_contact(Contact* pc) { if (pc->sz == 0) { printf("抱歉,通讯录为空\n"); } else { char name[MAX_NAME] = { 0 }; printf("请输入要删除人的名字:>"); scanf("%s", name); //1. 找到指定的联系人的位置 int pos = find_peo_by_name(pc, name); if (pos == -1) { printf("很遗憾,删除的人不存在\n"); } else { //2. 删除 int j = 0; for (j = pos; j < pc->sz - 1; j++) { pc->data[j] = pc->data[j + 1]; } pc->sz--; printf("删除成功\n"); } } } void search_contact(Contact* pc) { char name[MAX_NAME] = { 0 }; printf("请输入要查找人的名字:>"); scanf("%s", name); int pos = find_peo_by_name(pc, name); if (pos == -1) { printf("查无此人\n"); } else { printf("%10s %12s %20s %5s %12s %5s\n", "名字", "电话", "地址", "年龄", "QQ", "性别"); printf("%10s %12s %20s %5d %12s %5s\n", pc->data[pos].name, pc->data[pos].tele, pc->data[pos].addr, pc->data[pos].age, pc->data[pos].qq, pc->data[pos].sex); } } void modify_contact(Contact* pc) { char name[MAX_NAME] = { 0 }; printf("请输入要修改人的名字:>"); scanf("%s", name); int pos = find_peo_by_name(pc, name); if (pos == -1) { printf("查无此人\n"); } else { printf("请输入新的名字:>"); scanf("%s", pc->data[pos].name); printf("请输入新的电话:>"); scanf("%s", pc->data[pos].tele); printf("请输入新的地址:>"); scanf("%s", pc->data[pos].addr); printf("请输入新的QQ:>"); scanf("%s", pc->data[pos].qq); printf("请输入新的性别:>"); scanf("%s", pc->data[pos].sex); printf("请输入新的年龄:>"); scanf("%d", &(pc->data[pos].age)); } } void sort_contact(Contact* pc) { int i = 0; int j = 0; for (i = 0; i < pc->sz - 1; i++) { int flag = 1;//假设已经有序 for (j = 0; j < pc->sz - 1 - i; j++) { if (strcmp(pc->data[j].name, pc->data[j + 1].name) > 0) { PeoInfo tmp = pc->data[j]; pc->data[j] = pc->data[j + 1]; pc->data[j + 1] = tmp; flag = 0; } } if (1 == flag) { break; } } }
3.test.c
此文件是对该通讯录的功能实现的测试文件:包括菜单的打印,根据用户的输入,输出相关信息以及该通讯录功能的完整流程的实现等。
具体代码实现如下:
#define _CRT_SECURE_NO_WARNINGS 1 #include "contact.h" //测试文件 //通讯录1000个人的信息:名字+ 年龄+ 电话 + 地址+ QQ + 性别 //增 删 查 改 排序 退出 #define _CRT_SECURE_NO_WARNINGS 1 void menu() { printf("*******************************\n"); printf("****** 1. add 2. del * ***\n"); printf("****** 3. search 4. modify ***\n"); printf("****** 5. sort 6. show ***\n"); printf("****** 0. exit ***\n"); printf("*******************************\n"); } enum Option { EXIT, ADD, DEL, SEARCH, MODIFY, SORT, SHOW }; //first_name //FirstName void test() { //创建的通讯录 Contact con = { 0 }; int input = 0; do { menu(); printf("请选择:>"); scanf("%d", &input); switch (input) { case ADD: add_contact(&con); break; case DEL: del_contact(&con); break; case SORT: sort_contact(&con); break; case SHOW: show_contact(&con); break; case SEARCH: search_contact(&con); break; case MODIFY: modify_contact(&con); break; case EXIT: printf("退出通讯录\n"); break; default: printf("选择错误\n"); break; } } while (input); } int main() { test();// return 0; }