数据结构-课程设计-简易图书管理系统_第1页
数据结构-课程设计-简易图书管理系统_第2页
数据结构-课程设计-简易图书管理系统_第3页
数据结构-课程设计-简易图书管理系统_第4页
数据结构-课程设计-简易图书管理系统_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构课程设计报告 课题名称: 简易图书管理系统 专业班级: 11软件2班 学 号: 姓 名:_ _指导老师: 刘 杰 成 绩:_ 2012年12月1、 课题名称简易图书管理系统二、主要内容图书管理系统的设计主要是实现对图书的管理和相关操作。基本功能如下:(1)图书信息录入、添加功能:包括书号(即ISBN号,不可重复)、书名(多书可重名)、作者、出版社名称、存馆数量、定价等。(2)图书信息查询功能:按书名进行查询。按作者名进行查询。按出版社进行查询。(3)排序:按书号的升序进行排序;按作者的升序进行排序,作者相同时按书号的升序再进行排序(4)图书的修改、删除功能:按书号进行图书的修改、删除按

2、书名进行图书的修改、删除(同样的书名多于1本书时,再指定具体修改和删除的书号)。(5)图书借阅、归还功能:如果一种书的现存量大于0,可以借出,借出相应数量后改存馆数量;归还时改变该书的存馆数量。三、课题设计的基本思想,原理和算法描述这个简易图书管理系统所采用的是线性表的顺序存储结构,把线性表中的所有元素按照逻辑顺序依次存储在一块连续的存储空间。定义顺序表时,采用数组来储存表中的所有元素,同时还定义了一个变量来表示顺序表的实际长度。首先构造一个空的线性表L,再把长度设为0;录入图书信息时,成功添加时将线性表的长度加1,则可完成录入信息。在执行删除图书信息时,将所要删除的元素之后的元素均向前移动一

3、个位置,再将顺序表的长度减1,即可实现删除的功能。在实现排序功能这块,采用了冒泡排序法。再如图书的借阅和归还功能的实现,将存馆数量作相应修改,借出时将馆存减1,归还时再将馆存加1。界面设计:本系统所要实现的功能较多,为了使主界面更加简洁,采用了子菜单的界面设计,将部分功能放在子菜单来实现。这样简化了主界面,同时使系统更完善。输入输出设计:输入除馆存数量是int外,其他均为char型。功能模块设计:包含输入、查找、删除、修改、排序、借阅和归还功能。流程图:按书名查询按作者查询按出版社查询按书号删除按书号修改按书名修改按书名删除图书借阅图书归还主菜单图书信系录入图书信系查询图书信系修改图书信系删除

4、图书信系排序图书信系管理按书名排序按书号排序四、运行示例及结果分析图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)在修改、删除函数执行还能查找到被删除(或)修改的数据;经过调试及修改发现问

5、题在于函数中的形参不能传递,缺少取地址符。(2)在采用冒泡排序法排序时,不能调换字符串位置。解决:用strcpy可以将字符串赋值。(3)在主菜单与子菜单的相互调用方面存在着问题。解决:将主菜单单独放在一个函数里面,这样就可以实现简单调用了。6、 总结这次课程设计做的是简易图书管理系统,这个系统跟以前作业学生管理系统非常类似,只是在那个基础上多增加了一个排序和图书的借阅归还功能。选择用顺序表来完成这个程序,是觉得顺序表在理解方面要比链表简单的多。尝试过用链表来实现排序功能,但一直碰壁。初步分析了题目后,了解到需要实现的功能有11个,如果全部放在主菜单里面会使得界面看起来复杂,不够简洁。为此采用了

6、子菜单的模块设计,但也为后来带来了许多麻烦。系统中的不同查询方式其实就是变量名的变化而已,再用顺序表编写时很顺利的完成了。在系统编写中遇到问题最多的就是排序,按图书的书号排序,定义书号是整型的,比较书号大小,然后交换位置。虽然思想简单,但在实际操作中并不是这样。其中涉及到字符串的交换,起初使用“=”赋值来交换,后来查书才了解字符串的赋值改用strcpy来完成。同时,有不少小问题通过自己不断调试、修改能够完全解决。现在存在的不足之处主要是在菜单上会出现一些小Bug。比如在调用二级菜单返回主菜单后,会出现无法退出等情况,需要进一步完善。另外系统上有些不足之处就是没有判断输入图书信息是否是现存馆内已

7、有图书,如果是的话应该将馆存数量上做相应的修改。通过本次课程设计,我们认识到必须牢固掌握好基础知识,熟悉各种算法,并在这基础之上灵活利用。我们平时应该多练习,不能只看代码而不去做,这样是对编程提高不了多少的。通过我们对C语言以及数据结构有了更深刻的了解,增强了程序的编写能力,巩固了专业知识,对程序的模块化观念更清楚了。在程序的运行与调试过程中出现了很多错误,通过反复地复习课本上的相关知识,不停地修改与调试,我们终于完成了这段程序。在调试过程中,认识到了数据结构的灵活性与严谨性,同一个功能可以由不同的语句来实现,但编写程序时要特别注意细节方面的问题,因为一个小小的疏忽就能导致整个程序不能运行。我

8、也认识到了自己的薄弱之处,在以后的学习中要集中精力、端正态度,争取把知识学得更扎实、更全面。七、参考文献1 李建学等著.数据结构课程设计案例精编.清华大学出版社,20072 唐宁九等主编.数据结构与算法(C+版)实验和课程设计教程. 清华大学出版社,2008)3 谭浩强著.C程序设计.清华大学出版社,20108、 源代码#include #include #include #include#define MaxSize 100typedef struct char isbn30; /书号char name30; /书名char writer30; /作者char producter30; /出

9、版社int num; /馆存数量char price20; /价格ElemType;typedef struct ElemType dataMaxSize,data1MaxSize; int length; SqList;void InitList(SqList *&L) /初始化线性表L=(SqList *)malloc(sizeof(SqList);L-length=0;int ListEmpty(SqList *L) /判断线性表是否为空return(L-length=0);void AddBook(SqList *&L) /添加图书信息int bz=0;printf(请输入图书信息!n

10、);printf(书号t书名t作者t出版社t馆存数量(整型)t价格n);scanf(%s %s %s %s %d %s,L-dataL-length.isbn,L-dataL-,L-dataL-length.writer,L-dataL-ducter,&L-dataL-length.num,L-dataL-length.price);printf(n); for(int i=0;ilength;i+)if(strcmp(L-datai.isbn,L-dataL-length.isbn)=0) L-datai.num+; bz=1;break;if(bz

11、=0)L-length+;printf(添加图书成功!n);void Search_i(SqList *&L) /按书号查询printf(请输入你想要查找图书的书号:);char isbn30;scanf(%s,&isbn);int i=0;while(ilength&strcmp(L-datai.isbn,isbn)!=0)i+;if(i=L-length)printf(图书馆没有此图书!n);elseprintf(书号t书名t作者t出版社t馆存数量t价格n); printf(%st%st%st%st%d册t%s元,L-datai.isbn,L-,L-datai.writ

12、er,L-ducter,L-datai.num,L-datai.price); printf(n); void Search_n(SqList *&L) /按书名查询printf(请输入你想查找图书的书名:);char name30;scanf(%s,&name);int i=0,b=0;for(i;ilength;i+)if(strcmp(L-,name)=0)b+;if(b=0)printf(图书馆没有此图书!n); else printf(书号t书名t作者t出版社t馆存数量t价格n); for(i=0;ilength;i+) if(strcmp(L-

13、,name)=0) printf(%st%st%st%st%d册t%s元,L-datai.isbn,L-,L-datai.writer,L-ducter,L-datai.num,L-datai.price); printf(n); void Search_w(SqList *&L) /按作者查询printf(请输入你想要查找图书的作者:);char writer30;scanf(%s,&writer);int i=0,b=0;for(i;ilength;i+)if(strcmp(L-datai.writer,writer)=0)b+;i

14、f(b=0)printf(图书馆没有此图书!n);elseprintf(%s的作品共有%d本,信息如下:n,writer,b);printf(书号t书名t作者t出版社t馆存数量t价格n);for(i=0;ilength;i+)if(strcmp(L-datai.writer,writer)=0)printf(%st%st%st%st%d册t%s元,L-datai.isbn,L-,L-datai.writer,L-ducter,L-datai.num,L-datai.price);printf(n);void Search_p(SqList *&L) /按出

15、版社查询printf(请输入你想要查找图书的出版社:);char producter30;scanf(%s,&producter);int i=0,c=0;for(i;ilength;i+)if(strcmp(L-ducter,producter)=0)c+;if(c=0)printf(图书馆没有此图书!n);elseprintf(%s出版的作品共有%d本,信息如下:n,producter,c);printf(书号t书名t作者t出版社t馆存数量t价格n);for(i=0;ilength;i+)if(strcmp(L-ducter,producter)=0)p

16、rintf(%st%st%st%st%d册t%s元,L-datai.isbn,L-,L-datai.writer,L-ducter,L-datai.num,L-datai.price);printf(n);void Revise_i(SqList *&L) /按书号修改图书printf(请输入你要修改图书的书号:);char isbn30; scanf(%s,&isbn); printf(你要修改的图书信息如下:n);int i=0,v=0; while(ilength&strcmp(L-datai.isbn,isbn)!=0)i+;if(i=L-leng

17、th)printf(图书馆没有此图书!n);elseprintf(书号t书名t作者t出版社t馆存数量t价格n); printf(%st%st%st%st%d册t%s元,L-datai.isbn,L-,L-datai.writer,L-ducter,L-datai.num,L-datai.price);printf(n);printf(请输入图书信息!n); printf(书号t书名t作者t出版社t馆存数量t价格n); scanf(%s %s %s %s %d %s,L-datai.isbn,L-,L-datai.writer,L-dat

18、ducter,&L-datai.num,L-datai.price); for(v=0;vlength;v+) /判断修改后的书籍,是否有相同书籍已存在于图书馆内if(strcmp(L-datav.isbn,L-datai.isbn)=0)L-datav.num+; L-length-; printf(n);printf(修改图书信息成功!n);void Revise_n(SqList *&L) /按书名修改图书printf(请输入你要修改图书的书名:);char name30;scanf(%s,&name); printf(你要修改的图书信息如下:n);int i=0,a=0;

19、for(i;ilength;i+)if(strcmp(L-,name)=0)a+;if(a=0)printf(图书馆没有此图书!n);elsechar isbn230;printf(符合条件的图书共有%d本,信息如下:n,a);printf(书号t书名t作者t出版社t馆存数量t价格n);for(int o=0;olength;o+)if(strcmp(L-,name)=0) /书名相同时按书号删除 printf(%st%st%st%st%d册t%s元,L-datao.isbn,L-,L-datao.writer,L-

20、ducter,L-datao.num,L-datao.price); printf(n);printf(请输入你想要修改的书籍的书号:);scanf(%d,&isbn2);int t=0,e=0;for(t;tlength;t+)if(strcmp(L-datat.isbn,isbn2)=0)e=t; printf(书号t书名t作者t出版社t馆存数量t价格n); printf(%st%st%st%st%d册t%s元,L-datae.isbn,L-,L-datae.writer,L-ducter,L-datae.num,L-datae.price);prin

21、tf(n);printf(请输入图书信息!n); printf(书号t书名t作者t出版社t馆存数量t价格n); scanf(%s %s %s %s %d %s,L-datae.isbn,L-,L-datae.writer,L-ducter,&L-datae.num,L-datae.price);for(t=0;tlength;t+) /判断修改后的书籍,是否有相同书籍已存在于图书馆内if(strcmp(L-datat.isbn,L-datai.isbn)=0)L-datat.num+; L-length-; printf(n);printf(修改图书信息成

22、功!n);void Delete_i(SqList *&L) /按书号删除图书printf(请输入你要删除图书的书号:n);char isbn30; scanf(%s,&isbn);int i=0;while(ilength&strcmp(L-datai.isbn,isbn)!=0)i+;if(i=L-length)printf(图书馆没有此图书!n);elseint j;printf(isbn:%s的图书%s已成功删除!n,L-datai.isbn,L-);for (j=i;jlength-1;j+)L-dataj=L-dataj+1;L-length-;void Del

23、ete_n(SqList *&L) /按书名删除图书printf(请输入你要删除图书的书名:n);char name30;scanf(%s,&name);int i=0,a=0,e=0;for(i;ilength;i+)if(strcmp(L-,name)=0)a+; if(a=0)printf(图书馆没有此图书!n);elsechar isbn230; /书名相同时按书号删除printf(符合条件的图书共有%d本,信息如下:n,a);printf(书号t书名t作者t出版社t馆存数量t价格n);for(int o=0;olength;o+)if(strcmp(L-datao

24、.name,name)=0) printf(%st%st%st%st%d册t%s元,L-datao.isbn,L-,L-datao.writer,L-ducter,L-datao.num,L-datao.price);printf(n);printf(请输入你想要删除的书籍的书号:);scanf(%d,&isbn2);int t=0;for(t;tlength;t+)if(strcmp(L-datat.isbn,isbn2)=0)e=t;int j;printf(isbn:%s的图书%s已成功删除!n,L-datae.isbn,L-);

25、 for (j=e;jlength-1;j+)L-dataj=L-dataj+1;L-length-;void BorrowBook(SqList *&L) /图书借阅printf(请输入你想要借的图书的书号:);char isbn30;scanf(%s,&isbn);int i=0;while(ilength&strcmp(L-datai.isbn,isbn)!=0)i+;if(i=L-length)printf(图书馆内没有此图书!n);elseif(L-datai.num=0)printf(该图书已经全部借出!n);elseprintf(图书%s借阅成功!n,L-);

26、L-datai.num-;void BackBook(SqList *&L) /图书归还printf(请输入你想要归还的图书的书号:);char isbn30;scanf(%s,&isbn);int i=0;while(ilength&strcmp(L-datai.isbn,isbn)!=0)i+;if(i=L-length)printf(这本图书不是我们图书馆所藏!n);else printf(图书%s归还成功!n,L-);L-datai.num+;void Sort_i(SqList *&L) /按书号排序for(int i=0;ilength-1;i+) /冒泡法排序

27、for(int j=0;jlength-1-i;j+)if(strcmp(L-dataj.isbn,L-dataj+1.isbn)0) strcpy(L-data1j.isbn,L-dataj.isbn); strcpy(L-dataj.isbn,L-dataj+1.isbn); strcpy(L-dataj+1.isbn,L-data1j.isbn); strcpy(L-,L-); strcpy(L-,L-dataj+1.name); strcpy(L-dataj+1.name,L-); strcpy(L-d

28、ata1j.writer,L-dataj.writer); strcpy(L-dataj.writer,L-dataj+1.writer); strcpy(L-dataj+1.writer,L-data1j.writer); strcpy(L-ducter,L-ducter); strcpy(L-ducter,L-dataj+1.producter); strcpy(L-dataj+1.producter,L-ducter); L-data1j.num=L-dataj.num; L-dataj.num=L-dataj+

29、1.num; L-dataj+1.num=L-data1j.num; strcpy(L-data1j.price,L-dataj.price); strcpy(L-dataj.price,L-dataj+1.price); strcpy(L-dataj+1.price,L-data1j.price); printf(书号t书名t作者t出版社t馆存数量t价格n);for (i=0;ilength;i+)printf(%st%st%st%st%d册t%s元,L-datai.isbn,L-,L-datai.writer,L-ducter,L-datai.num,

30、L-datai.price);printf(n); void Sort_n(SqList *&L) /按书名排序for(int i=0;ilength-1;i+)for(int j=0;jlength-i-1;j+) if(strcmp(L-dataj.writer,L-dataj+1.writer)0)strcpy(L-data1j.isbn,L-dataj.isbn); strcpy(L-dataj.isbn,L-dataj+1.isbn);strcpy(L-dataj+1.isbn,L-data1j.isbn);strcpy(L-,L-);str

31、cpy(L-,L-dataj+1.name);strcpy(L-dataj+1.name,L-);strcpy(L-data1j.writer,L-dataj.writer);strcpy(L-dataj.writer,L-dataj+1.writer);strcpy(L-dataj+1.writer,L-data1j.writer);strcpy(L-ducter,L-ducter);strcpy(L-ducter,L-dataj+1.producter);strcpy(L-dataj+1.pr

32、oducter,L-ducter);L-data1j.num=L-dataj.num; L-dataj.num=L-dataj+1.num; L-dataj+1.num=L-data1j.num;strcpy(L-data1j.price,L-dataj.price);strcpy(L-dataj.price,L-dataj+1.price);strcpy(L-dataj+1.price,L-data1j.price);for(int t=0;tlength-1;t+)if(strcmp(L-datat.writer,L-datat+1.writer)=0)if(strcm

33、p(L-datat.isbn,L-datat+1.isbn)0)strcpy(L-data1t.isbn,L-datat.isbn); strcpy(L-datat.isbn,L-datat+1.isbn); strcpy(L-datat+1.isbn,L-data1t.isbn); strcpy(L-,L-); strcpy(L-,L-datat+1.name); strcpy(L-datat+1.name,L-); strcpy(L-data1t.writer,L-datat.writer); strcpy

34、(L-datat.writer,L-datat+1.writer); strcpy(L-datat+1.writer,L-data1t.writer); strcpy(L-ducter,L-ducter); strcpy(L-ducter,L-datat+1.producter); strcpy(L-datat+1.producter,L-ducter); L-data1t.num=L-datat.num; L-datat.num=L-datat+1.num; L-datat+1.num=L-data1t.num; s

35、trcpy(L-data1t.price,L-datat.price); strcpy(L-datat.price,L-datat+1.price); strcpy(L-datat+1.price,L-data1t.price); printf(书号t书名t作者t出版社t馆存数量t价格n);for (i=0;ilength;i+)printf(%st%st%st%st%d册t%s元,L-datai.isbn,L-,L-datai.writer,L-ducter,L-datai.num,L-datai.price);printf(n);int menu(Sq

36、List *&L);void menu1(SqList *&L)printf(nt-n);printf(t 1.按 书 名进行查询 nn); printf(t 2.按作者名进行查询 nn); printf(t 3.按出版社进行查询 nn); printf(t 0.返回主菜单 n);printf(nt-n);printf(请选择功能(03):);int choice;scanf(%d,&choice);switch(choice)case 1:Search_n(L);system(pause);system(cls);break;case 2:Search_w(L);system(pause);

37、system(cls);break;case 3:Search_p(L);system(pause);system(cls);break;case 0:system(cls);menu(L);break; default:printf(输入有误,请重新输入!);system(pause);system(cls);menu1(L);void menu2(SqList *&L) printf(nt-n);printf(t 1.按书号进行图书的修改 nn); printf(t 2.按书名进行图书的修改 nn);printf(t 0.返回主菜单 n); printf(nt-n);printf(请选择功

38、能(02):);int choice;scanf(%d,&choice);switch(choice)case 1:Revise_i(L);system(pause);system(cls);break;case 2:Revise_n(L);system(pause);system(cls);break;case 0:system(cls);menu(L);break;default:printf(输入有误,请重新输入!);system(pause);system(cls);menu2(L);void menu3(SqList *&L) printf(nt-n);printf(t 1.按书号进

39、行图书的删除 nn); printf(t 2.按书名进行图书的删除 nn);printf(t 0.返回主菜单 n); printf(nt-n);printf(请选择功能(02):);int choice;scanf(%d,&choice);switch(choice)case 1:Delete_i(L);system(pause);system(cls);break;case 2:Delete_n(L);system(pause);system(cls);break;case 0:system(cls);menu(L);break;default:printf(输入有误,请重新输入!);system(pause);system(cls);menu3(L);void menu4(SqList *&L)printf(nt-n);printf(t 1.按书号进行图书的排序 nn); printf(t 2.按作者进行图书的排序 nn);printf(t 0.返回主菜单 n);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论