源码:
contact.c
voidInitContact(structContact*pc) { assert(pc); pc->sz=0; memset(pc->data, 0, 100*sizeof(structPeoInfo)); } voidAddContact(structContact*pc) { //判断通讯录人员是否满了assert(pc); //确保pc不是空指针if (pc->sz==MAX) { printf("通讯录已满,无法添加数据\n"); return; } printf("请输入名字:"); scanf("%s", pc->data[pc->sz].name); printf("请输入性别:"); scanf("%s", pc->data[pc->sz].sex); printf("请输入年龄:"); scanf("%d", &(pc->data[pc->sz].age)); printf("请输入电话:"); scanf("%s", pc->data[pc->sz].tele); printf("请输入地址:"); scanf("%s", pc->data[pc->sz].addr); pc->sz++; printf("成功增加联系人\n"); } voidShowContact(conststructContact*pc) { inti=0; printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "性别", "年龄", "电话", "地址"); for (i=0; i<pc->sz; i++) { printf("%-20s\t%-5s\t%-5d\t%-12s\t%-30s\n", pc->data[i].name, pc->data[i].sex, pc->data[i].age, pc->data[i].tele, pc->data[i].addr); } } intFindByName(conststructContact*pc, charname[]) { inti=0; for (i=0; i<pc->sz; i++) { if (0==strcmp(pc->data[i].name, name)) { returni; } } return-1; } voidDelContact(structContact*pc) { charname[MAX_NAME]; printf("请输入要删除人的名字:"); scanf("%s", name); //查找一下指定的人是否存在intret=FindByName(pc, name); if (ret==-1) printf("要删除的人不存在\n"); else { //删除intj=0; for (j=ret; j<pc->sz-1; j++) { pc->data[j] =pc->data[j+1]; } pc->sz--; printf("成功删除指定联系人\n"); } } voidSearchContact(conststructContact*pc) { charname[MAX_NAME]; printf("请输入要查找的人的名字:"); scanf("%s", name); //查找一下指定的人是否存在intret=FindByName(pc, name); if (ret==-1) printf("要查找的人不存在\n"); else { printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "性别", "年龄", "电话", "地址"); printf("%-20s\t%-5s\t%-5d\t%-12s\t%-30s\n", pc->data[ret].name, pc->data[ret].sex, pc->data[ret].age, pc->data[ret].tele, pc->data[ret].addr); } } voidModifyContact(structContact*pc) { printf("请输入要修改人的名字:>"); charname[MAX_NAME]; scanf("%s", name); intret=FindByName(pc, name); if (ret==-1) printf("要修改的人不存在\n"); else { printf("请输入名字:"); scanf("%s", pc->data[ret].name); printf("请输入性别:"); scanf("%s", pc->data[ret].sex); printf("请输入年龄:"); scanf("%d", &(pc->data[ret].age)); printf("请输入电话:"); scanf("%s", pc->data[ret].tele); printf("请输入地址:"); scanf("%s", pc->data[ret].addr); printf("修改成功\n"); } } intCmpByAge(constvoid*e1, constvoid*e2) { return ((structPeoInfo*)e1)->age- ((structPeoInfo*)e2)->age; } //按照年龄来排序voidSortContact(structContact*pc) { qsort(pc->data, pc->sz, sizeof(structPeoInfo), CmpByAge); }
test.c
voidmenu() { 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"); } intmain() { intinput=0; structContactcon;//创建通讯录InitContact(&con); //初始化通讯录do { menu(); printf("请选择:"); scanf("%d", &input); switch (input) { case1: AddContact(&con); break; case2: DelContact(&con); break; case3: SearchContact(&con); break; case4: ModifyContact(&con); break; case5: ShowContact(&con); break; case6: SortContact(&con); break; case0: break; default: break; } } while (input); return0; }
contact.h
1.#defineMAX100//表示一个人的信息structPeoInfo { charname[MAX_NAME]; charsex[MAX_SEX]; chartele[MAX_TELE]; intage; charaddr[MAX_ADDR]; }; //完整的通讯录 structContact { structPeoInfodata[MAX]; intsz; //sz表示人数,如果写入一个人的信息,让sz++,来达到统计人数的效果}; //初始化通讯录voidInitContact(structContact*pc); //添加联系人信息到通讯录voidAddContact(structContact*pc); //显示通讯录联系人信息voidShowContact(conststructContact*pc); //删除指定联系人信息voidDelContact(structContact*pc); //查找联系人信息voidSearchContact(conststructContact*pc); //修改联系人信息voidModifyContact(structContact*pc); //排序联系人信息voidSortContact(conststructContact*pc);
三,总结
通讯录的实现看似不难,但是在一些细节上还是挺复杂,里面涉及到结构体是的知识较为广泛,包括结构体传参,结构体指针等等,如对上文有意见或者有错误,还请大佬们斧正,觉得有帮助的童鞋们,创作不易,蟹蟹三连!