#include<iostream>
#include<cstring>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<algorithm>
using namespace std;
//好友信息 
typedef struct frie{
	int num;
	char name[20];
	char sex[4];
	int year,month,day;
	char phone[3][12];
	char address[20];
	int groupid;
}fre;
fre *fri=new fre[10010];
//分组信息 
typedef struct group{
	int id;
	char name[20];
}gr;
int now,size;
int se[10010];
gr *group=new gr[25];
//读friend.txt中的内容 
void readfriend()
{
	FILE *fp=fopen("friend.txt","r");
	if(fp==NULL){
		printf("\t\t\t***********fail to open friend.txt***********\n");
	}
	int i;
	int n;
	now=0;
	for(i=0;!feof(fp);i++){
		if(fscanf(fp,"%d",&n)==EOF){
			break;
		}
		fri[n].num=n; 
		if(now<n)
		now=n;
	//	fscanf(fp,"%s%s %d %d %d %s %s %s %d\n",fri[n].name,,&fri[n].year,,,,fri[n].phone[1],fri[n].phone[2],fri[n].address,&fri[n].groupid);
		fscanf(fp,"%s",fri[n].name);
		fscanf(fp,"%s",fri[n].sex);
		fscanf(fp,"%d",&fri[n].year);
		fscanf(fp,"%d",&fri[n].month);
		fscanf(fp,"%d",&fri[n].day);
		fscanf(fp,"%s",fri[n].phone[0]);
		fscanf(fp,"%s",fri[n].phone[1]);
		fscanf(fp,"%s",fri[n].phone[2]);
		fscanf(fp,"%s",fri[n].address);
		fscanf(fp,"%d",&fri[n].groupid);
	}
	size=i;
	now=now+1;
	fclose(fp);  
	printf("\t\t\t************read friend.txt success!**************\n");
}
void readgroup()
{
	FILE *fp=fopen("group.txt","r");
	if(fp==NULL){
		printf("\t\t\t***********fail to open group.txt***********\n");
	}
	int i;
	while(!feof(fp)){
		
		if(fscanf(fp,"%d",&i)==EOF){
			break;
		}
		group[i].id=i;
		fscanf(fp,"%s",group[i].name);
	}
	fclose(fp);  
	printf("\t\t\t************read group.txt success!**************\n");
}
void print(fre f)//输出格式 
{
/*	printf("%4d%20s    %4c%5d%6d%5d%12s%12s%12s%20s%4d\n",fri[i].num,fri[i].name,fri[i].sex,fri[i].year,
						fri[i].month,fri[i].day,fri[i].phone[0],fri[i].phone[1],fri[i].phone[2],fri[i].address,
						fri[i].groupid);
*/
	printf("%4d",f.num);
	printf("%24s",f.name);
	if(f.sex[0]!=‘o‘){
		printf("%4s",f.sex);
	}
	else{
		printf("%4s"," ");
	}
	if(f.year==0&&f.month==0&&f.day==0){
		printf("%5s%6s%5s"," "," "," ");
	}
	else{
		printf("%5d%6d%5d",f.year,f.month,f.day);
	}
	for(int i=0;i<3;i++){
		if(f.phone[i][0]!=‘0‘)
		printf("%12s",f.phone[i]);
		else{
			printf("%12s"," ");
		}
	}
	printf("%20s%4d%20s\n",f.address,f.groupid,group[f.groupid].name);
	
}
void print2(gr g){
	printf("%4d%20s\n",g.id,g.name);
}
void begin()
{
	//cout<<"input i for insert,s for select,d for delete,u for update,p for display:"<<endl;
	printf("\t\t\t************i for insert function!************\n");	
	printf("\t\t\t************s for select function!************\n");
	printf("\t\t\t************d for delete function!************\n");
	printf("\t\t\t************u for update function!************\n");
	printf("\t\t\t************p for display function!************\n");
	printf("\t\t\t************e for exit the system!************\n"); 
} 
void insert(fre &f)
{
	printf("\t\t**********insert begin!***********\n");
	f.num=now;
	printf("please input name:\n");
	cin>>f.name;
	printf("please input sex 男,女 and o for no:\n"); //g gor girl,b for boy,o for no
	cin>>f.sex;
	printf("please input birthday as yyyy-mm-dd and 0 0 0 for no:\n");
	scanf("%d-%d-%d",&f.year,&f.month,&f.day);	
	int n;
	for(int i=0;i<3;i++){
		f.phone[i][0]=‘0‘;
	}
	cout<<"how many phone you want to save:"<<endl;
	cin>>n;
	for(int i=0;i<n;i++){
		printf("please input phone:\n");
		scanf("%s",f.phone[i]);
	}
	printf("please input address :\n");
	scanf("%s",f.address);
	printf("please input group id if no this please create:\n");
	cin>>f.groupid;
	if(group[f.groupid].name[0]==‘\0‘){
		cout<<"please create group name:"<<endl;
		group[f.groupid].id=f.groupid;
		scanf("%s",group[f.groupid].name);
		cout<<group[f.groupid].name<<" created!"<<endl;
}
	now++;
	size++;
}
//展示所有内容 
void display()
{
	printf("\t\t\t************display all**************\n");
	if(size>0){
		printf("%4s%20s%4s%5s%6s%5s%12s%12s%12s%20s%4s%20s\n","num","\tname","sex","year","month","day","phone1",
					"phone2","phone3","address","id","groupname");
		for(int i=0;i<now;i++){
			if(fri[i].num!=-1)
				print(fri[i]);
		}
	}
	printf("%10s%20s\n","groupid","groupname");
	for(int i=0;i<25;i++){
		if(group[i].name[0]!=‘\0‘){
			print2(group[i]);
		}
	}			
}
void select()
{
	printf("\t\t\t***********update begin!*************\n");
	int n;
	cout<<"please input how you want to select:"<<endl;
	cout<<"1 for num,2 for name,3 for sex,4 for birthday"<<endl;
	cout<<"5 for phone,6 for address,7 for group id,8 for group name"<<endl;
	cout<<"0 for end selece!"<<endl;
	for(int i=0;i<now;i++){
		se[i]=i;
	}
	int i,s,j;
	s=now;
	while(cin>>n){
		switch(n){
			case 0:
				if(s!=0){
					printf("%4s%20s%4s%5s%6s%5s%12s%12s%12s%20s%4s%20s\n","num","\tname","sex","year","month","day","phone1",
					"phone2","phone3","address","id","groupname");
					for(int i=0;i<s;i++){
						print(fri[se[i]]);
					}
				}
				return;
			case 1:
				int nu;
				cout<<"please input num:"<<endl;
				cin>>nu;
				if(nu<now&&fri[nu].num!=-1){
					printf("%4s%20s%4s%5s%6s%5s%12s%12s%12s%20s%4s%20s\n","num","\tname","sex","year","month","day","phone1",
					"phone2","phone3","address","id","groupname");
					print(fri[nu]);
				}
				else{
					cout<<"there is no that match you!"<<endl;
				}
				return;
			case 2:
				j=0;
				cout<<"please input name:"<<endl;
				char na[20];
				cin>>na;
				for(int i=0;i<s;i++){
					if(strcmp(fri[se[i]].name,na)==0){
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 3:
				j=0;
				cout<<"please input sex:"<<endl;
				char c[4];
				cin>>c;
				for(int i=0;i<s;i++){
					if(strcmp(fri[se[i]].sex,c)==0){
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 4:
				j=0;
				cout<<"please input birthday:"<<endl;
				int y,m,d;
				scanf("%d-%d-%d",&y,&m,&d);
				for(int i=0;i<s;i++){
					if(fri[se[i]].year==y&&fri[se[i]].month==m&&fri[se[i]].day==d){
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 5:
				j=0;
				cout<<"please input phone:"<<endl;
				char p[12];
				cin>>p;
				for(int i=0;i<s;i++){
					for(int k=0;k<3;k++){
						if(strcmp(p,fri[se[i]].phone[k])==0)
						{
							se[j++]=se[i];
							break;
						}
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 6:
				j=0;
				cout<<"please input address:"<<endl;
				char a[20];
				cin>>a;
				for(int i=0;i<s;i++){
					if(strcmp(fri[se[i]].address,a)==0){
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 7:
				j=0;
				cout<<"please input group id:"<<endl;
				int b;
				cin>>b;
				for(int i=0;i<s;i++){
					if(fri[se[i]].groupid==b){
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 8:
				j=0;
				cout<<"please input group name:"<<endl;
				char nm[20];
				cin>>nm;
				int mo;
				mo=-1;
				for(int i=0;i<25;i++){
					if(strcmp(group[i].name,nm)==0)
					{
						mo=i;
						break;
					}
				}
				if(mo==-1){
					cout<<"no this group name!"<<endl;
					return;
				}
				else{
					for(int i=0;i<s;i++){
						if(mo==fri[se[i]].groupid)
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			default:
				cout<<"input error please retry"<<endl;
		}
	}
}
//怎么改变friend 
void modify(fre &f)
{
	int n;
	cout<<"please select which you want to update:"<<endl;
	cout<<"2 for name,3 for sex,4 for birthday"<<endl;
	cout<<"5 for phone,6 for address,7 for group id,8 for group name"<<endl;
	cin>>n;
	switch(n){
			case 2:
				cout<<"please input update name:"<<endl;
				char na[20];
				cin>>na;
				strcpy(f.name,na);
				break;
			case 3:
				cout<<"please input update sex:"<<endl;
				char c[4];
				cin>>c;
				strcpy(f.sex,c);
				break;
			case 4:
				cout<<"please input update birthday:"<<endl;
				int y,m,d;
				scanf("%d-%d-%d",&y,&m,&d);
				f.year=y;
				f.day=d;
				f.month=m;
				break;
			case 5:
				cout<<"please input update phone:"<<endl;
				char p[12];
				cin>>p;
				strcpy(f.phone[0],p);
				break;
			case 6:
				cout<<"please input update address:"<<endl;
				char a[20];
				cin>>a;
				strcpy(f.address,a);
				break;
			case 7:
				cout<<"please input update group id:"<<endl;
				int b;
				cin>>b;
				f.groupid=b;
				break;
			case 8:
				cout<<"please input update group name:"<<endl;
				char nm[20];
				cin>>nm;
				strcpy(group[f.groupid].name,nm);
				break;
			default:
				cout<<"input error please retry"<<endl;
				break;
	}
	
}
void update()
{
	printf("\t\t\t***************update begin!*************\n");
	int n;
	cout<<"please first select which you want to update :"<<endl;
	cout<<"1 for num,2 for name,3 for sex,4 for birthday"<<endl;
	cout<<"5 for phone,6 for address,7 for group id,8 for group name"<<endl;
	cout<<"0 for end selece and delete begin!"<<endl;
	for(int i=0;i<now;i++){
		se[i]=i;
	}
	int i,s,j;
	s=now;
	while(cin>>n){
		switch(n){
			case 0:
				if(s!=0){
					for(int i=0;i<s;i++){
						modify(fri[se[i]]);
					}
				}
				return;
			case 1:
				int nu;
				cout<<"please input num:"<<endl;
				cin>>nu;
				if(nu<now&&fri[nu].num!=-1){
						modify(fri[nu]);
				}
				else{
					cout<<"there is no that match you!"<<endl;
				}
				return;
			case 2:
				j=0;
				cout<<"please input name:"<<endl;
				char na[20];
				cin>>na;
				for(int i=0;i<s;i++){
					if(strcmp(fri[se[i]].name,na)==0){
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 3:
				j=0;
				cout<<"please input sex:"<<endl;
				char c[4];
				cin>>c;
				for(int i=0;i<s;i++){
					if(strcmp(fri[se[i]].sex,c)==0){
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 4:
				j=0;
				cout<<"please input birthday:"<<endl;
				int y,m,d;
				scanf("%d-%d-%d",&y,&m,&d);
				for(int i=0;i<s;i++){
					if(fri[se[i]].year==y&&fri[se[i]].month==m&&fri[se[i]].day==d){
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 5:
				j=0;
				cout<<"please input phone:"<<endl;
				char p[12];
				cin>>p;
				for(int i=0;i<s;i++){
					for(int k=0;k<3;k++){
						if(strcmp(fri[se[i]].phone[k],p)==0)
							se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 6:
				j=0;
				cout<<"please input address:"<<endl;
				char a[20];
				cin>>a;
				for(int i=0;i<s;i++){
					if(strcmp(fri[se[i]].address,a)==0){
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 7:
				j=0;
				cout<<"please input group id:"<<endl;
				int b;
				cin>>b;
				for(int i=0;i<s;i++){
					if(fri[se[i]].groupid==b){
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 8:
				j=0;
				cout<<"please input group name:"<<endl;
				char nm[20];
				cin>>nm;
				int mo;
				mo=-1;
				for(int i=0;i<25;i++){
					if(strcmp(group[i].name,nm)==0)
					{
						mo=i;
						break;
					}
				}
				if(mo==-1){
					cout<<"no this group name!"<<endl;
					return;
				}
				else{
					for(int i=0;i<s;i++){
						if(mo==fri[se[i]].groupid)
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			default:
				cout<<"input error please retry"<<endl;
				break;
		}
	}
}
void dele()
{
	printf("\t\t\t***********delete begin!************\n");
	int n;
	cout<<"please input how you want to delete by:"<<endl;
	cout<<"1 for num,2 for name,3 for sex,4 for birthday"<<endl;
	cout<<"5 for phone,6 for address,7 for group id,8 for group name"<<endl;
	cout<<"0 for end selece and delete begin!"<<endl;
	for(int i=0;i<now;i++){
		se[i]=i;
	}
	int i,s,j;
	s=now;
	while(cin>>n){
		switch(n){
			case 0:
				if(s!=0){
					size-=s;
					printf("%4s%20s%4s%5s%6s%5s%12s%12s%12s%20s%4s%20s\n","num","\tname","sex","year","month","day","phone1",
					"phone2","phone3","address","id","groupname");
					for(int i=0;i<s;i++){
						fri[se[i]].num=-1;
						strcpy(fri[se[i]].name,"\0");
						fri[se[i]].sex[0]=‘o‘;
						fri[se[i]].year=0;
						fri[se[i]].month=0;
						fri[se[i]].day=0;
						for(int j=0;j<3;j++){
							fri[se[i]].phone[j][0]=‘0‘;
						}
						strcmp(fri[se[i]].address,"\0");
						fri[se[i]].groupid=-1;
					}
				}
				return;
			case 1:
				int nu;
				cout<<"please input num:"<<endl;
				cin>>nu;
				if(nu<now&&fri[nu].num!=-1){
						fri[nu].num=-1;
						strcpy(fri[nu].name,"\0");
						fri[nu].sex[0]=‘o‘;
						fri[nu].year=0;
						fri[nu].month=0;
						fri[nu].day=0;
						for(int i=0;i<3;i++){
							fri[se[i]].phone[i][0]=‘0‘;
						}
						strcmp(fri[nu].address,"\0");
						fri[nu].groupid=-1;
						size--;
				}
				else{
					cout<<"there is no that match you!"<<endl;
				}
				return;
			case 2:
				j=0;
				cout<<"please input name:"<<endl;
				char na[20];
				cin>>na;
				for(int i=0;i<s;i++){
					if(strcmp(fri[se[i]].name,na)==0){
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 3:
				j=0;
				cout<<"please input sex:"<<endl;
				char c[4];
				cin>>c;
				for(int i=0;i<s;i++){
					if(strcmp(fri[se[i]].sex,c)==0){
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 4:
				j=0;
				cout<<"please input birthday:"<<endl;
				int y,m,d;
				scanf("%d-%d-%d",&y,&m,&d);
				for(int i=0;i<s;i++){
					if(fri[se[i]].year==y&&fri[se[i]].month==m&&fri[se[i]].day==d){
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 5:
				j=0;
				cout<<"please input phone:"<<endl;
				char p[12];
				cin>>p;
				for(int i=0;i<s;i++){
					for(int k=0;k<3;k++){
						if(strcmp(fri[se[i]].phone[k],p)==0)
							se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 6:
				j=0;
				cout<<"please input address:"<<endl;
				char a[20];
				cin>>a;
				for(int i=0;i<s;i++){
					if(strcmp(fri[se[i]].address,a)==0){
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 7:
				j=0;
				cout<<"please input group id:"<<endl;
				int b;
				cin>>b;
				for(int i=0;i<s;i++){
					if(fri[se[i]].groupid==b){
						se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			case 8:
				j=0;
				cout<<"please input group name:"<<endl;
				char nm[20];
				cin>>nm;
				int mo;
				mo=-1;
				for(int i=0;i<25;i++){
					if(strcmp(group[i].name,nm)==0)
					{
						mo=i;
						break;
					}
				}
				if(mo==-1){
					cout<<"no this group name!"<<endl;
					return;
				}
				else{
					for(int i=0;i<s;i++){
						if(mo==fri[se[i]].groupid)
							se[j++]=se[i];
					}
				}
				s=j;
				if(j==0){
					cout<<"there is no that match you!"<<endl;
				}
				break;
			default:
				cout<<"input error please retry"<<endl;
				break;
		}
	}
}
void save()
{
	FILE *fp=fopen("friend.txt","w");
	if(fp==NULL){
		printf("打开friend.txt不成功!\n");
	}
	for(int i=0;i<now;i++)
	{
		if(fri[i].num!=-1)
		{
			fprintf(fp,"%d %s %s %d %d %d %s %s %s %s %d\n",fri[i].num,fri[i].name,fri[i].sex,fri[i].year,fri[i].month,fri[i].day,fri[i].phone[0],
			fri[i].phone[1],fri[i].phone[2],fri[i].address,fri[i].groupid);
		}
	}
	fclose(fp);
	FILE *f=fopen("group.txt","w");
	if(fp==NULL){
		printf("打开group.txt不成功!\n");
	}
	for(int i=0;i<25;i++){
		if(group[i].name[0]!=‘\0‘){
			fprintf(f,"%d %s\n",group[i].id,group[i].name);
		}
	}
	fclose(f);
	printf("\t\t\t*********谢谢使用*********\n");
}
int main()
{	
	printf("\t\t\t**************system begin!************\n");
	char o;
	int sta=1;
	for(int i=0;i<25;i++)
	{
		group[i].name[0]=‘\0‘;
	}
	readfriend();
	readgroup();
//	freopen("in.txt","r",stdin);
	begin();
	while(cin>>o){	
		switch(o){
			case ‘p‘:
				display();
				break;
			case ‘i‘:
			
				insert(fri[now]);//如果没有该groupid则创建此id的name 
				break;
			case ‘s‘:
				select();
				break;
			case ‘d‘:			
				dele();
				break;
			case ‘u‘:
				update();
				break;
			case ‘e‘:
				save();
				return 0;
			default:
				cout<<"input error please try again:"<<endl;
				break;
		}
		begin();
		}
	return 0;
}
原文:http://www.cnblogs.com/tannian/p/4312127.html