《图书管理实验报告》由会员分享,可在线阅读,更多相关《图书管理实验报告(18页珍藏版)》请在金锄头文库上搜索。
1、 实习报告 (2013年) 实习题目:设一本书的基本资料由以下数据项来描述:1. 书号(设为一个无符号长整型);2. 书名(设为不超过30个字符的字符串);3. 作者名(设为不超过20个字符的字符串);4. 出版社(设为不超过30个字符串的字符串);5. 关键词(最多5个,每个关键词为不超过10个字符的英文单词);其中,设每本书的书号,书名,作者名和出版社均是唯一的.请用类形式来构造一个小型图书资料整理系统(模拟).该系统应能提供以下功能:1. 图书资料库:从键盘输入各图书资料,建立图书资料库;设图书依书号从小到大次序组织存放;2. 查询图书功能:1) 读书可通过提供书名查询,若该书仍在库中,
2、则列出该书资料;2) 读者可通过提供书号查询,若该书仍在库中,则列出该书资料;3) 读者也可以通过提供关键词查询(最多5个:一般情况下,读者提供用于查询的关键词个数都不会超过在书库中登记的图书原有的关键词个数),若提供的关键词和原书中关键词相匹配,则列出所有符合要求的所有图书资料个读者选择;读者可从系统所列出可供选择的图书资料信息中,通过书号来办理借阅的手续;3.借书功能:当锁查询的图书的确在库内时,读者可采用提供书号形式来办理借阅手续(每次操作只能借一本书);1)登记借阅人的姓名(不超过20个字符的字符串),电话(无符号长整型整数),借阅日期(年,月.日,均是整形量);4.还书功能:1)删去
3、图书中该书借阅人的资料;2).将该书资料归入”该图书仍在库内”状态;5.催还功能:管理人员定期列出借书人借阅图书资料,以便检查是否有超期借阅者,若有则发通知催还.说明:1. 理论上,图书资料库书量应没有限制(实际上是受硬件资料所限)2. 图书资料库可以采用以下组织形式:) 1)每本图书的资料有基本资料和借阅人资料组成,所有图书资料由一个链表链接在一起; 2)每本图书的资料也由基本资料和借阅人资料组成,但所有图书资料分别由未借出链表和 已借出链表在一起;3.请先确定好图书资料组织形式,然后再考虑设计功能的实现.4.模拟图书资料系统工作的主函数基本要求如下:1)在键盘上输入每本图书资料,在储存区建
4、立图书资料库.因无法预知图书册数,考研题设当输入书号为0时表示输入结束.图书资料库正常工作期间追加新入库图书时也如此办理;2)输出图书库中所有在库图书资料清单,此操作只由管理人员使用;3)输出图书库中已被借出的天数资料清单,此操作只由管理人员使用;4).查询图书.借阅图书.归还图书.追加图书;5)每借出一本图书或归还一本图书之后,输出书库内图书情况或借书人登记资料,以便可对操作是否完成;6)书库内没有登记的图书,不能办理借阅手续.当然,不是在改图书库借出的图书业不能在此处办理还书手续.源程序代码:#include#include#include#include#includestruct Da
5、te / 日期数据结构int year; int month; int day;struct Person / 个人信息数据结构char name20; long tele; / the telephone number Date dateb; / 声明dateb是struct Data成员;struct Book / 图书资料信息数据结构long ISBN; / 书号 char Bname31; / 书名 char Bwrite20; / 作者名 char Bprint31; / 出版社名 char *Bkeyword5; / 关键词 Book *link; / 指向下一连节点 Person
6、 message; /声明 message是 struct Person 类型);class Library / 图书馆类 protected: Book* librin; / 在书库链 Book* libout; / 借书链 public: Library(); / 构造函数 Library(); / 析构函数 void creat(); / 创建图书馆 void print1(); / 输出在书库图书 void inquire1(); / 书号查询 void inquire2(); / 书名查询 void inquire3(); / 关键词查询 void borrow(); / 借书 vo
7、id print2(); / 输出借出图书 void invert(); / 还书 void urge(); / 催还图书 void deleter(); / 删除图书 void insert(); / 增加新书;Library:Library() / 构造函数 libout=NULL;Library:Library() / 析构函数 ; int dayth(int Y,int M,int D) / 计算某年某月某日是当年第几天int dy=0; M=M-1; while(M0) do if(M=2) if(Y%4=0)&(Y%100!=0)|(Y%400=0)dy=dy+29;else dy
8、=dy+28; else if(M=8)&(M%2=0) dy=dy+31; else dy=dy+30; M=M-1; while(M0); dy=dy+D; return dy;int Ymday(int Y,int M) / 判断某年某月有几天if(M=2) if(Y%4=0)&(Y%100!=0)|(Y%400=0) return 29; else return 28; else if(M=8)&(M%2=0) return 31; else return 30; int Yeardays(int y) / 判断某年有几天if(y%4=0&y%100!=0)|(y%400=0) ret
9、urn 366; else return 365;long Leapdays(int yy1,int yy2) / 计算某年两年之间相距多少天long y,m,d=0; while(yy1yy2) m=Yeardays(yy1); d=d+m; yy1+; return d;void Library:creat() / 创建图书资料函数 Book *h,*q,*p,*temp,*k;int i=1,j; h=NULL; p=new Book; if( p=NULL ) coutnt Eorror ! ; exit(1); q=p; coutnt -The Book Infornation-n;
10、 coutnnNO.i; do coutp-ISBN; if(p-ISBN 0) coutISBN=0) break; while(p-ISBN ISBN 0) coutBname); coutBwrite); coutBprint); coutntInput the Bkeyword:( Input the NULL to end ); for(j=0;j5;j+) coutntNO.j+1Bkeywordj=new char20+1; gets(p-Bkeywordj); if(strcmp(p-Bkeywordj,)=0) break; q-link=NULL; while( p-ISB
11、N!=0 ) i+;if(h=NULL) h=p;if(i2) temp=h; while( p-ISBN temp-ISBN & temp-link!=NULL ) k=temp;temp=temp-link; if ( p-ISBN ISBN ) if(temp=h) p-link=temp;h=p; else k-link=p;p-link=temp; else temp-link=p;p-link=NULL; p=new Book; coutnnNO.i; do coutp-ISBN; if(p-ISBN 0) coutISBN ISBN 0 ) coutBname); coutBwrite); coutntInput the Bpri