《数据结构》课程设计报告课题名称:简易图书管理系统专业班级:11软件2班学号:201103112姓名:___________指导老师:刘杰成绩:__________________2012年12月一、课题名称简易图书管理系统二、主要内容图书管理系统的设计主要是实现对图书的管理和相关操作。基本功能如下:(1)图书信息录入、添加功能:包括书号(即ISBN号,不可重复)、书名(多书可重名)、作者、出版社名称、存馆数量、定价等。(2)图书信息查询功能:①按书名进行查询。②按作者名进行查询。③按出版社进行查询。(3)排序:①按书号的升序进行排序;②按作者的升序进行排序,作者相同时按书号的升序再进行排序(4)图书的修改、删除功能:①按书号进行图书的修改、删除②按书名进行图书的修改、删除(同样的书名多于1本书时,再指定具体修改和删除的书号)。(5)图书借阅、归还功能:如果一种书的现存量大于0,可以借出,借出相应数量后改存馆数量;归还时改变该书的存馆数量。三、课题设计的基本思想,原理和算法描述这个简易图书管理系统所采用的是线性表的顺序存储结构,把线性表中的所有元素按照逻辑顺序依次存储在一块连续的存储空间。定义顺序表时,采用数组来储存表中的所有元素,同时还定义了一个变量来表示顺序表的实际长度。首先构造一个空的线性表L,再把长度设为0;录入图书信息时,成功添加时将线性表的长度加1,则可完成录入信息。在执行删除图书信息时,将所要删除的元素之后的元素均向前移动一个位置,再将顺序表的长度减1,即可实现删除的功能。在实现排序功能这块,采用了冒泡排序法。再如图书的借阅和归还功能的实现,将存馆数量作相应修改,借出时将馆存减1,归还时再将馆存加1。界面设计:本系统所要实现的功能较多,为了使主界面更加简洁,采用了子菜单的界面设计,将部分功能放在子菜单来实现。这样简化了主界面,同时使系统更完善。输入输出设计:输入除馆存数量是int外,其他均为char型。功能模块设计:包含输入、查找、删除、修改、排序、借阅和归还功能。流程图:四、运行示例及结果分析按书名查询按作者查询按出版社查询按书号删除按书号修改按书名修改按书名删除图书借阅图书归还主菜单图书信系录入图书信系查询图书信系修改图书信系删除图书信系排序图书信系管理按书名排序按书号排序图1图书管理系统主菜单图1.1图书信息输入图2.1图书信息查询子菜单图2.2按书名查找图书信息图2.3按作者名查询图书信息图2.4按出版社查询图书信息图3.1按书号进行图书排序图3.2按作者名进行图书排序图4.1按书号进行图书修改图4.2按书名进行图书修改图5.1按书号进行图书删除图5.2按书名进行图书删除图6.1图书借阅图6.2图书归还五、调试和运行程序过程中产生的问题及采取的措施本次课程设计遇到的问题主要有以下几点:(1)在修改、删除函数执行还能查找到被删除(或)修改的数据;经过调试及修改发现问题在于函数中的形参不能传递,缺少取地址符。(2)在采用冒泡排序法排序时,不能调换字符串位置。解决:用strcpy可以将字符串赋值。(3)在主菜单与子菜单的相互调用方面存在着问题。解决:将主菜单单独放在一个函数里面,这样就可以实现简单调用了。六、总结这次课程设计做的是简易图书管理系统,这个系统跟以前作业学生管理系统非常类似,只是在那个基础上多增加了一个排序和图书的借阅归还功能。选择用顺序表来完成这个程序,是觉得顺序表在理解方面要比链表简单的多。尝试过用链表来实现排序功能,但一直碰壁。初步分析了题目后,了解到需要实现的功能有11个,如果全部放在主菜单里面会使得界面看起来复杂,不够简洁。为此采用了子菜单的模块设计,但也为后来带来了许多麻烦。系统中的不同查询方式其实就是变量名的变化而已,再用顺序表编写时很顺利的完成了。在系统编写中遇到问题最多的就是排序,按图书的书号排序,定义书号是整型的,比较书号大小,然后交换位置。虽然思想简单,但在实际操作中并不是这样。其中涉及到字符串的交换,起初使用“=”赋值来交换,后来查书才了解字符串的赋值改用strcpy来完成。同时,有不少小问题通过自己不断调试、修改能够完全解决。现在存在的不足之处主要是在菜单上会出现一些小Bug。比如在调用二级菜单返回主菜单后,会出现无法退出等情况,需要进一步完善。另外系统上有些不足之处就是没有判断输入图书信息是否是现存馆内已有图书,如果是的话应该将馆存数量上做相应的修改。通过本次课程设计,我们认识到必须牢固掌握好基础知识,熟悉各种算法,并在这基础之上灵活利用。我们平时应该多练习,不能只看代码而不去做,这样是对编程提高不了多少的。通过我们对C语言以及数据结构有了更深刻的了解,增强了程序的编写能力,巩固了专业知识,对程序的模块化观念更清楚了。在程序的运行与调试过程中出现了很多错误,通过反复地复习课本上的相关知识,不停地修改与调试,我们终于完成了这段程序。在调试过程中,认识到了数据结构的灵活性与严谨性,同一个功能可以由不同的语句来实现,但编写程序时要特别注意细节方面的问题,因为一个小小的疏忽就能导致整个程序不能运行。我也认识到了自己的薄弱之处,在以后的学习中要集中精力、端正态度,争取把知识学得更扎实、更全面。七、参考文献[1]李建学等著.数据结构课程设计案例精编.清华大学出版社,2007[2]唐宁九等主编.数据结构与算法(C++版)实验和课程设计教程.清华大学出版社,2008)[3]谭浩强著.C程序设计.清华大学出版社,2010八、源代码#includestdio.h#includemalloc.h#includestring.h#includestdlib.h#defineMaxSize100typedefstruct{charisbn[30];//书号charname[30];//书名charwriter[30];//作者charproducter[30];//出版社intnum;//馆存数量charprice[20];//价格}ElemType;typedefstruct{ElemTypedata[MaxSize],data1[MaxSize];intlength;}SqList;voidInitList(SqList*&L)//初始化线性表{L=(SqList*)malloc(sizeof(SqList));L-length=0;}intListEmpty(SqList*L)//判断线性表是否为空{return(L-length==0);}voidAddBook(SqList*&L)//添加图书信息{intbz=0;printf(请输入图书信息!\n);printf(书号\t书名\t作者\t出版社\t馆存数量(整型)\t价格\n);scanf(%s%s%s%s%d%s,L-data[L-length].isbn,L-data[L-length].name,L-data[L-length].writer,L-data[L-length].producter,&L-data[L-length].num,L-data[L-length].price);printf(\n);for(inti=0;iL-length;i++){if(strcmp(L-data[i].isbn,L-data[L-length].isbn)==0){L-data[i].num++;bz=1;break;}}if(bz==0)L-length++;printf(添加图书成功!\n);}voidSearch_i(SqList*&L)//按书号查询{printf(请输入你想要查找图书的书号:);charisbn[30];scanf(%s,&isbn);inti=0;while(iL-length&&strcmp(L-data[i].isbn,isbn)!=0){i++;}if(i=L-length){printf(图书馆没有此图书!\n);}else{printf(书号\t书名\t作者\t出版社\t馆存数量\t价格\n);printf(%s\t《%s》\t%s\t%s\t%d册\t%s元,L-data[i].isbn,L-data[i].name,L-data[i].writer,L-data[i].producter,L-data[i].num,L-data[i].price);printf(\n);}}voidSearch_n(SqList*&L)//按书名查询{printf(请输入你想查找图书的书名:);charname[30];scanf(%s,&name);inti=0,b=0;for(i;iL-length;i++){if(strcmp(L-data[i].name,name)==0)b++;}if(b==0){printf(图书馆没有此图书!\n);}else{printf(书号\t书名\t作者\t出版社\t馆存数量\t价格\n);for(i=0;iL-length;i++){if(strcmp(L-data[i].name,name)==0){printf(%s\t《%s》\t%s\t%s\t%d册\t%s元,L-data[i].isbn,L-data[i].name,L-data[i].writer,L-data[i].producter,L-data[i].num,L-data[i].price);printf(\n);}}}}voidSearch_w(SqList*&L)//按作者查询{printf(请输入你想要查找图书的作者:);charwriter[30];scanf(%s,&writer);inti=0,b=0;for(i;iL-length;i++){if(strcmp(L-data[i].writer,writer)==0)b++;}if(b==0){printf(图书馆没有此图书!\n);}else{printf(%s的作品共有%d本,信息如下:\n,writer,b);printf(书号\t书名\t作者\t出版社\t馆存数量\t价格\n);for(i=0;iL-length;i++){if(strcmp(L-data[i].writer,writer)==0){printf(%s\t《%s》\t%s\t%s\t%d册\t%s元,L-data[i].isbn,L-data[i].name,L-data[i].writer,L-data[i].producter,L-data[i].num,L-data[i].price);printf(\n);}}}}voidSearch_p(SqList*&L)//按出版社查询{printf(请输入你想要查找图书的出版社:);charproducter[30];scanf(%s,&producter);inti=0,c=0;for(i;iL-length;i++){if(strcmp(L-data[i].producter,producter)==0)c++;}if(c==0){printf(图书馆没有此图书!\n);}else{printf(%s出版的作品共有%d本,信息如下:\n,producter,c);printf(书号\t书名\t作者\t出版社\t馆存数量\t价格\n);for(i=0;iL-length;i++){if(strcmp(L-data[i].producter,producter)==0){printf(%s\t《%s》\t%s\t%s\t%d册\t%s元,L-data[i].isbn,L-data[i].name,L-data[i].writer,L-data[i].producter,L-data[i].num,L-data[i].price);printf(\n);}}}}voidRevise_i(SqList*&L)//按书号修改图书{printf(请输入你