#pragma once
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 10
#define MAX_TEL 12
#define MAX_ADDRESS 20
//自定义类型
typedef struct PeoInfor
{
//人的信息
char name[MAX_NAME];
char sex[MAX_SEX];
int age;
char tel[MAX_TEL];
char address[MAX_ADDRESS];
}PeoInfor;//将该类型重命名为PeoInfor
//通讯录
struct ConTact
{
PeoInfor date[MAX];
int count;
}ConTact;
//通讯录初始化
void InitContact(struct ConTact* ps);
//增加联系人信息
void AddContact(struct ConTact* ps);
//删除联系人信息
void DelContact(struct ConTact* ps);
//查找联系人信息
void SearchContact(const struct ConTact* ps);
//展示通讯录内容
void ShowContact(const struct ConTact* ps);
//扩大通讯录
void DilContact(const struct ConTact* ps);
#include "contact.h"
//初始化通讯录
void InitContact(struct ConTact* ps)
{
//memset函数将整块空间(通讯录)初始化
memset(ps, 0, sizeof(ConTact));
ps->count = 0;
}
//增加联系人信息
void AddContact(struct ConTact* ps)
{
int i = 0;
//判断通讯录是否有存储空间
if (ps->count == MAX)
{
printf("通讯录已满,请扩容\n");
return;
}
else
{
//判断存储数据的数组哪有空位
for (i = 0; i <= ps->count; i++)
{
if (*ps->date[i].name == '\0')
{
printf("请输入添加联系人的信息\n");
printf("请输入姓名:");
scanf("%s", ps->date[i].name);
printf("请输入性别:");
scanf("%s", ps->date[i].sex);
printf("请输入年龄:");
scanf("%d", &ps->date[i].age);
printf("请输入电话:");
scanf("%s", ps->date[i].tel);
printf("请输入家庭地址:");
scanf("%s", ps->date[i].address);
printf("增加成功\n");
break;
}
}
}
ps->count++;
}
//删除联系人信息
void DelContact(struct ConTact* ps)
{
int tem = 0;
char name[MAX_NAME];
printf("请输入要删除联系人姓名:");
scanf("%s", name);
//比较通讯录内是否含有该联系人
for(tem; tem < ps->count; tem++)
{
if (strcmp(name, ps->date[tem].name) == 0)
{
memset(&ps->date[tem], 0, sizeof(ps->date[tem]));
printf("删除成功\n");
break;
}
}
if (tem == ps->count)
{
printf("无该联系人\n");
}
}
//查找联系人信息
void SearchContact(const struct ConTact* ps)
{
int tem = 0;
//查找联系人
char name[MAX_NAME];
printf("请输入要查找联系人姓名\n");
scanf("%s", name);
//查找通讯录内是否含有该联系人
for (tem; tem < ps->count; tem++)
{
if (strcmp(name, ps->date[tem].name) == 0)
{
//打印查找的联系人信息
printf("%-20s\t%-10s\t%-5s\t%-12s\t%-20s\t\n", "姓名", "性别", "年龄", "电话号码", "家庭地址");
//打印姓名
printf("%-20s\t", ps->date[tem].name);
//打印性别
printf("%-10s\t", ps->date[tem].sex);
//打印年龄
printf("%-5d\t", ps->date[tem].age);
//打印号码
printf("%-12s\t", ps->date[tem].tel);
//打印地址
printf("%-20s\n", ps->date[tem].address);
return;
}
}
if (tem == ps->count)
{
printf("无该联系人信息\n");
}
}
//展示通讯录内容
void ShowContact(const struct ConTact* ps)
{
int tem = 0;
//打印信息
printf("%-20s\t%-10s\t%-5s\t%-12s\t%-20s\t\n", "姓名", "性别", "年龄", "电话号码", "家庭地址");
for(tem = 0; tem < ps->count; tem++)
{
if (*ps->date[tem].name == 0)
{
continue;
}
else
{
//打印姓名
printf("%-20s\t", ps->date[tem].name);
//打印性别
printf("%-10s\t", ps->date[tem].sex);
//打印年龄
printf("%-5d\t", ps->date[tem].age);
//打印号码
printf("%-12s\t", ps->date[tem].tel);
//打印地址
printf("%-20s\n", ps->date[tem].address);
}
}
}
//扩大通讯录
void DilContact(const struct ConTact* ps)
{
if (ps == NULL)
{
printf("目标地址为空\n");
return;
}
else
{
struct ConTact* ptr = (struct ConTact*)realloc(ps, sizeof(ConTact));
if (ptr != NULL)
{
ps = ptr;
ptr = NULL;
printf("扩容成功\n");
return;
}
printf("开辟失败\n");
}
}
//登录界面
void Menu()
{
printf("********** 0.Exit 1.Add 2.Del *****************\n");
printf("**************3.Search 4.Show 5.Dil *****************\n");
printf("*****************************************************************\n");
printf("*****************************************************************\n");
}
//选项
enum select
{
Exit,
Add,
Del,
Search,
Show,
Dil
};
int main()
{
int input = 0;
//在堆区开辟内存空间
struct ConTact* ConTact = (struct ConTact*)malloc(sizeof(ConTact));
//通讯录初始化
InitContact(&ConTact);
do
{
//设置通讯录面板
Menu();
//选择功能
printf("请选择功能:");
scanf("%d", &input);
switch(input)
{
case Exit:
printf("退出通讯录\n");
break;
case Add:
AddContact(&ConTact);
break;
case Del:
DelContact(&ConTact);
break;
case Search:
SearchContact(&ConTact);
break;
case Show:
ShowContact(&ConTact);
break;
case Dil:
DilContact(&ConTact);
break;
default :
printf("无此功能,请重新选择\n");
break;
}
} while (input);
free(&ConTact);
ConTact = NULL;
return 0;
}
Test-C语言:实现简易通讯录
于 2023-11-10 11:31:28 首次发布