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

C语言实现通讯录(静态数组)

2018-03-17 17:53 429 查看

通讯录

实现功能:
1.添加通讯录成员     2.删除通讯录成员    3.查找通讯录成员
4.修改通讯录成员信息     5.显示通讯录成员信息    6.清空所有联系人
7.以名字排序所有联系人     

基本思想:

1.建立一个结构体数组存储通讯录中每个人的信息。
2.使用静态数组来对通讯录进行操作

这里们使用多文件编程,将各种声明和头文件放在test.h文件中,将函数的定义,主函数的框架放在test.c文件中
源码如下:
test.h#ifndef __TEST_H__
#define __TEST_H__
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<assert.h>

typedef struct LINKMAN//每个人的信息
{
char name[20];
char sex[10];
int age;
int tel[12];
char add[50];
}LINKMAN;

typedef struct stu //把通讯录和人员统计放在结构体内
{
LINKMAN num[1000];
int count;
}stu;

void menu();//菜单
void init_stu(stu *p);//初始化数组
void Add_stu(stu *p);// 添加联系人信息
void Dele_stu(stu *p);//删除指定联系人信息
void Find_stu(stu *p);//查找指定联系人信息
void Mod_stu(stu *p);//修改指定联系人信息
void Print_stu(stu *p);//显示所有联系人信息
void Empty_stu(stu *p);//清空所有联系人
void sort_stu(stu *p);//以名字排序所有联系人
#endif


test.c#include"test.h"
stu sta; //声明结构体

void menu()//菜单
{
printf("***********************************\n");
printf("********1.添加联系人信息***********\n");
printf("********2.删除指定联系人信息*******\n");
printf("********3.查找指定联系人信息*******\n");
printf("********4.修改指定联系人信息*******\n");
printf("********5.显示所有联系人信息*******\n");
printf("********6.清空所有联系人***********\n");
printf("********7.以名字排序所有联系人*****\n");
printf("********0.退出程序*****************\n");
printf("***********************************\n");
}
int Find(stu *p, char *name)//查找人员编号
{
assert(p);
int i = 0;
for (i = 0; i < p->count; i++)
{
if (strcmp(p->num[i].name, name) == 0)
{
return i;
}
}
return -1;
}

void init_stu(stu *p)//初始化信息
{
assert(p);
int count = sizeof(p->num);
memset(p->num, 0, count);
}

void Add_stu(stu *p)//添加联系人
{
assert(p);
printf("请输入你要添加的联系人姓名:\n");
scanf("%s", p->num[p->count].name);
printf("请输入你要添加的联系人性别:\n");
scanf("%s", p->num[p->count].sex);
printf("请输入你要添加的联系人年龄:\n");
scanf("%d", &(p->num[p->count].age));
printf("请输入你要添加的联系人电话:\n");
scanf("%s", p->num[p->count].tel);
printf("请输入你要添加的联系人地址:\n");
scanf("%s", p->num[p->count].add);
if ((p->count) > 1000)
{
printf("通讯录已满!\n");
}
else
{
printf("添加成功\n");
p->count++;
}
}

void Dele_stu(stu *p)//删除联系人
{
assert(p);
int i = 0;
char name[20] = { 0 };
printf("请输入要删除的姓名!\n");
scanf("%s", name);
int num = Find(p, name);
if (num == -1)
{
printf("没有找到!\n");
return;
}
for (i = num; i < p->count - 1; i++)
{
p->num[i] = p->num[i + 1];//采用直接循环覆盖的方式删除
}
p->count--;//人员总数减一
printf("输出成功!\n");
}

void Find_stu(stu *p)//查找联系人
{
assert(p);
printf("请输入你想查找的姓名!\n");
char name[20] = { 0 };
scanf("%s", name);
int Num = Find(p, name);
if (Num == -1)
{
printf("没有找到!\n");
return;
}
printf("%s\t", p->num[Num].sex);
printf("%d\t", p->num[Num].age);
printf("%s\t", p->num[Num].tel);
printf("%s\t", p->num[Num].add);
printf("\n");
}

void Mod_stu(stu *p)//修改通讯录
{
assert(p);
int input = 0;
printf("请输入要修改的联系人姓名!\n");
char name[20] = { 0 };
scanf("%s", name);
int num = Find(p, name);//得到联系人姓名对应的数组编号
if (num == -1)
{
printf("没有找到!\n");
return;
}
printf("请输入修改信息!\n");
while (1)
{
printf("****1.sex 2.age ***\n");
printf("****3.tel 4.add ***\n");
printf("****5.Mod_OK*********\n");
scanf("%d", &input);
switch (input)
{
case 1:printf("请输入修改后的性别!\n")
a7a3
;
scanf("%s", p->num[num].sex);
break;
case 2:printf("请输入修改后的年龄!\n");
scanf("%d", &(p->num[num].age));
break;
case 3:printf("请输入修改后的电话!\n");
scanf("%s", p->num[num].tel);
break;
case 4:printf("请输入修改后的地址!\n");
scanf("%s", p->num[num].add);
case 5:return;
break;
default:printf("输入错误! 重新输入!\n");
break;
}
}
}

void Print_stu(stu *p)//打印通讯录
{
assert(p);
int i = 0;
for (i = 0; i < p->count; i++)
{
printf("%s %s %d %s %s\n", p->num[i].name, \
p->num[i].sex, p->num[i].age, \
p->num[i].tel, p->num[i].add);
}
}

void Empty_stu(stu *p)//清空通讯录
{
assert(p);
p->count = 0;
}

void sort_stu(stu *p)
{
assert(p);
int i = 0, j = 0;
LINKMAN temp;
for (int i = 0; i < p->count - 1; i++)
{
for (int j = 0; j < p->count - i - 1; j++)
{
if (strcmp(p->num[j].name,p->num[j+1].name)>0)
{
temp = p->num[j];
p->num[j] = p->num[j + 1];
p->num[j + 1] = temp;
}
}
}
}
int main()
{
int input = 0;
init_stu(&sta);//初始化
while (1)
{
menu();
printf("请输入你的操作!\n");
scanf("%d", &input);
switch (input)
{
case 1:Add_stu(&sta);
break;
case 2:Dele_stu(&sta);
break;
case 3:Find_stu(&sta);
break;
case 4:Mod_stu(&sta);
break;
case 5:Print_stu(&sta);
break;
case 6:Empty_stu(&sta);
break;
case 7:sort_stu(&sta);
break;
case 0:exit(1);
break;
default:printf("输入错误! 重新输入!\n");
break;
}
}
system("pause");
return 0;

}

以上就是实现通讯录的源码,方法十分简单,基本上没有采用什么难的知识点,但值得注意的是这里结构体传参时要传地址,以便节约空间,而且使用assrert断言会使代码变得更严谨一些。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: