《数据结构》课程设计报告书
图书管理信息系统
姓名:王艳青
性别:女
班级:计 063-1
学号:200625503106
日期:08 年 6 月 15 日
一、 课程设计题目:图书管理信息系统
二、课程设计内容:
实现图书管理信息系统的设计。这是一个数据结构的综合使用,涉及的知识比较全
面,特别是对文件的使用更为全面。
进入系统后,操作员可进行系统维护、读者管理、图书管理、图书流通、退出系统
等操作。
系统维护:有“初始化”和“读盘”两个重要操作。第一次开始运行时,必须选择“初始
化”,使有关文件指针、计数器等初始化为 0;而在以后的每次操作开始时,选择“读盘”,
将保存过的相关图书信息磁盘文件读入,以便进行各类操作。
读者管理:可实现读者信息的追加一项输入。需要输入读者号、读者名、可借书数
输入“y”可连续输入信息,若输入“n”则结束输入,退出读者管理。
图书管理:有“图书信息输入”和“图书信息查询”两个重要操作。若选“图书信息输入”,
就进入相关子模块,在输入信息的同时建立相应的索引及索引文件和索引链头文件,输入
书号、书名、作者名、出版社、分类号、藏书量等信息,根据提示输入“y”实现连续输入,
若输入“n”则结束输入,退出图书管理;有了图书信息数据之后,就可以进行图书信息的查
询以及图书借阅等操作了。若选“图书信息查询”,可根据提示按书号、书名、作者、出版
社等进行查询,系统会将查询结果输出。
图书流通:有“借书处理”和“还书处理”两个重要操作。当选择“借书处理”,系统接受输入
信息后,首先查询读者文件。若没查到,显示“非法读者!”,若查到,则再检查该读者书
是否已借满,如果未借满,则继续检查图书文件;否则显示“书已借满!”。检查图书文件
如发现书号不存在或书已借出,都会提示读者“非法书号!”或“书已借出”,否则,进行借出
处理,修改借阅文件、读者文件以及图书主文件的相关数据项,并显示“借书成功!”。当
选择“还书处理”,系统在接受输入信息之后,首先用书号查询借还书文件,若找到,则填
入还书日期,然后再用书号查询图书主文件,修改借出数,用读者号查找读者文件,修改
读者的借书数,而后显示“还书成功!”,否则显示“非法书号!”并返回主控菜单。
退出系统:当需要的操作完成后,选择该项,系统会自动将当前图书数据及相关的信
息写入磁盘文件。待下次运行系统时,首先读入文件,再进行各种操作。
三、算法设计:
对于主关键字的查找,采取折半查找的算法,对于次关键字的查找,采取顺序查找的
算法。
存储用到了静态链表和文件操作。
四、程序正确性验证(指边界测试数据,即程序对于精心选择的典型、苛刻而带有刁难性
的几组输入数据能够得出满足要求的结果):
(1)当输入相同的读者信息时:
(2)当输入相同的图书信息时:
(3)当借书时输入无效的读者号时:
(4)当借书时输入无效的书号时:
(5)当还书时输入错误的书号时:
五、课程设计过程中出现的主要问题、原因及解决方法:
出现的主要问题是:当连续输入三个字符串时,第二个字符串不能传入变量中;
原因:第一个字符数组的长度定义的有问题。
解决方法:让三个字符串分开输入,将第一个字符数组的长度加 1。
出现的问题还有,就是对 scanf 和 prinf 的用法不熟。
六、课程设计的主要收获:
通过这次课程设计,我对学过的知识进行了综合,一些理解的不够深刻的问题,能
得以解决。从碰到问题,在网上找资料,从图书馆借相关书籍看,请同学和老师帮忙,
到真正解决问题,我经历了,从痛苦到喜悦的全过程。
这次课程设计给我更多的,我想还是那份编程的经验与其过程中的酸甜苦辣。
同时很感谢帮助过我的同学,更感谢胡老师的悉心教导。
七、对今后课程设计的建议:
希望老师在验收时,不要盲目的相信学生,也不要怀疑学生,仅此而已。
八、源代码
/*borrow.c*//*(1)借书处理算法*/
void BorrowBook(BookDbaseFile &bf,BnoIdxFile bif,BbookFile &bbf,ReadFile &rf)
{ char dzh[4],sh[5],jyrq[8]; char a[5]; int i,j,k=0,jls=0;
cout<<"输入读者号:"; cin>>dzh;
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; }
cout<<"输入书号:"; cin>>sh;
strcpy(a,sh);
j=BinSearch(bif,sh); //查找图书文件
if(j==0)
{ printf("非法书号!\n");
return; }
if(bf.BookDbase[j].borrownum>=bf.BookDbase[j].storenum)
{ printf("图书已借出\n");
return; }
cout<<"输入借书日期:"; cin>>jyrq;
jls=++bbf.len; //借还书文件记录数加 1
strcpy(bbf.Bbook[jls].rno,dzh); //借还书文件追加一条记录,记录相关内容
strcpy(bbf.Bbook[jls].bno,a); strcpy(bbf.Bbook[jls].date1,jyrq);
rf.ReadRec[k].bn2++;
cout<<"该读者现在已借书数:"<<rf.ReadRec[k].bn2<<endl;
bf.BookDbase[j].borrownum++;
cout<<"该图书被借出次数:"<<bf.BookDbase[j].borrownum<<endl;
printf("借书成功!\n");
}
/*(2)还书处理算法*/
void BackBook(BookDbaseFile &bf,BnoIdxFile bif,BbookFile &bbf,ReadFile &rf)
{ char dzh[8],sh[4],hsrq[8];
int i,j,k=0,m=0;
cout<<"输入读者号:"; scanf("%s",dzh);
for(i=1;i<=rf.len;i++) //查找读者文件
if(strcmp(dzh,rf.ReadRec[i].rno)==0)
{ k=i; break; }
if(k==0){printf("非法读者!\n");return;}
cout<<"输入书号:"; scanf("%s",sh);
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;}
cout<<"输入还书日期:"; scanf("%s",hsrq);
rf.ReadRec[k].bn2--; //修改借书数
bf.BookDbase[j].borrownum--; //修改借出数
strcpy(bbf.Bbook[m].date2,hsrq); //填入还书日期 printf("还书成功!\n"); }
/*createfile.c 输入图书记录建立相关文件*/
/*(1)追加一条图书主数据库记录*/