对自己的代码进行了整理,使自己看得更清楚,明了
然后对一些功能进行了优化,比如利用二叉树来进行搜索书名从而查找整本书的功能
建树和查找
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);
}