在之前的文章中我介绍了结构体和枚举类型的内容,现在我们可以编写一个小程序来对这两种复杂类型加以使用。
目录
1、操作内容
我们通过编写通讯录来进行实现,本次通讯录中所包含的操作内容有:
- 添加联系人信息
- 删除指定联系人信息
- 查找指定联系人信息
- 修改指定联系人信息
- 显示所有联系人信息
- 清空所有联系人信息
- 以名字排序所有联系人
2、头文件内容
#ifndef MailList_H
#define MailList_H
#define _CRT_SECURE_NO_WARNINGS
#define MAX_PERSON 1000
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
//结构体成员,即通讯录中个人信息定义
struct Person
{
char name[32];
char sex[8];
int age;
char phone[16];
char address[32];
};
//统计通讯录人员
struct Contact
{
struct Person _p[MAX_PERSON];
int cur_count;//当前通讯录中人数,以及当前插入数据的下标
};
//通讯录功能枚举
enum Operat_t
{
EXIT,
ADD,
PRINTF,
FIND,
MODIFY,
DELETE,
CLEAR,
SORT,
};
//通讯录界面呈现
int PrinfFace();
//通讯录初始化
void ContactInit(struct Contact *con);
//添加联系人信息
void ContactAdd(struct Contact *con);
//删除指定联系人信息
void ContactDelete(struct Contact *con);
//查找指定联系人信息
void ContactFind(struct Contact *con);
//修改指定联系人信息
void ContactModify(struct Contact *con);
//显示所有联系人信息
void ContactPrintf(struct Contact *con);
//清空所有联系人
void ContactClear(struct Contact *con);
//以名字排序所有联系人
void ContactSort(struct Contact *con);
#endif
3、头文件功能实现
1、通讯录界面呈现
//通讯录界面呈现
int PrinfFace()
{
printf("********欢迎进入通讯录系统********\n");
printf("1.添加联系人 2.显示联系人\n");
printf("3.查找联系人 4.修改联系人\n");
printf("5.删除联系人 6.清空联系人\n");
printf("7.排序联系人 0.退出通讯录\n");
printf("\n");
int input = 0;
printf("请输入需要进行的操作序号_>\n");
scanf("%d", &input);
return input;
}
2、通讯录初始化
void ContactInit(struct Contact *con)
{
memset(con, 0x00, sizeof(struct Contact));
return;
}
3、添加联系人信息
//添加联系人信息
void ContactAdd(struct Contact *con)
{
system("cls");
if (con->cur_count == MAX_PERSON)
{
printf("通讯录内容已满,无法再进行添加\n");
return;
}
printf("请输入姓名_> ");
scanf("%s", &con->_p[con->cur_count].name);
printf("请输入性别_> ");
scanf("%s", &con->_p[con->cur_count].sex);
printf("请输入年龄_> ");
scanf("%d", &con->_p[con->cur_count].age);
printf("请输入电话_> ");
scanf("%s", &con->_p[con->cur_count].phone);
printf("请输入地址_> ");
scanf("%s", &con->_p[con->cur_count].address);
con->cur_count++;
printf("新增联系人完毕\n");
return;
}
4、删除指定联系人信息
//删除指定联系人信息
void ContactDelete(struct Contact *con)
{
system("cls");
if (con->cur_count == 0)
{
printf("当前通讯录为空,请先进行添加\n");
return;
}
printf("请输入删除联系人的姓名_>");
char name[32] = { 0 };
int status = 0;
scanf("%s", &name);
for (int i = 0; i < con->cur_count; i++)
{
if (strcmp(name, con->_p[i].name) == 0)
{
for (int j = i; j < con->cur_count - 1; j++)
{
con->_p[j] = con->_p[j + 1];
}
status++;
con->cur_count--;
}
}
if (status == 0)
{
printf("不存在目标联系人\n");
return;
}
else
{
printf("成功删除%d个%s联系人\n", status, name);
}
}
5、查找指定联系人信息
//查找指定联系人信息
void ContactFind(struct Contact *con)
{
system("cls");
if (con->cur_count == 0)
{
printf("当前通讯录为空,请先进行添加\n");
return;
}
printf("请输入查找联系人的姓名_>");
char name[32] = { 0 };
int status = 0;
scanf("%s", &name);
for (int i = 0; i < con->cur_count; i++)
{
if (strcmp(name, con->_p[i].name) == 0)
{
printf("姓名:%s\n", con->_p[i].name);
printf("性别:%s\n", con->_p[i].sex);
printf("年龄:%d\n", con->_p[i].age);
printf("电话:%s\n", con->_p[i].phone);
printf("地址:%s\n", con->_p[i].address);
printf("---------------------------\n");
status++;
}
}
if (status == 0)
{
printf("通讯录不存在该联系人\n");
return;
}
else
{
printf("一共存在%d个同名联系人\n", status);
}
}
6、修改指定联系人信息
//修改指定联系人信息
void ContactModify(struct Contact *con)
{
system("cls");
if (con->cur_count == 0)
{
printf("当前通讯录为空,请先进行添加\n");
return;
}
printf("请输入查找联系人的姓名_>");
char name[32] = { 0 };
int status = 0;
scanf("%s", &name);
for (int i = 0; i < con->cur_count; i++)
{
if (strcmp(name, con->_p[i].name) == 0)
{
printf("请输入修改后的姓名_>");
scanf("%s", &con->_p[i].name);
printf("请输入修改后的性别_>");
scanf("%s", &con->_p[i].sex);
printf("请输入修改后的年龄_>");
scanf("%d", &con->_p[i].age);
printf("请输入修改后的电话_>");
scanf("%s", &con->_p[i].phone);
printf("请输入修改后的地址_>");
scanf("%s", &con->_p[i].address);
printf("---------------------------\n");
status++;
}
}
if (status == 0)
{
printf("通讯录不存在该联系人\n");
}
else
{
printf("一共存在%d个同名联系人进行修改\n", status);
}
}
7、显示所有联系人信息
//显示所有联系人信息
void ContactPrintf(struct Contact *con)
{
system("cls");
if (con->cur_count == 0)
{
printf("当前通讯录为空,请先进行添加\n");
return;
}
for (int i = 0; i < con->cur_count; i++)
{
printf("姓名:%s\n", con->_p[i].name);
printf("性别:%s\n", con->_p[i].sex);
printf("年龄:%d\n", con->_p[i].age);
printf("电话:%s\n", con->_p[i].phone);
printf("地址:%s\n", con->_p[i].address);
printf("---------------------------\n");
}
return;
}
8、清空所有联系人
//清空所有联系人
void ContactClear(struct Contact *con)
{
system("cls");
ContactInit(con);
printf("通讯录清空完毕\n");
}
9、以名字排序所有联系人
//以名字排序所有联系人
void ContactSort(struct Contact *con)
{
system("cls");
if (con->cur_count == 0)
{
printf("当前通讯录为空,请先进行添加\n");
return;
}
if (con->cur_count == 0)
{
printf("当前通讯录为空,请先进行添加\n");
return;
}
for (int i = 0; i < con->cur_count - 1; i++)
{
for (int j = 0; j < con->cur_count - i - 1; j++)
{
if (strcmp(con->_p[j].name, con->_p[j + 1].name) > 0)
{
struct Person p = con->_p[j];
con->_p[j] = con->_p[j + 1];
con->_p[j + 1] = p;
}
}
}
printf("按照人名排序完毕\n");
return;
}
4、主函数调用
int main()
{
struct Contact con;
ContactInit(&con);
while (1)
{
int input = PrinfFace();
switch (input)
{
case EXIT:
exit(0);
case ADD:
ContactAdd(&con);
break;
case PRINTF:
ContactPrintf(&con);
break;
case FIND:
ContactFind(&con);
break;
case MODIFY:
ContactModify(&con);
break;
case DELETE:
ContactDelete(&con);
break;
case CLEAR:
ContactClear(&con);
break;
case SORT:
ContactSort(&con);
break;
default:
printf("输入错误,请重新输入\n");
}
}
system("pause");
return 0;
}