C语言简易版通讯录(静态版)

  • 通讯录的功能
    • 菜单显示
    • 增加联系人
    • 删除联系人
    • 查找联系人
    • 信息变更
    • 显示联系人信息
    • 清空通讯录
    • 排序通讯录
    • 主函数

通讯录的功能

菜单显示

void print()
{printf("****************************************\n");printf("*****1.增加联系人      2.删除联系人*****\n");printf("*****3.查找联系人      4.信息变更  *****\n");printf("*****5.显示信息        6.清空通讯录*****\n");printf("*****7.排序                  0.退出*****\n");printf("****************************************\n");
}

增加联系人

void add(contact* con)
{assert(con);if (con->count > 1000){printf("通讯录已满!\n");return;}printf("请输入联系人姓名:>\n");scanf("%s", con->data[con->count].name);printf("请输入联系人性别:>\n");scanf("%s", con->data[con->count].sex);printf("请输入联系人年龄:>\n");scanf("%d", &(con->data[con->count].age));printf("请输入联系人电话:>\n");scanf("%s", con->data[con->count].tele);printf("请输入联系人地址:>\n");scanf("%s", con->data[con->count].addr);con->count++;
}

这里增加联系人就是输入联系人的信息,同时让结构体的计数次数+1.

删除联系人

void del(contact* con)
{char name[20] = { 0 };printf("请输入要删除的联系人名字:>\n");scanf("%s", name);int s = search(con,name);int i = 0;for (i = s; i < con->count - 1; i++){con->data[i] = con->data[i + 1];}con->count--;printf("删除成功!\n");
}

删除联系人很简单,我这里是通过查找联系人的方法来删除联系人,如果你们自己写,可以通过电话号码或者其他别的方法来

查找联系人

int search(contact* con,char name[])
{assert(con);int i = 0;for (i = 0; i < con->count; i++){if ((strcmp(name, con->data[i].name))==0){return i;}}return -1;
}

查找联系人这个函数很简单,就是输入名字,然后让输入的名字和已有的联系人的名字相比较即可

信息变更

//菜单选项
void menu1()
{printf("*************************************\n");printf("*********1.姓名       2.性别*********\n");printf("*********3.年龄       4.电话号码*****\n");printf("*********5.地址       0.不做修改*****\n");printf("*************************************\n");
}
//修改联系人信息
void modify(contact* con)
{char name[max_name] = { 0 };int choice = 0;printf("请输入要修改的联系人姓名:>\n");scanf("%s", name);int s = search(con, name);if (s != -1){do{printf("请根据您的需要修改联系人信息!\n");menu1();printf("请输入您要修改的联系人信息的选项:>\n");scanf("%d", &choice);switch (choice){case 1:printf("请修改联系人姓名:>\n");scanf("%s", con->data[s].name);break;case 2:printf("请修改联系人性别:>\n");scanf("%s", con->data[s].sex);break;case 3:printf("请修改联系人年龄:>\n");scanf("%d", &(con->data[s].age));break;case 4:printf("请修改联系人电话号码:>\n");scanf("%s", con->data[s].tele);break;case 5:printf("请修改联系人地址:>\n");scanf("%s", con->data[s].addr);break;default:printf("没有该选项,请重新选择:>\n");break;}} while (choice);}else{printf("你要修改的联系人信息不存在!\n");return ;}
}

也是通过调用查找函数,然后根据自己的需要修改联系人信息

显示联系人信息

void show(contact* con)
{int i = 0;printf("%-10s%-5s%-6s%-15s%-20s\n", "姓名", "性别", "年龄", "电话号码", "地址");for (i = 0; i < con->count; i++){printf("%-10s%-5s%-6d%-15s%-20s\n", con->data[i].name,con->data[i].sex,con->data[i].age,con->data[i].tele,con->data[i].addr);}
}

遍历这个结构体中的联系人的数据,然后一一打印

清空通讯录

//清空通讯录
void clear(contact* con)
{con->count = 0;printf("清除成功!\n");
}

这个函数最简单,就让通讯录的次数变成0,无法读取通讯录信息。

排序通讯录

//比较函数
int cmp(void* e1, void* e2)
{return (strcmp(((info*)e1)->name ,((info*)e2)->name));
}//交换函数
void Swap(char* e1, char* e2, int size)
{int i = 0;for (i = 0; i < size; i++){char tmp = *e1;*e1 = *e2;*e2 = tmp;e1++;e2++;}
}//基于冒泡排序思想的排序函数
void bubble_sort(void* base,size_t num,size_t size,int(*cmp)(void* e1, void* e2))
{int i = 0;int j = 0;for (i = 0; i < num - 1; i++){for (j = 0; j < num - 1 - i; j++){int sz = cmp(((char*)base + j * size), ((char*)base + (j + 1) * size));if (sz>0){Swap(((char*)base + j * size), ((char*)base + (j + 1) * size), size);}}}
}
//排序通讯录
void sort(contact* con)
{bubble_sort(con->data,con->count,sizeof(info),cmp);printf("排序成功!\n");
}

这里我用了冒泡排序的思想排序通讯录,同时我这个排序函数适用于各种类型的排序,如果读者嫌麻烦可以使用库函数的qsort函数进行排序。

主函数

enum choe {EXIT,ADD,DELETE,SEARCH,MODIFY,SHOW,CLEAR,SORT
};
int main()
{	int input = 0;contact con;memset(&con, 0, sizeof(con));do {print();printf("请选择功能:>\n");scanf("%d", &input);switch (input){case ADD:printf("请输入信息:>\n");add(&con);break;case DELETE:del(&con);break;case SEARCH:printf("请输入要查找的联系人:>\n");char name[max_name] = { 0 };inputname(name);int x = search(&con, name);if (x >= 0){printf("查找成功!\n");}else{printf("查无此人!\n");}show1(&con, x);break;case MODIFY:modify(&con);break;case SHOW:show(&con);break;case CLEAR:clear(&con);break;case SORT:sort(&con);break;case EXIT:printf("退出\n");break;}} while (input);return 0;
}

这里用了枚举,使得每一个功能都能够做到见名知意,清晰明了。
这里就不做效果展示咯,这个通讯录比较简单,大家可以自行复制,然后运行,编译器是vs2019,感谢各位!


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部