通讯录

实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址


提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
<pre name="code" class="cpp">#include <stdio.h>
#include <iomanip>
#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;
#define	MAXSIZE 15		//输入姓名、性别、电话、地址时,最多只能输入15个字符,否则会影响版面
#define MAXNUM 10

struct info
{
	char name[MAXSIZE];
	char sex[MAXSIZE];
	char age[MAXSIZE];//int age;
	char tel[MAXSIZE];
	char address[MAXSIZE];
	bool bo;
}a[MAXNUM];

void addinfo(struct info a[])
{
	int i=0;
	while(i<MAXNUM)
	{
		if(!a[i].bo)
		{
			//FILE *pfile=fopen("Data.txt","a+");
			printf("请输入姓名:");
			cin>>a[i].name;
			printf("\n");
			printf("请输入性别:");
			cin>>a[i].sex;
			printf("\n");
			printf("请输入年龄:");
			cin>>a[i].age;
			printf("\n");
			printf("请输入联系电话:");
			cin>>a[i].tel;
			printf("\n");
			printf("请输入地址:");
			cin>>a[i].address;
			printf("\n");
			a[i].bo=true;
			cout<<"添加成功!";
			break;
		}
		i++;
	}
}

void del(struct info a[])
{
	char name[MAXSIZE];
	printf("请输入要删除的联系人姓名:");
	scanf("%s",&name);
	int i=0;
	while(i<MAXNUM)
	{
		if(strcmp(name,a[i].name)==0)
		{
			a[i].bo=false;
			cout<<"删除成功!";
		}
		i++;
	}
}

void find(struct info a[])
{
	char name[MAXSIZE];
	printf("请输入要查找的联系人姓名:");
	scanf("%s",&name);
	int i=0;
	cout<<setiosflags(ios_base::left)<<setw(10)<<"姓名:\t"<<setw(10)<<"性别:\t"<<setw(10)<<"年龄:\t"<<setw(20)<<"电话:\t"<<setw(25)<<"地址:"<<endl;
	while(i<MAXNUM)
	{
		if(strcmp(name,a[i].name)==0)
		{
			cout<<setiosflags(ios_base::left)<<setw(10)<<a[i].name<<setw(10)<<a[i].sex<<setw(10)<<a[i].age<<setw(20)<<
				a[i].tel<<setw(25)<<a[i].address<<endl;
		}
		i++;
	}
}

void change(struct info a[])
{
	char name[MAXSIZE];
	printf("请输入要修改的联系人姓名:");
	scanf("%s",&name);
	int i=0;
	while(i<MAXNUM)
	{
		if(strcmp(name,a[i].name)==0)
		{
			printf("请输入姓名:");
			cin>>a[i].name;
			printf("\n");
			printf("请输入性别:");
			cin>>a[i].sex;
			printf("\n");
			printf("请输入年龄:");
			cin>>a[i].age;
			printf("\n");
			printf("请输入联系电话:");
			cin>>a[i].tel;
			printf("\n");
			printf("请输入地址:");
			cin>>a[i].address;
			printf("\n");
			cout<<"添加成功!";
			break;
		}
		i++;
	}
}

void showall(struct info a[])
{
	int i=0;
	cout<<setiosflags(ios_base::left)<<setw(10)<<"姓名:"<<setw(10)<<"性别:"<<setw(10)<<"年龄:"<<setw(20)<<"电话:"<<setw(25)<<"地址:"<<endl;
	while(i<MAXNUM)
	{
		if(a[i].bo)
		{
			cout<<setiosflags(ios_base::left)<<setw(10)<<a[i].name<<setw(10)<<a[i].sex<<setw(10)<<a[i].age
				<<setw(20)<<a[i].tel<<setw(25)<<a[i].address<<endl;
		}
		i++;
	}
}

void cleanall(struct info a[])
{
	int i=0;
	while(i<MAXNUM)
	{
		if(a[i].bo)
		{
			a[i].bo=false;
			
		}
		i++;
	}
	cout<<"清空完成!";
}

void interface()
{
	printf("\t\t\t   欢迎使用本通讯录系统\n");
	printf("\t\t\t***************************\n");
	printf("\t\t\t*  1、添加联系人信息      *\n");
	printf("\t\t\t*  2、删除指定联系人信息  *\n");
	printf("\t\t\t*  3、修改指定联系人信息  *\n");
	printf("\t\t\t*  4、显示所有联系人信息  *\n");
	printf("\t\t\t*  5、清空所有联系人      *\n");
	printf("\t\t\t*  6、退出                *\n");
	printf("\t\t\t***************************\n");
	printf("\t\t请选择:");
}


void ReadinMem()
{
	FILE *pfile;
	if((pfile=fopen("Data.txt","r"))==NULL)
	{
		//free (pfile);
		//fclose(pfile);
		return;
	}
	//pfile=fopen("Data.txt","r");			//上面if语句已经打开文件,不必重复打开
	for (int i=0;i<MAXNUM;i++)
	{
		if (EOF!=(fscanf(pfile,"%s\t%s\t%s\t%s\t%s\t",&a[i].name,&a[i].sex,&a[i].age,&a[i].tel,&a[i].address)))
		{
			a[i].bo=true;
		}
		
		
	}
	fclose(pfile);
}

void save()
{
	FILE *pfile;
	pfile=fopen("Data.txt","w");
	for (int i=0;i<MAXNUM;i++)
	{
		if (a[i].bo&&(EOF!=(fprintf(pfile,"%10s%10s%10s%20s%25s",a[i].name,a[i].sex,a[i].age,a[i].tel,a[i].address))))
		{
			fprintf(pfile,"\n");
		}
		
		
	}
	fclose(pfile);
}
 
int main()
{
	ReadinMem();
	while(true)
	{
		int x=0;
		
		interface();
		cin>>x;
		switch(x)
		{
			case 1:addinfo(a);break;
			case 2:del(a);break;
			case 3:change(a);break;
			case 4:showall(a);break;
			case 5:cleanall(a);break;
			case 6:save();goto lable;break;
			default:printf("输入错误!");break;
		}
		system("pause");
		system("cls");
	}
lable:
	return 0;
}	



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值