ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:312.76KB ,
资源ID:27980577      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27980577.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(图书馆管理系统程序的设计方案.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

图书馆管理系统程序的设计方案.docx

1、图书馆管理系统程序的设计方案图书馆管理系统程序设计方案. 系统分析2.1 数据需求本系统主要是某图书馆的图书信息简单管理的系统。需要向系统输入图书的信息,例如:图书名、编号、作者、图书类别、出版社、图书定价、图书简介。 2.2功能需求本系统需要有添加,删除,查询,修改,循环显示主菜单,保存信息功能,读取信息,可以按书名实现模糊查询,可以按类别统计图书数量,可以统计图书总数。2.3 性能需求在运行本程序时只要按照正确的操作方法不会出现无法运行的情况,系统稳定性好,安全,可靠。3. 总体设计3.1功能模块设计根据分析整个系统主要划分为8个功能模块,分别执行要求中的功能。该系统需要有删除,修改,添加

2、,查询,保存信息功能,按类图书别统计,统计总数,模糊查询。功能模块如图1所示。图1功能模块图(1)添加图书信息模块添加图书基本信息:图书编号、图书名、作者、图书类别、出版社、图书定价、图书简介。(2) 修改图书信息模块对会图书内部信息的修改,修改图书的基本信息:图书名、图书编号、作者、图书类别、出版社、图书定价、图书简介。(3) 查询图书信息模块对图书内部信息的查询包括通过书名查询和按类别查询。查询的结果显示为图书名、图书编号、作者、图书类别、出版社、图书定价、图书简介。(4)删除图书信息模块可以删除图书的所有基本信息。 (5) 按类别统计模块可将图书按类别统计其图书个数。(6) 统计总数模块

3、对图书总数进行统计。(7) 图示借阅模块可实现对图书的借阅,需输入学生信息。(8) 图书归还模块归还图书,增加图书的现存量。(9) 读取模块读取储存的图书基本信息。3.2系统设计方案(1) 菜单设计一个总菜单,1添加图书信息,2根据书名查找图书,3修改图书信息,4删除图书信息,5 图书归还,6图书总数统计,7图书借阅,8储存,9按类别查询图书,10读取图书信息,基本功能的实现都将体现在菜单选项中。(2) 数据结构建立结构体如下:struct book long digit;/图书编号char name50;/书名 char author20;/作者 char gategory20;/图书类别

4、char phouse20;/出版社 long price;/定价 char synopsis20;/图书简介 struct book *next;/struct book 类型的结构体成员*head; /定义一个指向结构体的指针根据模块需要本系统需要用到链表结构。(3) 函数定义了12个函数,都实现以下功能:void menu();/主菜单 void print();/输出 void creat();/创建 void search_name()/按姓名查询; void search gategory ();/按类别查询 void modify();/修改 void del();/删除 voi

5、d l();/按类别统计 void w();/统计总数 void MH(struct book *p,char a)/;模糊查询 void save();/储存void read()/读取4. 详细设计和实现 4.1创建模块创建模块:分为2个部分1输出、2创建。(1)输出部分流程图:如图2所示。图2输出流程图输出部分创建一个结构体struct book结构体内有成员7个:编号,名字,作者,类别,出版社,价格简介。输出程序流程如图2所示。(2)创建部分如图3所示。图3 创建模块流程图所谓创建是指在程序执行过程中从无到有地建立起一个链表,即一个一个地开辟结点和输入各结点数据,并建立起前后相链的关系

6、。设3个指针变量:head、P1、P2它们都是用来指向struct book 类型数据的。先用malloc函数开辟第一个结点,并使P1 P2,它们都用来指向它。然后从键盘读入一个图书的数据给p1所指的第一个结点。我们设定编号不能为0如果输入图书编号为0,则表示链表建立的过程完成,该结点不应该连接到链表中。先使head的值为NULL,这是链表为空的情况。当建立第一个结点的时候head指向该结点。如果输入的p1-num不等于0则输入第一个结点数据(n=1),令head=p1,即把p1的值赋给head,也就是使head也指向新开辟的结点。然后在开辟另一个结点并使p1指向它,接着输入该结点的数据。如果

7、输入的p1-num!=0,则应链入第二个结点(n=2),由于n!=1,则将p1的值赋给p2-next,此时p2指向第一个节点,因此执行“p2-next=p1”就将新结点的地址赋给第一个结点的next成员,使第一个结点的next成员指向第二个结点。接着使p2=p1,也就是使p2指向刚才建立的结点。接着在开辟一个结点并使p1指向它,并输入该结点的数据。在第三次循环中,由于n=3(n!=1),又将p1的值赋给p2-next,也就是将第三个结点连接到第二个结点之后,并使p2=p1,使p2指向最后一个结点。再开辟一个新的结点,并使p1指向它,输入该结点的数据。由于p1-num的值是0,不再执行循环,此新

8、结点不应被连接到链表中。此时将NULL赋给p2-next,建立链表的过程至此结束。P1最后指向的结点未链入链表中,第三个结点的next成员的值为NULL,它不指向任何结点。虽然p1指向新开辟的结点,但从链表中无法找到该结点。4.2查询模块该模块包括三种可查询的选项:按图书名查找,按图书名模糊查询,按图书类别查找。对图书内部信息的查询包括通过图书名查询,按图书类别查询,每一个子模块基本思想相同,先输入需要查寻的方式然后输入查询所需要的信息,如果输入信息与系统中的图书信息相匹配则输出此图书所有信息。对图书名可以实现模糊查询,模糊查询既是只需要输入图书名的一个字母就可以显示出所有图书名内含有该字母的

9、图书。(1)按书名查询的流程图:如图4所示。 图4按书名查找图书信息流程图由于按图书名查找图书信息和按图书类别查找图书信息的流程基本一致所以只画出一个流程图。按姓名查找:定义一个名字数组,这个数组是struct book 这个结构体的成员,定义一个指针*p。当首结点是NULL时则输出list NULL。首结点不是空,P 作为首结点,判断P是否是空,如果P不是空,用strcmp函数来查找与输入相对应的名字,然后输出该名字图书的所有信息。如果没有可以和输入名字对应的名字则输出not been found。4.3修改图书信息信息模块修改图书信息模块,是在已经存在的图书信息的基础上对图书的基本信息,例

10、如:图书编号、图书名、图书作者、图书出版社、图书类别、图书定价,进行修改,并且保存。如图6所示。4.4删图7 删除图书信息流程图先定义两个头指针p1,p2,找到要删除的图书名,如果图书名是链表的头则将head赋给此图书所存结点的next,此图书所存结点不是头结点就将此图书上一个结点的next与此图书的结点的next相连。4.5统计图书信息模块统计图书模块分为两类:一类是按图书类别统计不同类别的图书数量,另一类是直接统计所有图书总数。如图8所示。图8 按类别统计流程图流程图按类别统计是按照图书类别将图书分累统计,输入图书类别用strcmp函数将输入的图书类别和已经存有的图书类别进行比较,找到相同

11、的类别输出该类所有图书数量。统计总数就是统计结点所以只需要n+即可统计图书总数。4.6保存模块保存所存储的图书信息,以二进制写的方式打开一个名字为book 的文本文件,调用fwrite()函数将信息存储到名为book的文本文件中,最后关闭文件。如图9所示。图9 保存图书信息流程图用保存函数将图书的所有基本信息进行保存,定义一个文件指针,然后判断文件不等于NULL,然后将输入图书基本信息图书编号、图书名、图书作者、图书出版社、图书类别、图书定价,进行修改,并且保存,然后关闭文件。4.7读取模块:对已经存储的图书今本信息进行读取,如图10所示。 图10 读取图书信息流程图利用读取函数对已经储存的图

12、书信息进行读取。可以显示已经存入图书的基本信息例如:图书编号、图书名、图书作者、图书出版社、图书类别、图书定价,进行读取。并且显示图书基本信息。5. 调试与测试5.1 调试调试是软件开发过程中的一个重要环节,也是最复杂,对软件开发者者来说也是最艰巨的任务。调试的任务是及时改正测试过程中发现的软件错误。具体地说,调试过程由两个步骤组成,它从表示程序中存在错误的某迹象开始,首先确定错误的准确位置,也就是找出哪个模块或哪个语句引起的错误。然后仔细研究推断代码以确定问题的原因,并设法改正。调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。本系统调试过程中遇到问题、原因和

13、解决方法如下面介绍。(1) 程序在储存图书信息时只能一次存入,并且读取。再次添加新的程序时将会把原来添加的图书信息覆盖。原因时存储函数只能只写2进制文件不能追加填写2进制文件。(2) 运行完程序一次有错误提醒原因是上次运行程序后没有关闭操作界面当点击编译时会有一个错误提示,解决方法:将上一次运行时的操作界面关闭。(3) 程序不能运行程序运行到添加新图书时自动提示错误需要调试,其原因是指针指向的位置出现错误导致程序传参错乱无法运行,解决办法:使程序进入调试状态在传参出现错误的位置一句一句查找传递的参数是否是你所希望的,如若不是就加以修正。5.2 测试软件测试是软件生存期中的一个重要阶段,是软件质

14、量保证的关键步骤从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程”。或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。过度测试则会浪费许多宝贵的资源。到测试后期,即使找到了错误,然而付出了过高的代价。测试数据过程如下。当图书管理系统已经具备对图书基本信息进行添加,删除,查询,修改,保存信息,读取信息的功能。现在测试系统是否能够正确显示所有已输入的图书基本信息,当系统中已存入图书信息当执行显示功能时,系统会将内

15、部图书信息全部列出。添加一个图书信息:digit :1name:lunyu author:kongzi gategory:jiaoyu phouse:China price10 synopsis:youpengziyuanfanglaibuyiyuehu。显示该图书信息:digit :1name:lunyu author:kongzi gategory:jiaoyu phouse:China price10 synopsis:youpengziyuanfanglaibuyiyuehu。6. 结论课程设计顺利完成,任务书中所提出的要求全部实现,可以对图书信息进行添加、修改、删除以及按各种信息查找

16、,并且将各种信息保存到文本文件中。不过这个程序还有些不够完善,例如:只能手动储存图书信息,不能自动存入。而且读取时受到字符限制。结束语为期一个星期的C语言综合课程设计实习终于顺利完成,在这期间真正的学到了一些经验,能够熟练的掌握一些C语言的编程思路,能够熟练的运用学到的函数,学会了在曾经编写过的函数上加以修改实现了我期望实现的功能,知道学习编程必须亲手将每一个字符输入电脑中这样才能真正的学到课本或一些理论中学不到的知识,这才达到了实践的目的,当程序编写完成而且能够正常运行心里一种说不出的自豪感,虽然这对于一名程序员来说可能非常简单,但这是我编程的开始,如果希望在编程这方面能够有所发展我所要走过

17、的路还很长,还需要不断的学习!再学习!参考文献1 谭浩强. C语言程序设计(第三版). 北京:清华大学出版社 20052 林碧英. C语言程序设计教程. 中国电力出版社, 20063 美赫伯特.希尔特, 王子恢等译.C语言大全. 电子工业出版社, 2003附录1用户手册点击运行,首先出现的是菜单界面,选择菜单选项进行操作,可进行如图11所示。图11 菜单界面按1进入添加图书信息界面,如图12所示。图12 添加界面输入4后点击回车执行对图书删除,如图13所示。图13图书删除界面输入2后点击回车进行图书借阅操作,如图14所示图14 图书借阅界面输入3后点击回车进行图书归还功能的操作。如图15所示图

18、15删除界面输入2后点击回车进行对图书信息显示操作。如图16所示图16显示图书信息界面附录2源程序#include#include#include#include#define LEN sizeof(struct book)int i=0;struct book long digit;/定义图书编号 char name50;/定义图书名 char author20;/定义图书作者 char gategory20/;定义图书类别 char phouse20;/定义图书出版社 long price;/定义图书定价 char synopsis20;/定义图书简介 struct book *next;

19、book1000;#define NULL 0int n;struct book *head,*end;void main() int p; char a10; void menu();/菜单显示 void print();/输出 void creat();/创建函数 void search_name();/按图书名查询函数 void modify();/修改图书信息函数 void del();/删除图书信息函数 void l();/按图书类别统计函数 void w();/按图书总数统计函数 void MH(struct book *p,char a);/模糊查询函数 void save();

20、/保存函数 void search_gategory();/按图书类别查询函数 void read();/读取函数 head=NULL;/ end=NULL;/loop: menu(); printf(nplease to choice:n); scanf(%d,&p); if(p=1&pdigit,p-name,p-author,p-gategory,p-phouse,p-price,p-synopsis); p=p-next; void creat()/创建 struct book *p1,*p2; p2=end; p1=(struct book *)malloc(LEN); printf

21、(请输入编号 图书名 作者 类别 出版社 价格 简介n); scanf(%ld %s %s %s %s %d %s,&p1-digit,p1-name,p1-author,p1-gategory,p1-phouse,&p1-price,p1-synopsis); while(p1-digit!=0) n+; if(n=1) head=p1; else p2-next=p1; p2=p1; p1=(struct book *)malloc(LEN); scanf(%ld %s %s %s %s %d %s,&p1-digit,p1-name,p1-author,p1-gategory,p1-ph

22、ouse,&p1-price,p1-synopsis); p2-next=NULL;end=p2;print();void search_name()/*搜名字*/ char name50; struct book *p; int w=0; printf(input the searched name:n); scanf(%s,name); if(head=NULL) printf(list null!n); else p=head; while(p!=NULL) if(strcmp(name,p-name)=0) printf(%ld %s %s %s %s %d %sn,p-digit,p

23、-name,p-author,p-gategory,p-phouse,p-price,p-synopsis); w=1; p=p-next; if(!w) printf(%s not been found!n,name); void search_gategory()/搜类别 char gategory20; struct book *p; int w=0; printf(input the search gategory:n); scanf(%s,gategory); if(head=NULL) printf(不存在n); else p=head; while(p!=NULL) if(str

24、cmp(gategory,p-gategory)=0) printf( %ld %s %s %s %s %d %sn,p-digit,p-name,p-author,p-gategory,p-phouse,p-price,p-synopsis); w=1; p=p-next; if(!w) printf(%s not been found!n,gategory);void modify()/*修改*/ struct book *p; char name50; printf(input names:n); scanf(%s,name); p=head; while(p!=NULL) if(str

25、cmp(name,p-name)=0) printf(Now new records:n); scanf(%ld %s %s %s %s %d %s,&p-digit,p-name,p-author,p-gategory,p-phouse,&p-price,p-synopsis); p=p-next; print();void del()/*删除*/ struct book *p1,*p2; char name50; if(head=NULL) printf(list null!n); goto end; p1=head; printf(input the deleted name:n); s

26、canf(%s,name); while(strcmp(name,p1-name)!=0&p1-next!=NULL) p2=p1; p1=p1-next; if(strcmp(name,p1-name)=0) if(p1=head) head=p1-next; else if(p1-next=NULL) p2-next=NULL; end=p2; else p2-next=p1-next; free(p1); printf(delete: %sn,name); n=n-1; else printf(%s not been found!n,name); print();end: return; void l()/按类别统计 struct book *p1,*p2; int z=0; char gategory20; printf(请输入图书类别:n); scanf(%s,gategory); if(head=NULL) printf(list null!n); goto end; p1

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1