⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tongxunlu.cpp

📁 用vc编的通讯录,可以删除,插入,导入,导出.
💻 CPP
字号:
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<dos.h>
#include<string.h>

struct Tong
{
	char name[20];
	long telnumber;
	char email[20];
	char relation[20];
	Tong* next;
};
Tong* head;
int n;

/*输入新的纪录*/
void input()
{
	Tong *in, *in_end, *i;
	char ch='y';
	char e[20];
	int q=0;
	in=in_end=i=new Tong;
	head=in;
    n=0;
	while(ch=='y'||ch=='Y')
	{
		if(head->next==NULL)
			head->next=in;
		else	
			in_end->next=in;
	
        in_end=in;

		in=new Tong;

	    printf("\n请输入以下信息。\n\n");
    	printf("姓名:");
		scanf("%s",&in_end->name);

		printf("电话:");
		scanf("%d",&in_end->telnumber);



		printf( "Email:" );
n2:		scanf("%s",&in_end->email);
		
n1:	     strcpy (e,in_end->email);
		if(e[0]=='_')          // email以不能是下划线'_',斜杠'\'或'/',点号'.'开头
		{
			printf("\n Email以不能以_开头,请重新输入:");
		    scanf("%s",&in_end->email);
			goto n1;
		}
		else if (e[0]=='/')
		{
			printf("\n Email以不能以/开头,请重新输入:");
		    scanf("%s",&in_end->email);
			goto n1;
		}
			else if (e[0]=='.')
			{
				printf("\n Email以不能以.开头,请重新输入:");
				 scanf("%s",&in_end->email);
				goto n1;
			}


        for(int j=0;j<20;j++)
		{
			if(e[j]=='@')
			{
				q=1;
				break;
			}
	   }

		if(q==1)
			goto n3;
		else if(q==0)
		{
			printf("\nEmail无@,请重新输入!\n");
			goto n2;
		}
		
n3:	
		printf( "关系(Relative, Friend, Workmate或Classmate):") ;
		scanf("%s",&in_end->relation);

	
		getchar();

		in_end->next=in;
		in_end=in_end->next;
		in_end->next=NULL;
		printf("是否还要输入:(y/n)");
		scanf("%c", &ch);
		n++;
		i=head;
	}
	printf("输入通讯记录%d个!\n",n);
    return;
}

/*显示所有记录*/
void xianshi(Tong* x_head)
{
	Tong* x_end;
	x_end=x_head;
	printf("****************************************\n");
    printf("*姓名     电话       Email       关系  *\n");
	printf("****************************************\n");
	printf("%s\t%d\t%s\t%s\t",x_end->name,x_end->telnumber,x_end->email,x_end->relation);
	printf("\r\n");
	while(1)
	{


		x_end=x_end->next;
		if (x_end==NULL)
			break;
		else if (x_end->telnumber<0)
			break;
    	printf("%s\t%d\t%s\t%s\t",x_end->name,x_end->telnumber,x_end->email,x_end->relation);
	    printf("\r\n");
	
	}
	cout<<"请按回车继续!"<<endl;
	getchar();
    getchar();
	return;

}

/*从文件读入记录*/
Tong *loadfile(Tong *head)
{
	Tong* l_end,*l,*pf,*pb;
	FILE *fp;
	int m=0;
	n=0;
	fp=fopen("Phonebook.txt","r+");
	printf("******************************\n");
    printf("*姓名 电话    Email    关系  *\n");
	printf("******************************\n");


  while(!feof(fp))
	{
		m++;
		l_end=new Tong;
		fscanf(fp,"%s%d%s%s",l_end->name,&l_end->telnumber,l_end->email,&l_end->relation);
       if(l_end->telnumber<0)
	   {
		   	l->next=NULL;
			//fclose(fp);
		    return(head);
	   }
    	printf("%s\t%d\t%s\t%s\t\n",l_end->name,l_end->telnumber,l_end->email,l_end->relation);
		n=n+1;
		if(n==1)
		{
			head=l_end;
			l=l_end;
		}
		else 
			l->next=l_end;
		l=l_end;
		
	}
	l->next=NULL;
	fclose(fp);
	n=m;
	return (head);

}

/*保存文件*/
void savefile()
{
	Tong *s_end;
	FILE *fp;
	s_end=head;

	fp=fopen("Phonebook.txt","wt+");
	printf("******************************\n");
    printf("*姓名 电话    Email    关系  *\n");
	printf("******************************\n");
    
	while(1)
	{
		fprintf(fp,"%s\t%d\t%s\t%s\n",s_end->name,s_end->telnumber,s_end->email,s_end->relation);
	    s_end=s_end->next;
		if (s_end==NULL)
			break;
		else if (s_end->telnumber<0)
			break;
	}
	fclose(fp);
	printf("记录已保存到Phonebook.txt文件中!\n");

	return;
}

/*删除*/
void delet()
{
	Tong *d_end, *d;
	char delname[20];
	int del,de=0;

			d_end=head->next;
		    printf( "请输您想删除的记录的姓名:");
			scanf("%s",delname);
		    del=strcmp(head->name,delname);
		
			 if(del==0)
			 {
				d=head;
	    		head=head->next;
	    		delete d;
				cout << "姓名为"<< delname <<"的记录删除成功!"<<endl;
	    		return;
			}	
			d=head;
			while(1)
			{
				 del=strcmp(d_end->name,delname);
				 if(del==0)
					if(d_end->next==NULL)
					{
						d->next=NULL;
						delete d_end;
						cout << "姓名为"<< delname <<"的记录删除成功!"<<endl;
						return;
					}
					else
					{
						d->next=d_end->next;
						delete d_end;
						cout << "姓名为"<< delname <<"的记录删除成功!"<<endl;
						return;
					}
				d=d_end;
			    d_end=d_end->next;
			    if(d_end==NULL)
				 break;
			}
    cout << "姓名为" << delname <<"的记录不存在!"<<endl;
	cout<<"请按回车继续!"<<endl;
	getchar();
    getchar();
}

/*查询*/
void select(Tong *s_head)
{
	Tong *s_end;
	s_end=s_head;
	char selname[20];
	int sel;
    printf( "请输您想查找的姓名:");
	scanf("%s",selname);
	while(1)
	{
		sel=strcmp(s_end->name,selname);
		if(sel==0)
		{
			cout << endl << "您查找的通讯记录如下:" <<endl;
			cout << "姓名:" << s_end->name << endl;
			cout << "电话:" << s_end->telnumber << endl;
			cout << "Email:" << s_end->email << endl;
			cout << "关系:" << s_end->relation << endl;
			break;
		}
        else 
			s_end=s_end->next;
		if (s_end==NULL)
		{
			printf("您要查询的纪录不存在!\n");
			break;
		}
    }
    
}


/*修改*/
void xiugai()
{
	int xiu,p;
	char xiuname[20];
	Tong *xiu_end;
	xiu_end=head;
	if(head==NULL)
	{
		printf("通讯记录为空,请先建立记录!\n\n");
		cout<<"请按回车继续!"<<endl;
    	getchar();
        getchar();
		return;
	}
	    
    printf("请输入要修改的通讯记录的姓名:");
	scanf("%s",xiuname);
	
    while(xiu_end!=NULL)
	{
		xiu=strcmp(xiu_end->name,xiuname);
		if(xiu==0)
		{
			cout << "原记录如下:";
			cout << "姓名:" << xiu_end->name << endl;
			cout << "电话:" << xiu_end->telnumber << endl;
			cout << "Email:" << xiu_end->email << endl;
			cout << "关系:" << xiu_end->relation << endl;

			cout <<endl<<endl<<endl;

			printf("修改姓名按1\n");
    		printf("修改电话按2\n");
    		printf("修改Email按3\n");
	    	printf("修改关系按4\n");
	    	printf("退出按0\n");

			printf("请选择需要修改的信息:");
			scanf("%d",&p);

			switch(p)
			{
			case 0:
				break;
			case 1:
				printf("\n请输入新的姓名:");
				scanf("%s",xiu_end->name);
				break;
        	case 2:
				printf("\n请输入新的电话:");
				scanf("%d",&xiu_end->telnumber);
				break;
			case 3:
				printf("\n请输入新的Email:");
				scanf("%s",xiu_end->email);
				break;
			case 4:
				printf("\n请输入新的关系:");
				scanf("%s",xiu_end->relation);
				break;
			default:
				cout << endl <<"Sorry,您输入错误,请重新输入";
			}
			return;
		}
    xiu_end=xiu_end->next;
	}
	printf("\n要修改的记录不存在!\n");
}



/*排序*/
Tong* paixu(Tong *head)
{
	Tong *p,*max;
	int i,j,k,pai;
    char t[20];
	if(head==NULL)
	{
		printf("\n没有通讯资料,请先建立\n");
		return (head);
	}
    p=max=head;
	printf("按总评分排序如下!\n");


	for(i=1;i<n;i++)
   {
       for(j=i+1;j<=n;j++)
       {
           max=p;
           p=p->next;
		   pai=strcmp(max->name,p->name);
           if(pai>0)
		   {
              strcpy(t,max->name);
			 strcpy(max->name,p->name);
			 strcpy(p->name,t);
         /*交换前后结点中的姓名,使得姓名大者移到后面的结点中*/

              k=max->telnumber;
              max->telnumber=p->telnumber;
              p->telnumber=k;
     /*交换前后结点中的电话,使之与姓名相匹配*/
        
			 strcpy(t,max->email);
			 strcpy(max->email,p->email);
			 strcpy(p->email,t);
     /*交换前后结点中的email,使之与姓名相匹配*/
             strcpy(t,max->relation);
			 strcpy(max->relation,p->relation);
			 strcpy(p->relation,t);
     /*交换前后结点中的关系,使之与姓名相匹配*/
			}

       }
		max=head;
		p=head;/*重新使max,p指向链表头*/
    }
    xianshi(head);
    return (0);/*打印值排序后的链表内容*/
}

void guanxi()
{
	Tong *g_end;
	int gx,g,num=0;
	g_end=head;
	printf("请选择按什么关系输入(1为Relative,2为Friend,3为Workmate,4为Classmate):");
	scanf("%d",&g);

	switch(g)
	{
	case 1:
		{
			printf("******************************\n");
            printf("*姓名 电话    Email    关系  *\n");
			printf("******************************\n");


			while(1)
			{
				if (g_end==NULL)
				{
					if (num==0)
					{
						printf("您要查询的关系无记录!\n");
						break;
					}
					else
						printf("共%d条记录 \n",num);
						break;
				}
				gx=strcmp(g_end->relation,"relative");
				if(gx==0)
				{
					printf("%s\t%d\t%s\t%s\t\n",g_end->name,g_end->telnumber,g_end->email,g_end->relation);
     				g_end=g_end->next;
					num++;
				}
				 else 
					g_end=g_end->next;
			}
			break;
    
		}
	case 2:
		{
			printf("******************************\n");
            printf("*姓名 电话    Email    关系  *\n");
			printf("******************************\n");


			while(1)
			{
				if (g_end==NULL)
				{
					if (num==0)
					{
						printf("您要查询的关系无记录!\n");
						break;
					}
					else
						printf("共%d条记录 \n",num);
						break;
				}
				gx=strcmp(g_end->relation,"friend");
				if(gx==0)
				{
					printf("%s\t%d\t%s\t%s\t\n",g_end->name,g_end->telnumber,g_end->email,g_end->relation);
     				g_end=g_end->next;
					num++;
				}
				 else 
					g_end=g_end->next;
			}

			break;
		}
	case 3:
		{
			printf("******************************\n");
            printf("*姓名 电话    Email    关系  *\n");
			printf("******************************\n");


			while(1)
			{
				if (g_end==NULL)
				{
					if (num==0)
					{
						printf("您要查询的关系无记录!\n");
						break;
					}
					else
						printf("共%d条记录 \n",num);
						break;
				}
				gx=strcmp(g_end->relation,"workmate");
				if(gx==0)
				{
					printf("%s\t%d\t%s\t%s\t\n",g_end->name,g_end->telnumber,g_end->email,g_end->relation);
     				g_end=g_end->next;
					num++;
				}
				 else 
					g_end=g_end->next;
			}

			break;
		}
	case 4:
		{
			printf("******************************\n");
            printf("*姓名 电话    Email    关系  *\n");
			printf("******************************\n");


			while(1)
			{
				if (g_end==NULL)
				{
					if (num==0)
					{
						printf("您要查询的关系无记录!\n");
						break;
					}
					else
						printf("共%d条记录 \n",num);
						break;
				}
				gx=strcmp(g_end->relation,"classmate");
				if(gx==0)
				{
					printf("%s\t%d\t%s\t%s\t\n",g_end->name,g_end->telnumber,g_end->email,g_end->relation);
     				g_end=g_end->next;
					num++;
				}
				 else 
					g_end=g_end->next;
			}

			break;
		}

	}
}


void main()
{
	int q;
	int k=0;
	for (;;)
	{
		printf("----------------------------------\n");
		printf("\t新建记录:       1\n");
		printf("\t从文件调入记录: 2\n");
		printf("\t显示数据:       3\n");
		printf("\t删除记录:       4\n");
		printf("\t查询记录:       5\n");
		printf("\t修改记录:       6\n");
		printf("\t排序(按姓名): 7\n");
		printf("\t保存记录:       8\n");
		printf("\t按关系显示:     9\n");
		printf("\t退出:            0\n");
		printf("----------------------------------\n");
		printf("请输入你想进行的操作:");
		scanf("%d", &q);
		switch(q)
		{
		case 0:
			exit(0);
		    break;
		case 1:
			input();  		
			printf("\n\n\n");
			break;
		case 2:
			head=loadfile(head);
			printf("\n\n\n");
			break;
		case 3:
			xianshi(head);
			printf("\n\n\n");
			break;
		case 4:
			delet();
			printf("\n\n\n");
			break;
		case 5:
			select(head);
			printf("\n\n\n");
			break;
		case 6:
			xiugai();
			printf("\n\n\n");
			break;
		case 7:
			paixu(head);
			printf("\n\n\n");
			break;
		case 8:
			savefile();
			printf("\n\n\n");
			break;
		case 9:
			guanxi();
			printf("\n\n\n");
			break;
        default: 
			printf("\n您输入错误,请重新输入\n");
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -