c语言 电子通讯录

/*version v3.6
*/
#include <iostream> 
#include <conio.h> 
#include <windows.h>   
#include<time.h>
#define LIGHT SetConsoleTextAttribute(color1,\
				BACKGROUND_RED|\
				BACKGROUND_GREEN|\
				BACKGROUND_BLUE|\
				BACKGROUND_INTENSITY)
#define BLW SetConsoleTextAttribute(color1,\
				BACKGROUND_RED|\
				BACKGROUND_GREEN|\
				BACKGROUND_BLUE)
#define FRED SetConsoleTextAttribute(color1,\
				BACKGROUND_RED|\
				BACKGROUND_GREEN|\
				BACKGROUND_BLUE|\
				BACKGROUND_INTENSITY|\
				FOREGROUND_RED|\
				FOREGROUND_INTENSITY)
#define FBLUE SetConsoleTextAttribute(color1,\
				BACKGROUND_RED|\
				BACKGROUND_GREEN|\
				BACKGROUND_BLUE|\
				BACKGROUND_INTENSITY|\
				FOREGROUND_BLUE|\
				FOREGROUND_INTENSITY)
int editBody(char temp [],int flag);
void addBody();
int deleteBody(char temp[],int flag);
int serchBody(char temp[]);
FILE *file;
struct stu
{		
	struct tm tblock;
	char group[40];
	char name[20];
	char email[20];
	char adress[60];
	char telephone[13];
	stu *next;
}*fb,*f,*head,*head2,*p,*u;             //head用于时间排序时头指针  
int haveNum=0;                    
struct fenzu
{
	char gname[40];
	struct fenzu *next;
}*ghead,*y;

void clean()                   //清空屏幕,并实现动画效果
{
	int i;
	for (i=0;i<500;i++)
	{
		printf("\n");		
	}
	system("cls");
}

int serchBody(char temp[])        //查找联系人
{
s:
	clean();
	HANDLE color1;     
			color1 = GetStdHandle(STD_OUTPUT_HANDLE);  
	printf("\n\n");
	f=head->next;
	for (;f!=NULL;)              //对链表进行检索
	{
		if (strcmp(f->name,temp)==0)
		{		
			LIGHT;
			printf("  序号\t姓名\t   邮箱\t  \t\t\t地址\t\t  电话      \n");
			printf("  ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");		
			printf("\n  ");
	     	BLW;
			printf("   %s\t%s\t%s\t%s\n",f->name,f->email,f->adress,f->telephone);	
	    	LIGHT;
			printf("\n                                                 添加时间:%d年%d月",f->tblock.tm_year+1900,f->tblock.tm_mon+1);
			printf("\n");
			printf("  ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");
			FBLUE;
			printf("                                                任意键键返回,Esc键退出\n");
			LIGHT;
			printf(" 输入EDIT:修改此联系人\n 输入DELETE:删除此联系人\n ");
			if(strcmp(f->group,"0")==0)  printf("输入Tgroup:移动至分组group\n");
			else printf("输入OF:移出分组\n");
			char key[20],*key1;
			scanf("%s",key);
			if(strcmp(key,"EDIT")==0)
			{
				editBody(f->name,1);
				goto s;
			}
			else if(strcmp(key,"DELETE")==0)
			{
				deleteBody(f->name,1);
				getch();
				goto s;
			}
			else if(key[0]=='T'&&strcmp(key,"T")!=0)
			{
				key1=&key[1];
				y=ghead->next;
				while(y!=NULL)
				{
					if(strcmp(key1,y->gname)==0)
					{
						strcpy(f->group,key1);
						u=head2->next;
						while(strcmp(u->name,f->name)!=0)
						{u=u->next;}
                         strcpy(u->group,key1);
					    goto s;
					}
					y=y->next;
				}
				FRED;
			  printf("分组未创建!\n");
				  getch();
				  goto s;
			}
			else if(strcmp(key,"OF")==0)
			{
				strcpy(f->group,"0");
						u=head2->next;
						while(strcmp(u->name,f->name)!=0)
						{u=u->next;}
                         strcpy(u->group,"0");
					    goto s;
			}
			else 
			return 0;
		}
		f=f->next;	  
	}  
	printf("  ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");
    FRED;  
	printf("  通讯录中没有此人,任意键返回");
	getch();
	return 0;
}

struct stu sh(int flag)
{
	struct stu oo;
	char qc;
	HANDLE color1;   
			color1 = GetStdHandle(STD_OUTPUT_HANDLE);
	if(flag==1)	goto inputemail;		
inputname:				
				LIGHT;
				printf("  ");
		    	BLW;
				printf("姓名");
				LIGHT;
				printf(":");
				scanf("%s",oo.name);				
				p=head->next;
				while(p!=NULL)
				{
					if(strcmp(p->name,oo.name)==0)
					{
						printf("  联系人已存在!是否修改?(y:修改,任意键返回)\n");
						qc=getch();
						if(qc=='y'||qc=='Y')
						{
							editBody(oo.name,1);
							oo.tblock.tm_min=30;
							return oo;
						}
						else
						{
							goto inputname;
						}
					}
					p=p->next;
				}				
				
inputemail:                                   //用于输入错误时的返回
				LIGHT;
				printf("\n  ");
				BLW;
				printf("邮箱地址");
				LIGHT;
				printf(":");
				scanf("%s",oo.email);
				if(strlen(oo.email)!=0)
				{
					if(strchr( oo.email,'@' )==NULL)
					{
						FRED; 
						printf("\n\t请输入正确的邮箱地址!(例如:[email protected])\n");
						goto inputemail;                                     //返回到输入邮箱
					}					
				}				
				printf("\n  ");
				BLW;
				printf("地址");
				LIGHT;
				printf(":");
				scanf("%s",oo.adress);				
				printf("\n  ");
				BLW;
				printf("电话");
				LIGHT;
				printf(":");
				scanf("%s",oo.telephone);				
				return oo;				
}

int editBody(char temp [], int flag)        //编辑联系人
{
	clean();
	HANDLE color1;     
			color1 = GetStdHandle(STD_OUTPUT_HANDLE);
	printf("\n\n");
	f=head->next;
	p=head2->next;
	char a;
	for (;f!=NULL;)          //对链表进行检索
	{
		if (strcmp(f->name,temp)==0)
		{		  
			if (flag==1)  goto e;
			printf("  找到联系人 ");
			FRED;
			printf("%s",temp);
			LIGHT;
			printf(",确认修改请按y/Y\n\n");
			a=getch();
			if (a=='y'||a=='Y')
			{	
e:
				for (;p!=NULL;)
				{
					if (strcmp(p->name,temp)==0)
					{
						break;
					}
					else p=p->next;
				}		
				struct stu l;
				fb=p;
				l=sh(1);
				p=fb;				
				strcpy(p->email,l.email);
				strcpy(f->email,l.email);
				strcpy(p->adress,l.adress);
				strcpy(f->adress,l.adress);
				strcpy(p->telephone,l.telephone);
				strcpy(f->telephone,l.telephone);	
				
			}
			return 0;
		}		
		f=f->next;	  
	}
	printf("  ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");
	FRED;
	printf("  未找到此人,请重新输入");
	getch();
	return 0;	
}

int showBody(char bit[],int kb)         //显示所有联系人
{		
	char c;
	HANDLE color1;     
	color1 = GetStdHandle(STD_OUTPUT_HANDLE);  
	char *name1,name2[20];

shijian:
	int i,up=0,op=9999;	
	clean();
	printf("\n\n");
	LIGHT;
	printf("  分组:\n");	               
	  y=ghead->next;
	  while(y!=NULL)
	  {
		  LIGHT;
		  printf("       ");
		  if(strcmp(bit,y->gname)==0) BLW;
		  printf("%s\n",y->gname);
		  y=y->next;
	  }
	  LIGHT;
	  printf("  ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");
	  printf("\n\n");
	f=head;
	
	printf("  序号\t姓名\t   邮箱\t  \t\t地址\t\t  电话      \n");
	printf("  ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");
	for (i=0;i<haveNum;i++)
	{		
		f=f->next;
		if(strcmp(f->group,bit)==0||kb==0)
		{
		LIGHT;
		printf("\n  ");
		BLW;
		if(f->tblock.tm_year!=up||f->tblock.tm_mon!=op)
		{
			printf("%d/%d\n",1900+f->tblock.tm_year,f->tblock.tm_mon+1);
			up=f->tblock.tm_year;
			op=f->tblock.tm_mon;
		}
		LIGHT;
		printf("  ");
		BLW;
		printf("\t%s\t%s  \t%s\t%s\n",f->name,f->email,f->adress,f->telephone);
		}
	}
	LIGHT;
	printf("\n  ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n\n");
	FBLUE;
	printf("                                                按 / 键切换至姓名排列\n");
	LIGHT;
	printf("请输入以下指令进行操作:\n Dname:删除联系人name\t\t");
	if(kb==0) printf(" bgroup:创建分组名group");
	
	printf("\n Ename:修改联系人name\t\t");
	if(kb==0) printf(" dgroup:删除group分组 ");
	printf("\n Sname:查找联系人name\t\t");	 
	if(kb==0) printf(" ogroup:打开分组group");
	printf("\n ADD:添加新联系人\t\t");
	if(kb==1) printf(" close:关闭分组\n");
	if(kb==0) printf(" XIT:保存并退出\n");
	c=getch();
	if(c=='/') goto xingming;
	scanf("%s",name2);
        if(name2[0]=='D'&&strcmp(name2,"D")!=0)
		{
			name1=&name2[1];
			deleteBody(name1,0);
			getch();
			clean();
		}
		else if(name2[0]=='E'&&strcmp(name2,"E")!=0)
		{
			name1=&name2[1];
			editBody(name1,0);
			clean();
		}
		else if(strcmp(name2,"ADD")==0)
		{
			clean();
		    printf("\n\n");	
	     	addBody();
	    	clean();
		}
		else if(name2[0]=='S'&&strcmp(name2,"S")!=0)
		{
			name1=&name2[1];
			serchBody(name1);
			clean();
		}
		else if(strcmp(name2,"XIT")==0)
		{
			return 0;
		}
		else if(kb==0)
		{
			if(name2[0]=='b'&&strcmp(name2,"b")!=0)
			{
				name1=&name2[1];
				y=ghead;
				while(y->next!=NULL) y=y->next;
				y->next=(struct fenzu*)malloc(sizeof(struct fenzu));
				y=y->next;
				strcpy(y->gname,name1);
				y->next=NULL;
			}
			else if(name2[0]=='d'&&strcmp(name2,"d")!=0)
			{
				name1=&name2[1];
				struct fenzu *t;
				t=ghead;
				y=ghead->next;
				while(y!=NULL) 
				{
					if(strcmp(y->gname,name1)==0)
					{
						printf("sss");
						t->next=y->next;
						f=head->next;
						while(f!=NULL)
						{
							if(strcmp(f->group,name1)==0) strcpy(f->group,"0");
							f=f->next;
						}
						f=head2->next;
						while(f!=NULL)
						{
							if(strcmp(f->group,name1)==0) strcpy(f->group,"0");
							f=f->next;
						}
						free(y);
						break;
					}
					else 
					{
						t=t->next;
						y=y->next;
					}
				}

			}
			else if(name2[0]=='o'&&strcmp(name2,"o")!=0)
			{
				name1=&name2[1];
				showBody(name1,1);
			}
		}
		else if(kb==1)
		{
			if(strcmp(name2,"close")==0)
			{
				return 0;
			}
		}
goto shijian;

xingming:
	f=head2;
	clean();
	LIGHT;
	printf("\n\n");
	printf("  分组:\n");	               
	  y=ghead->next;
	  while(y!=NULL)
	  {
		  LIGHT;
		  printf("       ");
		  if(strcmp(bit,y->gname)==0) BLW;
		  printf("%s\n",y->gname);
		  y=y->next;
	  }
	  LIGHT;
	  printf("  ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");
	  printf("\n\n");	  
	printf("  序号\t姓名\t   邮箱\t  \t\t地址\t\t  电话      \n");
	printf("  ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");
	char cdc='0';
	for (i=0;i<haveNum;i++)
	{		
		f=f->next;
		if(strcmp(f->group,bit)==0||kb==0)
		{
		LIGHT;
		printf("\n  ");
		BLW;		
		if(strcmp(f->name,"啊")>=0&&strcmp(f->name,"芭")<0&&cdc!='a')
		{
			printf("  A \n");
			cdc='a';
		}		
		else if(strcmp(f->name,"芭")>=0&&strcmp(f->name,"擦")<0&&cdc!='b')
		{
			printf("  B \n");
			cdc='b';
		}
		else if(strcmp(f->name,"擦")>=0&&strcmp(f->name,"搭")<0&&cdc!='c')
		{
			printf("  C \n");
			cdc='c';
		}
		else if(strcmp(f->name,"搭")>=0&&strcmp(f->name,"蛾")<0&&cdc!='d')
		{
			printf("  D \n");
			cdc='d';
		}
		else if(strcmp(f->name,"蛾")>=0&&strcmp(f->name,"发")<0&&cdc!='e')
		{
			printf("  E \n");
			cdc='e';
		}
		else if(strcmp(f->name,"发")>=0&&strcmp(f->name,"噶")<0&&cdc!='f')
		{
			printf("  F \n");
			cdc='f';
		}
		else if(strcmp(f->name,"噶")>=0&&strcmp(f->name,"哈")<0&&cdc!='g') 
		{
			printf("  G \n");
			cdc='g';
		}
		else if(strcmp(f->name,"哈")>=0&&strcmp(f->name,"击")<0&&cdc!='h')
		{
			printf("  H \n");
			cdc='h';
		}
		else if(strcmp(f->name,"击")>=0&&strcmp(f->name,"喀")<0&&cdc!='j')
		{
			printf("  J \n");
			cdc='j';
		}
		else if(strcmp(f->name,"喀")>=0&&strcmp(f->name,"垃")<0&&cdc!='k')
		{
			printf("  K \n");
			cdc='k';
		}
		else if(strcmp(f->name,"垃")>=0&&strcmp(f->name,"妈")<0&&cdc!='l')
		{
			printf("  L \n");
			cdc='l';
		}
		else if(strcmp(f->name,"妈")>=0&&strcmp(f->name,"拿")<0&&cdc!='m')
		{
			printf("  M \n");
			cdc='m';
		}
		else if(strcmp(f->name,"拿")>=0&&strcmp(f->name,"哦")<0&&cdc!='n')
		{
			printf("  N \n");
			cdc='n';
		}
		else if(strcmp(f->name,"哦")>=0&&strcmp(f->name,"啪")<0&&cdc!='o')
		{
			printf("  O \n");
			cdc='o';
		}
		else if(strcmp(f->name,"啪")>=0&&strcmp(f->name,"期")<0&&cdc!='p')
		{
			printf("  P \n");
			cdc='p';
		}
		else if(strcmp(f->name,"期")>=0&&strcmp(f->name,"然")<0&&cdc!='q')
		{
			printf("  Q \n");
			cdc='q';
		}
		else if(strcmp(f->name,"然")>=0&&strcmp(f->name,"撒")<0&&cdc!='r')
		{
			printf("  R \n");
			cdc='r';
		}
		else if(strcmp(f->name,"撒")>=0&&strcmp(f->name,"塌")<0&&cdc!='s')
		{
			printf("  S \n");
			cdc='s';
		}
		else if(strcmp(f->name,"塌")>=0&&strcmp(f->name,"挖")<0&&cdc!='t')
		{
			printf("  T \n");
			cdc='t';
		}
		else if(strcmp(f->name,"挖")>=0&&strcmp(f->name,"昔")<0&&cdc!='w')
		{
			printf("  W \n");
			cdc='w';
		}
		else if(strcmp(f->name,"昔")>=0&&strcmp(f->name,"压")<0&&cdc!='x')
		{
			printf("  X \n");
			cdc='x';
		}
		else if(strcmp(f->name,"压")>=0&&strcmp(f->name,"匝")<0&&cdc!='y')
		{
			printf("  Y \n");
			cdc='y';
		}
		else if(strcmp(f->name,"匝")>=0&&strcmp(f->name,"座")<=0&&cdc!='z')
		{
			printf("  Z \n");
			cdc='z';
		}
		else if(cdc=='0')
		{
			printf("  # \n");
			cdc='1';
		}		
		LIGHT;
		printf("  ");
		BLW;
		printf("\t%s\t%s  \t%s\t%s\n",f->name,f->email,f->adress,f->telephone);	
		}
	}
	LIGHT;
	printf("\n  ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n\n");
	FBLUE;
	printf("                                                按 / 键切换至时间排列\n");
		LIGHT;
	printf("请输入以下指令进行操作:\n Dname:删除联系人name\t\t");
	if(kb==0) printf(" bgroup:创建分组名group");
	
	printf("\n Ename:修改联系人name\t\t");
	if(kb==0) printf(" dgroup:删除group分组 ");
	printf("\n Sname:查找联系人name\t\t");
	if(kb==0) printf(" ogroup:打开分组group");
	printf("\n ADD:添加新联系人\t\t");
	if(kb==1) printf(" close:关闭分组\n"); 
	if(kb==0) printf(" XIT:保存并退出\n");
	c=getch();
	if(c=='/') goto shijian;
	scanf("%s",name2);
        if(name2[0]=='D'&&strcmp(name2,"D")!=0)
		{
			name1=&name2[1];
			deleteBody(name1,0);
			getch();
			clean();
		}
		else if(name2[0]=='E'&&strcmp(name2,"E")!=0)
		{
			name1=&name2[1];
			editBody(name1,0);
			clean();
		}
		else if(strcmp(name2,"ADD")==0)
		{
			clean();
		    printf("\n\n");	
	     	addBody();
	    	clean();
		}
		else if(name2[0]=='S'&&strcmp(name2,"S")!=0)
		{
			name1=&name2[1];
			serchBody(name1);
			clean();
		}
		else if(strcmp(name2,"XIT")==0)
		{
			return 0;
		}
		else if(kb==0)
		{
			if(name2[0]=='b'&&strcmp(name2,"b")!=0)
			{
				name1=&name2[1];
				y=ghead;
				while(y->next!=NULL) y=y->next;
				y->next=(struct fenzu*)malloc(sizeof(struct fenzu));
				y=y->next;
				strcpy(y->gname,name1);
				y->next=NULL;
			}
			else if(name2[0]=='d'&&strcmp(name2,"d")!=0)
			{
				name1=&name2[1];
				struct fenzu *t;
				t=ghead;
				y=ghead->next;
				while(y!=NULL) 
				{
					if(strcmp(y->gname,name1)==0)
					{
						printf("sss");
						t->next=y->next;
						f=head->next;
						while(f!=NULL)
						{
							if(strcmp(f->group,name1)==0) strcpy(f->group,"0");
							f=f->next;
						}
						f=head2->next;
						while(f!=NULL)
						{
							if(strcmp(f->group,name1)==0) strcpy(f->group,"0");
							f=f->next;
						}
						free(y);
						break;
					}
					else 
					{
						t=t->next;
						y=y->next;
					}
				}

			}
			else if(name2[0]=='o'&&strcmp(name2,"o")!=0)
			{
				name1=&name2[1];
				showBody(name1,1);
			}
		}
		else if(kb==1)
		{
			if(strcmp(name2,"close")==0)
			{
				return 0;
			}
		}
	goto xingming;
}

int deleteBody(char temp[],int flag)            //删除联系人
{
	clean();
	HANDLE color1;     
			color1 = GetStdHandle(STD_OUTPUT_HANDLE);
	f=head->next;
	fb=head;
	p=head2->next;
	u=head2;
	char a;
	for (;f!=NULL;)    //判断链表中是否有内容
	{		
		if (strcmp(f->name,temp)==0)
		{		  
			if(flag==1) goto de;
			printf("\n");
			FRED;      
			printf("  找到 %s,确定删除请按y/Y,任意键返回\n",temp);
			a=getch();
			if (a=='y'||a=='Y')
			{		
de:
				fb->next=f->next;			
				free(f);
				system("color F0");
				clean();
				printf("\n\n");
				printf(" ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");
				printf("  \n   删除成功!\n\n  ");
				FBLUE; 
				printf("任意键返回,Esc键退出");	
				for (;p!=NULL;)                     //判断链表中是否有内容
				{		
					if (strcmp(p->name,temp)==0)
					{			
						u->next=p->next;			
						free(p);
						goto fanhui;						
					}
					else 
					{
						u=u->next;
						p=p->next;		  
					}
				}

fanhui:
				haveNum--;
				return 0;
			}
			else return 0;
		}
		else 
		{
			fb=fb->next;
			f=f->next;		  
		}	 	
	}
	printf("\n");
	FRED;  
	printf("  通讯录中没有此人,任意键返回\n");
	return 0;	
}

void addBody()                               // 添加联系人
{	
	
	printf(" ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");	
	f=(struct stu*)malloc(sizeof(struct stu));	
	u=(struct stu*)malloc(sizeof(struct stu));	
	struct stu l;
	l=sh(0);		
	if(l.tblock.tm_min==30) return;
	strcpy(u->name,l.name);
	strcpy(f->name,l.name);
	strcpy(u->email,l.email);
	strcpy(f->email,l.email);
	strcpy(u->adress,l.adress);
	strcpy(f->adress,l.adress);
	strcpy(u->telephone,l.telephone);
	strcpy(f->telephone,l.telephone);
	strcpy(f->group,"0");
	time_t timer;
	timer=time(NULL);
	struct tm *dddd;
	dddd=localtime(&timer);
	f->tblock=*dddd;
	u->tblock=*dddd;
	haveNum++;
	p=head;
	fb=head->next;	
	if(fb!=NULL)                     // 找到第一次大于输入的元素时间的位置
	{
		while(fb!=NULL&&fb->tblock.tm_year<f->tblock.tm_year)
		{
			p=p->next;		
			fb=fb->next;
		}
		while(fb!=NULL&&fb->tblock.tm_mon<f->tblock.tm_mon)
		{
			p=p->next;		
			fb=fb->next;
		}
	}
	p->next=f;
	f->next=fb;	
	fb=head2->next;
	f=head2;
	if(fb!=NULL)                       // 找到第一次大于输入的元素的位置
	{
		while(fb!=NULL&&strcmp(fb->name,u->name)<0)
		{
			f=f->next;		
			fb=fb->next;
		}
	}	
	f->next=u;
	u->next=fb;
	printf("\n  添加成功!任意键返回");
	getch();	
}

int main()                           //程序入口
{	
	
	static char *pl,p2[50];
	pl=p2;
	head=(struct stu*)malloc(sizeof(struct stu));
	head->next=NULL;
	head2=(struct stu*)malloc(sizeof(struct stu));
	head2->next=NULL;
	ghead=(struct fenzu*)malloc(sizeof(struct fenzu));
	ghead->next=NULL;
	if((file=fopen("e:\\records.txt","rt"))!=NULL)        //对head读取磁盘中的数据
	{
		f=head; 
		while(!feof(file))
		{ 
			p=(struct stu *) malloc(sizeof(struct stu)); 			
			f->next=p; 					
			fscanf(file," %s %d %d %s %s %s %s ",p->group,&p->tblock.tm_year,&p->tblock.tm_mon,p->name,p->email,p->adress,p->telephone);			
			haveNum++;
			f=p; 
		} 
		p->next=NULL; 
		fclose(file);
	} 	
	if((file=fopen("e:\\records2.txt","rt"))!=NULL)        //对head2读取磁盘中的数据
	{
		f=head2; 
		while(!feof(file))
		{ 
			p=(struct stu *) malloc(sizeof(struct stu)); 			
			f->next=p; 				
			fscanf(file," %s %d %d %s %s %s %s ",p->group,&p->tblock.tm_year,&p->tblock.tm_mon,p->name,p->email,p->adress,p->telephone);		
			f=p; 
		} 
		p->next=NULL; 
		fclose(file);
	}   	
	system("color F0");
    showBody("dfdf",0);  
		p=head->next;
		file=fopen("e:\\records.txt","w");// 将数据保存
		while(p!=NULL) 
		{ 			
			fprintf(file," %s %d %d %s %s %s %s ",p->group,p->tblock.tm_year,p->tblock.tm_mon,p->name,p->email,p->adress,p->telephone);			
			p=p->next; 
		} 
		fclose(file);   //关闭文件
		p=head2->next;
		file=fopen("e:\\records2.txt","w");// 将数据保存
		while(p!=NULL) 
		{ 			
			fprintf(file," %s %d %d %s %s %s %s ",p->group,p->tblock.tm_year,p->tblock.tm_mon,p->name,p->email,p->adress,p->telephone);			
			p=p->next; 
		} 
		fclose(file);
		y=ghead->next;
		file=fopen("e:\\group.txt","w");
		while(y!=NULL)
		{
			fprintf(file," %s ",y->gname);
			y=y->next;
		}
		fclose(file);
		exit(0);
		return 0;
}

你可能感兴趣的:(数据,C语言,存储,通讯录)