4.23总结

对自己的代码进行了整理,使自己看得更清楚,明了

 然后对一些功能进行了优化,比如利用二叉树来进行搜索书名从而查找整本书的功能

建树和查找

void createtree(int i){
	struct tree *p,*q,*s;
	if(root==NULL){
		root=(struct tree *)malloc(sizeof(struct tree));
		root->data=book[i];
		root->lc=NULL;
		root->rc=NULL;
	}else{
		p=root;
		q=NULL;
		while(p!=NULL){
			q=p;
			if(book[i].hash>p->data.hash){
				p=p->rc;
			}else{
			   p=p->lc;
			}
		}
		if(book[i].hash>q->data.hash){
			p=(struct tree *)malloc(sizeof(struct tree)); 
			p->lc=NULL;
			p->rc=NULL;
			p->data=book[i];
			q->rc=p;
		}else{
			p=(struct tree *)malloc(sizeof(struct tree));
			p->lc=NULL;
			p->rc=NULL;
			p->data=book[i];
			q->lc=p;
		}
	}
}
void find(int hash){
	struct tree *p;
	p=root;
	while(p->data.hash!=hash&&p!=NULL){
		if(hash>p->data.hash){
			p=p->rc;
		}else if(hash<p->data.hash){
			p=p->lc;
		}else{
			printf("书号 书名 作者 出版社 类别 数量 定价\n");
			printf("%d %s %s %s %s %d %f\n",p->data.num  ,p->data.bookname ,p->data.author ,p->data.press ,p->data.category ,p->data.count ,p->data.price );
		}
	}
	if(p==root){
		printf("书号 书名 作者 出版社 类别 数量 定价\n");
			printf("%d %s %s %s %s %d %f\n",p->data.num  ,p->data.bookname ,p->data.author ,p->data.press ,p->data.category ,p->data.count ,p->data.price );
	}
}

还将图书录入方面进行了修改,将其直接存入文件中

void lurumassage(LinkList *L)
{
	int i,N;
	system("cls");
	printf("\t\t           =============           \n");
	printf("\t\t            录人图书信息           \n");
	printf("\t\t           =============           \n\n");
	printf("\t\t\t请输入你要录入的图书个数:");
	scanf("%d",&N);
	FILE *fp;
	fp=fopen("book.txt","a");
	if(fp==NULL){
		printf("error\n");
		fp=fopen("book.txt","w");
	}
	for(i=1;i<=N;i++)
	{
		printf("\t\t\t请输入你要录入的第%d本书号:",i);
		scanf("%d",&book[i].num );
		fprintf(fp,"%d ",book[i].num );
		printf("\t\t\t请输入你要录入的第%d本书名:",i); 
		getchar();
		scanf("%s",book[i].bookname );
		fprintf(fp,"%s ",book[i].bookname  );
		printf("\t\t\t请输入你要录入的第%d本书本作者:",i);
		getchar();
		scanf("%s",book[i].author );
		fprintf(fp,"%s ",book[i].author  );
		printf("\t\t\t请输入你要录入的第%d本书本出版社:",i);
		getchar();
		scanf("%s",book[i].press );
		fprintf(fp,"%s ",book[i].press  );
		printf("\t\t\t请输入你要录入的第%d本书的类别:",i);
		getchar();
		scanf("%s",book[i].category );
		fprintf(fp,"%s ",book[i].category  );
		printf("\t\t\t请输入你要录入的第%d本书本数量:",i);
		scanf("%d",&book[i].count );
		fprintf(fp,"%d ",book[i].count);
		printf("\t\t\t请输入你要录入的第%d本书本定价:",i);
		scanf("%f",&book[i].price );
		fprintf(fp,"%f\n",book[i].price );
	}
	fclose(fp);
	booknum=booknum+N;
}

还有两个文件处理的地方

void loding(){
		FILE *fp;
	fp=fopen("book.txt","r");
	int i;
	for(i=1;i<=booknum;i++)
	{
		fscanf(fp,"%d %s %s %s %s %d %f\n",&book[i].num ,book[i].bookname,book[i].author ,book[i].press ,book[i].category ,&book[i].count ,&book[i].price );
}
	fclose(fp);
	for(i=1;i<=booknum;i++){
		LinkList *p,*q;
		if(L==NULL){
			p=(LinkList *)malloc(sizeof(LinkList));
			p->data=book[i];
			p->next=NULL;
			L=p;
		}else{
			p=L;
			while(p->next!=NULL){
				p=p->next;
			}
			q=(LinkList *)malloc(sizeof(LinkList));
			q->data=book[i];
			q->next=NULL;
			p->next=q;
		}
	}
}
void end(){
	LinkList *p;
	p=L;
	for(int i=1;i<=booknum;i++){
		book[i]=p->data;
		p=p->next;
	}
	FILE *fp;
	fp=fopen("book.txt","w+");
	for(int i=1;i<=booknum;i++){
	fprintf(fp,"%d %s %s %s %s %d %f\n",book[i].num ,book[i].bookname,book[i].author ,book[i].press ,book[i].category ,book[i].count ,book[i].price );
}
	fclose(fp);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值