📄 library.cpp
字号:
#include<stdio.h>
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MaxBookNum 7
#define MaxKeyNum 10
typedef int status;
typedef struct{
char *ch;
int length;
} HString;
typedef struct{
char booknum[3];
char bookname[50];
} ElemType;
typedef struct{
ElemType *elem;
int length;
} WordListType;
typedef struct LNode{
char ch[3];
struct LNode *next;
} LNode,*LinkType;
typedef struct{
LinkType head,tail;
int size;
} LinkList;
typedef struct{
HString key;
LinkList bnolist;
}IdxTermType;
typedef struct{
IdxTermType *item;
int last;
}IdxListType;
status InitList(LinkList &bnolist);
status MakeNode(LinkType p,char bno[]);
status Append(LinkList bnolist,LinkType p);
status Locate(IdxListType &idxlist,HString wd,int &b);
status InsertNewKey(int i,HString wd);
status InsertBook(IdxListType &idxlist,int i,char bno[]);
void GetWord(char *bna,HString &wd);
void SearchInfor();
void CreateBL();
IdxListType idxlist;
WordListType bookfile;
status InitList(LinkList &bnolist)
{ bnolist.head=new(LNode);
bnolist.tail=bnolist.head;
bnolist.tail->next=NULL;
bnolist.size=0;
return OK;
}
status MakeNode(LinkType p,char bno[])
{ p=new(LNode);
*p->ch=*bno;
p->next=NULL;
return OK;
}
status Append(LinkList bnolist,LinkType p)
{ bnolist.tail->next=p;
bnolist.tail=p;
bnolist.size++;
return OK;
}
status Locate(IdxListType &idxlist,HString wd,int &b)
{ int i,m;
for(i=idxlist.last-1;(m=strcmp(idxlist.item[i].key.ch,wd.ch))>0&&i>=0;--i);
if(m==0) {b=OK;return i;}
else{b=ERROR;return i+1;}
}
status InsertNewKey(int i,HString wd)
{ for(int j=idxlist.last-1;j>=i;--j)
idxlist.item[j+1]=idxlist.item[j];
idxlist.item[i].key.length=strlen(wd.ch);
idxlist.item[i].key.ch=new char[strlen(wd.ch)+1];
//idxlist.item[i].key.ch=wd.ch;
strcpy(idxlist.item[i].key.ch,wd.ch);
cout<<"idx="<<idxlist.item[i].key.ch<<endl;
InitList(idxlist.item[i].bnolist);
++idxlist.last;
return OK;
}
status InsertBook(IdxListType &idxlist,int i,char bno[])
{ LinkType p;
p=new(LNode);
strcpy(p->ch,bno);
Append(idxlist.item[i].bnolist,p);
return OK;
}
void GetWord(char *bna,HString &wd)
{ strcpy(wd.ch,bna);
wd.length=strlen(bna);
}
void SearchInfor()
{ char *In="a";
HString wd={"\0",0};
cout<<"请输入关键词:";
cin>>In;
if('a'<=In[0]&&In[0]<='z')
In[0]=In[0]-32;
int b=OK;
wd.length=strlen(In);
strcpy(wd.ch,In);
int i=Locate(idxlist,wd,b);
if(b==OK)
{ LinkType q=idxlist.item[i].bnolist.head->next;
while(q)
{ cout<<"书号:"<<q->ch<<" 书名:";
while(bookfile.elem)
{if(!strcmp(bookfile.elem->booknum,q->ch))
{ cout<<bookfile.elem->bookname;break;}
bookfile.elem++;
}
q=q->next;
}
}
else cout<<"查找记录为空!"<<endl;
}
void CreateBL()
{ HString wd={"\0",0};
bookfile.length=MaxBookNum;
bookfile.elem=(ElemType *)malloc(bookfile.length*sizeof(ElemType));
int i=0,j,k,l;
char bna[7][15]={"\0","\0","\0","\0","\0","\0","\0"};
FILE *fp;
fp=fopen("bookfile.txt","r");
while(!feof(fp))
{ char bna[7][15]={"\0","\0","\0","\0","\0","\0","\0"};
j=k=l=0;
//fread(&bookfile.elem[i],sizeof(ElemType),1,fp);
fgets(bookfile.elem[i].booknum,4,fp);puts(bookfile.elem[i].booknum);
fgets(bookfile.elem[i].bookname,50,fp);puts(bookfile.elem[i].bookname);
while(bookfile.elem[i].bookname[j]==' ') j++;
while(bookfile.elem[i].bookname[j]!='\n')
{ if(bookfile.elem[i].bookname[j]!=' ')
{ bna[k][l]=bookfile.elem[i].bookname[j];l++;}
else{ l=0;
if(!strcmp(bna[k],"an")||!strcmp(bna[k],"An")||!strcmp(bna[k],"a")||!strcmp(bna[k],"A")||!strcmp(bna[k],"of")||!strcmp(bna[k],"to")||!strcmp(bna[k],"the")||!strcmp(bna[k],"The")||!strcmp(bna[k],"and"))
k=k;
else k++;
}
j++;
}
for(j=0;j<=k;j++)
{ wd.ch=bna[j];cout<<"bna["<<j<<"]="<<bna[j]<<endl;
wd.length=strlen(bna[j]);
//GetWord(bna[j],wd);
int Inspos,b=OK;
if(i==0&&j==0)
{ Inspos=0;
b=ERROR;
idxlist.item=new IdxTermType[MaxKeyNum];
idxlist.last=0;
}
else Inspos=Locate(idxlist,wd,b);
if(b==OK)
InsertBook(idxlist,Inspos,bookfile.elem[i].booknum);
else { InsertNewKey(Inspos,wd);
InsertBook(idxlist,Inspos,bookfile.elem[i].booknum);
}
}
for(k=0;k<7;k++)
strcpy(bna[k],"\0");
i++;
}
fclose(fp);
}
int main()
{ char ch;
CreateBL();
do{ SearchInfor();
cout<<"按'Q'或'q'键结束查找,其他键继续查找:";
cin>>ch;
}while(ch!='Q'&&ch!='q');
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -