简易通讯录

//C语言代码

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

typedef struct use
{
	char name[10];
	char sex[2];
	char age[10];
	char phone[20];
	char addr[20];
}users;

#define MAX 1000   //定义最大的人数
int i_Size;       //记录实际的人数
users use[MAX];   //用户信息数组

void dis_main_menu()//显示主菜单
{
	printf("\n    通讯录管理系统     \n");
	printf("-------------------------\n");
	printf("  1:添加联系人信息      \n");
	printf("  2:删除指定联系人信息  \n");
	printf("  3:查找指定联系人信息  \n");
	printf("  4:修改指定联系人信息  \n");
	printf("  5:显示指定联系人信息  \n");
	printf("  6:清空所有联系人信息  \n");
	printf("  0:退出系统            \n");
	printf("-------------------------\n");
}

void input(users use[])//输入信息
{
	int i=0;
	printf("请依次输入用户的姓名、性别、年龄、电话、住址:\n");
	for(i=0;i<i_Size;i++)
	{
		printf("用户%d:",i+1);
		scanf("%s%s%d%s%s%s",use[i].name,use[i].sex,&use[i].age,use[i].phone,use[i].addr);
	}
}
void save(users use[])//存储
{
	FILE *fp;
	int i=0;
	if((fp=fopen("c:\\userfile.dat","wb"))==NULL)//以写方式打开文件
	{
		printf("save 函数打开文件c:\\userfile.dat!失败,请按任意键退出!\n");
		exit (1);
	}
	for(i=0;i<i_Size;i++)
	{
		if(fwrite(&use[i],sizeof(users),1,fp)!=1)
		{
			printf("存入失败,请按任意键退出\n");
			exit (1);
		}
	}
	fclose(fp);
}

int input_new()//主菜单1:添加新用户
{
	printf("\n请输入实际人数:");
	scanf("%d",&i_Size);
	input(use);
	save(use);
	return i_Size;
}

void dis_search_menu()//用户信息查询菜单
{
	printf("\n用户信息查询 \n");
	printf("---------------\n");
	printf(" 1:按姓名查询 \n");
	printf(" 2:按性别查询 \n");
	printf(" 3:按年龄查询 \n");
	printf(" 4:按电话查询 \n");
	printf(" 5:按住址查询 \n");
	printf(" 0:退出查询   \n");
	printf("---------------\n");
}
int search_name(char name[10])//按姓名查询
{
	int i=0;
	for(i=0;i<i_Size;i++)
	{
		if(!strcmp(name,use[i].name))
		{
			printf("姓名\t性别\t年龄\t电话\t住址\n");
			printf("------------------------------------------------------\n");
			printf("%s\t%s\t%d\t%s\t%s",use[i].name,use[i].sex,use[i].age,use[i].phone,use[i].addr);
			break;
		}
	}
	if(i==i_Size)
	{
		printf("姓名输入有误!没有该用户!\n");
		return i;
	}
}
int search_sex(char sex[2])//按性别查询
{
	int i=0;
	for(i=0;i<i_Size;i++)
	{
		if(!strcmp(sex,use[i].sex))
		{
			printf("姓名\t性别\t年龄\t电话\t住址\n");
			printf("------------------------------------------------------\n");
			printf("%s\t%s\t%d\t%s\t%s",use[i].name,use[i].sex,use[i].age,use[i].phone,use[i].addr);
			break;
		}
	}
	if(i==i_Size)
	{
		printf("性别输入有误!没有该用户!\n");
		return i;
	}
}
int search_age(char age[10])//按年龄查询
{
	int i=0;
	for(i=0;i<i_Size;i++)
	{
		if(!strcmp(age,use[i].age))
		{
			printf("姓名\t性别\t年龄\t电话\t住址\n");
			printf("------------------------------------------------------\n");
			printf("%s\t%s\t%d\t%s\t%s",use[i].name,use[i].sex,use[i].age,use[i].phone,use[i].addr);
			break;
		}
	}
	if(i==i_Size)
	{
		printf("年龄输入有误!没有该用户!\n");
		return i;
	}
}
int search_phone(char phone[20])//按电话查询
{
	int i=0;
	for(i=0;i<i_Size;i++)
	{
		if(!strcmp(phone,use[i].phone))
		{
			printf("姓名\t性别\t年龄\t电话\t住址\n");
			printf("------------------------------------------------------\n");
			printf("%s\t%s\t%d\t%s\t%s",use[i].name,use[i].sex,use[i].age,use[i].phone,use[i].addr);
			break;
		}
	}
	if(i==i_Size)
	{
		printf("电话输入有误!没有该用户!\n");
		return i;
	}
}
int search_addr(char addr[20])//按住址查询
{
	int i=0;
	for(i=0;i<i_Size;i++)
	{
		if(!strcmp(addr,use[i].addr))
		{
			printf("姓名\t性别\t年龄\t电话\t住址\n");
			printf("------------------------------------------------------\n");
			printf("%s\t%s\t%d\t%s\t%s",use[i].name,use[i].sex,use[i].age,use[i].phone,use[i].addr);
			break;
		}
	}
	if(i==i_Size)
	{
		printf("住址输入有误!没有该用户!\n");
		return i;
	}
}

void delete_information()  //主菜单2:删除指定联系人信息
{
	int i=0;
	char use_name[10];
	FILE *fp;
	if((fp=fopen("c:\\userfile.dat","wb"))==NULL)
	{
		printf("delete_information 函数打开文件c:\\userfile.dat!失败,请按任意键退出\n");
		exit (1);
	}
	return;
	printf("请输入需要删除的用户姓名:");
	scanf("%s",use_name);
	i=search_name(use_name);      //查找需要删除信息的用户
	use[i].name==0;
	use[i].sex==0;
	use[i].age==0;
	use[i].phone==0;
	use[i].addr==0;
	i_Size=i-1;
	fwrite(&use[i_Size],sizeof(users),i_Size,fp);   //将删除后的信息存入文件
	fclose(fp);

}

void search()  //主菜单3:查询信息
{
	int select=0,flag=1;
	char name[10];
	char sex[2];
	char age[10];
	char phone[20];
	char addr[20];
	while(flag)
	{
		dis_search_menu();
		printf("请输入选择的查询选项0--5:");
		scanf("%d",&select);
		switch(select)
		{
		case 1:
			printf("请输入查询的姓名:");
			scanf("%s",name);
			search_name(name);
			break;
		case 2:
			printf("请输入查询的性别:");
			scanf("%s",sex);
			search_sex(sex);
			break;
		case 3:
			printf("请输入查询的年龄:");
			scanf("%s",age);
			search_age(age);
			break;
		case 4:
			printf("请输入查询的电话:");
			scanf("%s",phone);
			search_phone(phone);
			break;
		case 5:
			printf("请输入查询的住址:");
			scanf("%s",addr);
			search_addr(addr);
			break;
		case 0:
			printf("退出查询!\n");
			break;
		default:
			printf("输入有误,请重新选择!");
			break;
		}
		if(select==0)  //退出标志置零
		{
			flag=0;
		}
		else
		{
			flag=1;
		}
	}
}

void change()  //主菜单4:修改信息
{
	int i=0;
	char use_name[10];
	FILE *fp;
	if((fp=fopen("c:\\userfile.dat","wb"))==NULL)
	{
		printf("change 函数打开文件c:\\userfile.dat!失败,请按任意键退出\n");
		exit (1);
	}
	return;
	printf("请输入需要修改的用户姓名:");
	scanf("%s",use_name);
	i=search_name(use_name);      //查找需要修改信息的用户
	printf("请按照[性别、年龄、电话、住址]的顺序输入用户的新信息:");
	scanf("%s%d%s%s%s",use[i].sex,&use[i].age,use[i].phone,use[i].addr);
	fwrite(&use[i],sizeof(users),i_Size,fp);    //将修改后的信息存入文件
	fclose(fp);
}


void display()  //主菜单5:显示所有用户信息
{
	int i=0;
	printf("姓名\t性别\t年龄\t电话\t住址\n");
	printf("------------------------------------------------------\n");
	for(i=0;i<i_Size;i++)
	{
		printf("%s\t%s\t%d\t%s\t%s",use[i].name,use[i].sex,use[i].age,use[i].phone,use[i].addr);
	}
	printf("\n");
	printf("通讯录中已记录 %d 条,余下 %d 条空间!\n",i,MAX-i);

}

void empty()//主菜单6:清空所有用户信息
{
	int i=0;
	FILE *fp;
	if((fp=fopen("c:\\userfile.dat","wb"))==NULL)
	{
		printf("change 函数打开文件c:\\userfile.dat!失败,请按任意键退出!\n");
		exit (1);
	}
	return;

	for(i=0;i<i_Size;i++)
	{
		use[i].name==0;
		use[i].sex==0;
		use[i].age==0;
		use[i].phone==0;
		use[i].addr==0;
	}
	if(i==i_Size)
	{
		printf("已清空通讯录!\n");
	}
	fwrite(&use[i_Size],sizeof(users),i_Size,fp);    //将信息存入文件
	fclose(fp); //关闭文件
}

int init_use()//初始化数组
{
	FILE *fp;
	int i=0;
	if((fp=fopen("c:\\userfile.dat","rb"))==NULL)    //以读方式打开文件
	{
		printf("init_use 函数打开文件c:\\userfile.dat!失败,请按任意键退出!\n");
		exit (0);
	}
	while(!feof(fp))
	{
		fread(&use[i],sizeof(users),1,fp);   //将数据读出到 use数组
		i++;
	}
	i_Size=i-1;
	fclose(fp);//关闭文件
	return 1;

}


// Test.c 
#include "Communicate.h"
#include <string.h>

int main()
{
	int iselect=0,flag=1;  //flag为退出标志
	while(flag)
	{
		dis_main_menu();
		printf("请输入所选择的功能选项0--6:");
		scanf("%d",&iselect);
		switch(iselect)
		{
		case 1:
			input_new();             //添加用户信息
			break;
		case 2:
			if(init_use())           //删除指定用户信息
			{
				delete_information();
			}
			break;
		case 3:
			if(init_use())           //查询指定用户信息
			{
			    search();
			}
			break;
		case 4:
			if(init_use())           //修改指定用户信息
			{
			    change();
			}
			break;
		case 5:
			if(init_use())           //显示所有用户信息
			{
			    display();
			}
			break;
		case 6:
			if(init_use())           //清空所有用户信息
			{
			    empty();
			}
			break;
		case 0:
			printf("退出系统!\n");
			break;
		default:
			printf("输入错误,请重新选择!\n");
			break;
		}
		if(iselect==0)  //退出标志置零
		{
			flag=0;
		}
		else
		{
			flag=1;
		}
	}
	return 0;
}


你可能感兴趣的:(c,通讯录)