首先也是自定义头文件,函数实现部分还有测试函数
头文件部分:
#ifndef __CONTACT_H__
#define __CONTACT_H__
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 100
#define MAX 1000
typedef struct PeoInfo//定义结构体包括名字 年龄 性别 电话 地址
{
char name[MAX_NAME];
int age;
char sex[MAX_SEX];
char tele[MAX_TELE];
char addr[MAX_ADDR];
}PeoInof;
typedef struct Con
{
PeoInof con[MAX];
int sz;
}Con,*pCon;
enum input
{
EXIT,
ADD,
DELETE,
SEARCH,
MODIFY,
SHOW,
EMPTY,
SORT
};
void init(pCon Con);//初始化通讯录
void add(pCon Con);//添加联系人
void delete(pCon Con);//删除联系人
void search(pCon Con);//查找联系人
void modify(pCon Con);//修改联系人
void show(pCon Con);//显示联系人
void empty(pCon Con);//清空通讯录
void sort(pCon Con);//排序联系人
#endif
函数实现部分:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "contact.h"
void init(pCon Con)//初始化通讯录
{
memset(Con->con, 0, MAX*sizeof(PeoInof));
Con->sz = 0;
}
int find_peo(pCon Con,char *name)
{
int i = 0;
if (Con->sz == 0)
{
printf("通讯录为空,不能查找联系人!\n");
}
else
{
for (i = 0; i < Con->sz; i++)
{
if (strcmp(Con->con[i].name, name) == 0)
return i;
}
}
return -1;
}
void add(pCon Con)//添加联系人
{
if (Con->sz == MAX)
{
printf("通讯录已满,不能再添加!\n");
}
else
{
printf("请输入姓名:");
scanf("%s", Con->con[Con->sz].name);
printf("请输入年龄:");
scanf("%d", &Con->con[Con->sz].age);
printf("请输入性别:");
scanf("%s", Con->con[Con->sz].sex);
printf("请输入电话:");
scanf("%s", Con->con[Con->sz].tele);
printf("请输入地址:");
scanf("%s", Con->con[Con->sz].addr);
Con->sz++;
printf("添加联系人成功!\n");
}
}
void delete(pCon Con)//删除指定联系人
{
if (Con->sz == 0)
{
printf("通讯录为空,不能进行删除!\n");
}
else
{
int i = 0;
int ret = 0;
char name[MAX_NAME] = { 0 };
printf("请输入要删除人的姓名:");
scanf("%s",name);
ret = find_peo(Con, name);
if (ret != -1)
{
for (i = ret; i < Con->sz - 1; i++)
{
Con->con[i] = Con->con[i + 1];
}
Con->sz--;
printf("删除成功!\n");
}
else
{
printf("没有此联系人!\n");
}
}
}
void search(pCon Con)//查找指定联系人
{
int i = 0;
int ret = 0;
char name[MAX_NAME] = { 0 };
printf("请输入要查找的人的姓名:");
scanf("%s",name);
ret = find_peo(Con, name);
if (ret != -1)
{
printf("%5s %5d %5s %5s %5s\n",
Con->con[ret].name,
Con->con[ret].age,
Con->con[ret].sex,
Con->con[ret].tele,
Con->con[ret].addr);
}
else
{
printf("没有找到指定联系人!\n");
}
}
void modify(pCon Con)//修改指定联系人
{
int i = 0;
int ret = 0;
char name[MAX_NAME] = { 0 };
printf("请输入要修改的人的姓名:");
scanf("%s",name);
ret = find_peo(Con,name);
if (ret != -1)
{
printf("%5s %5s %5s %5s %5s\n", "name", "age", "sex", "tele", "addr");
scanf("%5s%5d%5s%5s%5s",
Con->con[ret].name,
&Con->con[ret].age,
Con->con[ret].sex,
Con->con[ret].tele,
Con->con[ret].addr);
printf("修改成功,修改后为:\n");
printf("%5s %5d %5s %5s %5s\n",
Con->con[ret].name,
Con->con[ret].age,
Con->con[ret].sex,
Con->con[ret].tele,
Con->con[ret].addr);
}
else
{
printf("没有此联系人!\n");
}
}
void show(pCon Con)//显示联系人
{
int i = 0;
for (i = 0; i < Con->sz; i++)
{
printf("%5s %5d %5s %5s %5s\n",
Con->con[i].name,
Con->con[i].age,
Con->con[i].sex,
Con->con[i].tele,
Con->con[i].addr);
}
}
void empty(pCon Con)//清空通讯录
{
Con->sz = 0;
printf("完成清空!\n");
}
void sort(pCon Con)//排序
{
int i = 0;
if (Con->sz == 0)
{
printf("通讯录为空!\n");
}
else
{
for (i = 0; i<Con->sz - 1; i++)
{
int j = 0;
for (j = 0; j<Con->sz - 1 - i; j++)
{
if (strcmp(Con->con[j].name, Con->con[j + 1].name)>0)
{
PeoInof tmp = Con->con[j];
Con->con[j] = Con->con[j + 1];
Con->con[j + 1] = tmp;
}
}
}
printf("排序完成!\n");
}
}
主函数的测试部分:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include "contact.h"
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 main()
{
menu();
Con my_con;
init(&my_con);
int input = 0;
while (input)
{
printf("请输入要执行的操作:");
scanf("%d",&input);
switch (input)
{
case ADD:
add(&my_con);
break;
case DELETE:
delete(&my_con);
break;
case SEARCH:
search(&my_con);
break;
case MODIFY:
modify(&my_con);
break;
case SHOW:
show(&my_con);
break;
case EMPTY:
empty(&my_con);
break;
case SORT:
sort(&my_con);
break;
case EXIT:
break;
default:
printf("请输入正确选项\n");
break;
}
}
system("pause");
return 0;
}