有时间再做详细教程,先放上三个文件的整体代码
contact.h
#pragma once
#define MAX_NUMS 10
#define NAME_LENGTH 7
#define TELE_LENGTH 12
#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<stdlib.h>
enum Option
{
EXIT,
ADD,
DEL,
SEEK,
MODIFY,
PRINT,
SORT,
EMPTY
};
typedef struct PeopleInfo
{
char name[NAME_LENGTH];
char sex[10];
int age;
char tele[TELE_LENGTH];
}PeopleInfo;
typedef struct Contact
{
PeopleInfo data[MAX_NUMS];
int PeopNums;
}Contact;
//菜单
void menu();
//初始化Contact结构体变量con
void InitContact(Contact* ptr_con);
//添加联系人信息
void AddOne(Contact* ptr_con);
//打印所有联系人信息
void PrintAll(const Contact* ptr_con);
//删除联系人信息
void DelOne(Contact* ptr_con);
//查找具体人下标
int Seek(Contact* ptr_con);
//打印具体人信息
void PrintOne( Contact* ptr_con);
//修改联系人信息
void ModifyOne(Contact* ptr_con);
//按年龄排序
void AgeSort(Contact* ptr_con);
contact.c
#include"contact.h"
//菜单
void menu()
{
printf("1、增加联系人信息 2、删除联系人信息\n");
printf("3、查询联系人信息 4、修改联系人信息\n");
printf("5、打印所有人信息 6、按年龄排序信息\n");
printf("7、清空联系人信息 0、退出通讯录\n");
}
//初始化通讯录
void InitContact(Contact* ptr_con)
{
assert(ptr_con);
memset(ptr_con->data, 0, sizeof(ptr_con->data));
ptr_con->PeopNums = 0;
}
//增加联系人信息
void AddOne(Contact* ptr_con)
{
assert(ptr_con);
if (ptr_con->PeopNums == MAX_NUMS)
{
printf("通讯录已满\n");
return;
}
else
{
printf("姓名:");
scanf("%s", (ptr_con->data[ptr_con->PeopNums]).name);
printf("性别:");
scanf("%s", (ptr_con->data[ptr_con->PeopNums]).sex);
printf("年龄:");
scanf("%d", &(ptr_con->data[ptr_con->PeopNums]).age);
printf("电话:");
scanf("%s", (ptr_con->data[ptr_con->PeopNums]).tele);
ptr_con->PeopNums++;
}
}
//打印所有联系人信息
void PrintAll(const Contact* ptr_con)
{
printf("%-10s %-10s %-3s %-s\n", "姓名", "性别", "年龄", "电话");
for (int i=0; i < ptr_con->PeopNums; i++)
{
printf("%-10s %-10s %-3d %-s\n", ptr_con->data[i].name
, ptr_con->data[i].sex
, ptr_con->data[i].age
, ptr_con->data[i].tele);
}
}
//删除具体联系人信息
void DelOne(Contact* ptr_con)
{
printf("请输入删除的联系人姓名:");
int ret = Seek(ptr_con);
if (ret != -1)
{
memmove(ptr_con->data + ret, ptr_con->data + ret + 1, (MAX_NUMS - ret - 1) * sizeof(ptr_con->data[0]));
ptr_con->PeopNums--;
printf("删除成功\n");
}
else
{
printf("通讯录不存在此人\n");
}
}
//查找具体联系人的下标
int Seek(Contact* ptr_con)//找到返回下标,没找到返回-1.
{
char name[NAME_LENGTH] = { 0 };
scanf("%s", name);
for (int i = 0; i < ptr_con->PeopNums; i++)
{
if (strcmp(ptr_con->data[i].name, name) == 0)
{
return i;
}
}
return -1;
}
//(查找)打印具体联系人
void PrintOne( Contact* ptr_con)
{
printf("请输入联系人姓名:");
int i=Seek(ptr_con);
if (i != -1)
{
printf("%-10s %-10s %-3s %-s\n", "姓名", "性别", "年龄", "电话");
printf("%-10s %-10s %-3d %-s\n", ptr_con->data[i].name
, ptr_con->data[i].sex
, ptr_con->data[i].age
, ptr_con->data[i].tele);
}
else
{
printf("查无此人\n");
}
}
void ModifyOne(Contact* ptr_con)
{
printf("请输入改修的联系人姓名:");
int i=Seek(ptr_con);
if (i != -1)
{
printf("请修改其具体内容\n");
printf("姓名:");
scanf("%s", (ptr_con->data[i]).name);
printf("性别:");
scanf("%s", (ptr_con->data[i]).sex);
printf("年龄:");
scanf("%d", &(ptr_con->data[i]).age);
printf("电话:");
scanf("%s", (ptr_con->data[i]).tele);
system("cls");
printf("修改完成\n");
}
else
{
printf("未找到修改的联系人\n");
}
}
//排序
void AgeSort(Contact* ptr_con)
{
for (int i = 0; i < ptr_con->PeopNums - 1; i++)
{
int flag = 1;
for (int j = i; j < ptr_con->PeopNums-i-1; j++)
{
PeopleInfo tmp = { 0 };
if (ptr_con->data[j].age > ptr_con->data[j + 1].age)
{
tmp = ptr_con->data[j];
ptr_con->data[j] = ptr_con->data[j + 1];
ptr_con->data[j + 1] = tmp;
flag = 0;
}
}
if (flag == 1)
{
break;
}
}
printf("排序完成\n");
}
test.h
#include"contact.h"
int main()
{
int input = 0;
Contact con;
InitContact(&con);
do
{
menu();
printf("请输入选项:");
scanf("%d", &input);
switch (input)
{
case ADD:
system("cls");
AddOne(&con);
system("cls");
break;
case DEL:
system("cls");
DelOne(&con);
system("pause");
system("cls");
break;
case SEEK:
system("cls");
PrintOne(&con);
system("pause");
system("cls");
break;
case MODIFY:
system("cls");
ModifyOne(&con);
system("pause");
system("cls");
break;
case PRINT:
system("cls");
PrintAll(&con);
system("pause");
system("cls");
break;
case SORT:
system("cls");
AgeSort(&con);
system("pause");
system("cls");
break;
case EMPTY:
system("cls");
InitContact(&con);
printf("初始化完成\n");
system("pause");
system("cls");
break;
case 0:
system("cls");
printf("退出通讯录\n");
break;
default:
system("cls");
printf("请输入正确的选项!\n");
break;
}
} while (input);
return 0;
}