数据结构课程设计

时间: 1ms        内存:128M

描述:

输入:

输出:

示例输入:

示例输出:

提示:

参考答案(内存最优[0]):

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct txl{
	char name[20];
	char tel[20];
	char add[20];
}pop;
typedef struct list{
	pop data;
	struct list *next;
}List;
void chakan()             //查看所有通讯人
{
	FILE *fp;
	char ch[100];
	int i=0;
	if((fp=fopen("tongxunlu.txt","rb"))==NULL)
	{
		printf("           *******************\n");
		printf("           通讯录不存在!!!\n");
		printf("           请添加联系人!\n");
		printf("           *******************\n");
	}
	else{
		rewind(fp);
		
		while(fgets(ch,100,fp)!=NULL)
		{
			if(i==0)
			{
				printf("                        所有通讯人\n");
				printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
			}
			i++;
			switch(i%3)
			{
			case 1:{
				printf("姓名:\n");
				break;
				   }
			case 2:{
				printf("电话:\n");
				break;
				   }
			case 0:{
				printf("地址:\n");
				break;
				   }
			}
			printf("%s",ch);
			if(i%3==0) printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
		}
	}
}
void zengjia()                 //增加通讯人
{
	FILE *fp;
	pop *stu;
	stu=(pop*)malloc(sizeof(pop));
	if((fp=fopen("tongxunlu.txt","a+"))==NULL)
		printf("通讯录不存在!!!\n");
	else{
		printf("           *******************\n");
		printf("           请输入姓名:\n");
		printf("           *******************\n");
		scanf("%s",stu->name);
		printf("           *******************\n");
		printf("           请输入电话:\n");
		printf("           *******************\n");
		scanf("%s",stu->tel);
		printf("           *******************\n");
		printf("           请输入地址:\n");
		printf("           *******************\n");
		scanf("%s",stu->add);
		fprintf(fp,"%s\n",stu->name);
		fprintf(fp,"%s\n",stu->tel);
		fprintf(fp,"%s\n",stu->add);
		printf("           ***********************************************\n");
		printf("           已成功存入!!!\n");
		printf("           ***********************************************\n\n\n");
	}
	fclose(fp);
}
void shuchu(FILE *fp,int n,char a[],char s)            //查找删除联系人
{
	List *stu,*p,*r,*x;
	char ch[100];
	int i=0,l=0,j=1,k=0;
	stu=(List*)malloc(sizeof(List));
	r=(List*)malloc(sizeof(List));
	r=stu;
	x=(List*)malloc(sizeof(List));
	p=(List*)malloc(sizeof(List));
	while((fgets(ch,100,fp))!=NULL)                  //所有通讯人存入数组
	{
		i++;
		ch[strlen(ch)-1]='\0';						
		switch(i%3)
		{
		case 1:{
			strcpy(p->data.name,ch);
			break;
				}
		case 2:{
			strcpy(p->data.tel,ch);
			break;
				  }
		case 0:{
			strcpy(p->data.add,ch);
			r->next=p;
			r=p;
			p=(List*)malloc(sizeof(List));
			break;
				  }
		}
	}
	r->next=NULL;
	p=r;
	fclose(fp);
    p=(List*)malloc(sizeof(List));
	p=stu->next;
	while(p!=NULL)                 //查找联系人
	{
		switch(n)
		{
		case 1:{
			if(strcmp(a,p->data.name)==0){
				l=1;x=p;k=1;
			}
			break;
				  }
		case 2:{
			if(strcmp(a,p->data.tel)==0){
				l=1;x=p;k=1;				    
			}
			break;
				  }
		case 0:{
			if(strcmp(a,p->data.add)==0){
				l=1;x=p;k=1;
			}
			break;
				  }
		}
		p=p->next;
		if(l==1){
			printf("\n\n");
			printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
			printf("姓名:\n");
			printf("%s\n",x->data.name);
			printf("电话:\n");
			printf("%s\n",x->data.tel);
			printf("地址:\n");
			printf("%s\n",x->data.add);
			printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
			l=0;
		}		
	}
	if(k==0){
		printf("           ******************\n");
		printf("           通讯人不存在!!!\n");
		printf("           ******************\n\n");
	}
	if(s=='y'&&l==1)                                     //判断是否进行删除操作
	{
		fp=fopen("tongxunlu.txt","w");
		p=stu->next;
		while(p!=NULL)
		{
			if(p!=x)
			{
				fprintf(fp,"%s\n",p->data.name);
				fprintf(fp,"%s\n",p->data.tel);
				fprintf(fp,"%s\n",p->data.add);
			}
			p=p->next;
		}
		printf("           ***********************************************\n");
		printf("           已成功删除!!!\n");
		printf("           ***********************************************\n");
	}
	fclose(fp);
}
void chazhaoshanchu()                        //查找删除联系人
{
	FILE *fp;
	pop *stu;
	char a[20],s;
	int n,i=0;
	if((fp=fopen("tongxunlu.txt","a+"))==NULL)
	{
		printf("           ******************\n");
		printf("           通讯录不存在!!!\n");
		printf("           ******************\n");
	}
	stu=(pop*)malloc(sizeof(pop));
stop:printf("           ************************************************************\n");
	printf("           *                                                          *\n");
	printf("           *         1.按姓名查找         2.按电话查找                *\n");
	printf("           *                                                          *\n");
	printf("           *         3.按地址查找                                     *\n");
	printf("           *                                                          *\n");
	printf("           ************************************************************\n");
	printf("           *******************\n");
    printf("           请选择:\n");
	printf("           *******************\n");
	scanf("%d",&n);
	if(n!=1&&n!=2&&n!=3) {
		printf("           ***************************\n");
		printf("           输入错误请重新输入!!!\n");
		printf("           ***************************\n");
		goto stop;}
    printf("           *************************\n");
    printf("           是否要进行删除操作?(y/n):\n");
	printf("           *************************\n");
	getchar();
	scanf("%c",&s);
	switch(n)
	{
	case 1:{
		printf("           ******************\n");
        printf("           请输入姓名:\n");
	    printf("           ******************\n");
		scanf("%s",a);
		shuchu(fp,1,a,s);
		break;
		   }
	case 2:{
		printf("           ******************\n");
        printf("           请输入电话:\n");
	    printf("           ******************\n");
		scanf("%s",a);
		shuchu(fp,2,a,s);
		break;
		   }
	case 3:{
	    printf("           ******************\n");
        printf("           请输入地址:\n");
	    printf("           ******************\n");
		scanf("%s",a);
		shuchu(fp,0,a,s);
		break;
		   }
	}
}
int main()                 //主函数
{
	int n;
	printf("\n\n");
stop:printf("           ******************欢迎使用通讯录管理系统********************\n");
	printf("           *                                                          *\n");
	printf("           *         1.查看所有信息       2.增加通讯人                *\n");
	printf("           *                                                          *\n");
	printf("           *         3.查找删除通讯人                                 *\n");
	printf("           *                                                          *\n");
	printf("           *         4.退出                                           *\n");
	printf("           *                                                          *\n");
	printf("           ************************************************************\n");
    printf("           *******************\n");
    printf("           请选择:\n");
	printf("           *******************\n");
	scanf("%d",&n);
	switch(n){
	case 1:{
		chakan();
		break;
		   }
	case 2:{
		zengjia();
		break;
		   }
    case 3:{
		chazhaoshanchu();
		break;
		   }
	case 4:{
		printf("\n\n");
		printf("           **************************谢谢使用************************\n");
		exit(1);
		   }
	}
	goto stop;
	return 0;
}

参考答案(时间最优[0]):

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct txl{
	char name[20];
	char tel[20];
	char add[20];
}pop;
typedef struct list{
	pop data;
	struct list *next;
}List;
void chakan()             //查看所有通讯人
{
	FILE *fp;
	char ch[100];
	int i=0;
	if((fp=fopen("tongxunlu.txt","rb"))==NULL)
	{
		printf("           *******************\n");
		printf("           通讯录不存在!!!\n");
		printf("           请添加联系人!\n");
		printf("           *******************\n");
	}
	else{
		rewind(fp);
		
		while(fgets(ch,100,fp)!=NULL)
		{
			if(i==0)
			{
				printf("                        所有通讯人\n");
				printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
			}
			i++;
			switch(i%3)
			{
			case 1:{
				printf("姓名:\n");
				break;
				   }
			case 2:{
				printf("电话:\n");
				break;
				   }
			case 0:{
				printf("地址:\n");
				break;
				   }
			}
			printf("%s",ch);
			if(i%3==0) printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
		}
	}
}
void zengjia()                 //增加通讯人
{
	FILE *fp;
	pop *stu;
	stu=(pop*)malloc(sizeof(pop));
	if((fp=fopen("tongxunlu.txt","a+"))==NULL)
		printf("通讯录不存在!!!\n");
	else{
		printf("           *******************\n");
		printf("           请输入姓名:\n");
		printf("           *******************\n");
		scanf("%s",stu->name);
		printf("           *******************\n");
		printf("           请输入电话:\n");
		printf("           *******************\n");
		scanf("%s",stu->tel);
		printf("           *******************\n");
		printf("           请输入地址:\n");
		printf("           *******************\n");
		scanf("%s",stu->add);
		fprintf(fp,"%s\n",stu->name);
		fprintf(fp,"%s\n",stu->tel);
		fprintf(fp,"%s\n",stu->add);
		printf("           ***********************************************\n");
		printf("           已成功存入!!!\n");
		printf("           ***********************************************\n\n\n");
	}
	fclose(fp);
}
void shuchu(FILE *fp,int n,char a[],char s)            //查找删除联系人
{
	List *stu,*p,*r,*x;
	char ch[100];
	int i=0,l=0,j=1,k=0;
	stu=(List*)malloc(sizeof(List));
	r=(List*)malloc(sizeof(List));
	r=stu;
	x=(List*)malloc(sizeof(List));
	p=(List*)malloc(sizeof(List));
	while((fgets(ch,100,fp))!=NULL)                  //所有通讯人存入数组
	{
		i++;
		ch[strlen(ch)-1]='\0';						
		switch(i%3)
		{
		case 1:{
			strcpy(p->data.name,ch);
			break;
				}
		case 2:{
			strcpy(p->data.tel,ch);
			break;
				  }
		case 0:{
			strcpy(p->data.add,ch);
			r->next=p;
			r=p;
			p=(List*)malloc(sizeof(List));
			break;
				  }
		}
	}
	r->next=NULL;
	p=r;
	fclose(fp);
    p=(List*)malloc(sizeof(List));
	p=stu->next;
	while(p!=NULL)                 //查找联系人
	{
		switch(n)
		{
		case 1:{
			if(strcmp(a,p->data.name)==0){
				l=1;x=p;k=1;
			}
			break;
				  }
		case 2:{
			if(strcmp(a,p->data.tel)==0){
				l=1;x=p;k=1;				    
			}
			break;
				  }
		case 0:{
			if(strcmp(a,p->data.add)==0){
				l=1;x=p;k=1;
			}
			break;
				  }
		}
		p=p->next;
		if(l==1){
			printf("\n\n");
			printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
			printf("姓名:\n");
			printf("%s\n",x->data.name);
			printf("电话:\n");
			printf("%s\n",x->data.tel);
			printf("地址:\n");
			printf("%s\n",x->data.add);
			printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
			l=0;
		}		
	}
	if(k==0){
		printf("           ******************\n");
		printf("           通讯人不存在!!!\n");
		printf("           ******************\n\n");
	}
	if(s=='y'&&l==1)                                     //判断是否进行删除操作
	{
		fp=fopen("tongxunlu.txt","w");
		p=stu->next;
		while(p!=NULL)
		{
			if(p!=x)
			{
				fprintf(fp,"%s\n",p->data.name);
				fprintf(fp,"%s\n",p->data.tel);
				fprintf(fp,"%s\n",p->data.add);
			}
			p=p->next;
		}
		printf("           ***********************************************\n");
		printf("           已成功删除!!!\n");
		printf("           ***********************************************\n");
	}
	fclose(fp);
}
void chazhaoshanchu()                        //查找删除联系人
{
	FILE *fp;
	pop *stu;
	char a[20],s;
	int n,i=0;
	if((fp=fopen("tongxunlu.txt","a+"))==NULL)
	{
		printf("           ******************\n");
		printf("           通讯录不存在!!!\n");
		printf("           ******************\n");
	}
	stu=(pop*)malloc(sizeof(pop));
stop:printf("           ************************************************************\n");
	printf("           *                                                          *\n");
	printf("           *         1.按姓名查找         2.按电话查找                *\n");
	printf("           *                                                          *\n");
	printf("           *         3.按地址查找                                     *\n");
	printf("           *                                                          *\n");
	printf("           ************************************************************\n");
	printf("           *******************\n");
    printf("           请选择:\n");
	printf("           *******************\n");
	scanf("%d",&n);
	if(n!=1&&n!=2&&n!=3) {
		printf("           ***************************\n");
		printf("           输入错误请重新输入!!!\n");
		printf("           ***************************\n");
		goto stop;}
    printf("           *************************\n");
    printf("           是否要进行删除操作?(y/n):\n");
	printf("           *************************\n");
	getchar();
	scanf("%c",&s);
	switch(n)
	{
	case 1:{
		printf("           ******************\n");
        printf("           请输入姓名:\n");
	    printf("           ******************\n");
		scanf("%s",a);
		shuchu(fp,1,a,s);
		break;
		   }
	case 2:{
		printf("           ******************\n");
        printf("           请输入电话:\n");
	    printf("           ******************\n");
		scanf("%s",a);
		shuchu(fp,2,a,s);
		break;
		   }
	case 3:{
	    printf("           ******************\n");
        printf("           请输入地址:\n");
	    printf("           ******************\n");
		scanf("%s",a);
		shuchu(fp,0,a,s);
		break;
		   }
	}
}
int main()                 //主函数
{
	int n;
	printf("\n\n");
stop:printf("           ******************欢迎使用通讯录管理系统********************\n");
	printf("           *                                                          *\n");
	printf("           *         1.查看所有信息       2.增加通讯人                *\n");
	printf("           *                                                          *\n");
	printf("           *         3.查找删除通讯人                                 *\n");
	printf("           *                                                          *\n");
	printf("           *         4.退出                                           *\n");
	printf("           *                                                          *\n");
	printf("           ************************************************************\n");
    printf("           *******************\n");
    printf("           请选择:\n");
	printf("           *******************\n");
	scanf("%d",&n);
	switch(n){
	case 1:{
		chakan();
		break;
		   }
	case 2:{
		zengjia();
		break;
		   }
    case 3:{
		chazhaoshanchu();
		break;
		   }
	case 4:{
		printf("\n\n");
		printf("           **************************谢谢使用************************\n");
		exit(1);
		   }
	}
	goto stop;
	return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。