完整代码:
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 5 #define MAX_TELE 12 #define MAX_ADDR 20 typedef struct PeoInfo { char name[MAX_NAME]; char sex[MAX_SEX]; int age; char addr[MAX_ADDR]; char tele[MAX_TELE]; }PeoInfo; typedef struct contact { PeoInfo data[MAX]; int sz; }contact; void Initcontact(contact *con); void AddContact(contact *con); void DelContact(contact *con); void SeachContact(contact *con); void ModifyContact(contact* con); void PrintContact(contact* con); void sortContact(contact* con);
test.c
#define _CRT_SECURE_NO_WARNINGS 1 #include"contact.h" void menu() { printf("**********************************\n"); printf("**********************************\n"); printf("******** 欢迎使用本通讯录 ********\n"); printf("**********************************\n"); printf("***** 本通讯录现提供以下功能 *****\n"); printf("************ 1.Add ***************\n"); printf("************ 2.Del ***************\n"); printf("************ 3.Search ************\n"); printf("************ 4.Modify ************\n"); printf("************ 5.Print *************\n"); printf("************ 6.sort **************\n"); printf("************ 0.exit**************\n"); printf("**********************************\n"); } void Contact() { int input = 0; contact con; Initcontact(&con); do { menu(); printf("请选择>"); scanf("%d", &input); switch (input) { case 1: AddContact(&con); break; case 2: DelContact(&con); break; case 3: SeachContact(&con); break; case 4: ModifyContact(&con); break; case 5: PrintContact(&con); break; case 6: sortContact(&con); break; case 0: printf("已成功退出"); break; default: printf("输入错误,请重新输入\n"); break; } } while (input); } int main() { Contact(); return 0; }
contact.c
#define _CRT_SECURE_NO_WARNINGS 1 #include "contact.h" int FindByName(contact* con, char name[]) { assert(con); int i = 0; for (i = 0; i < con->sz; i++) { if (strcmp(con->data[i].name,name) == 0) { return i; } } return -1; } void Initcontact(contact* con) { assert(con); con->sz = 0; memset(con->data, 0, sizeof(con->data)); } void AddContact(contact* con) { assert(con); if (con->sz == 99) { printf("通讯录已经存满,请联系操作人员"); return; } printf("请输入联系人姓名:>"); scanf("%s", con->data[con->sz].name); printf("请输入联系人性别:>"); scanf("%s",con->data[con->sz].sex); printf("请输入联系人年龄:>"); scanf("%d", &(con->data[con->sz].age)); printf("请输入联系人联系方式:>"); scanf("%s", con->data[con->sz].tele); printf("请输入联系人住址:>"); scanf("%s", con->data[con->sz].addr); printf("联系人信息添加成功!\n"); con->sz++; } void DelContact(contact* con) { assert(con); char name[100]; if (con->sz == 0) { printf("通讯录为空,无法删除\n"); return; } printf("请输入要删除人名字:>"); scanf("%s", name); int ret = FindByName(con, name); int i = 0; if (-1 == ret) { printf("没有找到此人\n"); return; } else { for (i = ret; i < con->sz-1; i++) { con->data[i] = con->data[i + 1]; } con->sz--; memset(&con->data[i], 0, sizeof(con->data[i])); printf("删除成功!\n"); } } void SeachContact(contact* con) { assert(con); char name[MAX_NAME]; if (con->sz == 0) { printf("通讯录为空,无法输入\n"); return; } printf("请输入查找人名字"); scanf("%s", name); int ret = FindByName(con, name); if (ret == -1) { printf("您查找的人不存在!\n"); return; } printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "姓名", "年龄", "性别", "地址", "电话"); printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", con->data[ret].name, con->data[ret].age, con->data[ret].sex, con->data[ret].addr, con->data[ret].tele); } void ModifyContact(contact* con) { assert(con); char name[MAX_NAME] = { 0 }; if (con->sz == 0) { printf("通讯录为空,无法修改\n"); return; } printf("请输入查找人名字"); scanf("%s", name); int ret = FindByName(con, name); if (-1 == ret) { printf("您要修改的人不存在\n"); return; } printf("请输入联系人姓名:>"); scanf("%s", con->data[ret].name); printf("请输入联系人性别:>"); scanf("%s", con->data[ret].sex); printf("请输入联系人年龄:>"); scanf("%d", &(con->data[ret].age)); printf("请输入联系人住址:>"); scanf("%s", con->data[ret].addr); printf("请输入联系人联系方式:>"); scanf("%s", con->data[ret].tele); printf("联系人信息修改成功!\n"); } void PrintContact(contact* con) { printf("%-10s\t%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n","联系人", "姓名", "年龄", "性别", "地址", "电话"); for (int i = 0; i < con->sz; i++) { printf("%-10d\t%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n",i+1, con->data[i].name, con->data[i].age, con->data[i].sex, con->data[i].addr, con->data[i].tele); } } int cmp_con_by_name(const void* e1, const void* e2) { return (strcmp(((PeoInfo *)e1)->name, ((PeoInfo*)e2)->name)); } void sortContact(contact* con) { assert(con); if (0 == con->sz) { printf("通讯录为空,无法排序\n"); return; } qsort(con->data, con->sz, sizeof(con->data[0]), cmp_con_by_name); printf("排序成功"); }
🫠总结:🫠
到这里,我们的基础通讯录功能就得以实现啦,不过作为基础版本的它仍然存在着许多缺陷,而且他仅仅是一个静态的,一旦关闭exe,所有消息都会消失。在接下来的博客我会对于这个通讯录进行优化!
更新不易,辛苦各位小伙伴们动动小手,👍三连走一走💕💕 ~ ~ ~ 你们真的对我很重要!最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!