通讯录管理系统(C语言实现)

f9f4da75fa4149cfb34e1513ce05d45d.png

  本文的通讯录管理系统主要通过结构体数组实现,功能较单一,仅供学习和参考

#include<stdio.h>
#include<string.h>
#include<conio.h>
#include <windows.h>
typedef struct MailList  //构建联系人的信息结构体
{
	char name[20];
	char telnum[20];
	char location[40];
	char Email[40];
	char birthday[20];
}list;

typedef struct contact  //定义信息结构数组和通讯录当前人数封装成一个新的结构体
{
	list person[100]; 
	int num;
}contact;
	
void welcome();    //主菜单界面
  
void initMail(contact* p); //初始化结构数组

int FindMail(contact* p,const char *findName); //在实现联系人的修改等操作时查找联系人位置的函数

void InputMail(contact*p); //录入新的联系人信息

void ShowMail(contact* p); //显示所有联系人信息

void ModifyMail(contact* p);  //修改联系人信息

void DelMail(contact* p); //删除联系人信息

void CheckMail(contact* p); //查询联系人信息

int main()
{
	contact NewAdd;
	initMail(&NewAdd);
	FILE* fp = fopen("MailList.txt", "r");
	if (fp != NULL)
	{
		fread(&NewAdd, sizeof(contact), 1, fp);
		fclose(fp);
	}
	else
	{
		printf("没有文件信息,跳过读取\n");
	}
	while (1)   //将功能列表放入一个死循环中,实现打开一次程序可进行多次指令
	{
		welcome();
		char x = _getch();  //从键盘输入一个值赋给字符x
		switch (x)  //判断x的值实现功能列表
		{
		case'a':InputMail(&NewAdd);
			break;
		case'b':ShowMail(&NewAdd);
			break;
		case'c':ModifyMail(&NewAdd);
			break;
		case'd':DelMail(&NewAdd);
			break;
		case'e':CheckMail(&NewAdd);
			break;
		case 'f':
			fp = fopen("MailList.txt", "w");
			if (fp != NULL)
			{
				fwrite(&NewAdd, sizeof(contact), 1, fp);
				fclose(fp);
			}
			printf("保存成功!\n");
			break;
		case'g':
			return 0;  
			break;
		default:
			printf("输入指令有误,请重新输入\n");
			break;
		}
		system("pause");  //实现完一次功能后 暂停系统
		system("cls");  //清空控制台 进入下一次的功能选择
	}

}

void welcome()   //菜单界面 
{
	printf("*****************************************\n");
	printf("*\t\t通讯录\t\t\t*\n");
	printf("*****************************************\n");
	printf("*\t\t请选择功能列表\t\t*\n");
	printf("*****************************************\n");
	printf("*\t\ta.通讯录信息录入\t*\n");
	printf("*\t\tb.通讯录信息显示\t*\n");
	printf("*\t\tc.通讯录信息修改\t*\n");
	printf("*\t\td.通讯录信息删除\t*\n");
	printf("*\t\te.通讯录信息查询\t*\n");
	printf("*\t\tf.通讯录信息保存\t*\n");
	printf("*\t\tg.退出系统\t\t*\n");
	printf("*****************************************\n");

}

void initMail(contact* p)  //初始化结构体数组
{
	p->num = 0;  //清零联系人人数
}

int FindMail(contact* p,const char *findName)
{
	int i = 0;
	for (int i = 0; i < p->num; i++)
	{
		if (strcmp(p->person[i].name, findName) == 0)
			return i;   //找到需要实现操作的联系人后返回他的数组下标
	}
	return -1; //没有这个人则返回-1
}

void InputMail(contact*p)
{
	if (p->num >= 100)  //结构体的数组长度决定了通讯录的最大存储人数
	{
		printf("通讯录已满,无法录入\n");
		return;
	}
	printf("*****************************************\n");
	printf("输入联系人姓名\n");
	scanf("%s", p->person[p->num].name);
	printf("*****************************************\n");
	printf("输入联系人电话\n");
	scanf("%s", p->person[p->num].telnum);
	printf("*****************************************\n");
	printf("输入联系人地址\n");
	scanf("%s", p->person[p->num].location);
	printf("*****************************************\n");
	printf("输入联系人邮件地址\n");
	scanf("%s", p->person[p->num].Email);
	printf("*****************************************\n");
	printf("输入联系人生日\n");
	scanf("%s", p->person[p->num].birthday);
	p->num++;
	
}

void ShowMail(contact* p)
{
	system("cls");
	for (int i = 0; i < p->num; i++)
	{
		printf("%s %s %s %s %s\n", p->person[i].name, p->person[i].telnum, p->person[i].location, p->person[i].Email, p->person[i].birthday);
	}
}

void ModifyMail(contact* p)
{
	system("cls");
	printf("请输入要修改联系人的姓名\n");
	char ModifyName[20]={0};
	int position = 0;
	scanf("%s", ModifyName);
	position = FindMail(p,ModifyName);
	if (position != -1)
	{
		printf("*****************************************\n");
		printf("输入联系人姓名\n");
		scanf("%s", p->person[position].name);
		printf("*****************************************\n");
		printf("输入联系人电话\n");
		scanf("%s", p->person[position].telnum);
		printf("*****************************************\n");
		printf("输入联系人地址\n");
		scanf("%s", p->person[position].location);
		printf("*****************************************\n");
		printf("输入联系人邮件地址\n");
		scanf("%s", p->person[position].Email);
		printf("*****************************************\n");
		printf("输入联系人生日\n");
		scanf("%s", p->person[position].birthday);
	}
	else
	{
		printf("查无此人!\n");
		return;
	}
}

void DelMail(contact* p)
{
	system("cls");
	int i = 0; int position = 0;
	printf("请输入要删除联系人的姓名\n");
	char DelName[20] = { 0 };
	scanf("%s", DelName);
	position = FindMail(p, DelName);
	if (position != -1)
	{
		for (i = position; i < p->num; i++)    //找到要删除的人的位置后,这个位置之后的每一个数组向前覆盖,实现删除
		{
			p->person[i] = p->person[i + 1];
		}
		printf("删除成功\n");
		p->num--;
	}
	else
	{
		printf("查无此人");
		return;
	}
}

void CheckMail(contact* p)
{
	system("cls");
	printf("请输入要查找联系人的姓名\n");
	char CheckName[20] = { 0 };
	int position = 0;
	scanf("%s", CheckName);
	position = FindMail(p, CheckName);
	if (position != -1)
	{
		printf("%s %s %s %s %s\n", p->person[position].name, p->person[position].telnum, p->person[position].location, p->person[position].Email, p->person[position].birthday);
	}
	else
	{
		printf("查无此人!\n");
		return;
	}
}

  • 18
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值