基本思想:
实现的功能:
源码如下:
Contact.h
#ifndef __CONTACT_H__
#define __CONTACT_H__
#include
#include
#include
#include
#include
#include
enum Option
{
EXIT,//退出程序
ADD,//增添联系人
DEL,//删除联系人
SEARCH,//查找联系人
MODIFY,//修改联系人信息
SHOW,//展示联系人
EMPTY,//清空通讯录
SORT,//按名字排序通讯录
};
#define MAX 1000
#define MAX_NAME 20
#define SEX_MAX 5
#define NATION_MAX 10
#define TALE_MAX 12
#define ADDR_MAX 30
#define REALTION_MAX 20
typedef struct Peolnfo
{
char name[MAX_NAME];
char sex[SEX_MAX];
short int age;
char nation[NATION_MAX];
char tale[TALE_MAX];
char addr[ADDR_MAX];
char realtion[REALTION_MAX];
}Peolnfo;
typedef struct Contact
{
Peolnfo data[MAX];//存放数据
int sz;//通讯录的有效信息个数
}Contact;
void InitContact(Contact* pcon);//初始化通讯录
void AddContact(Contact* pcon);//增加通讯录信息
void ShowContact(const Contact* pcon);//展示通讯录信息
void DelContact(Contact* pcon);//删除通讯录信息
void SearchContact(Contact* pcon);//查找通讯录个人信息
void EmptyContact(Contact* pcon); //清空通讯录
void SortContact(Contact* pcon);//按名字排序通讯录
#endif //__CONTACT_H__
Contact.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"Contact.h"
void InitContact(Contact* pcon)
{
assert(pcon);
pcon->sz = 0;
memset(pcon->data, 0, sizeof(pcon->data));//初始化数组
}
void AddContact(Contact* pcon)
{
if (pcon->sz == MAX)
{
printf("通讯录已满,无法添加\n");
}
else
{
printf("请输入姓名:>\n");
scanf("%s", pcon->data[pcon->sz].name);
printf("请输入年龄:>\n");
scanf("%d", &(pcon->data[pcon->sz].age));
printf("请输入性别:>\n");
scanf("%s", pcon->data[pcon->sz].sex);
printf("请输入民族:>\n");
scanf("%s", pcon->data[pcon->sz].nation);
printf("请输入电话:>\n");
scanf("%s", pcon->data[pcon->sz].tale);
printf("请输入家庭住址:>\n");
scanf("%s", pcon->data[pcon->sz].addr);
printf("请输入关系:>\n");
scanf("%s", pcon->data[pcon->sz].realtion);
pcon->sz++;
printf("添加成功\n");
}
}
void ShowContact(const Contact* pcon)
{
int i = 0;
printf("%-15s\t%-5s\t%-5s\t%-5s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "民族", "电话", "地址", "关系");
for (i = 0; i < pcon->sz; i++)
{
printf("%-15s\t%-5d\t%-5s\t%-5s\t%-5s\t%-12s\t%-20s\n",
pcon->data[i].name,
pcon->data[i].age,
pcon->data[i].sex,
pcon->data[i].nation,
pcon->data[i].tale,
pcon->data[i].addr,
pcon->data[i].realtion);
}
}
static int FindEnty(Contact* pcon, char name[])
{
int i = 0;
assert(pcon);
for (i = 0; i < pcon->sz; i++)
{
if (strcmp(pcon->data[i].name, name)==0)
{
return i;
}
}
return -1;
}
void SearchContact(Contact* pcon)
{
assert(pcon);
char name[MAX_NAME] = { 0 };
int pos = 0;
printf("请输入需要查找到联系人\n");
scanf("%s", &name);
pos = FindEnty(pcon, name);
int i = 0;
if (pos == -1)
{
printf("该联系人不存在,无法查找\n");
}
else
{
printf("%-15s\t%-5s\t%-5s\t%-5s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "民族", "电话", "地址", "关系");
printf("%-15s\t%-5d\t%-5s\t%-5s\t%-5s\t%-12s\t%-20s\n",
pcon->data[i].name,
pcon->data[i].age,
pcon->data[i].sex,
pcon->data[i].nation,
pcon->data[i].tale,
pcon->data[i].addr,
pcon->data[i].realtion);
}
}
void DelContact(Contact* pcon)
{
int pos = 0;
char name[MAX_NAME] = { 0 };
assert(pcon);
if (pcon->sz == 0)
{
printf("该通讯录为空,无法删除\n");
}
else
{
printf("请输入需要删除的联系人;>");
scanf("%s", &name);
pos = FindEnty(pcon, name);
if (pos == -1)
{
printf("该联系人不存在,无法实现删除\n");
}
else
{
int i = 0;
for (i = 0; i < pcon->sz - 1; i++)
{
pcon->data[i] = pcon->data[i + 1];
}
pcon->sz--;
printf("删除成功\n");
}
}
}
void EmptyContact(Contact* pcon)//清空通讯录
{
assert(pcon);
int i = 0;
while (pcon->sz)
{
pcon->sz--;
}
if (pcon->sz == 0)
{
printf("清空成功\n");
}
}
void SortContact(Contact* pcon)//按名字排序
{
assert(pcon);
int b = 0;
int i = 0;
int e = 0;
int temp = 0;
char name[MAX_NAME] = { 0 };
char sex[SEX_MAX] = { 0 };
short int age = { 0 };
char nation[NATION_MAX] = { 0 };
char tale[TALE_MAX] = { 0 };
char addr[ADDR_MAX] = { 0 };
char realtion[REALTION_MAX] = { 0 };
int a = pcon->sz-1;
for (b = 0; b < a; b++)
{
for (i = 0; i< a - b; i++)
{
int c = strcmp(pcon->data[i].name, pcon->data[i + 1].name);
if (c == 1)
{
strcpy(name, pcon->data[i].name);
strcpy(pcon->data[i].name, pcon->data[i + 1].name);
strcpy(pcon->data[i + 1].name, name);
strcpy(sex, pcon->data[i].sex);
strcpy(pcon->data[i].sex, pcon->data[i + 1].sex);
strcpy(pcon->data[i + 1].sex, sex);
e = pcon->data[i].age;
pcon->data[i].age = pcon->data[i + 1].age;;
pcon->data[i + 1].age = e;
strcpy(nation, pcon->data[i].nation);
strcpy(pcon->data[i].nation, pcon->data[i + 1].nation);
strcpy(pcon->data[i + 1].nation, nation);
strcpy(tale, pcon->data[i].tale);
strcpy(pcon->data[i].tale, pcon->data[i + 1].tale);
strcpy(pcon->data[i + 1].tale, tale);
strcpy(addr, pcon->data[i].addr);
strcpy(pcon->data[i].addr, pcon->data[i + 1].addr);
strcpy(pcon->data[i + 1].addr, addr);
strcpy(realtion, pcon->data[i].realtion);
strcpy(pcon->data[i].realtion, pcon->data[i + 1].realtion);
strcpy(pcon->data[i + 1].realtion, realtion);
}
}
}
}
Test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"Contact.h"
void menu()
{
printf("***************************************************\n");
printf("****************1.add 2.del **********\n");
printf("****************3.search 4.modify **********\n");
printf("****************5.show 6.empty **********\n");
printf("****************7.sort 0.exit **********\n");
printf("***************************************************\n");
}
void test()
{
int input = 0;
Contact con;//通讯录
InitContact(&con);
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case ADD:
AddContact(&con);
break;
case EMPTY:
EmptyContact(&con);
break;
case SORT:
SortContact(&con);
break;
case MODIFY:
break;
case DEL:
DelContact(&con);
break;
case SHOW:
ShowContact(&con);
break;
case SEARCH:
SearchContact(&con);
break;
case EXIT:
printf("退出通讯录\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);
}
int main()
{
test();
system("pause");
return 0;
}