文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
创新互联主要从事成都网站建设、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务兰溪,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
一、构建框架
1.1 菜单
1.2 结构体创建
1.3 结构体数组创建及其初始化
二、功能实现
2.1 增加联系人
2.2 删除指定联系人
2.3 查找指定联系人
2.4 修改指定联系人
2.5 显示联系人
2.6排序
三、效果展示及代码
本篇文章分享一下用c语言完成简易的通讯录的搭建,本次项目模块分成test.c,contact.c,contact.h 分别用于项目的检测,项目的实现,项目的声明.
一、构建框架
1.1 菜单
//打印菜单
void menu()
{
printf("**********************************\n");
printf("***** 1.增加 2.删除 *****\n");
printf("***** 3.查找 4.修改 *****\n");
printf("***** 5.显示 6.排序 *****\n");
printf("****** 0.退出 *****\n");
printf("**********************************\n");
}
1.2 结构体创建struct date
{
char name[my_name];//名字
char sex[my_sex];//性别
int age;//年龄
char tele[my_tele];//电话号码
char add[my_add];//地址
};
1.3 结构体创建及其初始化
//创建结构体数组,用来保存通讯录信息
struct contact
{
struct date contact[MAX];//保存struct date类型数据的结构体数组
int sz;//用来计算存入了多少个信息
};
//初始化结构体数组
void InitContact(struct contact* pc)
{
pc->sz = 0;
memset((pc->contact), 0, MAX * sizeof(*pc->contact));//用memset函数将con中的数组的1000个值全部初始化为0
}
二、功能实现
2.1 增加联系人//增加
void AddContact(struct contact* pc)
{
printf("请输入名字:");
scanf("%s", pc->contact[pc->sz].name);//用sz来充当数组下标,避免在一个位置重复输入
printf("请输入性别:");
scanf("%s", pc->contact[pc->sz].sex);
printf("请输入年龄:");
scanf("%d", &pc->contact[pc->sz].age);
printf("请输入电话号:");
scanf("%s", pc->contact[pc->sz].tele);
printf("请输入地址:");
scanf("%s", pc->contact[pc->sz].add);
printf("输入完成\n");
pc->sz++;//每输入一个sz就计数一次
}
2.2 删除指定联系人//查询函数
int FindContact(struct contact* pc, char name[])
{
for (int i = 0; i< (pc->sz); i++)
{
if (0 == strcmp(pc->contact[i].name, name))
{
return i;//使用strcmp比较,相等即找到了,传回下标i
}
}
return -1;//没找到则传回-1
}
//删除
void DelContact(struct contact* pc)
{
char name[20];
printf("请输入要删除的名字:");
scanf("%s", name);
int ret=FindContact(pc,name);//利用查找函数,查到传回下标,没有则传回-1
if (ret == -1)
{
printf("没有所要删除的名字\n");
}
else
{
for (int i = ret; i< (pc->sz)-1; i++)
{
pc->contact[i] = pc->contact[i + 1];//删除的办法是:
//将所要删除的那一组数据往后的数据整体向前挪移
}
pc->sz--;
}
}
2.3 查找指定联系人//查询函数
int FindContact(struct contact* pc, char name[])
{
for (int i = 0; i< (pc->sz); i++)
{
if (0 == strcmp(pc->contact[i].name, name))
{
return i;//使用strcmp比较,相等即找到了,传回下标i
}
}
return -1;//没找到则传回-1
}
//查找
void SearchConstact(struct contact* pc)
{
char name[20];
printf("请输入要查找的名字:");
scanf("%s", name);
int ret = FindContact(pc, name);//利用查找函数,查到传回下标,没有则传回-1
if (ret == -1)
{
printf("查无此人\n");
}
else//打印传回下标所对应的数据
{
printf("%-10s\t%-6s\t%-5s\t%-12s\t%-20s\n", "姓名", "性别", "年龄", "号码", "地址");
printf("%-10s\t%-6s\t%-5d\t%-12s\t%-20s\n", pc->contact[ret].name,
pc->contact[ret].sex,
pc->contact[ret].age,
pc->contact[ret].tele,
pc->contact[ret].add);
}
}
2.4 修改指定联系人//查询函数
int FindContact(struct contact* pc, char name[])
{
for (int i = 0; i< (pc->sz); i++)
{
if (0 == strcmp(pc->contact[i].name, name))
{
return i;//使用strcmp比较,相等即找到了,传回下标i
}
}
return -1;//没找到则传回-1
}
//修改
void ModifyContact(struct contact* pc)
{
char name[20];
printf("请输入要修改的名字:");
scanf("%s", name);
int ret = FindContact(pc, name);//利用查找函数,查到传回下标,没有则传回-1
if (ret == -1)
{
printf("查无此人\n");
}
else//用传回的下标找到要修改的数据,进行修改
{
printf("请输入修改后的名字:");
scanf("%s", pc->contact[ret].name);
printf("请输入修改后的性别:");
scanf("%s", pc->contact[ret].sex);
printf("请输入修改后的年龄:");
scanf("%d", &pc->contact[ret].age);
printf("请输入修改后的电话号:");
scanf("%s", pc->contact[ret].tele);
printf("请输入修改后地址:");
scanf("%s", pc->contact[ret].add);
printf("修改完成\n");
}
}
2.5 显示联系人//显示
void ShowContact(struct contact* pc)
{
printf("%-10s\t%-6s\t%-5s\t%-12s\t%-20s\n", "姓名", "性别", "年龄", "号码", "地址");
for (int i = 0; i< (pc->sz); i++)
{
printf("%-10s\t%-6s\t%-5d\t%-12s\t%-20s\n", pc->contact[i].name,
pc->contact[i].sex,
pc->contact[i].age,
pc->contact[i].tele,
pc->contact[i].add);
}
}
2.6 排序(根据名字)//排序
int sort(const void* e1, const void* e2)
{
return strcmp(((struct date*)e1)->name, ((struct date*)e2)->name);//用strcmp函数比较相邻的名字的大小
}
void SortContact(struct contact* pc)
{
qsort(pc->contact, pc->sz, sizeof(struct date), sort);//用qsort函数进行排序
}
三、效果展示
增加联系人删除指定联系人查找指定联系人修改指定联系人显示联系人排序(根据名字)下面是本次项目的所有代码
test.c#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
int main()
{
menu();
int input;
struct contact con;
InitContact(&con);
do
{
printf("请选择:");
scanf("%d", &input);
switch(input)
{
case 1:
AddContact(&con);
break;
case 2:
DelContact(&con);
break;
case 3:
SearchConstact(&con);
break;
case 4:
ModifyContact(&con);
break;
case 5:
ShowContact(&con);
break;
case 6:
SortContact(&con);
break;
case 0:
printf("退出通讯录");
break;
default:
printf("选择错误,请重新选择");
break;
}
} while (input);
return 0;
}
constact.c#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
//打印菜单
void menu()
{
printf("**********************************\n");
printf("***** 1.增加 2.删除 *****\n");
printf("***** 3.查找 4.修改 *****\n");
printf("***** 5.显示 6.排序 *****\n");
printf("****** 0.退出 *****\n");
printf("**********************************\n");
}
//初始化结构体数组
void InitContact(struct contact* pc)
{
pc->sz = 0;
memset((pc->contact), 0, MAX * sizeof(*pc->contact));//用memset函数将con中的数组的1000个值全部初始化为0
}
//增加
void AddContact(struct contact* pc)
{
printf("请输入名字:");
scanf("%s", pc->contact[pc->sz].name);//用sz来充当数组下标,避免在一个位置重复输入
printf("请输入性别:");
scanf("%s", pc->contact[pc->sz].sex);
printf("请输入年龄:");
scanf("%d", &pc->contact[pc->sz].age);
printf("请输入电话号:");
scanf("%s", pc->contact[pc->sz].tele);
printf("请输入地址:");
scanf("%s", pc->contact[pc->sz].add);
printf("输入完成\n");
pc->sz++;//每输入一个sz就计数一次
}
//查询函数
int FindContact(struct contact* pc, char name[])
{
for (int i = 0; i< (pc->sz); i++)
{
if (0 == strcmp(pc->contact[i].name, name))
{
return i;//使用strcmp比较,相等即找到了,传回下标i
}
}
return -1;//没找到则传回-1
}
//删除
void DelContact(struct contact* pc)
{
char name[20];
printf("请输入要删除的名字:");
scanf("%s", name);
int ret=FindContact(pc,name);//利用查找函数,查到传回下标,没有则传回-1
if (ret == -1)
{
printf("没有所要删除的名字\n");
}
else
{
for (int i = ret; i< (pc->sz)-1; i++)
{
pc->contact[i] = pc->contact[i + 1];//删除的办法是:
//将所要删除的那一组数据往后的数据整体向前挪移
}
pc->sz--;
}
}
//查找
void SearchConstact(struct contact* pc)
{
char name[20];
printf("请输入要查找的名字:");
scanf("%s", name);
int ret = FindContact(pc, name);//利用查找函数,查到传回下标,没有则传回-1
if (ret == -1)
{
printf("查无此人\n");
}
else//打印传回下标所对应的数据
{
printf("%-10s\t%-6s\t%-5s\t%-12s\t%-20s\n", "姓名", "性别", "年龄", "号码", "地址");
printf("%-10s\t%-6s\t%-5d\t%-12s\t%-20s\n", pc->contact[ret].name,
pc->contact[ret].sex,
pc->contact[ret].age,
pc->contact[ret].tele,
pc->contact[ret].add);
}
}
//修改
void ModifyContact(struct contact* pc)
{
char name[20];
printf("请输入要修改的名字:");
scanf("%s", name);
int ret = FindContact(pc, name);//利用查找函数,查到传回下标,没有则传回-1
if (ret == -1)
{
printf("查无此人\n");
}
else//用传回的下标找到要修改的数据,进行修改
{
printf("请输入修改后的名字:");
scanf("%s", pc->contact[ret].name);
printf("请输入修改后的性别:");
scanf("%s", pc->contact[ret].sex);
printf("请输入修改后的年龄:");
scanf("%d", &pc->contact[ret].age);
printf("请输入修改后的电话号:");
scanf("%s", pc->contact[ret].tele);
printf("请输入修改后地址:");
scanf("%s", pc->contact[ret].add);
printf("修改完成\n");
}
}
//显示
void ShowContact(struct contact* pc)
{
printf("%-10s\t%-6s\t%-5s\t%-12s\t%-20s\n", "姓名", "性别", "年龄", "号码", "地址");
for (int i = 0; i< (pc->sz); i++)
{
printf("%-10s\t%-6s\t%-5d\t%-12s\t%-20s\n", pc->contact[i].name,
pc->contact[i].sex,
pc->contact[i].age,
pc->contact[i].tele,
pc->contact[i].add);
}
}
//排序
int sort(const void* e1, const void* e2)
{
return strcmp(((struct date*)e1)->name, ((struct date*)e2)->name);//用strcmp函数比较相邻的名字的大小
}
void SortContact(struct contact* pc)
{
qsort(pc->contact, pc->sz, sizeof(struct date), sort);//用qsort函数进行排序
}
constact.h#pragma once
#include#include//strcmp,memset所需要引用的头文件
#define MAX 1000 //自定义数字取代固定数字,方便调整
#define my_name 20 //同上
#define my_sex 6 //同上
#define my_tele 12 //同上
#define my_add 20 //同上
//打印菜单
void menu();
//创建结构体
struct date
{
char name[my_name];//名字
char sex[my_sex];//性别
int age;//年龄
char tele[my_tele];//电话号码
char add[my_add];//地址
};
//创建结构体数组,用来保存通讯录信息
struct contact
{
struct date contact[MAX];//保存struct date类型数据的结构体数组
int sz;//用来计算存入了多少个信息
};
//初始化结构体数组
void InitContact(struct contact* pc);
//增加
void AddContact(struct contact* pc);
//删除
void DelContact(struct contact* pc);
//查找
void SearchConstact(struct contact* pc);
//修改
void ModifyContact(struct contact* pc);
//显示
void ShowContact(struct contact* pc);
//排序(按照名字排)
void SortContact(struct contact* pc);
以上就是本篇文章的全部内容,希望铁子们看了能够有所收货,有什么错误或者值得改进的地方,希望大佬可以指出
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧