📄 主程序.cpp
字号:
scanf("%s",sm);
k=BnameFind(f1,sm);
if(k==0){
printf("没有该书,请检查是否输入有错\n");
break;
}
for(i=k;i;i=df.BookDbase[i].namenext)
ShowRec(df,i);
break;
case 3:
printf("输入作者名:\n");
scanf("%s",zz);
k=BauthFind(f2,zz);
if(k==0){
printf("没有该书,请检查是否输入有错\n");
break;
}
for(i=k;i;i=df.BookDbase[i].authnext)
ShowRec(df,i);
break;
case 4:
printf("输入出版社:\n");
scanf("%s",cbs);
k=BnameFind(f3,cbs);
if(k==0){
printf("没有该书,请检查是否输入有错\n");
break;
}
for(i=k;i;i=df.BookDbase[i].prenext)
ShowRec(df,i);
break;
case 5: return;
}
}
}
/*end for search.c**/
/*begin for reader.c*/
void ReaderManage(ReadFile &rf){
int i;
char yn='y';
i=++rf.len;
while(yn=='y'||yn=='Y'){
printf("输入读者号(3) 读者名 可借书数\n");
scanf("\n%s %s",rf.ReadRec[i].rno,rf.ReadRec[i].name);
scanf("\n%d",&rf.ReadRec[i].bn1);
printf("继续输入吗?(输入错误按输入n处理)y/n:\n");
scanf("\n%c",&yn);
i++;
}
rf.len=i-1;
}
/*end for reader.c*/
/* begin for borrow.c**/
void BorrowBook(BookDbaseFile &bf,BnoIdxFile bif,BbookFile &bbf,ReadFile &rf){
char dzh[8],sh[4],jyrq[8];
int i,j,k=0;
printf("输入读者号(3) 书号(3) 借阅日期(6)\n");
scanf("\n%s%s%s",dzh,sh,jyrq);
for(i=1;i<=rf.len;i++)
if(strcmp(dzh,rf.ReadRec[i].rno)==0){
k=i;
break;
}
if(k==0){
printf("非法读者! \n");
// return;
}
if(rf.ReadRec[k].bn2>=rf.ReadRec[k].bn1){
printf("书已借满! \n");
return;
}
j=BinSearch(bif,sh); //查找图书文件
if(j==0){
printf("非法书号! \n");
return;
}
if(bf.BookDbase[j].borrownum>=bf.BookDbase[j].storenum){
printf("图书已借出! \n");
return;
}
i=++bbf.len;
strcpy(bbf.Bbook[i].rno,dzh);
strcpy(bbf.Bbook[i].bno,sh);
strcpy(bbf.Bbook[i].date1,jyrq);
rf.ReadRec[k].bn2++; //读者借书数加1
bf.BookDbase[j].borrownum++; //图书借出数加1
printf("借书成功! \n");
}
//还书处理算法
void BackBook(BookDbaseFile &bf,BnoIdxFile bif,BbookFile &bbf,ReadFile &rf){
char dzh[8],sh[15],hsrq[8];
int i,j,k=0,m=0;
printf("输入读者号(3) 书号(3) 还书日期(6)\n");
scanf("%s%s%s",dzh,sh,hsrq);
for(i=1;i<=rf.len;i++)
if(strcmp(dzh,rf.ReadRec[i].rno)==0){
k=i;
break;
}
if(k==0){
printf("非法读者! \n");
return;
}
for(i=1;i<=bbf.len;i++)
if(strcmp(sh,bbf.Bbook[i].bno)==0){
m=i;
break;
}
if(m==0){
printf("非法书号! \n");
return;
}
j=BinSearch(bif,sh);
if(j==0){
printf("非法书号! \n");
return;
}
rf.ReadRec[k].bn2--;
bf.BookDbase[j].borrownum--;
strcpy(bbf.Bbook[m].date2,hsrq); //填入还书日期
printf("还书成功! \n");
}
/*end for borrow.c*/
FileEngine FileBook ("D:\数据结构课程设计\\book.txt");
FileEngine FileBidx ("D:\数据结构课程设计\\bidx.txt");
FileEngine FileNidx ("D:\数据结构课程设计\\nidx.txt");
FileEngine FileAidx ("D:\数据结构课程设计\\aidx.txt");
FileEngine FilePidx ("D:\数据结构课程设计\\pidx.txt");
FileEngine FileRead ("D:\数据结构课程设计\\read.txt");
FileEngine FileBbff ("D:\数据结构课程设计\\bbff.txt");
/* begin for writefile.c*/
void writefile(BookDbaseFile bf,BnoIdxFile bif,LHFile1 f1,LHFile2 f2,LHFile3 f3,ReadFile rf,BbookFile bbf){
//写图书主文件
int i;
for (i = 1; i <= bf.len; i ++)
FileBook.put (&bf.BookDbase[i] , sizeof (BookRecType) , 1);
//写图书索引文件
for(i=1;i<=bif.len;i++)
FileBidx.put (&bif.BnoIdx[i] , sizeof (BidxRecType) , 1);
//写书名索引链头文件
for (i = 1; i <= f1.len1; i ++)
FileNidx.put (&f1.LHFrec1[i] , sizeof (BNRecType) , 1);
//写作者索引链头文件
for (i = 1; i <= f2.len2; i ++)
FileAidx.put (&f2.LHFrec2[i],sizeof(BARecType),1);
//写出版社索引链头文件
for (i = 1; i <= f3.len3; i ++)
FilePidx.put (&f3.LHFrec3[i],sizeof(BPRecType),1);
//写读者文件
for (i = 1; i <= rf.len; i ++)
FileRead.put (&rf.ReadRec[i],sizeof(RRecType),1);
//写借还书文件
for (i = 1; i <= bbf.len; i ++)
FileBbff.put (&bbf.Bbook[i],sizeof(BbookRecType),1);
}
/* end for writefile.c*/
/*begin for readfile.c*/
void readfile(BookDbaseFile &bf,BnoIdxFile &bif,LHFile1 &f1,LHFile2 &f2,LHFile3 &f3,ReadFile &rf,BbookFile &bbf){
// FILE *fp;
//读图书主文件
bf.len = FileBook.get (&bf.BookDbase[1] , sizeof (BookRecType));
printf ("读图书主文件 ... 个数 %d ...OK!\n" , bf.len);
//读图书索引文件
bif.len = FileBidx.get (&bif.BnoIdx[1] , sizeof(BidxRecType));
printf ("读图书索引文件 ...个数 %d ... OK!\n" , bif.len);
//读书名索引链头文件
f1.len1 = FileNidx.get (&f1.LHFrec1[1],sizeof(BNRecType));
printf ("读书名索引链头文件 ...个数 %d ... OK!\n" , f1.len1);
//读作者索引链头文件
f2.len2 = FileAidx.get (&f2.LHFrec2[1],sizeof(BARecType));
printf ("读作者索引链头文件 ... 个数 %d ...OK!\n" , f2.len2);
//读出版社索引链头文件
f3.len3 = FilePidx.get (&f3.LHFrec3[1],sizeof(BPRecType));
printf ("读出版社索引链头文件 ... 个数 %d ...OK!\n" , f3.len3);
//读读者文件
rf.len = FileRead.get (&rf.ReadRec[1],sizeof(RRecType));
printf ("读读者文件 ... 个数 %d ...OK!\n" , rf.len);
//读借还书文件
bbf.len = FileBbff.get (&bbf.Bbook[1],sizeof(BbookRecType));
printf ("读借还书文件 ... 个数 %d ...OK!\n" , bbf.len);
}
/*end for readfile.c*/
void main(){
int j,m,k=1;
char xz='n';
BookDbaseFile bf;
BnoIdxFile bif;
LHFile1 f1;
LHFile2 f2;
LHFile3 f3;
ReadFile rf;
BbookFile bbf;
bf.len = 0;
bif.len = 0;
f1.len1 = 0;
f2.len2 = 0;
f3.len3 = 0;
bbf.len = 0;
while(k<=5){
printf("图书管理系统\n");
printf("==============\n");
printf("1.系统维护\n");
printf("2.读者管理\n");
printf("3.图书管理\n");
printf("4.图书流通\n");
printf("5.存盘\n");
printf("6.退出系统\n");
printf("==============\n");
printf("请选择1-6:\n");
scanf("\n%d",&k);
switch(k){
case 1:
printf("系统维护\n");
printf("---------\n");
printf("1.初始化\n");
printf("2.读盘\n");
printf("---------\n");
printf("请选择: \n");
scanf("\n%d",&m);
switch(m){
case 1:
printf("初始化只能做一次,需慎重! 还要初始化吗?(输入错误按输入n处理)y/n:\n");
scanf("\n%c",&xz);
while(xz=='y'||xz=='Y'){
FileBook.Build ();
FileBidx.Build ();
FileNidx.Build ();
FileAidx.Build ();
FilePidx.Build ();
FileRead.Build ();
FileBbff.Build ();
bf.len=bif.len=f1.len1=f2.len2=0;
f3.len3=rf.len=bbf.len=0;
printf("已完成初始化!\n");
break;
}
break;
case 2:
readfile(bf,bif,f1,f2,f3,rf,bbf);
break;
}
break;
case 2:
ReaderManage(rf);
break;
case 3:
printf("图书管理子系统\n");
printf("---------------\n");
printf("1.图书信息输入\n");
printf("2.图书信息查询\n");
printf("---------------\n");
printf("请选择: \n");
scanf("\n%d",&j);
if(j==1)
CreateBook(bf,bif,f1,f2,f3);
else
SearchBook(bf,bif,f1,f2,f3);
break;
case 4:
printf("图书流通子系统\n");
printf("---------------\n");
printf("1.借书处理\n");
printf("2.还书处理\n");
printf("---------------\n");
printf("请选择: \n");
scanf("\n%d",&j);
if(j==1)
BorrowBook(bf,bif,bbf,rf);
else if(j==2)
BackBook(bf,bif,bbf,rf);
break;
case 5:
printf("系统正在写盘中,请稍等...\n");
writefile(bf,bif,f1,f2,f3,rf,bbf);
printf("写盘完成!\n");
break;
case 6:
printf("下次再来!\n");
writefile(bf,bif,f1,f2,f3,rf,bbf);
return;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -