C语言实现个人通讯录管理系统(含文件存储功能)

本程序是我初学C语言时的结课作业,获得了优秀评分。

功能

通讯录的添加联系人、删除指定联系人、修改指定联系人、查找指定联系人、浏览所有联系人、将联系人信息存储到文件中。

菜单如下

 源码如下(先自己建立一个工程,复制以下代码即可,另外,需在自己的工程目录里面建立一个名为:通讯录.txt 的文件)

如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define N 100  //最多只能存100条信息

typedef struct Person
{
	char name[100];
	int age;
	char phone[100];
	char address[100];
}Person;//定义结构体,包含的个人信息

typedef struct MailList
{
	Person data[N];//通讯录容量
	int count;//计数
}MailList;//定义结构体,包含计数和通讯录容量大小

void InitiBook(MailList *p);//初始化通讯录
void AddContact(MailList *p);//添加联系人
void DeleteContact(MailList *p);//删除联系人
void SeekContact(MailList *p);//查找联系人
void ModifyContact(MailList *p);//修改联系人
void ShowContact(MailList *p);//浏览全部联系人
void SaveContact(MailList *p);//存储所有联系人信息到文件中
void LoadContact(MailList *p);//把文件中已有的联系人信息加载到通讯录中

int main()
{
	int choice;
	MailList Book;//定义结构体
	InitiBook(&Book);//初始化通讯录
	while(1)
	{
		printf("******************************************\n");
	    printf("******    欢迎来到通讯录管理系统    ******\n");
	    printf("******          0.退出系统          ******\n");
     	printf("******     1.添加单个联系人信息     ******\n");
	    printf("******     2.删除指定联系人信息     ******\n");
    	printf("******     3.查找指定联系人信息     ******\n");
    	printf("******     4.修改指定联系人信息     ******\n");
    	printf("******     5.浏览所有联系人信息     ******\n");
		printf("******     6.存储所有信息到文件     ******\n");
    	printf("******************************************\n");
		printf("请选择0~6:");
		scanf("%d",&choice);
		if(choice==0)
		{
			SaveContact(&Book);//以防万一,在退出前存储联系人信息到文件中
			printf("感谢您的使用!\n");
			break;
		}
		if(choice>6 || choice<0)
		{
			printf("输入有误,请重新输入!\n");
			printf("请选择0~6:");
			scanf("%d",&choice);
		}
		switch(choice)
		{
		case 1:
			    AddContact(&Book);
			    system("pause"); //按任意键继续
			    system("cls") ;//清屏函数
			    break;
		case 2:
				DeleteContact(&Book);
				system("pause"); //按任意键继续
			    system("cls") ;//清屏函数
				break;
		case 3:
				SeekContact(&Book);
				system("pause"); //按任意键继续
			    system("cls") ;//清屏函数
				break;
		case 4:
				ModifyContact(&Book);
				system("pause"); //按任意键继续
			    system("cls") ;//清屏函数
				break;
		case 5:
			    ShowContact(&Book);
			    system("pause"); //按任意键继续
			    system("cls") ;//清屏函数
				break;
		case 6:
			    SaveContact(&Book);
				printf("存储成功!\n");
				system("pause"); //按任意键继续
			    system("cls") ;//清屏函数
				break;
		default:
			printf("输入有误!\n");
			break;
		}
	}
	return 0;
}

void InitiBook(MailList *p)//初始化通讯录
{
	p->count=0;
	LoadContact(p);//调用加载函数,从文件中加载联系人信息
}

void AddContact(MailList *p)//添加联系人信息
{
	if((p->count)>N)//判断容量是否已满
	{
		printf("容量已满,无法添加!\n");
	}
	else
	{
		printf("请输入姓名:");
     	scanf("%s",&p->data[p->count].name);
		printf("请输入年龄:");
		scanf("%d",&p->data[p->count].age);
	    printf("请输入电话:");
    	scanf("%s",&p->data[p->count].phone);
    	printf("请输入地址:");
    	scanf("%s",&p->data[p->count].address);
		p->count++;//添加成功,计数加一
		printf("添加成功!\n");
	}
}

void DeleteContact(MailList *p)//删除联系人信息
{
	int i,judge;
	char name[100];
	printf("请输入需要删除的人姓名:");
	scanf("%s",&name);
	for(i=0;i<p->count;i++)
	{
		if(strcmp(name,p->data[i].name)==0)
		{
			p->data[i]=p->data[i+1];//后一个人的信息覆盖前一个人的信息
			judge=1;
		}
	}
	if(judge==1)
	{
		printf("删除成功!\n");
		p->count--;//删除成功后,计数减一
	}
	else
	{
		printf("该联系人不存在,无法删除!\n");
	}
}

void SeekContact(MailList *p)//查找联系人信息
{
	int i,choice,judge=0;
	int age;
	char name[100];
	char phone[20];
	char address[100];
	printf("按哪项查找?\n");
	printf("1、姓名    2、年龄    3、电话    4、地址\n");
	printf("请选择1~4:");
	scanf("%d",&choice);
	if(choice==1)
	{
		printf("请输入姓名:");
		scanf("%s",&name);
		for(i=0;i<p->count;i++)
		{
			if(strcmp(name,p->data[i].name)==0)
			{
				printf("查找成功,该联系人信息为:\n");
				printf("姓名:%s\t年龄:%d\t电话:%s\t地址:%s\n",p->data[i].name,p->data[i].age,p->data[i].phone,p->data[i].address);
				judge=1;
			}
		}
		if(judge!=1)
		{
			printf("该联系人不存在!\n");
		}
	}
	else if(choice==2)
	{
		printf("请输入年龄:");
		scanf("%d",&age);
		for(i=0;i<p->count;i++)
		{
			if(age==p->data[i].age)
			{
				printf("查找成功,该联系人信息为:\n");
				printf("姓名:%s\t年龄:%d\t电话:%s\t地址:%s\n",p->data[i].name,p->data[i].age,p->data[i].phone,p->data[i].address);
				judge=1;
			}
		}
		if(judge!=1)
		{
			printf("该联系人不存在!\n");
		}
	}
	else if(choice==3)
	{
		printf("请输入电话:");
		scanf("%s",&phone);
		for(i=0;i<p->count;i++)
		{
			if(strcmp(phone, p->data[i].phone)==0)
			{
				printf("查找成功,该联系人信息为:\n");
				printf("姓名:%s\t年龄:%d\t电话:%s\t地址:%s\n",p->data[i].name,p->data[i].age,p->data[i].phone,p->data[i].address);
				judge=1;
			}
		}
		if(judge!=1)
		{
			printf("该联系人不存在!\n");
		}
	}
	else if(choice==4)
	{
		printf("请输入地址:");
		scanf("%s",&address);
		for(i=0;i<p->count;i++)
		{
			if(strcmp(address, p->data[i].address)==0)
			{
				printf("查找成功,该联系人信息为:\n");
				printf("姓名:%s\t年龄:%d\t电话:%s\t地址:%s\n",p->data[i].name,p->data[i].age,p->data[i].phone,p->data[i].address);
				judge=1;
			}
		}
		if(judge!=1)
		{
			printf("该联系人不存在!\n");
		}
	}
	else
	{
		printf("输入有误!\n");
	}
}

void ModifyContact(MailList *p)//修改联系人信息
{
	int i,judge=0,judge1=0;
	int choice;
	char name[100];
	printf("请输入你要修改的联系人的姓名:");
	scanf("%s",&name);
	for(i=0;i<p->count;i++)
	{
		if(strcmp(name,p->data[i].name)==0)
		{
			printf("该联系人信息为:\n");
	        printf("名字:%s\t年龄:%d\t电话:%s\t地址:%s\n",p->data[i].name,p->data[i].age,p->data[i].phone,p->data[i].address);
			printf("你需要修改该联系人什么信息?\n");
			printf("1、名字\n");
			printf("2、年龄\n");
			printf("3、电话\n");
			printf("4、地址\n");
			printf("请选择1~4:");
			scanf("%d",&choice);
			while(1)
			{
				switch(choice)
				{
				case 1:
				    printf("请输入新名字:");
				    scanf("%s",&p->data[i].name);
					printf("修改成功!\n");
					judge1=1;
					break;
				case 2:
				    printf("请输入新年龄:");
				    scanf("%d",&p->data[i].age);
					printf("修改成功!\n");
					judge1=1;
					break;
				case 3:
				    printf("请输入新电话:");
				    scanf("%s",&p->data[i].phone);
					printf("修改成功!\n");
					judge1=1;
					break;
				case 4:
				    printf("请输入新地址:");
				    scanf("%s",&p->data[i].address);
					printf("修改成功!\n");
					judge1=1;
					break;
				default:
					printf("输入有误,请选择1~4:");
					judge1=2;
					break;
				}
				if(judge1==2)
				{
					scanf("%d",&choice);
				}
				else if(judge1==1)
				{
					break;
				}
			}
			judge=1;
		}
		if(1==judge)
		{
			break;
		}
	}
	if(1!=judge)
	{
		printf("此人的信息不存在,无法修改\n");
	}
}

void ShowContact(MailList *p)//浏览全部联系人信息
{
	int i;
	if(p->count>0)
	{
		printf("全部联系人信息如下:\n");
		for(i=0;i<p->count;i++)
		{
			printf("名字:%s\t",p->data[i].name);
		    printf("年龄:%d\t",p->data[i].age);
		    printf("电话:%s\t",p->data[i].phone);
		    printf("地址:%s\n",p->data[i].address);
		}
	}
	else
	{
		printf("通讯录空空如也!\n");
	}
}

void SaveContact(MailList *p)//存储所有联系人信息到文件中
{
	FILE *fp;
	int i;
	if((fp=fopen("通讯录.txt","wb"))==NULL)
		{
	    	printf("cannot open this file!\n");
	        exit(0);
		}
	for(i=0;i<p->count;i++)
	{
		fwrite(&(p->data[i]),sizeof(Person),1,fp);
	}
	fclose(fp);
}

void LoadContact(MailList *p)//把文件已有的联系人信息加载到通讯录中
{
	int i;
	FILE *fp1;
	Person templd = {0};
	if((fp1=fopen("通讯录.txt","rb"))==NULL)
		{
	    	printf("cannot open this file!\n");
	        exit(0);
		}
	while(fread(&templd,sizeof(Person),1,fp1))
	{
		p->data[p->count] = templd;
		p->count++;
	}
	fclose(fp1);
	/*
	if(p->count>0)
	{
		printf("全部联系人信息如下:\n");
		for(i=0;i<p->count;i++)
		{
			printf("名字:%s\t",p->data[i].name);
		    printf("年龄:%d\t",p->data[i].age);
		    printf("电话:%s\t",p->data[i].phone);
		    printf("地址:%s\n",p->data[i].address);
		}
	}
	else
	{
		printf("通讯录空空如也!\n");
	}*/
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值