c语言简易电子通讯录

 简易电子通讯录,有姓名,电子邮箱,家庭住址,电话四个属性,可以进行修改联系人,查询所有联系人,删除联系人,根据姓名查询联系人,添加联系人,保存联系人到txt文件,退出通讯录。

(我使用的是vs2010版本)

准备工作:

1.在D盘(可以在别的盘,对应的代码要一致)建立一个record.txt文件,自行输入一些联系人信息,结束加上stop,如下所示:

2.在文件的属性页,配置属性,c/c++,预处理器,预处理器定义中修改为 _CRT_SECURE_NO_WARNINGS,如下图:

程序代码 

1.头文件以及结构体定义

#include<stdio.h>
#include<string.h>
#define N 100

int i=0;
struct record
{
	char name[20];
	char email[30];
	char homeaddr[60];
    char telephone[13];
}records[N];

2.从txt文件中读取人员信息 

void Data_Up()
{
	FILE*fp;
	fp=fopen("d:\\record.txt","at+");
	for(i=0;i<10000;i++)
	{
		fscanf(fp,"%s %s %s %s\n",records[i].name,records[i].email,records[i].homeaddr,records[i].telephone);
		if(strcmp(records[i].name,"stop")==0)break;
	}
	fclose(fp);
}

3.将修改后的联系人信息存入txt文件中 

void Data_Save()
{
	int j=0;
	FILE*fp;
	fp=fopen("d:\\record.txt","w+");
	for(j=0;j<=i;j++)
	{
		fprintf(fp,"%s %s %s %s\n",records[j].name,records[j].email,records[j].homeaddr,records[j].telephone);
	}
	fprintf(fp,"stop");
	fclose(fp);
}

 4.将所有联系人信息输出

void Data_Show(int n)
{
		printf("第%d位联系人的基本信息如下:\n姓名:%s ,电子邮箱:%s ,地址:%s ,电话号码:%s \n",n,records[n].name,records[n].email,records[n].homeaddr,records[n].telephone);
}

 5.添加联系人(根据姓名长短排序)

void Add_People(char name[20])
{
	int j=0,n=i;
	for(j=0;j<=i;j++)
	{
		if(strcmp(records[j].name,name)>0)break;
	}
	for(n=i;n>=j;n--)
		{
			strcpy(records[n+1].name,records[n].name);
			strcpy(records[n+1].email,records[n].email);
			strcpy(records[n+1].homeaddr,records[n].homeaddr);
			strcpy(records[n+1].telephone,records[n].telephone);
		}
		i++;
		strcpy(records[j].name,name);
		printf("\n请输入联系人邮件:");
		scanf("%s",records[j].email);
		printf("\n请输入联系人家庭地址:");
		scanf("%s",records[j].homeaddr);
		printf("\n请输入联系人电话:");
		scanf("%s",records[j].telephone);
		printf("添加成功!\n");
}

 6.根据姓名搜索联系人

int Search_Name(char namestr[20])
{
	int j;
	for(j=0;j<=i;j++)
	{
		if(strcmp(namestr,records[j].name)==0)break;
	}
	return j;
}

7.修改联系人信息

void Change(char name[20])
{
	int n,m;
	char string[60];
	n=Search_Name(name);
	if(n>i)
	{
		printf("您查找的联系人不存在!\n");
		return ;
	}
	Data_Show(n);
	printf("请选择你要修改的资料:\n1->修改联系人姓名;\n2->修改联系人电子邮件;\n3->修改联系人地址;\n4->修改联系人电话;\n5->退出!\n\n");
	scanf("%d",&m);
	while(m!=5)
	{
		switch(m)
		{
		case 1:printf("请输入新的姓名:");
	        scanf("%s",string);
			strcpy(records[n].name,string);break;
		case 2:printf("请输入新的邮箱:");
	        scanf("%s",string);
		    strcpy(records[n].email,string);break;
		case 3:printf("请输入新的家庭地址:");
	        scanf("%s",string);
			strcpy(records[n].homeaddr,string);break;
		case 4:printf("请输入新的电话:");
	        scanf("%s",string);
			strcpy(records[n].telephone,string);break;
		case 5:return ;
		}
		printf("请继续选择你要修改的资料:\n1->修改联系人姓名;\n2->修改联系人电子邮件;\n3->修改联系人地址;\n4->修改联系人电话;\n5->退出!\n\n");
	    scanf("%d",&m);
	}
}

 8.删除联系人

void DeletePeo()
{
	char nametemp[20];
	int tp,n;
	if(i<0)
	{
		printf("\n没有删除的记录\n");return ;
	}
	printf("请输入您要查找的联系人姓名:");
	scanf("%s",nametemp);
	n=Search_Name(nametemp);
	if(n==-1)
	{
		printf("查找失败!\n");return ;
	}
	printf("确认要删除吗?确认按1,否则按任意键返回上一级菜单!\n");
	scanf("%d",&tp);
	if(tp==1)
	{
		int j;
		for(j=n+1;j<=i;j++)
		{
			strcpy(records[j-1].name,records[j].name);
			strcpy(records[j-1].email,records[j].email);
			strcpy(records[j-1].homeaddr,records[j].homeaddr);
			strcpy(records[j-1].telephone,records[j].telephone);
		}
		i--;
	}
	else return;
}

9.主函数 

void main()
{
	int ch,m,n,tp;
	char nametemp[20];
	struct record records[N]={0};
	Data_Up();
	i--;
	printf("电子通讯录:\n");
	printf("请选择您需要的操作\n");
	printf("1->修改;\n2->查看所有联系人;\n3->删除联系人;\n4->查询联系人;\n5->添加联系人;\n6->保存;\n7->退出\n\n");
	scanf("%d",&ch);
	while(ch!=7)
	{
		switch(ch)
		{
		case 1:printf("请输入要修改的联系人姓名:");
			scanf("%s",nametemp);
			Change(nametemp);break;
		case 2:for(m=0;m<=i;m++)Data_Show(m);break;
		case 3:DeletePeo();break;
		case 4:printf("请输入要查询的联系人姓名:");
			scanf("%s",nametemp);
			n=Search_Name(nametemp);
			if(n>i)printf("没有您要找的联系人!\n");
			else Data_Show(n);break;
		case 5:printf("请输入待添加的联系人姓名:");
			scanf("%s",nametemp);Add_People(nametemp);break;
		case 6:getchar();
			printf("保存数据吗?确定按键8,否则按任意选择其他操作!\n");
			scanf("%d",&tp);if(tp==8)Data_Save();break;
		case 7:return ;
		}
		printf("n1->修改;\n2->查看所有联系人;\n3->删除联系人;\n4->查询联系人;\n5->添加联系人;\n6->保存;\n7->退出\n\n");
	    scanf("%d",&ch);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值