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断言会使代码变得更严谨一些。
相关文章推荐
- 【C语言基础】C语言实现静态通讯录
- c语言数组方式实现静态循环队列
- 静态数组实现的顺序表(C语言实现)
- !-- 基于静态数组的顺序表相关操作C语言实现 --!
- C语言通讯录(利用数组实现)
- 静态数组实现队列(C语言)
- 【C语言】C语言实现静态通讯录
- C语言学习历程(十五)结构体数组实现通讯录
- C语言小项目:动态通讯录和静态通讯录的实现
- C语言——简易的静态通讯录实现
- C语言实现通讯录(静态版)
- C语言模拟通讯录系统的简单实现
- 静态顺序表-c语言实现
- 用结构体数组实现通讯录
- C语言实现静态顺序表的功能(增,删,查,改,以及排序)
- 用c语言实现 一个通讯录(实现 增加、删除、查找、修改、显示、清空功能)
- 【C语言】请实现一个函数,把字符数组中的每个空格替换成“%20”
- C语言 逆序一个数组的代码实现
- c语言实现把文件中数据读取并存到数组中
- C语言实现对数组中的数据进行冒泡排序(从小到大)