100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > C语言简易版通讯录(静态版)

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

时间:2020-11-13 14:46:15

相关推荐

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;}

这里用了枚举,使得每一个功能都能够做到见名知意,清晰明了。

这里就不做效果展示咯,这个通讯录比较简单,大家可以自行复制,然后运行,编译器是vs,感谢各位!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。