main.c
#include "contact.h"
void menu(void)
{
printf("*******************************\n");
printf("************通讯录*************\n");
printf("*********1.增加联系人 *********\n");
printf("*********2.删减联系人 *********\n");
printf("*********3.查找联系人 *********\n");
printf("*********4.修改联系人 *********\n");
printf("*********5.查看联系人 *********\n");
printf("*********6.排序联系人 *********\n");
printf("************0.退出*************\n");
printf("*******************************\n");
}
int main()
{
int input=0;
struct Peo Peo;
Init_Contact(&Peo);
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case Add:
Add_Contact(&Peo);
break;
case Del:
Del_Contact(&Peo);
break;
case Sea:
Sea_Contact(&Peo);
break;
case Mov:
Mov_Contact(&Peo);
break;
case Shw:
Shw_Contact(&Peo);
break;
case Sor:
Sor_Contact(&Peo);
break;
default:
break;
}
} while (input);
return 0;
}
#include "contact.h"
//查找函数
static int Find_Num(struct Peo* ps, char tmp[Max_name])
{
int i = 0;
for (i = 0; i <= ps->sign - 1; i++)
{
if (!(strcmp(ps->con[i].name, tmp)))
return i;
}
return -1;
}
void Init_Contact(struct Peo* ps)
{
memset(ps->con,0,sizeof(ps->con));
ps->sign = 0;
}
void Add_Contact(struct Peo* ps)
{
if (ps->sign == Max_Peo)
{
printf("人数已满,无法再加");
}
else
{
printf("请输入姓名:>");
scanf("%s", ps->con[ps->sign].name);
printf("请输入年龄:>");
scanf("%d", &(ps->con[ps->sign].age));
printf("请输入性别:>");
scanf("%s", ps->con[ps->sign].sex);
printf("请输入电话:>");
scanf("%s", ps->con[ps->sign].tel);
printf("添加成功\n\n\n");
(ps->sign)++;
}
}
void Shw_Contact(const struct Peo* ps)
{
if (ps->sign == 0)
{
printf("通讯录为空\n\n\n");
}
else
{
int i = 0;
printf("%-10s\t %-10s\t %-10s\t %-20s\t\n", "名字", "年龄", "性别", "电话");
for (i = 0; i < ps->sign; i++)
{
printf("%-10s\t %-10d\t %-10s\t %-20s\t\n",
ps->con[i].name,
ps->con[i].age,
ps->con[i].sex,
ps->con[i].tel);
}
printf("\n");
}
}
void Del_Contact(struct Peo* ps)
{
char tmp[Max_name] = { 0 };
printf("请输入删除人的名字:>");
scanf("%s", tmp);
//清除对应位置联系人信息
int i = Find_Num(ps,tmp);
//找不到人
if (i == (ps->sign)&&(i))
{
printf("查无此人\n");
}
//找到人了
else
{
//删除
memset(&(ps->con[i]),0,sizeof(ps->con[i]));
int j = i;
for (j = i; j < ps->sign; j++)
{
ps->con[j] = ps->con[j + 1];
}
printf("删除成功\n");
}
(ps->sign)--;
}
void Sea_Contact(struct Peo* ps)
{
char name[Max_name] = { 0 };
printf("请输入名字:>");
scanf("%s", name);
int ret = Find_Num(ps,name);
if (ret == -1)
{
printf("查无此人\n");
}
else
{
printf("%-10s\t %-10s\t %-10s\t %-20s\t\n", "名字", "年龄", "性别", "电话");
printf("%-10s\t %-10d\t %-10s\t %-20s\t\n",
ps->con[ret].name,
ps->con[ret].age,
ps->con[ret].sex,
ps->con[ret].tel);
printf("\n");
}
}
void Mov_Contact(struct Peo* ps)
{
int input = 0;
char tmp[Max_name] = { 0 };
printf("请输入修改人的名字:>");
scanf("%s", tmp);
int ret = Find_Num(ps,tmp);
printf("请输入要修改的选项:>\n");
printf("1.姓名 2.年龄 3.性别 4.电话号码\n");
scanf("%d", &input);
do
{
switch (input)
{
case name:
printf("请输入姓名:>");
scanf("%s", ps->con[ret].name);
break;
case age:
printf("请输入年龄:>");
scanf("%d", &(ps->con[ret].age));
break;
case sex:
printf("请输入性别:>");
scanf("%s", ps->con[ret].sex);
break;
case tel:
printf("请输入电话:>");
scanf("%s", ps->con[ret].tel);
break;
default:
break;
}
printf("修改成功\n");
break;
} while (input);
}
void Sor_Contact(struct Peo* ps)
{
int input = 0;
int i = 0;
printf("请选择排序的方式:>\n");
printf("1.姓名 2.年龄 3.性别 4.电话\n");
scanf("%d", &input);
do
{
switch (input)
{
case name:
for (i = 0; i < ps->sign; i++)
{
int j = 0;
for (j = 0; j < ps->sign - i-1; j++)
{
if (strcmp(ps->con[j].name,ps->con[j+1].name )>0)
{
char tmp[Max_name] = { 0 };
strcpy(tmp, ps->con[j].name);
strcpy(ps->con[j].name, ps->con[j + 1].name);
strcpy(ps->con[j + 1].name, tmp);
}
}
}
break;
case age:
for (i = 0; i < ps->sign; i++)
{
int j = 0;
for (j = 0; j < ps->sign - i-1; j++)
{
if (ps->con[j].age>ps->con[j+1].age)
{
int tmp = (ps->con[j + 1].age);
(ps->con[j + 1].age) = (ps->con[j].age);
(ps->con[j ].age) = tmp;
}
}
}
break;
case sex:
for (i = 0; i < ps->sign; i++)
{
int j = 0;
for (j = 0; j < ps->sign - i - 1; j++)
{
if (strcmp(ps->con[j].sex, ps->con[j + 1].sex) > 0)
{
char tmp[Max_name] = { 0 };
strcpy(tmp, ps->con[j].sex);
strcpy(ps->con[j].sex, ps->con[j + 1].sex);
strcpy(ps->con[j + 1].sex, tmp);
}
}
}
break;
case tel:
for (i = 0; i < ps->sign; i++)
{
int j = 0;
for (j = 0; j < ps->sign - i - 1; j++)
{
if (strcmp(ps->con[j].tel, ps->con[j + 1].tel) > 0)
{
char tmp[Max_name] = { 0 };
strcpy(tmp, ps->con[j].tel);
strcpy(ps->con[j].tel, ps->con[j + 1].tel);
strcpy(ps->con[j + 1].tel, tmp);
}
}
}
break;
default:
break;
}
break;
} while (input);
printf("排序成功\n\n");
}
#include <stdio.h>
#pragma warning(disable:4996)
#include <string.h>
//#define _CRT_SECURE_NO_WARNINGS 1
#define Max_tel 12//电话最大位
#define Max_sex 5//性别最大位
#define Max_name 8//姓名最大位
#define Max_Peo 100//通讯录最多能存储的人数
struct contact
{
char name[Max_name];//名字
int age;//年龄
char sex[Max_sex];//性别
char tel[Max_tel];//电话
};
struct Peo//单个人
{
struct contact con[Max_Peo];
int sign;
};
enum meun
{
Add = 1,
Del = 2,
Sea = 3,
Mov = 4,
Shw = 5,
Sor = 6
};
enum Mov
{
name=1,
age,
sex,
tel
};
void Init_Contact(struct Peo* ps);
void Add_Contact(struct Peo* ps);
void Shw_Contact(const struct Peo* ps);
void Del_Contact(struct Peo* ps);
void Sea_Contact(struct Peo* ps);
void Mov_Contact(struct Peo* ps);
void Sor_Contact(struct Peo* ps);