A-A+
	C语言编写—通讯录(小项目)
C语言的练习—通讯录,该通讯录主要实现最大存储1000个人信息,对通讯录中的个人信息能够进行增、删、查、改等基本功能,通过用c语言编写,能够极大程度上锻炼编程能力。程序主要使用数组的知识,创建1000大小的静态数组,在极端情况下,通讯录中元素较少,对空间的使用率较低,使得空间浪费。该程序能够再次进行改进,可以通过动态开辟数组,减少空间的浪费,也可以通过链表来实现。
——下面程序主要是利用静态数组的方式,该程序有待改进。
- #define _CRT_SECURE_NO_WARNINGS 1
 - #include <stdio.h>
 - #include <string.h>
 - #include <stdlib.h>
 - #define MAX 1000
 - #define MAX_NAME 10
 - #define MAX_SEX 3
 - #define MAX_TELEPHONE 20
 - #define MAX_ADR 20
 - typedef struct people //people信息
 - {
 - char name[MAX_NAME];
 - char sex[MAX_SEX];
 - int age;
 - char tele[MAX_TELEPHONE];
 - char adr[MAX_ADR];
 - }people;
 - typedef struct txl //通讯录的存储
 - {
 - people elem[MAX];
 - int count;
 - }pdh, *por;
 - void init(por L) //初始化通讯录
 - {
 - L->count = 0;
 - }
 - //主菜单
 - void menu()
 - {
 - printf("\t\t************************************\n");
 - printf("\t\t***** 1.添加联系人信息 *****\n");
 - printf("\t\t***** 2.删除指定联系人信息 *****\n");
 - printf("\t\t***** 3.查找指定联系人信息 *****\n");
 - printf("\t\t***** 4.修改指定联系人信息 *****\n");
 - printf("\t\t***** 5.显示所有联系人信息 *****\n");
 - printf("\t\t***** 6.清空所有联系人信息 *****\n");
 - printf("\t\t***** 7.以名字排序所有联系人 *****\n");
 - printf("\t\t***** 0.退出通讯录 *****\n");
 - printf("\t\t************************************\n");
 - printf("\n\t请选择:");
 - }
 - //添加联系人
 - void _add(por L)
 - {
 - if (L->count >= MAX)
 - {
 - printf("电话本已满,无法添加!");
 - return;
 - }
 - printf(">>请输入所要添加的联系人信息!\n");
 - printf("\n 姓名:");
 - fflush(stdin);
 - gets(L->elem[L->count].name);
 - printf("\n 性别:");
 - fflush(stdin);
 - gets(L->elem[L->count].sex);
 - printf("\n 年龄:");
 - scanf("%d", &L->elem[L->count].age);
 - printf("\n 电话:");
 - fflush(stdin);
 - gets(L->elem[L->count].tele);
 - printf("\n 住址:");
 - fflush(stdin);
 - gets(L->elem[L->count].adr);
 - L->count++;
 - printf("添加完成!\n");
 - }
 - //查找联系人
 - static int search(por L, const char * dos)
 - {
 - int i = 0;
 - for (i = 0; i < L->count; i++)
 - {
 - if (strcmp(dos, L->elem[i].name) == 0)
 - {
 - return i;
 - }
 - }
 - return -1;
 - }
 - //删除指定联系人信息
 - void _delete(por L)
 - {
 - char arr[MAX_NAME];
 - int i = 0;
 - int ret = 0;
 - printf("请输入所要删除联系人的姓名:\n");
 - fflush(stdin);
 - gets(arr);
 - ret = search(L, arr);
 - if (ret == -1)
 - {
 - printf("通讯录中没有此联系人!\n");
 - return;
 - }
 - else
 - {
 - for (i = ret; i < L->count - 1; i++)
 - {
 - L->elem[i] = L->elem[i + 1];
 - }
 - L->count--;
 - printf("删除成功!\n");
 - }
 - }
 - //查找指定的联系人信息
 - void _find(por L)
 - {
 - char ptr[MAX_NAME];
 - int ret = 0;
 - printf("请输入所要查找的联系人姓名:\n");
 - fflush(stdin);
 - gets(ptr);
 - ret = search(L, ptr);
 - if (ret == -1)
 - {
 - printf("查找失败,无此联系人!\n");
 - return;
 - }
 - else
 - {
 - printf("查找成功!\n");
 - printf(" 姓名 性别 年龄 电话 地址 \n");
 - printf("%s %s %d %s %s \n",
 - L->elem[ret].name,
 - L->elem[ret].sex,
 - L->elem[ret].age,
 - L->elem[ret].tele,
 - L->elem[ret].adr);
 - }
 - }
 - //修改指定联系人信息
 - void _alter(por L)
 - {
 - char ptr[MAX_NAME];
 - int ret = 0;
 - int ter = 0;
 - char a = 0;
 - printf("请输入所要修改的联系人的姓名:\n");
 - fflush(stdin);
 - gets(ptr);
 - ret = search(L, ptr);
 - if (ret == -1)
 - {
 - printf("通讯录中无此联系人!\n");
 - return;
 - }
 - else
 - {
 - printf("1.修改姓名\n");
 - printf("2.修改性别\n");
 - printf("3.修改年龄\n");
 - printf("4.修改电话\n");
 - printf("5.修改住址\n");
 - printf("\n请选择修改项:");
 - scanf("%d", &ter);
 - switch (ter)
 - {
 - case 1:
 - printf("修改姓名为:");
 - scanf("%s", L->elem[ret].name);
 - break;
 - case 2:
 - printf("修改性别为:");
 - scanf("%s", L->elem[ret].sex);
 - break;
 - case 3:
 - printf("修改年龄为:");
 - scanf("%d", L->elem[ret].age);
 - break;
 - case 4:
 - printf("修改电话为:");
 - scanf("%s", L->elem[ret].tele);
 - break;
 - case 5:
 - printf("修改地址为:");
 - scanf("%s", L->elem[ret].adr);
 - break;
 - default:
 - break;
 - }
 - printf("修改成功!\n");
 - printf("继续输入?Y/N");
 - if ((a = getchar()) == 'Y')
 - {
 - _alter(L);
 - }
 - else if ((a = getchar()) == 'N')
 - {
 - return;
 - }
 - }
 - }
 - //显示所有联系人
 - void _show(por L)
 - {
 - int i = 0;
 - if (L->count == 0)
 - {
 - printf("通讯录中还没有联系人!\n");
 - return;
 - }
 - else
 - {
 - for (i = 0; i < L->count; i++)
 - {
 - printf("\n 姓名 性别 年龄 电话 地址 \n");
 - printf(" %s %s %d %s %s\n", L->elem[i].name, L->elem[i].sex, L->elem[i].age, L->elem[i].tele, L->elem[i].adr);
 - }
 - }
 - }
 - //删除所有联系人
 - void _delete_all(por L)
 - {
 - L->count = 0;
 - printf("清除成功!\n");
 - }
 - //以姓名对通讯录进行冒泡排序
 - void _sort(por L)
 - {
 - int i = 0;
 - int j = 0;
 - for (i = 0; i < L->count - 1; i++)
 - {
 - for (j = 0; j < L->count - i - 1; j++)
 - {
 - if (strcmp(L->elem[j].name, L->elem[j + 1].name) > 0)
 - {
 - people temp = L->elem[j];
 - L->elem[j] = L->elem[j + 1];
 - L->elem[j + 1] = temp;
 - }
 - }
 - }
 - }
 - int main()
 - {
 - pdh L;
 - int num = 1;
 - init(&L);
 - while (num)
 - {
 - menu();
 - scanf("%d", &num);
 - switch (num)
 - {
 - case 0:
 - exit(EXIT_SUCCESS);
 - break;
 - case 1:
 - _add(&L);
 - break;
 - case 2:
 - _delete(&L);
 - break;
 - case 3:
 - _find(&L);
 - break;
 - case 4:
 - _alter(&L);
 - break;
 - case 5:
 - _show(&L);
 - break;
 - case 6:
 - _delete_all(&L);
 - break;
 - case 7:
 - _sort(&L);
 - break;
 - default:
 - break;
 - }
 - }
 - system("pause");
 - return 0;
 - }