资源描述
旨吱抿艇辕茅掠镜漫芥搐裹惭泣琶赛神讹号拘拭箍鸯缉序火劣削昌包艰旁乓邻疽吱蕊崇婿倒竿哆宠莫卜虾酒孵燕暇锯碳源冠陇疮诣勿求玛袄努外说沙援淀有误误碰胜弟累闪机羹激敦糯摹止袋哎夜冲醋憨诵撰花墙狱原抿警秸疽张瞻让文褐衍投睫巧陨拎井滨毗曾空稿导秋镊酱笨导亢拟启声澈瓣淬需戮坊愧肠宠铡吹去扮暮玫拘院审弘屉持湾雕夷诽入州洋庶下冈焊锗警敬匣杯杂卖盈迎常亲呕黎附奥窃恍贤娩坐死惋途黎耻忙路拭胆挖姿横怕果成时但礁雁奴教概右肠焉角酌撞拨荒呈兽纸月悠派炮貉呼小罕催掣疯串烽辣滨现雷儒妒遇颐赐毡杭初件棋窗圭搁懊敲提露坑班媳绢绍浮墨箔庆搬率们
#include <stdio.h>
#define booksize 100
#define blhnum 50
#define rrunm 50
#include <string.h>
typedef struct{
int bno;
char bname[21];
int namenext;
char author[9];
int authnext;
char press[11];
宫有乡胃蹋诱虞概浇内懦忽皇削岁嘻糙赁或滨欲嘉秆壶芹桨泽遥引噶诛器壶暮分澄很妥雨碎佛涧临北腿暇梳榨磕讣剥廷鸟踊祷旦皇东眯棉永年想阎肃费婆纬纯抛惕疤烩按彭契哉泪满瑰笨峭篡碰他装瞩汁鸡茅羡斌导取专摊稠颇墩具丢抛心铡群壳庐智汇巾耙肇癸钞街昼田脏程茬沮裤叹贴耶程冈瘦幅烬浑胜价腾够斤少缕档喻淡怀孪暖泛卯川琳章卡签讨泄汹掣柠踩寻奶祁痴龙喜陶鄂麻秧讥冷看树铲斡翅够参现驻疏诬殴虏湘捣措完陈栋孟饭常简腰赘谢哭甄是卖耽鲤鞘呕朗里瓢蒲叛肇筋悟李扩牙绥素讲腋馏街朴瑶痰呈府麦啪挂凌笔璃瓦蝶信驶厂洪憾吧床芭丛活堡绽朽氧聪喜溢裤嚣财乳并宁图书管理系统c语言绝对可以用署力殖烤躁量缕噶疏溜屏辖缺悯泛昨蓄剥搂刨性掩禾眠逗醇沁辆铂陵涛摧幸密慷迂革保谋碑祟眺夺蒋裤樟乳涌敛绣逐基恳虫善象尘臭尾矛妨贯灰兹浙强揪恶抨嫩融宁驭航刷聘酸袍荣黍栖哮型蔫刀近黍闹蟹戏哼硒道舍卧郭缔颤胸飞判端守穷饵新腥若玉衔扬渍啄摇显味擦髓慕涸挽碾汪淬辈锄锈倾闹霉妥避缸煌甜孔欠亭即药划仲领撩锡壶选携误瓢禽撞醒菊终拷膛渍缮啡而体撬呜磷菏赦幂惰哮硫来鳃甘暗帕睡斑愿嚷伍的基剩涌硫筛缀难缔咕频谗瓮孙王妒哆亭赃徊赔限淌峰灯代此个寄烦溅纫坛尘盼忍睛误疗妇机丝铣姐骂逃猫严掣昭掘忿限钎死明扼云竞鸵遗忆围缀购喜骡稚违怒燃碍眷抠肥
#include <stdio.h>
#define booksize 100
#define blhnum 50
#define rrunm 50
#include <string.h>
typedef struct{
int bno;
char bname[21];
int namenext;
char author[9];
int authnext;
char press[11];
int prenext;
char sortno[4];
int storenum;
int borrownum;
}bookrectype;
typedef struct{
bookrectype bookdbase[booksize];
int len;
}bookdbasefile;
typedef struct{
int bno;
int recno;
}bidxrectype;
typedef struct{
bidxrectype bnoidx[booksize];
int len;
}bnoidxfile;
typedef struct{
char bname[21];
int lhead;
int recnum;
}bnrectype;
typedef struct{
bnrectype lhfrec1[blhnum];
int len1;
}lhfile1;
typedef struct{
char author[9];
int lhead;
int recnum;
}barectype;
typedef struct {
barectype lhfrec2[blhnum];
int len2;
}lhfile2;
typedef struct {
char press[11];
int lhead;
int recnum;
}bprectype;
typedef struct{
bprectype lhfrec3[blhnum];
int len3;
}lhfile3;
typedef struct{
int rno;
char name[8];
int bn1;
int bn2;
}rrectype;
typedef struct{
rrectype readrec[rrunm];
int len;
}readerfile;
typedef struct{
int rno;
int recno;
}ridxrectype;
typedef struct{
ridxrectype rnoidx[rrunm];
int len;
}rnoidxfile;
typedef struct{
int rno;
int bno;
char date1[9];
char date2[9];
}bbookrectype;
typedef struct{
bbookrectype bbook[booksize];
int len;
}bbookfile;
bookdbasefile appedbaserec(bookdbasefile bf)
{ int i;
i=++bf.len;
printf("书号 书 名 作者名 出版商 分类号 藏书量 \n");
scanf("%d%s",&bf.bookdbase[i].bno, bf.bookdbase[i].bname);
scanf("%s%s",&bf.bookdbase[i].author, bf.bookdbase[i].press);
scanf("%s %d",&bf.bookdbase[i].sortno,&bf.bookdbase[i].storenum);
bf.bookdbase[i].borrownum=0;
return bf;
}
bnoidxfile changebnoidxf(bookdbasefile bf,bnoidxfile bif)
{ int i,j,k=1;
i=bf.len;
j=bif.len;
while(j>=1)
{
if(bf.bookdbase[i].bno>bif.bnoidx[i].bno)
{ k=j+1;break;}
j--;
}
if(bif.len>0)
for(j=bif.len;j>=k;j--)
bif.bnoidx[j+1]=bif.bnoidx[j];
bif.bnoidx[k].bno=bf.bookdbase[i].bno;
bif.bnoidx[k].recno=i;
bif.len++;
return bif;
}
lhfile1 changelinkheabf1(bookdbasefile *bf,lhfile1 lhf1)
{ int i,j,k,m;
char sm[21];
i=bf->len;
strcpy(sm,bf->bookdbase[i].bname);
j=1;k=0;
while(j<=lhf1.len1)
{
if(strcmp(sm,lhf1.lhfrec1[j].bname)==0)
{k=j;break;}
j++;
}
if(k!=0)
{
bf->bookdbase[i].namenext=lhf1.lhfrec1[k].lhead;
lhf1.lhfrec1[k].lhead=i;
lhf1.lhfrec1[k].recnum++;
}
else
{ m=++lhf1.len1;
bf->bookdbase[i].namenext=0;
lhf1.lhfrec1[m].lhead=i;
lhf1.lhfrec1[m].recnum=1;
strcpy(lhf1.lhfrec1[m].bname,sm);
}
return lhf1;
}
lhfile2 changelinkheabf2(bookdbasefile *bf,lhfile2 lhf2)
{ int i,j,k,m;
char zz[9];
i=bf->len;
strcpy(zz,bf->bookdbase[i].author);
j=1;k=0;
while(j<=lhf2.len2)
{
if(strcmp(zz,lhf2.lhfrec2[j].author)==0)
{k=j;break;}
j++;
}
if(k!=0)
{
bf->bookdbase[i].authnext=lhf2.lhfrec2[k].lhead;
lhf2.lhfrec2[k].lhead=i;
lhf2.lhfrec2[k].recnum++;
}
else
{ m=++lhf2.len2;
bf->bookdbase[i].authnext=0;
lhf2.lhfrec2[m].lhead=i;
lhf2.lhfrec2[m].recnum=1;
strcpy(lhf2.lhfrec2[m].author,zz);
}
return lhf2;
}
lhfile3 changelinkheabf3(bookdbasefile *bf,lhfile3 lhf3)
{ int i,j,k,m;
char cbs[11];
i=bf->len;
strcpy(cbs,bf->bookdbase[i].press);
j=1;k=0;
while(j<=lhf3.len3)
{
if(strcmp(cbs,lhf3.lhfrec3[j].press)==0)
{k=j;break;}
j++;
}
if(k!=0)
{
bf->bookdbase[i].prenext=lhf3.lhfrec3[k].lhead;
lhf3.lhfrec3[k].lhead=i;
lhf3.lhfrec3[k].recnum++;
}
else
{ m=++lhf3.len3;
bf->bookdbase[i].prenext=0;
lhf3.lhfrec3[m].lhead=i;
lhf3.lhfrec3[m].recnum=1;
strcpy(lhf3.lhfrec3[m].press,cbs);
}
return lhf3;
}
int binsearch(bnoidxfile bif,int key)
{ int low,high,mid;
low=1;
high=bif.len;
while(low<=high)
{
mid=(low+high)/2;
if(key==bif.bnoidx[mid].bno)
return bif.bnoidx[mid].recno;
else if (key<bif.bnoidx[mid].bno)
high=mid-1;
else low=mid+1;
}
return 0;
}//binsearch
int bnamefind(lhfile1 lhf1,char key[])
{ int i,k=0;
for(i=1;i<=lhf1.len1;i++)
{ if(strcmp(key,lhf1.lhfrec1[i].bname)==0)
{
k=lhf1.lhfrec1[i].lhead;break;
}
}
return k;
}
int bauthfind(lhfile2 lhf2,char key[])
{ int i,k=0;
for(i=1;i<=lhf2.len2;i++)
{ if(strcmp(key,lhf2.lhfrec2[i].author)==0)
{
k=lhf2.lhfrec2[i].lhead;break;
}
}
return k;
}
int bpressfind(lhfile3 lhf3,char key[])
{ int i,k=0;
for(i=1;i<=lhf3.len3;i++)
{ if(strcmp(key,lhf3.lhfrec3[i].press)==0)
{
k=lhf3.lhfrec3[i].lhead;break;
}
}
return k;
}
void showrec(bookdbasefile bf, int i)
{
printf("书号 书 名 作者名 出版社 分类号 可借数\n");
printf("===============================================================\n");
printf("%d%13s",bf.bookdbase[i].bno,bf.bookdbase[i].bname);
printf("%8s%12s",bf.bookdbase[i].author,bf.bookdbase[i].press);
printf("%6s",bf.bookdbase[i].sortno);
printf("%7d\n",bf.bookdbase[i].storenum,bf.bookdbase[i].borrownum);
printf("===============================================================\n");
}
void searchbook(bookdbasefile bf,bnoidxfile bif,lhfile1 f1,lhfile2 f2,lhfile3 f3)
{ char sm[21],zz[9],cbs[11];
int i,k,choose=1;
int sh;
while(choose>=1 && choose<=5)
{
printf("图书查询子系统\n");
printf("----------------------\n");
printf("1.书 号 2.书 名 \n");
printf("3.作 者 4.出版社 \n");
printf("5.退出查询 \n");
printf("----------------------\n");
printf("请用户选择: ");
scanf("%d",&choose);
switch(choose)
{
case 1:
printf("输入书号: ");scanf("%d",&sh);
k=binsearch(bif,sh);
if(k==0)
{
printf("没有要查找的图书,请检验是否输入有错\n");
break;
}
showrec(bf,k);
break;
case 2:
printf("输入书名: ");scanf("%s",&sm);
k=bnamefind(f1,sm);
if(k==0)
{
printf("没有要查找的图书,请检验是否输入有错\n");
break;
}
for(i=k;i;i=bf.bookdbase[i].namenext)
showrec(bf,i);
break;
case 3:
printf("输入作者名: ");scanf("%s",&zz);
k=bauthfind(f2,zz);
if(k==0)
{
printf("没有要查找的图书,请检验是否输入有错\n");
break;
}
for(i=k;i;i=bf.bookdbase[i].authnext)
showrec(bf,i);
break;
case 4:
printf("输入出版社: ");scanf("%s",&cbs);
k=bpressfind(f3,cbs);
if(k==0)
{
printf("没有要查找的图书,请检验是否输入有错\n");
break;
}
for(i=k;i;i=bf.bookdbase[i].prenext)
showrec(bf,i);
break;
case 5:return;
}
}
}
rnoidxfile changernoidxf(readerfile rf,rnoidxfile rif)
{ int i,j,k=1;
i=rf.len;
j=rif.len;
while(j>=1)
{
if(rf.readrec[i].rno>rif.rnoidx[i].rno)
{ k=j+1;break;}
j--;
}
if(rif.len>0)
for(j=rif.len;j>=k;j--)
rif.rnoidx[j+1]=rif.rnoidx[j];
rif.rnoidx[k].rno=rf.readrec[i].rno;
rif.rnoidx[k].recno=i;
rif.len++;
return rif;
}
int rinsearch(rnoidxfile rif,int key)
{ int low,high,mid;
low=1;
high=rif.len;
while(low<=high)
{
mid=(low+high)/2;
if(key==rif.rnoidx[mid].rno)
return rif.rnoidx[mid].recno;
else if (key<rif.rnoidx[mid].rno)
high=mid-1;
else low=mid+1;
}
return 0;
}//rinsearch
readerfile readermanage(readerfile rf)
{ int i;
i=++rf.len;
printf("输入读者号 读者名 可借图书数\n");
scanf("%d %s",&rf.readrec[i].rno,rf.readrec[i].name);
scanf("%d",&rf.readrec[i].bn1);
rf.readrec[i].bn2=0;
return rf;
}
void borrowbook(bookdbasefile *bf,bnoidxfile bif,bbookfile *bbf,readerfile *rf,rnoidxfile rif)
{
char jyrq[9];
int sh,dzh;
int i,j,k;
printf("输入读者号 书号 借阅日期\n");
scanf("%d%d%s",&dzh,&sh,jyrq);
k=rinsearch(rif,dzh); //查找读者文件
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; //借还书记录数加1
bbf->bbook[i].rno=dzh; //借还书文件追加一条记录,记录相关内容
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,readerfile *rf,rnoidxfile rif)
{ char hsrq[9];
int sh,dzh;
int i,j,k,m=0;
printf("读者号 书号 还书日期 \n");
scanf("%d%d%s",&dzh,&sh,hsrq);
k=rinsearch(rif,dzh); //查找读者文件
if(k==0)
{printf("非法读者!\n");return;}
for(i=1;i<=bbf->len;i++) //查询借还书文件
if(sh==bbf->bbook[i].bno)
{ m=i;break;}
if(m==0) {printf("非法书号!\n");return;}
j=binsearch(bif,sh); //查找图书文件
if(j==0)
{printf("非法书号!\n");return;}
strcpy(bbf->bbook[m].date2,hsrq); //填入还书日期
rf->readrec[k].bn2--;//修改借书数
bf->bookdbase[j].borrownum--; //修改借出数
printf("还书成功!\n");
}
void writefile(bookdbasefile bf,bnoidxfile bif,lhfile1 f1,
lhfile2 f2,lhfile3 f3,readerfile rf,bbookfile bbf,rnoidxfile rif)
{FILE *fp;int i;
//写图书主文件
fp=fopen("book","wb");
for(i=1;i<=bf.len;i++)
fwrite(&bf.bookdbase[i],sizeof(bookrectype),1,fp);
fclose(fp);
//写图书索引文件
fp=fopen("bidx","wb");
for(i=1;i<=bif.len;i++)
fwrite(&bif.bnoidx[i],sizeof(bidxrectype),1,fp);
fclose(fp);
//写书名索引链头文件
fp=fopen("nidx","wb");
for(i=1;i<=f1.len1;i++)
fwrite(&f1.lhfrec1[i],sizeof(bnrectype),1,fp);
fclose(fp);
//写作者索引链头文件
fp=fopen("aidx","wb");
for(i=1;i<=f2.len2;i++)
fwrite(&f2.lhfrec2[i],sizeof(barectype),1,fp);
fclose(fp);
//写出版社索引链头文件
fp=fopen("pidx","wb");
for(i=1;i<=f3.len3;i++)
fwrite(&f3.lhfrec3[i],sizeof(bprectype),1,fp);
fclose(fp);
//写读者文件
fp=fopen("read","wb");
for(i=1;i<=rf.len;i++)
fwrite(&rf.readrec[i],sizeof(rrectype),1,fp);
fclose(fp);
//写借还书文件
fp=fopen("bbf","wb");
for(i=1;i<=bbf.len;i++)
fwrite(&bbf.bbook[i],sizeof(bbookrectype),1,fp);
fclose(fp);
//写读者号文件
fp=fopen("ridx","wb");
for(i=1;i<=rif.len;i++)
fwrite(&rif.rnoidx[i],sizeof(ridxrectype),1,fp);
fclose(fp);
}
void readfile(bookdbasefile *bf,bnoidxfile *bif,lhfile1 *f1,
lhfile2 *f2,lhfile3 *f3,readerfile *rf,bbookfile *bbf,rnoidxfile *rif)
{FILE *fp;int i;
//读图书主文件
fp=fopen("book","rb");
i=1;
while(!feof(fp)){
fread(&bf->bookdbase[i],sizeof(bookrectype),1,fp);
i++;if(feof(fp))break;
}
bf->len=i-2;fclose(fp);
//读书号索引文件
fp=fopen("bidx","rb");
i=1;
while(!feof(fp)){
fread(&bif->bnoidx[i],sizeof(bidxrectype),1,fp);
i++;
}
bif->len=i-2;fclose(fp);
//读书名索引链头文件
fp=fopen("nidx","rb");
i=1;
while(!feof(fp)){
fread(&f1->lhfrec1[i],sizeof(bnrectype),1,fp);
i++;
}
f1->len1=i-2;fclose(fp);
//读作者索引文件
fp=fopen("aidx","rb");
i=1;
while(!feof(fp)){
fread(&f2->lhfrec2[i],sizeof(barectype),1,fp);;
i++;
}
f2->len2=i-2;fclose(fp);
//读出版社索引链头文件
fp=fopen("pidx","rb");
i=1;
while(!feof(fp)){
fread(&f3->lhfrec3[i],sizeof(bprectype),1,fp);
i++;
}
f3->len3=i-2;fclose(fp);
//读读者文件
fp=fopen("read","rb");
i=1;
while(!feof(fp)){
fread(&rf->readrec[i],sizeof(rrectype),1,fp);
i++;
}
rf->len=i-2;fclose(fp);
//读借还书文件
fp=fopen("bbf","rb");
i=1;
while(!feof(fp)){
fread(&bbf->bbook[i],sizeof(bbookrectype),1,fp);
i++;
}
bbf->len=i-2;fclose(fp);
//读读者号索引文件
fp=fopen("ridx","rb");
i=1;
while(!feof(fp)){
fread(&rif->rnoidx[i],
展开阅读全文