} BookDbaseFile; //主数据库文件
typedef struct {
char bookname[40]; //书名
int lhead; //该书名在“数据记录文件中的”的头指针
int recnum; //同书名的长度
SortIndexType SIndexDbase[MaxBookSize];
int len;
} SIndexDbaseFile; //分类索引文件
typedef struct{
char stuid[20]; //学号
char stuname[20]; //学生姓名
if(strcmp(bif.BNIndexDbase[i].bookname,bookname)==0){
//找到索引,更新lhead
k=bif.BNIndexDbase[i].lhead;
for(;j<bif.BNIndexDbase[i].recnum-1;j++)
bool isborrowed; //是否借出
char stuid[20]; //借阅者学号
} BookRecordType; //书籍记录类型
typedef struct {
BookRecordType BookDbase[MaxBookSize]; //主数据库
k=bf.BookDbase[k].authornext;
bf.BookDbase[k].authornext=n;
bf.BookDbase[n].authornext=-1;
aif.AIndexDbase[i].recnum++;
return;
}
}
strcpy(bf.BookDbase[i].bookid,bookid);
strcpy(bf.BookDbase[i].author,author);
strcpy(bf.BookDbase[i].bookname,bookname);
strcpy(bf.BookDbase[i].sort,sort);
//增加总记录
bf.len++;
printf("图书已增加\n");
}
//创建一个学生
void createStu(StudentDbaseFile &sf){
//声明变量
//学号
char stuid[20];
//学生姓名
char stuname[20];
//更新书名索引表
void updateBNIndexDbaseFile(BNIndexDbaseFile &bif,BookDbaseFile &bf, char bookname[],int n){
int i=0,j=0,k;
//遍历书名索引
for(;i<bif.len;i++){
int bookindex; //所借图书的数组下标索引
} StudentType; //学生记录类型
typedef struct{
StudentType StuDbase[MaxStu];
int len;
} StudentDbaseFile; //学生主数据库
sif.SIndexDbase[sif.len].lhead=n;
sif.len++;
}
//创建一本书
void createBook(BookDbaseFile &bf,BNIndexDbaseFile &bif,AIndexDbaseFile &aif,SIndexDbaseFile &sif){
//获取长度
int i=sf.len;
printf("请输入学生的学号和姓名:\n");
//读入
scanf("%s%s",stuid,stuname);
//放学号
strcpy(sf.StuDbase[i].stuid,stuid);
//放姓名
strcpy(sf.StuDbase[i].stuname,stuname);
k=sif.SIndexDbase[i].lhead;
for(;j<sif.SIndexDbase[i].recnum-1;j++)
k=bf.BookDbase[k].sortnext;
bf.BookDbase[k].sortnext=n;
bf.BookDbase[n].sortnext=-1;
sif.SIndexDbase[i].recnum++;
return;
}
}
bf.BookDbase[n].sortnext=-1;
strcpy(sif.SIndexDbase[i].sort,sort);
sif.SIndexDbase[sif.len].recnum=1;
} BookNameIndexType; //书名索引记录类型
typedef struct {
BookNameIndexType BNIndexDbase[MaxBookSize]; //书名索引
int len; //索引长度
} BNIndexDbaseFile; //书名索引文件
int i=0;
for(;i<bif.len;i++){
if(strcmp(bif.BNIndexDbase[i].bookname,bookname)==0)
return bif.BNIndexDbase[i].lhead;
}
return -1;
}
//按作者从索引表中找到在主数据库中的头结点
k=bf.BookDbase[k].booknamenext;
bf.BookDbase[k].booknamenext=n;
//把最后一个记录的next置为-1
bf.BookDbase[n].booknamenext=-1;
//增加索引的记录条数
bif.BNIndexDbase[i].recnum++;
}
return -1;
}
//按类别从索引表中找到在数据库中的头结点
int searchBySort(SIndexDbaseFile &sif,char sort[]){
int i=0;
for(;i<sif.len;i++){
if(strcmp(sif.SIndexDbase[i].sort,sort)==0)
return;
}
}
//没有找到相应索引,建立索引
bf.BookDbase[n].booknamenext=-1;
strcpy(bif.BNIndexDbase[bif.len].bookname,bookname);
bif.BNIndexDbase[bif.len].recnum=1;
int searchByAuthor(AIndexDbaseFile &aif,char author[]){
int i=0;
for(;i<aif.len;i++){
if(strcmp(aif.AIndexDbase[i].author,author)==0)
return aif.AIndexDbase[i].lhead;
char bookname[40]; //书名
char author[20]; //作者
char sort[20]; //分类
int booknamenext; //书名指针链
int authornext; //作者指针链
int sortnext; //分类指针链
bif.BNIndexDbase[bif.len].lhead=n;
//增加索引记录
bif.len++;
}
//更新作者索引表,注释同上
void updateAIndexDbaseFile(AIndexDbaseFile &aif,BookDbaseFile &bf,char author[],int n){
//把书籍索引置为-1表示没有借书
sf.StuDbase[i].bookindex=-1;
//学生记录总数加1
sf.len++;
printf("学生已增加\n");
}
//按书名从索引表中找到在主数据库中的头节点
int searchByBookname(BNIndexDbaseFile &bif,char bookname[]){
typedef struct {
char author[20]; //作者
int lhead; //头指针
int recnum; //长度
} AuthorIndexType; //作者索引记录类型
typedef struct {
AuthorIndexType AIndexDbase[MaxBookSize];
bf.BookDbase[n].authornext=-1;
strcpy(aif.AIndexDbase[i].author,author);
aif.AIndexDbase[aif.len].recnum=1;
aif.AIndexDbase[aif.len].lhead=n;