通讯录----增删查改(C语言版)

通讯录包含信息

struct People
{
	char name[20];     //姓名
	char num[20];          //电话 
	char address[20];          //家庭住址
};

菜单

	    printf("************************************菜单********************************\n");
		printf("				\n");
		printf("                1.输入联系人\n");
		printf("				2.显示通讯录\n");
		printf("				3.查找联系人\n");
		printf("				4.删除联系人\n");
		printf("				5.保存文件\n");
		printf("				\n");

void input(struct People stu[],int n)   //添加联系人的信息 
{
		printf("请输入联系人的姓名:\n");
		scanf("%s",&stu[n].name);
		printf("请输入联系人的电话:\n");
		scanf("%s",&stu[n].num);
		printf("请输入联系人的家庭住址:\n");
		scanf("%s",&stu[n].address);
} 

void dele(struct People stu[],char name2[],int n)      //删除联系人的信息 
{
	int end;
	end=find(stu,name2,n);
	if(end==-1)
	{
		printf("没有此联系人\n");
	}
	else
	{
		printf("要删除的家属用户%s为第%d个\n",stu[end].name,end+1);
		for(int i=end;i<n-1;i++)
		{
			stu[i]=stu[i+1];
		}
		printf("删除成功\n");
	}
		show(stu,n-1);
}

int find(struct People stu[],char name1[],int n)		//查找联系人的信息 
{
	int p=0;
	for(int j=0;j<n;j++)
	{
		if(strcmp(stu[j].name,name1)==0)         //作比较 
		{
			p=j;
			return p;
		} 
	}
	return (-1);    
}

保存文件

void keep(struct People stu[],int n)         //保存文件 
{
	FILE*fp;
	if((fp=fopen("D:\\CC\\联系人的信息","w"))==NULL)
	{
		printf("此文件无法打开\n");
		exit(0);
	}
	for(int i=0;i<n;i++)
	{
		fprintf(fp,"%s %s %s \n",stu[i].name,stu[i].num,stu[i].address);
	}
	fclose(fp);      //关闭文件 
}

总代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct People
{
	char name[20];
	char num[20];          //电话 
	char address[20]; 
};
void input(struct People stu[],int n)   //添加联系人的信息 
{
		printf("请输入联系人的姓名:\n");
		scanf("%s",&stu[n].name);
		printf("请输入联系人的电话:\n");
		scanf("%s",&stu[n].num);
		printf("请输入联系人的家庭住址:\n");
		scanf("%s",&stu[n].address);
} 
void show(struct People stu[],int n)     //显示联系人的信息 
{
	for(int i=0;i<n;i++)
	{
		printf("联系人的信息为:\n");
		printf("姓名:%s 电话:%s 家庭住址: %s \n",stu[i].name,stu[i].num,stu[i].address);
	}
}
void output_one(struct People stu[],int end)     //输出某一个联系人的信息 
{
	printf("您要查找的联系人的信息为:\n");
	printf("姓名:%s 电话:%s 家庭住址: %s \n",stu[end].name,stu[end].num,stu[end].address);
}
int find(struct People stu[],char name1[],int n)		//查找联系人的信息 
{
	int p=0;
	for(int j=0;j<n;j++)
	{
		if(strcmp(stu[j].name,name1)==0)         //作比较 
		{
			p=j;
			return p;
		} 
	}
	return (-1);    
}
void dele(struct People stu[],char name2[],int n)      //删除联系人的信息 
{
	int end;
	end=find(stu,name2,n);
	if(end==-1)
	{
		printf("没有此联系人\n");
	}
	else
	{
		printf("要删除的家属用户%s为第%d个\n",stu[end].name,end+1);
		for(int i=end;i<n-1;i++)
		{
			stu[i]=stu[i+1];
		}
		printf("删除成功\n");
	}
		show(stu,n-1);
}
void keep(struct People stu[],int n)         //保存文件 
{
	FILE*fp;
	if((fp=fopen("D:\\CC\\联系人的信息","w"))==NULL)
	{
		printf("此文件无法打开\n");
		exit(0);
	}
	for(int i=0;i<n;i++)
	{
		fprintf(fp,"%s %s %s \n",stu[i].name,stu[i].num,stu[i].address);
	}
	fclose(fp);      //关闭文件 
}
void menu(struct People stu[])            //菜单 
{
	int number=1,numb,record,n=0;
	while(number>=1)
	{
		printf("************************************菜单********************************\n");
		printf("				\n");
		printf("                                1.输入联系人\n");
		printf("				2.显示通讯录\n");
		printf("				3.查找联系人\n");
		printf("				4.删除联系人\n");
		printf("				5.保存文件\n");
		printf("				\n");
		printf("请根据菜单输入数字\n");
		scanf("%d",&numb) ;
		switch(numb)
		{
			case 1:                        //添加联系人的信息 
				{
					system("cls");
					printf("请输入您要输入联系人的个数(不多于%d个):\n",100-n);
					scanf("%d",&record);
					while(record--)
					{
						input(stu,n++);
					}
					show(stu,n);
					break;	
				}
			case 2:                   //显示联系人的信息 
				{
					system("cls") ;
					show(stu,n);
					break;
				}
			case 3:                       //查找联系人的信息 
				{
					system("cls");
					char name1[20];
					printf("请输入要查找的联系人的姓名:\n");
					scanf("%s",name1);
					int end;
					end=find(stu,name1,n);
					if(end==-1)
					{
						printf("查找失败\n");
					}
					else
					{
						printf("查找成功\n");
						output_one(stu,end);
					}
					break;
				}
			case 4:                  //删除联系人的信息 
				{
					system("cls");
					printf("请输入您要删除的联系人:\n");
					char name2[20];
					scanf("%s",name2);
					dele(stu,name2,n);
					n=n-1;
					system("cls");
					show(stu,n);
					break;
				}
			case 5:             //保存进文件中 
				{
					system("cls");
					keep(stu,n);
					break;
				}
		}
		printf("*****************************************\n");    //判断是否退出系统 
		printf("是否退出系统?\n");
		printf("如果退出系统,请按 0 ;否则请按 1 \n");
		scanf("%d",&numb);
		if(numb==0)
			break; 
		printf("*****************************************\n");
	}
}
int main()
{
	system("color F5");      //背景和字体颜色(F为白色背景,5为紫色字体) 
	struct People stu[100];      
	menu(stu);    //菜单调用 
	return 0;
} 

易错点

1.for循环之后不要习惯性加分号

2.注意int的范围,不要使它溢出

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RuIYInG287

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值