您的位置:首页 > 编程语言 > C语言/C++

C语言编写—通讯录(小项目)

2016-02-04 20:28 387 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息