您的位置:首页 > 其它

通讯录-静态实现

2016-05-14 16:31 267 查看
题目:实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名,性别,年龄,电话,住址。可以对个人信息进行增、删、查、改、显示、清空、排序等功能。



分析:

首先,要存放1000个人的信息,就要定义一个结构体,存放姓名,性别,年龄,电话,住址等信息。另外,还要定义一个结构体来存放通讯录的大小以及通讯录的当前存放的大小。通过结构体指针就可以访问各个功能函数。

其次,可以定义三个函数来分别实现不同的功能。"Contact.h"部分来实现结构体的定义以及增删查改等功能函数的定义。"Contact.c"部分分别实现每个函数的功能。"test.c"部分即为测试部分,包括主函数。

头文件:   

 “Contact.h”

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

enum po
{
EXIT,
ADD,
DELE,
SER,
MODIFY,
DISPLAY,
CLEAR,
SORT
};

#define NAME_MAX 100      //姓名的最大长度
#define SEX_MAX 5         //性别的最大长度
#define TELE_MAX 12       //电话的最大长度
#define ADDR_MAX 25       //地址的最大长度
#define MAX 1000          //最多存放的变量内容

typedef struct Perfo
{
char name[NAME_MAX];
char sex[SEX_MAX];
int age;
char tele[TELE_MAX];
char addr[ADDR_MAX];
}Perfo;

typedef struct Contact       //定义此结构体来保存变量的大小
{
Perfo data[MAX];
int size;
}Con,*Pcon;

void init(Pcon pcon);        //结构体初始化
void _add(Pcon pcon);        //插入
void _ser(Pcon pcon);         //查找
void _dele(Pcon pcon);       //删除
void _modify(Pcon pcon);     //修改
void _display(Pcon pcon);    //显示
void _clear(Pcon pcon);      //清除
void _sort(Pcon pcon);       //排序


函数:

“Contact.c”

#include"Contact.h"

void init(Pcon pcon)
{
memset(pcon->data,0,MAX*sizeof(Perfo));
pcon->size = 0;
}

void _add(Pcon pcon)             //插入
{
if(pcon->size >= NAME_MAX)
{
printf("电话本已满,请删除部分后再插入\n");
return ;
}
else
{
printf("请输入信息:姓名 性别 年龄 电话 住址\n");
scanf("%s",pcon->data[pcon->size].name);
scanf("%s",pcon->data[pcon->size].sex);
scanf("%d",&pcon->data[pcon->size].age);
scanf("%s",pcon->data[pcon->size].tele);
scanf("%s", pcon->data[pcon->size].addr);
pcon->size++;
}
printf("插入成功!\n");
}

int find(Pcon pcon,char *name)
{
int i = 0;
for(i = 0;i<pcon->size;i++)
{
if(strcmp(pcon->data[i].name,name) == 0)
return i;
}
return -1;
}

void _ser(Pcon pcon)                     //查找联系人
{
int ret = 0;
char name[NAME_MAX] = {0};
printf("请输入要查找的人的名字:");
scanf("%s",name);
ret = find(pcon,name);
if(ret == -1)
{
printf("不存在此人\n");
return ;
}
else
{
printf("%9s\t%5s\t%7d\t%12s\t%15s\n",
pcon->data[ret].name,
pcon->data[ret].sex,
pcon->data[ret].age,
pcon->data[ret].tele,
pcon->data[ret].addr);
}
}

void _display(Pcon pcon)        //显示
{
int n = 0;
printf("姓名           性别           年龄           电话           住址\n");
if(pcon->size <= 0)
{
printf("电话本空!\n");
}
else
{
for(n = 0;n<pcon->size;n++)
{
printf("%9s\t%5s\t%7d\t%12s\t%15s\n",
pcon->data
.name,
pcon->data
.sex,
pcon->data
.age,
pcon->data
.tele,
pcon->data
.addr);
}
}
}

void _dele(Pcon pcon)       //删除
{
char name[NAME_MAX];
int ret = 0;
int i = 0;
printf("请输入要删除的人的姓名:");
scanf("%s",name);
ret = find(pcon,name);
if(ret == -1)
printf("不存在此人!\n");
else
{
for(i = ret;i<pcon->size;i++)
{
pcon->data[i] = pcon->data[i+1];
}
pcon->size--;
printf("删除成功!\n");
}
}

void _modify(Pcon pcon)        //修改
{
int ret = 0;
char name[NAME_MAX];
printf("请输入要修改的人的姓名:");
scanf("%s",name);
ret = find(pcon,name);
if(ret == -1)
printf("不存在此人\n");
else
{
printf("请输入名字:>");
scanf("%s",pcon->data[ret].name);
printf("请输入年龄:>");
scanf("%d",&(pcon->data[ret].age));
printf("请输入性别:>");
scanf("%s",pcon->data[ret].sex);
printf("请输入电话:>");
scanf("%s",pcon->data[ret].tele);
printf("请输入地址:>");
scanf("%s",pcon->data[ret].addr);
}
}

void _clear(Pcon pcon)       //清空
{
pcon->size = 0;
printf("电话本已空!\n");
}

void _sort(Pcon pcon)      // 排序
{
int i = 0;
int j = 0;
for(i = 0;i<pcon->size-1;i++)
{
for(j = 0;j<pcon->size-1-i;j++)
{
Perfo temp = {0};
if(strcmp(pcon->data[j].name,pcon->data[j+1].name)>0)
{
temp = pcon->data[j];
pcon->data[j] = pcon->data[j+1];
pcon->data[j+1] = temp;
}
}
}
}


主函数:   

 “test.c”

#include "Contact.h"

void menu()
{
printf("--------- 0.exit ---------\n");
printf("--------- 1.add ----------\n");
printf("--------- 2.dele ---------\n");
printf("--------- 3.ser ----------\n");
printf("--------- 4.modify -------\n");
printf("--------- 5.display ------\n");
printf("--------- 6.clear --------\n");
printf("--------- 7.sort ---------\n");
}

int main()
{
int input = 1;
Con con;
init(&con);
menu();
while(input)
{
menu();
printf("请选择要操作的数字:");
scanf("%d",&input);
printf("\n");
{
switch(input)
{
case EXIT:
break;
case ADD:
_add(&con);
break;
case DELE:
_dele(&con);
break;
case SER:
_ser(&con);
break;
case MODIFY:
_modify(&con);
break;
case DISPLAY:
_display(&con);
break;
case CLEAR:
_clear(&con);
break;
case SORT:
_sort(&con);
break;
default:
printf("无效选择!");
break;
}
}
}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  通讯录