1、6图书管理系统实验课程名称 数据结构课程设计 专 业 班 级 计算机科学与技术10级1班 学 生 姓 名 10410901019 学 号 罗泽丽 指 导 教 师 冯 韵 2012至201学年第 一 学期第 一 至 二 周目 录1概述 31.1现状分析 31.2存在的问题 31.3实现意义 32系统分析 43概要设计 43.1设计要求 432流程图 43.2.1系统管理图 43.2.2系统维护图 53.2.3图书管理图 53.2.4图书查询子系统图 53.2.5图书流通图 63.3总流程图 64详细设计 74.1主数据库文件 742输入图书记录建立相关文件 94.2.1添加图书主数据记录 94.
2、2.2 修改书号索引 94.2.3修改书名索引和表 104.2.4修改作者索引和表 114.2.5修改出版社索引和表 124.2.6建立图书多重表主索和表 124.3查询信息 134.3.1按书号查询 134.3.2按书名查询 134.3.3按作者查询 144.3.4按出版社查询 144.3.5输出图书主数据库记录 144.3.6输出图书主数据库记录 154.4借还书处理 164.4.1借书处理 164.2还书处理 174.5读者管理子系统 184.6文件写盘 184.7读入盘中文件 195运行与测试 215.1 图书管理系统 215.2系统初始化 225.3读者管理 225.4图书管理 23
3、5.5图书查询 235.5.1按书号查询 235.5.2按作者名查询 245.5.2按出版社查询 245.5.3按书名查询 245.6借书处理 245.7还书处理 256总结和心得 257参考文献 258附录 261概述1.1现状分析 图书馆每天都有很多的人借书还书,而且书的编号,种类都是不一样的,但是,完全是人工操作,不仅增大了工作量,还浪费了大量的时间,既浪费时间也浪费精力。1.2存在的问题以往的图书馆管理完全手工操做,通过卡片记录信息,既浪费时间,又浪费人工、纸张,而且书籍和读者的信息查询比较麻烦,也会存在着许多的差错,查找起来也不方便,不能提供需要的各种信息如本馆各种资料分布及借阅情况
4、,让管理者查找起来相当的不方便。从而带来了许多的麻烦。1.3实现意义1.图书馆管理系统可以大大地提高工作效率。2. 减少工作中可能出现的错误。3.节约借书,还书的时间。4. 更加的方便,快捷。2系统分析1. 系统维护 它又包含初始化和读盘。2. 读者管理。3. 图书管理 包括图书信息输入和图书信息查询。4. 图书查询子系统 分别按照书号,书名,作者,出版社进行查询。5. 图书流通里面包含借书处理。6图形界面要简单,明了,人性化。3概要设计3.1设计要求1.建立一个图书信息数据库文件,输入若干种书的记录,建立一个以书号为关键字的索引文件;在主数据库文件中建立以书名,作者以及出版社作为次关键字的索
5、引以及对应的索引链头文件。2.建立关于书号,书名,作者及出版社的图书查询。3.实现图书的借还子系统,包括建立读者文件,借还文件,读者管理及图书借还等相关的处理。32流程图3.2.1系统管理图3.2.2系统维护图 3.2.3图书管理图3.2.4图书查询子系统图 3.2.5图书流通图 3.3总流程图4详细设计4.1主数据库文件typedef struct char bno5; /书号 char bname21; /书名 int namenext; char author9; /作者 int authnext; /作者链指针(用记录号) char press11; /出版社 int prenext;
6、 /出版社链指针(用记录号) char sortno4; /分类号 int storenum; /藏书量 int borrownum; /借出数BookRecType; /数据库记录类型typedef struct BookRecType BookDbaseBookSize; int len; /文件当前长度BookDbaseFile; /定义图书数据库文件类型typedef struct char bno5; /书号 int RecNo; /记录指针BidxRecType;typedef struct BidxRecType BnoIdxBookSize; int len; /当前记录个数B
7、noIdxFile; /书号索引文件类型/*书名链头索引文件*/typedef struct char bname21; /书名 int lhead; /链头指针 int RecNum; /长度BNRecType; /书名链头文件记录类型typedef struct BNRecType LHFrec1BLHnum; int len1; /链头文件当前长度LHFile1; /书名链头文件类型typedef struct char author9; /作者 int lhead; /链头指针 int RecNum; /长度BARecType; /作者链头文件记录类型typedef struct BA
8、RecType LHFrec2BLHnum; int len2;LHFile2; /作者链头文件类型typedef struct char press11; /出版社 int lhead; /链头指针 int RecNum; /长度BPRecType; /出版社链头文件记录类型typedef struct BPRecType LHFrec3BLHnum; int len3;LHFile3; /出版社链头文件类型typedef struct char rno4; /读者号 char name8; /读者名 int bn1; /可借书数 int bn2; /已借书数RRecType; /读者文件类
9、型typedef struct RRecType ReadRecRRnum; int len; /当前读者数ReFile; /读者文件类型typedef struct char rno4; /读者号 char bno5; /书号 char date19; /借书日期 char date29; /还书日期BbookRecType; /借还书文件记录类型typedef struct BbookRecType BbookBookSize; int len;BookFile; /借还书文件类型4.2 通讯录建立模块设42输入图书记录建立文件4.2.1添加图书记录void AppDBaseRec(Boo
10、kDbaseFile &df) /追加一条图书主数据库记录 int i; i=+df.len; /图书主数据库长度加1 printf(书号 书名 作者名 出版社 分类 藏书量n); scanf(%s %s,df.BookDbasei.bno, df.BookDbasei.bname); scanf(%s %s,df.BookDbasei.author, df.BookDbasei.press); scanf(%s %d,df.BookDbasei.sortno, &df.BookDbasei.storenum); df.BookDbasei.borrownum=0; /借出置04.2.2 修改
11、书号索引 (void AppDBaseRec(BookDbaseFile &df) /追加一条图书主数据库记录 int i; i=+df.len; /图书主数据库长度加1 printf(书号 书名 作者名 出版社 分类 藏书量n); scanf(%s %s,df.BookDbasei.bno, df.BookDbasei.bname); scanf(%s %s,df.BookDbasei.author, df.BookDbasei.press); scanf(%s %d,df.BookDbasei.sortno, &df.BookDbasei.storenum); df.BookDbasei.
12、borrownum=0; /借出置0void ChangeBnoIdxF(BookDbaseFile &df,BnoIdxFile &bif) /修改书号索引表 int i,j,k; char sh4; i=df.len; /图书主文件的当前长度,也就是要处理的当前记录号 strcpy(sh,df.BookDbasei.bno); /取记录中书号送至变量sh中 j=bif.len; k=1; while(j=1) /查找插入位置 if(strcmp(sh,bif.BnoIdxj.bno)0) k=j+1; break; j-; if(bif.len0) /有序表的插入 for(j=bif.le
13、n;j=k;j-) bif.BnoIdxj+1=bif.BnoIdxj; /记录后移 strcpy(bif.BnoIdxk.bno,sh); bif.BnoIdxk.RecNo=i; bif.len+; /表长度加14.2.3修改书名索引和表void ChangeLinkHeadF1(BookDbaseFile &df,LHFile1 &lhf1) int i,j,k,m; char sm20; i=df.len; /图书主文件的当前长度,也就是要处理的当前记录号 strcpy(sm,df.BookDbasei.bname); /取记录中书名送至变量sm中 j=1; k=0; while(j=
14、lhf1.len1) /查找与次关键字相等的记录 if(strcmp(sm,lhf1.LHFrec1j.bname)=0) k=j; break; j+; if(k!=0) df.BookDbasei.namenext=lhf1.LHFrec1k.lhead; lhf1.LHFrec1k.lhead=i; /主文件的当前记录号(假定为指针) lhf1.LHFrec1k.RecNum+; else m=+lhf1.len1; /索引关键字个数加1 df.BookDbasei.namenext=0; /用头插法建立链表,指针置空 lhf1.LHFrec1m.lhead=i; /i为主文件的当前记录
15、号(假定为指针) lhf1.LHFrec1m.RecNum=1; /计数器置1 strcpy(lhf1.LHFrec1m.bname,sm); 4.2.4修改作者索引和表void ChangeLinkHeadF2(BookDbaseFile &df,LHFile2 &lhf2) /修改作者索引以及作者链头索引表 int i,j,k,m; char zz8; i=df.len; /图书主文件的当前长度,也就是要处理的当前记录号 strcpy(zz,df.BookDbasei.author); /取记录中书名送至变量zz中 j=1; k=0; while(j=lhf2.len2) /查找与次关键字
16、相等的记录 if(strcmp(zz,lhf2.LHFrec2j.author)=0) k=j; break; j+; if(k!=0) df.BookDbasei.authnext=lhf2.LHFrec2k.lhead; lhf2.LHFrec2k.lhead=i; /主文件的当前记录号(假定为指针) lhf2.LHFrec2k.RecNum+; else m=+lhf2.len2; /索引关键字个数加1 df.BookDbasei.authnext=0; /用头插法建立链表,指针置空 lhf2.LHFrec2m.lhead=i; /i为主文件的当前记录号(假定为指针) lhf2.LHFr
17、ec2m.RecNum=1; /计数器置1 strcpy(lhf2.LHFrec2m.author,zz); 4.2.5修改出版社索引和表void ChangeLinkHeadF3(BookDbaseFile &df,LHFile3 &lhf3) /修改出版社索引以及出版社链头索引表 int i,j,k,m; char cbs10; i=df.len; /图书主文件的当前长度,也就是要处理的当前记录号 strcpy(cbs,df.BookDbasei.press); /取记录中书名送至变量cbs中 j=1; k=0; while(j=lhf3.len3) /查找与次关键字相等的记录 if(st
18、rcmp(cbs,lhf3.LHFrec3j.press)=0) k=j; break; j+; if(k!=0) df.BookDbasei.prenext=lhf3.LHFrec3k.lhead; lhf3.LHFrec3k.lhead=i; /主文件的当前记录号(假定为指针) lhf3.LHFrec3k.RecNum+; else m=+lhf3.len3; /索引关键字个数加1 df.BookDbasei.prenext=0; /用头插法建立链表,指针置空 lhf3.LHFrec3m.lhead=i; /i为主文件的当前记录号(假定为指针) lhf3.LHFrec3m.RecNum=1
19、; /计数器置1 strcpy(lhf3.LHFrec3m.press,cbs); 4.2.6建立图书多重表主索和表void createBook(BookDbaseFile &df,BnoIdxFile &bif,LHFile1 &lhf1,LHFile2 &lhf2,LHFile3 &lhf3) char yn=y; while(yn=y | yn=Y) AppDBaseRec(df); /输入记录 ChangeBnoIdxF(df,bif); /修改书号索引文件 ChangeLinkHeadF1(df,lhf1); /修改书名索引文件 ChangeLinkHeadF2(df,lhf2);
20、 /修改作者索引文件 ChangeLinkHeadF3(df,lhf3); /修改出版社索引文件 printf(继续输入吗?y/n:n); scanf(%s,&yn); 4.3查询信息4.3.1按书号查询int BinSearch(BnoIdxFile bif,char key) /按书号查询法 int low,high,mid; low=1; high=bif.len; while(low=high) mid=(low+high)/2; if(strcmp(key,bif.BnoIdxmid.bno)=0) return bif.BnoIdxmid.RecNo; else if(strcmp
21、(key,bif.BnoIdxmid.bno)0) high=mid-1; else low=mid+1; return 0;4.3.2按书名查询int BnameFile(LHFile1 lhf1,char key) /按书名查询法 int i,k=0; for(i=1;ilhf1.len1;i+) if(strcmp(key,lhf1.LHFrec1i.bname)=0) k=lhf1.LHFrec1i.lhead; break; return k;4.3.3按作者查询int BauthFile(LHFile2 lhf2,char key) /按作者查询法 int i,k=0; for(i
22、=1;ilhf2.len2;i+) if(strcmp(key,lhf2.LHFrec2i.author)=0) k=lhf2.LHFrec2i.lhead; break; return k;4.3.4按出版社查询int BpressFile(LHFile3 lhf3,char key) /按出版社查询法 int i,k=0; for(i=1;i=1 & choose=5) printf(图书查询子系统n); printf(1.书号 2.书名 3.作者 4.出版社 5.退出n); printf(请选择:n); scanf(%d,&choose); switch(choose) case 1:
23、printf(输入书号:n); scanf(%s,sh); k=BinSearch(bif,sh); /调用书号查询算法 if(k=0) printf(没有要查找的图书,请检查是否输入有错n); break; ShowRec(df,k); break; case 2: printf(输入书名:n); scanf(%s,sm); k=BnameFile(f1,sm); /调用书名查询算法 if(k=0) printf(没有要查找的图书,请检查是否输入有错n); break; for(i=k;i;i=df.BookDbasei.namenext) ShowRec(df,i); /输出查找的图书记录
24、 break; case 3: printf(输入作者名:n); scanf(%s,zz); k=BauthFile(f2,zz); /调用作者名查询算法 if(k=0) printf(没有要查找的图书,请检查是否输入有错n); break; for(i=k;i;i=df.BookDbasei.authnext) ShowRec(df,i); /输出查找的图书记录 break; case 4: printf(输入出版社:n); scanf(%s,cbs); k=BpressFile(f3,cbs); /调用出版社查询算法 if(k=0) printf(没有要查找的图书,请检查是否输入有错n); break; for(i=k;i;i=df.BookDbasei.authnext) ShowRec(df,i); /输出查找的图书记录 break; case 5: return; 4.4借还书处理4.4.1借书处理void BorrowBook(BookDbaseFile &bf,BnoIdxFile bif,BookFile &bbf,ReFile &rf) /借书处理 char dzh8,sh4,jyrq8; int i,j,k=0; printf(输
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1