C结构体实现一个通讯录

原创 2016年05月30日 10:46:31

题目:实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名,性别,年龄,电话,住址。

提供方法:1.添加联系人信息 2.删除指定联系人的信息 3.查找指定联系人的信息 4.修改指定联系人的信息 5.显示所有联系人信息 6.清空所有联系人 7.以名字排序所有联系人

思路分析:1. 首先我们可以分三个模块来解决这个问题,第一个模块我们需要一个头文件,这个头文件里可以包含一些相应信息,当实现文件和测试文件包含自己定义的头文件时便可以获得一些相关的信息。所以头文件里应该包括一个结构体,这个结构体里应包含姓名,性别,年龄,电话,住址。同时还可以定义一个结构体,这个结构体里包含通讯录,同时通讯录里人员的计数变量,将通讯录的地址传到别的地方便可以实现对它遍历或者其他操作。 2.第二个模块便是我们的测试函数,测试函数便可以实现我们的菜单打印,同时由我们接收不同的值便可以实现不同的操作,就是相应的方法的实现,这里很明显可以通过一个switch语句来进行控制。 3.第三个模块便是我们的方法实现的函数,将模块2里定义的类型为通讯录的地址传到各个方法里,这样便可以实现对通讯录的操作。

代码实现:

模块1:

#pragma once

typedef struct Peo//每一个人的信息用一个结构来接收,包括姓名,性别,年龄,电话,地址

{

char name[20];

char sex[4];

int age;

char tell[12];

char address[20];

}Peo;

typedef struct Contact//将通讯录和人员计数也声明在结构体里

{

Peo Dhb[1000];

int count;

}Contact;

void add_stu(Contact *p);//相应函数

void del_stu(Contact *p);

void find_stu(Contact *p);

void modify_stu(Contact *p);

void show_stu(Contact *p); 

void clear_stu(Contact *p);

void sort_stu(Contact *p);

模块2:(测试功能)

#include<stdio.h>

#include"contact.h"

#include<stdlib.h>

Contact con;//类型为Contact变量,里面包含电话本和计数变量

void menu()

{

printf("menu:\n");

printf("**********1.添加联系人信息************\n");

printf("********2.删除指定联系人信息**********\n");

printf("********3.查找指定联系人信息**********\n");

printf("********4.修改指定联系人信息**********\n");

printf("********5.显示所有联系人信息**********\n");

printf("**********6.清空联系人信息************\n");

printf("******7.以名字排序所有联系人信********\n");

}

void test()//测试函数

{

int input = 1;

menu();

while (input)

{

printf("请输入选项:");

scanf_s("%d", &input);

switch (input)//方法选择功能的实现

{

case 1:

add_stu(&con);

break;

case 2:

del_stu(&con);

break;

case 3:

find_stu(&con);

break;

case 4:

modify_stu(&con);

break;

case 5:

show_stu(&con);

break;

case 6:

clear_stu(&con);

break;

case 7:

sort_stu(&con);

break;

case 0:

exit(1);

break;

}

}

}

int main()

{

test();

     return 0;

}

模块3:(方法的具体实现)

#include"contact.h"

#include<string.h>

int search(Contact *p,char *pname)//分装的函数利于删除,查找,修改方法的实现

{

int ret;

int i;

for (i = 0; i < p->count; i++)

{

if(strcmp(p->Dhb[i].name, pname)==0)

return i;

}

return -1;

}

void add_stu(Contact *p)//添加联系人

{

printf("请输入姓名:");

scanf("%s", p->Dhb[p->count].name);

printf("请输入性别:");

scanf("%s", p->Dhb[p->count].sex);

printf("请输入年龄:");

scanf("%d", &p->Dhb[p->count].age);

printf("请输入电话:");

scanf("%s", p->Dhb[p->count].tell);

printf("请输入地址:");

scanf("%s", p->Dhb[p->count].address);

p->count++;

printf("联系人添加成功\n");

}

void del_stu(Contact *p)//删除联系人

{

int ret;

int n;

int i = 0;

char name[20];

printf("请输入要删除人的姓名:");

scanf("%s",name);

ret=search(p,name);

if (ret !=-1)

{

printf("要删除的人存在\n");

printf("你是否确定删除该联系人?\n");

printf("确定输入1,不删除输入0\n");

scanf("%d",&n);

if (n == 1)

{

for (i = 0; i < p->count; i++)

{

p->Dhb[i] = p->Dhb[i + 1];//使i后面的元素向前覆盖便可以删掉

}

printf("删除成功\n");

}

else

{

printf("删除失败\n");

}


}

}

void find_stu(Contact *p)//查找联系人

{

int ret;

char name[20];

printf("请输入要查找人的姓名:");

scanf("%s", name);

ret = search(p, name);

if (ret !=-1)

{

printf("要查找的人存在\n");

printf("%s  ", p->Dhb[ret].name);

printf("%s  ", p->Dhb[ret].sex);

printf("%d  ", p->Dhb[ret].age);

printf("%s  ", p->Dhb[ret].tell);

printf("%s  ", p->Dhb[ret].address);

}


}

void modify_stu(Contact *p)//修改联系人

{

int ret;

char name[20];

printf("请输入要修改人的姓名:");

scanf("%s", name);

ret = search(p, name);

if (ret != -1)

{

printf("请把姓名修改成:");

scanf("%s", p->Dhb[ret].name);

printf("请把性别修改成:");

scanf("%s", p->Dhb[ret].sex);

printf("请把年龄修改成:");

scanf("%d", &p->Dhb[ret].age);

printf("请把电话修改成:");

scanf("%s", p->Dhb[ret].tell);

printf("请把地址修改成:");

scanf("%s", p->Dhb[ret].address);

}

else

{

printf("不存在此人\n");

}

}

void show_stu(Contact *p)//显示联系人信息

{

int i = 0;

printf("输出所有人的信息:");

for (i = 0; i <( p->count); i++)

{

printf("%s  ",p->Dhb[i].name);

printf("%s  ", p->Dhb[i].sex);

printf("%d  ", p->Dhb[i].age);

printf("%s  ", p->Dhb[i].tell);

printf("%s  ", p->Dhb[i].address);

}

printf("\n");

}

void clear_stu(Contact *p)//清空联系人

{

p->count = 0;//是人员计数的变量置0就可以实现清空

}

void sort_stu(Contact *p)//以名字排序所有联系人

{

int i = 0;

int j = 0;

for (i = 0; i < p->count-1;i++)//冒泡法

for (j = 0; j < p->count - 1 - i;j++)

{

if (strcmp(p->Dhb[j].name, p->Dhb[j + 1].name)>0)

{

Peo tmp;

tmp=p->Dhb[j];

p->Dhb[j] =p-> Dhb[j + 1];

p->Dhb[j + 1] = tmp;

}

}

void show_stu( p);

}

总结:此题只是利用了相关结构体的知识,主要难处就是三个模块各自的分工不好想到,其他地方便只是基本方法的实现。

本文出自 “anser” 博客,请务必保留此出处http://674353165.blog.51cto.com/10786549/1722369

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

red hat c 编写的结构体通讯录

  • 2016年05月27日 21:39
  • 5KB
  • 下载

C语言用结构体写一个通讯录

今天写了个通讯录,给大家看一下#define _CRT_SECURE_NO_WARNINGS 1 #include  #include  #include  extern meau();//目录函数就...
  • pawnsir
  • pawnsir
  • 2016年05月28日 18:35
  • 139

用结构体数组实现通讯录管理

  • 2010年12月30日 22:05
  • 3KB
  • 下载

c/c++实现的一个动态分配内存的结构体数组(类似vector)

这个数组可以向里面插入任何类型,包括自定义类型, 程序只是实现了基本功能,还有待完善, 下面是全部代码: #include #include #include #include #includ...
  • ygqwan
  • ygqwan
  • 2013年08月01日 01:37
  • 6351

将结构体实现的简易通讯录改成动态的版本

之前实现的一次结构体型通讯录电话本容量固定为1000,如果只需存50人,就浪费950的容量,如果存 2000人,容量就不够了,所以这次动态开辟一个电话本容量。并且将之前的版本测试部分用函数指针数组简化...
  • NICOC_
  • NICOC_
  • 2017年05月15日 09:33
  • 512

结构体实现通讯录简单版

 结构体实现一个通讯录; 通讯录可以用来存储1000个人的信息, 每个人的信息包括:姓名、性别、年龄、电话、住址 具有功能: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查...

C语言---静态内存结构体实现通讯录

contact.h #pragma once #include #include #include #define NAME_MAX 20 #define SEX_MAX 5 #define T...

结构体 静态通讯录的实现

结构体实现简单静态通讯录

[c语言]结构体实现通讯录

创建两个结构体实现:一个实现通讯录  ,一个创建计数器,头文件如下: #ifndef __CONTACT_H__ #define __CONTACT_H__ #define NAME...

结构体实现通讯录文件流版

** 之前的两个版本是简易通讯录的静态实现(点击查看) 和 动态实现(点击查看) 相比于上两个版本,本版本使用文件保存所输入的数据,从而在重新打开时依然保存有之前的数据。 涉及到对文件...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C结构体实现一个通讯录
举报原因:
原因补充:

(最多只允许输入30个字)