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