【简易通讯录】—–C语言实现 该通讯录实现了一个普通通讯录所具有的基本功能:联系人的添加,删除,修改,排序,查找,清空等功能。使用了结构体自定义类型实现,排序部分使用了冒泡排序。 头文件部分:
#ifndef __CONTACTS_H_ #define __CONTACTS_H_ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> #define MAX 1000 #define NAME_MAX 20 #define TELE_MAX 12 #define SEX_MAX 5 #define ADDR_MAX 40 typedef struct PeoInfo { char name[NAME_MAX]; char tele[TELE_MAX]; char sex[SEX_MAX]; char addr[ADDR_MAX]; int age; }PeoInfo; typedef struct contact { PeoInfo contact[MAX]; int sz; }contact, *pContact; //初始化通讯录 void Init_contact(pContact pcon); //添加联系人 void Add_contacts(pContact pcon); //删除联系人 void Del_contacts(pContact pcon); //查找联系人 void Find_contacts(pContact pcon); //修改联系人 void Mod_contacts(pContact pcon); //显示联系人 void Show_contacts(pContact pcon); //排序联系人 void Sort_contacts(pContact pcon); //清空联系人 void Empty_contacts(pContact pcon); #endif //__CONTACTS_H_测试部分
#define _CRT_SECURE_NO_WARNINGS 1 #include "contacts.h" enum { Exit, Add, Del, Find, Mod, Sort, Show, Empty, }; void menu() { printf("\n"); printf("\n"); printf("\t |*|*|*|*|*|*|*|*|*|*|*|*|*|*| |*|*|*|*|*|*|*|*|*|*|*|*|*|*|\n"); printf("\t |*| 1.添加联系人 |*| |*| 2.删除联系人 |*|\n"); printf("\t |*|*|*|*|*|*|*|*|*|*|*|*|*|*| |*|*|*|*|*|*|*|*|*|*|*|*|*|*|\n"); printf("\n"); printf("\t |*|*|*|*|*|*|*|*|*|*|*|*|*|*| |*|*|*|*|*|*|*|*|*|*|*|*|*|*|\n"); printf("\t |*| 3.查找联系人 |*| |*| 4.修改联系人 |*|\n"); printf("\t |*|*|*|*|*|*|*|*|*|*|*|*|*|*| |*|*|*|*|*|*|*|*|*|*|*|*|*|*|\n"); printf("\n"); printf("\t |*|*|*|*|*|*|*|*|*|*|*|*|*|*| |*|*|*|*|*|*|*|*|*|*|*|*|*|*|\n"); printf("\t |*| 5.排序联系人 |*| |*| 6.显示联系人 |*|\n"); printf("\t |*|*|*|*|*|*|*|*|*|*|*|*|*|*| |*|*|*|*|*|*|*|*|*|*|*|*|*|*|\n"); printf("\n"); printf("\t |*|*|*|*|*|*|*|*|*|*|*|*|*|*| |*|*|*|*|*|*|*|*|*|*|*|*|*|*|\n"); printf("\t |*| 7.清空联系人 |*| |*| 0.退出 |*|\n"); printf("\t |*|*|*|*|*|*|*|*|*|*|*|*|*|*| |*|*|*|*|*|*|*|*|*|*|*|*|*|*|\n"); } void test() { int input = 0; contact my_con; Init_contact(&my_con); do { menu(); printf("请输入你的选择>:\n"); scanf("%d", &input); switch (input) { case Add: Add_contacts(&my_con); break; case Del: Del_contacts(&my_con); break; case Find: Find_contacts(&my_con); break; case Mod: Mod_contacts(&my_con); break; case Sort: Sort_contacts(&my_con); break; case Show: Show_contacts(&my_con); break; case Empty: Empty_contacts(&my_con); break; case Exit: printf("********谢谢你的使用,拜拜*******\n"); break; default: printf("输入错误\n"); break; } } while (input); } int main() { test(); system("pause"); return 0; }功能实现部分
#include "contacts.h" //通讯录初始化 void Init_contact(pContact pcon) { assert(pcon != NULL); //sizeof里数组名代表整个数组 memset(pcon->contact, 0, sizeof(pcon->contact)); pcon->sz = 0; } //添加联系人 void Add_contacts(pContact pcon) { assert(pcon != NULL); if (pcon->sz == MAX) { printf("通讯录已满!!!\n"); return; } printf("请输入姓名:>\n"); scanf("%s", pcon->contact[pcon->sz].name); printf("请输入电话号:>\n"); scanf("%s", pcon->contact[pcon->sz].tele); printf("请输入性别:>\n"); scanf("%s", pcon->contact[pcon->sz].sex); printf("请输入年龄:>\n"); //年龄不是数组类型,所以一定要取地址 scanf("%d", &(pcon->contact[pcon->sz].age)); printf("请输入地址:>\n"); scanf("%s", pcon->contact[pcon->sz].addr); (pcon->sz)++; printf("录入成功!!!\n"); } int Find(pContact pcon ,char name[]) { assert(pcon != NULL); int i = 0; for (i = 0; i < pcon->sz; i++) { if (strcmp((pcon->contact[i].name), name) == 0) { return i; } } return -1; } //删除联系人 void Del_contacts(pContact pcon) { assert(pcon != NULL); char name[NAME_MAX] = { 0 }; if (pcon->sz == 0) { printf("通讯录为空\n"); return; } printf("请输入想删除人的名字\n"); scanf("%s", name); int ret = Find(pcon,name); if (ret == -1) { printf("没有该联系人\n"); } else { int i = 0; for (i = ret; i < pcon->sz; i++) { pcon->contact[i] = pcon->contact[i + 1]; } pcon-> sz--; printf("删除成功\n"); } } //查找联系人,并显示他的全部信息 void Find_contacts(pContact pcon) { char name[NAME_MAX]; assert(pcon != NULL); printf("请输入想要查找人的名字\n"); scanf("%s", name); int ret = Find(pcon,name); if (ret == -1) { printf("没有该联系人\n"); } else { printf("s\ts\t%5s\t=\t s\n", pcon->contact[ret].name, pcon->contact[ret].tele, pcon->contact[ret].sex, pcon->contact[ret].age, pcon->contact[ret].addr); } } mneu1() { printf("\n"); printf("\n"); printf("\t *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n"); printf("\t *-*-*-* 1 .姓名 2. 电话 *-*-*-*\n"); printf("\t *-*-*-* 3. 性别 4. 年龄 *-*-*-*\n"); printf("\t *-*-*-* 5. 地址 0. 退出 *-*-*-*\n"); printf("\t *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n"); printf("\n"); } //修改联系人 void Mod_contacts(pContact pcon) { char name[NAME_MAX] = { 0 }; int input = 0; assert(pcon != NULL); printf("请输入要修改联系人的姓名\n"); scanf("%s", name); int ret = Find(pcon, name); if (ret == -1) { printf("该联系人不存在\n"); return; } do { mneu1(); printf("请输入要修改的选项\n"); scanf("%d", &input); switch (input) { case 1: printf("请输入新的姓名:>\n"); scanf("%s", pcon->contact[ret].name); break; case 2: printf("请输入新的电话号:>\n"); scanf("%s", pcon->contact[ret].tele); break; case 3: printf("请输入性别:>\n"); scanf("%s", pcon->contact[ret].sex); break; case 4: printf("请输入年龄:>\n"); scanf("%d", &(pcon->contact[ret].age)); break; case 5: printf("请输入新的地址\n"); scanf("%s", pcon->contact[ret].name); break; case 0: break; default: printf("输入错误\n"); } } while (input); printf("修改成功\n"); } //按姓名排序 void Sort_contacts(pContact pcon) { int i = 0; int j = 0; int flag = 0; assert(pcon != NULL); //如果只有一个联系人就不用排序 if (pcon->sz == 1) { return; } //用冒泡排序以联系人的名字升序 for (i = 0; i < pcon->sz - 1; i++) { for (j = 0; j < pcon->sz - i - 1; j++) { if (strcmp(pcon->contact[j].name, pcon->contact[j + 1].name) > 0) { PeoInfo tmp = pcon->contact[j]; pcon->contact[j] = pcon->contact[j + 1]; pcon->contact[j + 1] = tmp; flag = 1; } } if (flag == 0) { break; } } printf("排序成功\n"); Show_contacts(pcon); } //清空联系人 void Empty_contacts(pContact pcon) { char back = 0; assert(pcon != NULL); printf("是否清空全部联系人:y.是 n.否\n"); fflush(stdin); scanf("%c", &back); if (back == 'y') { while ((back == 'y') && (pcon->sz > 0)) { strcpy(pcon->contact[pcon->sz].name, "\0"); strcpy(pcon->contact[pcon->sz].tele, "\0"); strcpy(pcon->contact[pcon->sz].sex, "\0"); strcpy(pcon->contact[pcon->sz].addr, "\0"); pcon->contact[pcon->sz].age = 0; pcon->sz--; if (pcon->sz == 0) { printf("已清空全部联系人\n"); return; } } } } //显示联系人 void Show_contacts(pContact pcon) { assert(pcon != NULL); printf("s\ts\t%5s\t%3s\t s\n", "name","tele","sex","age","addr"); int i = 0; for (i = 0; i < pcon->sz; i++) { printf("s\ts\t%5s\t=\t s\n", pcon->contact[i].name, pcon->contact[i].tele, pcon->contact[i].sex, pcon->contact[i].age, pcon->contact[i].addr); } }程序运行时的截图
主菜单: 排序前联系人显示: 排序后联系人显示: 想要修改联系人是选择菜单: