实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
通讯录所具有的功能
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
结构体对于这个通讯录来说非常重要,我设计了两个结构体,一个是单个联系人的结构体,另外一个是通讯录集合的结构体,这个里面有当前存放容量,和联系人的集合,敲完之后充分理解了做一个交互性好的软件是非常必要的,让用户使用起来感觉方便,对程序员来说真的很有成就感,下面废话不多说,以下分别列出了各模块的代码
contact.h
#ifndef __CONTACT__H
#define __CONTACT__H
#define NAME_MAX 20
#define SEX_MAX 5
#define TEL_MAX 12
#define ADDR_MAX 30
#define MAX 1000
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//通讯录单个元素
typedef struct PeoInfo
{
char name[NAME_MAX];
char sex[SEX_MAX];
int age;
char tel[TEL_MAX];
char addr[NAME_MAX];
}PeoInfo;
//通讯录集合
typedef struct Contact
{
PeoInfo data[MAX];
int sz;
}*pcon;
void InitContact(pcon p);
void AddContact(pcon p);
void ShowContact(pcon p);
void DeleteContact(pcon p);
void EmptyContact(pcon p);
void SearchContact(pcon p);
void UpdateContact(pcon p);
void SortContact(pcon p);
#endif//__CONTACT__H
contact.c
#include "contact.h"
//初始化通讯录
void InitContact(pcon p)
{
p->sz = 0;
memset(p->data,0,sizeof(p->data));
}
//当前函数内查找功能
int find(pcon p)
{
int i = 0;
char name[NAME_MAX];
printf("请输入此联系人的姓名>");
scanf("%s",name);
for(i=0;i<p->sz;i++)
{
if(strcmp((p->data[i].name),name)==0)
return i;//找到返回对应下标
}
return -1;//找不到返回-1
}
//按照名字对通讯录排序
void SortContact(pcon p)
{
int i = 0;
int j = 0;
PeoInfo tmp;
if(p->sz==0)
{
printf("通讯录为空,无法删除!\n");
return;
}
for(i=0; i<p->sz-1; i++)
{
for(j=0; j<p->sz-i-1; j++)
{
if(strcmp(p->data[j].name,p->data[j+1].name)>0) //按照名字的大小,按照从小到大冒泡排序
{
tmp = p->data[j];
p->data[j] = p->data[j+1];
p->data[j+1] = tmp;
}
}
}
printf("排序成功!\n");
return;
}
//更新通讯录某一个联系人
void UpdateContact(pcon p)
{
int ret = 0;
ret=find(p);
if(ret==-1)
{
printf("通讯录无此联系人!\n");
return;
}
printf("*******请输入变更后的信息*********\n");
printf("请输入姓名:");
scanf("%s",p->data[ret].name);
printf("请输入性别:");
scanf("%s",p->data[ret].sex);
printf("请输入年龄:");
scanf("%d",&(p->data[ret].age));
printf("请输入电话:");
scanf("%s",p->data[ret].tel);
printf("请输入住址:");
scanf("%s",p->data[ret].addr);
printf("更新成功!\n");
return;
}
//根据名字查找对应联系人信息
void SearchContact(pcon p)
{
int ret = 0;
ret=find(p);
if(ret==-1)
{
printf("通讯录无此联系人!\n");
return;
}
//打印对应信息
printf("------------------------------------------------\n");
printf("| 姓名 | 性别 | 年龄 | 电话 | 住址 |\n");
printf("%10s%4s%4d%12s%20s\n",
p->data[ret].name,
p->data[ret].sex,
p->data[ret].age,
p->data[ret].tel,
p->data[ret].addr);
}
//清空通讯录
void EmptyContact(pcon p)
{
p->sz=0;
printf("通讯录清空成功!\n");
return;
}
//根据名字删除某个联系人
void DeleteContact(pcon p)
{
int ret = 0;
int j = 0;
if(p->sz==0)
{
printf("通讯录为空,无法删除!\n");
return;
}
//查找
ret = find(p);
if(ret==-1)
{
printf("通讯录无此联系人!\n");
return;
}
//删除
for(j=ret;j<(p->sz-1);j++)//这里注意是(p->sz-1),
{
p->data[j]=p->data[j+1];
}
p->sz--;//对sz减1
printf("删除成功!\n");
return;
}
//添加联系人
void AddContact(pcon p)
{
if(p->sz==MAX)
{
printf("通讯录已满,无法添加!\n");
}
printf("请输入姓名:");
scanf("%s",p->data[p->sz].name);
printf("请输入性别:");
scanf("%s",p->data[p->sz].sex);
printf("请输入年龄:");
scanf("%d",&(p->data[p->sz].age));
printf("请输入电话:");
scanf("%s",p->data[p->sz].tel);
printf("请输入住址:");
scanf("%s",p->data[p->sz].addr);
p->sz++;//一定要对sz加一
printf("添加成功!\n");
return;
}
//打印通讯录
void ShowContact(pcon p)
{
int i = 0;
if(p->sz==0)
{
printf("通讯录中无数据,无法打印!\n");
return;
}
printf("------------------------------------------------\n");
printf("| 姓名 | 性别 | 年龄 | 电话 | 住址 |\n");
for(i=0; i<(p->sz);i++)
{
printf("%10s%4s%4d%12s%20s\n",
p->data[i].name,
p->data[i].sex,
p->data[i].age,
p->data[i].tel,
p->data[i].addr);
}
printf("------------------------------------------------\n");
return;
}
test.c
#include "contact.h"
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
//枚举功能
enum OP
{
Exit,
Add,
Delete,
Search,
Update,
Show,
Empty,
Sort
};
//菜单
void menu()
{
printf("**************************\n");
printf("*****1.Add 2.Delete****\n");
printf("*****3.Search 4.Update****\n");
printf("*****5.Show 6.Empty*****\n");
printf("*****7.Sort 0.Exit******\n");
}
int main()
{
int input = 0;
struct Contact s;
InitContact(&s);
do
{
menu();
printf("请选择>:");
scanf("%d",&input);
switch(input)
{
case Exit:
break;
case Add:
AddContact(&s);
break;
case Delete:
DeleteContact(&s);
break;
case Search:
SearchContact(&s);
break;
case Update:
UpdateContact(&s);
break;
case Show:
ShowContact(&s);
break;
case Empty:
EmptyContact(&s);
break;
case Sort:
SortContact(&s);
break;
default:
printf("输入错误,请重新输入!\n");
break;
}
} while (input);
return 0;
}
测试图列:
添加功能
删除功能
查找功能
更新功能
打印功能
清空功能
排序功能
退出功能