目录
思路
1.菜单
2.定义通讯录成员(姓名,年龄,性别,电话,地址)
3.初始化通讯录
4.添加联系人
5.删除联系人
6.查找联系人
7.修改联系人
8.展示全部联系人
9.排序联系人
分文件形式写,
contact.h 用来声明
contact.c 用来函数实现
test.c 程序的入口
按照这个思路自己动手写写吧。
通讯录实现
头文件 用来声明
contact.h
#pragma once
#include<string.h>
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
//#define 定义常量
#define name_max 10
#define sex_max 5
#define tele_max 15
#define addr_max 30
#define max 100
//枚举定义一系列常量
enum num
{
Exit, //0
Add, //1
Del, //2
Search,//3
Modify,//4
Show, //5
Sort //6
};
//typedef 类型重命名
typedef struct peoinfo
{
char name[name_max];
int age;
char sex[sex_max];
char tele[tele_max];
char addr[addr_max];
}peoinfo;
typedef struct contact
{
peoinfo data[max];
int sz;
}contact;
//初始化通讯录
void initcontact(contact* pc);
//添加联系人
void addcontact(contact* pc);
//展示所以联系人
void showcontact(contact* pc);
//查找联系人
void searchcontact(contact* pc);
//删除联系人
void delcontact(contact* pc);
//修改联系人
void modifycontact(contact* pc);
//排序联系人
void sortcontact(contact* pc);
contact.c 用来函数实现
#define _CRT_SECURE_NO_WARNINGS
#include"contact.h" //要包含头文件
void initcontact(contact* pc)
{
assert(pc);
memset(pc->data, 0, sizeof(pc->data));//memset 内存设置
pc->sz = 0;
}
void addcontact(contact* pc)
{
assert(pc);
if (pc->sz == max)
{
printf("通讯录满了,无法添加\n");
return;
}
printf("请添加姓名> ");
scanf("%s", pc->data[pc->sz].name);
printf("请添加年龄> ");
scanf("%d", &(pc->data[pc->sz].age));
printf("请添加性别> ");
scanf("%s", pc->data[pc->sz].sex);
printf("请添加电话> ");
scanf("%s", pc->data[pc->sz].tele);
printf("请添加地址> ");
scanf("%s", pc->data[pc->sz].addr);
pc->sz++;
printf("添加成功\n");
}
//const 指不希望指针指向的内容改变
void showcontact(const contact* pc)
{
assert(pc);
int i = 0;
//打印标题
printf("%-10s\t%-6s\t%-5s\t%-15s\t%-30s\n", "姓名", "年龄", "性别", "电话", "地址");// '\t' 水平制表符
//打印数据 // %-30s 打印元素个数,- 代表左对齐,没有-默认右对齐
for(i=0;i<pc->sz;i++)
{
printf("%-10s\t%-6d\t%-5s\t%-15s\t%-30s\n",
pc->data[i].name,
pc->data[i].age,
pc->data[i].sex,
pc->data[i].tele,
pc->data[i].addr);
}
}
// 关键字static 使得这个函数只能在此源文件使用
static int findcontact(contact* pc, char name[])
{
assert(pc);//assert 断言 不希望传来空指针
int i = 0;
for (i = 0; i < pc->sz; i++)
{
if (strcmp(pc->data[i].name, name) == 0)
{
return i;
}
}
return -1;
}
void searchcontact(const contact* pc)
{
assert(pc);
char name[name_max] = { 0 };
printf("请输入你要查找人的姓名> ");
scanf("%s", name);
int ret=findcontact(pc,name);
if (ret == -1)
{
printf("找不到\n");
}
else
{
printf("找到了\n");
printf("%-10s\t%-6s\t%-5s\t%-14s\t%-30s\n", "姓名", "年龄", "性别", "电话", "地址");
printf("%-10s\t%-6d\t%-5s\t%-14s\t%-30s\n",
pc->data[ret].name,
pc->data[ret].age,
pc->data[ret].sex,
pc->data[ret].tele,
pc->data[ret].addr);
}
}
void delcontact(contact* pc)
{
assert(pc);
if (pc->sz == 0)
{
printf("通讯录为空,无法删除\n");
return;
}
char name[name_max] = { 0 };
printf("请输入你要删除人的姓名> ");
scanf("%s", name);
int ret = findcontact(pc, name);
if (ret == -1)
{
printf("没有此联系人,删除失败\n");
return;
}
int i = 0;
for (i = ret; i < pc->sz - 1; i++)
{
pc->data[i] = pc->data[i + 1];
}
printf("删除成功\n");
pc->sz--;
}
void modifycontact(contact* pc)
{
assert(pc);
if (pc->sz == 0)
{
printf("通讯录为空,无法修改\n");
return;
}
char name[name_max] = { 0 };
printf("请输入你要修改人的姓名> ");
scanf("%s", name);
int ret = findcontact(pc, name);
if (ret == -1)
{
printf("没有此联系人,修改失败\n");
}
else
{
printf("请添加姓名> ");
scanf("%s", pc->data[ret].name);
printf("请添加年龄> ");
scanf("%d", &(pc->data[ret].age));
printf("请添加性别> ");
scanf("%s", pc->data[ret].sex);
printf("请添加电话> ");
scanf("%s", pc->data[ret].tele);
printf("请添加地址> ");
scanf("%s", pc->data[ret].addr);
printf("修改成功\n");
}
}
int int_cmp(const void* p1, const void* p2)
{
return ((peoinfo*)p1)->age - ((peoinfo*)p2)->age;
}
void sortcontact(contact* pc)
{
if (pc->sz == 0)
{
printf("通讯录为空,无法排序\n");
return;
}
printf("按年龄排序\n");
//qsort函数 排序任意数据
qsort(pc->data, pc->sz, sizeof(peoinfo), int_cmp);
printf("排序成功\n");
}
test.c 程序的入口
#define _CRT_SECURE_NO_WARNINGS
#include"contact.h"
void menu()//菜单
{
printf("***** 通讯录 *****\n");
printf("***** 1. add 2. del *****\n");
printf("***** 3. search 4. modify *****\n");
printf("***** 5. show 6. sort *****\n");
printf("***** 0. exit *****\n");
printf("********************************\n");
}
int main()
{
int input = 0;
contact con;
initcontact(&con);
do
{
menu();
printf("请选择你要的操作> ");
scanf("%d", &input);
switch (input)
{
case Add:
addcontact(&con);
break;
case Del:
delcontact(&con);
break;
case Search:
searchcontact(&con);
break;
case Modify:
modifycontact(&con);
break;
case Show:
showcontact(&con);
break;
case Sort:
sortcontact(&con);
break;
case Exit:
break;
default:
printf("请重新输入");
break;
}
} while (input);
return 0;
}