唐山学院课程设计1一引言随着计算机及网络技术的飞速发展,Internet/Intranet应用在全球范围内日益普及,当今社会正快速向信息化社会前进,信息系统的作用也越来越大。图书馆在正常运营中总是面对大量的读者信息,书籍信息以及由两者相互作用产生的借书信息,还书信息。随着图书的大量增加,其管理难度也越来越大,如何优化图书馆的日常管理也就成为一个大众化的课题。数据处理手工操作,工作量大,出错率高,出错后不易更改。当前图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。如要对很长时间以前的图书进行更改就更加困难了。因此图书管理信息化是发展的必然趋势。用结构化系统分析与设计的方法,建立一套有效的图书信息管理系统,可以减轻工作,将工作科学化、规范化,提高了图书馆信息管理的工作质量因此根据图书馆目前实际的管理情况开发一套图书管理系统是十分必要的。建立一个图书管理系统可以使图书管理工作规范化、系统化、程序化、避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书信息。图书管理系统是一个对图书进行录入、删除、修改和查询的管理应用软件,管理员可以对文件中存储的图书进行查询和管理,了解图书的基本信息。该系统充分利用计算机的功能实现对书籍管理的自动化控制,将会使图书馆管理工作大大减轻,方便友好的图形用户界面,简便的操作,完善的数据库管理,将会使图书馆信息管理系统极大限度地应用于现代化图书管理,成为图书管理人员的得力助手。应用程序说明:本次设计主要通过应用结构体、链表、循环等C语言结构的设计实现对书籍信息的录入、删除、全显、修改等功能。使用结构体[1]可使不同类型的数据存储在相邻存储单元中,便于对相关信息的处理。链表[2]的使用可有效地将数据按一定顺序有规律的存储,解决了查找、删除时的无序性。本课题中主要用到的主要函数有以下几个:main()主函数、menu()主菜单、inserte_link1()插入函数、create_link()创建函数、delete_link()删除函数、print_link()输出函数、modify_link()修改函数。图书管理员进入操作界面后单击开始后进入操作系统,在主菜单中选择相应的功能实现对书籍信息的录入、删除、全显和修改等功能。当所选操作结束后,系统会自动跳回菜单界面,继续进行其他操作。唐山学院课程设计2二系统总体设计本设计首先定义全局变量,利用结构体、链表实现对图书的录入、删除、全显、修改等功能。当载入书籍信息后,系统会自动将书籍信息存入图书库,当选择删除书籍信息时,系统会让操作者输入要删除的号码,然后根据号码进行删除。全显书籍信息操作会将当前系统储存信息全部按编号顺序显示出来。修改书籍信息操作首先会输出原有信息,经确认后让管理员输入修改后的信息。当所有操作都完成后,管理员可以按“0”返回。1系统总体框图系统框图如图1所示。图1系统总体框图载入书籍信息删除书籍信息全显书籍信息退出系统修改书籍信息图书管理系统唐山学院课程设计32系统总体流程图系统总体流程图如图2所示。图2系统流程图YNNYY选择4NY修改书籍信息选择0选择2N选择3选择1全显书籍信息信息定义退出系统删除书籍信息Y载入书籍信息开始选择菜单结束唐山学院课程设计4三详细设计1create_link()创建函数在主函数中,通过输入“1”对创建函数进行调用,通过管理员输入的创建书籍的数量,系统对输入信息进行计算,并和创建数量进行比较。当小于创建数量时系统会重复显示让操作者输入书籍的基本信息:编号、书名、出版社、作者、价格。当输入数量等于要创建的书籍数量时,系统会自动显示主菜单。函数流程图如图3所示。图3create_link()创建函数流程图调用插入函数YN变量i加1i小于m?结束输入创建书籍数量m输入创建书籍的数量定义变量i,m,赋值开始唐山学院课程设计5插入函数流程图如图4所示。图4create_link()创建函数流程图2delete_link()删除函数在主函数中,通过输入“2”对创建函数进行调用。当借阅者借阅某种图书,或者当管理者不需要某种图书时,就要对图书进行删除操作。系统会提示管理员输入需要删除的图书的编号,当图书库中没有该图书时,系统会提示没有找到相应的书籍。如果有该图书,系统会进行删除操作,并显示已删除。删除函数流程图如图5所示。将变量赋给头指针开始变量值大?YN寻找插入位置结束按编号大小插入输入创建书籍的数量输入数据并赋给变量唐山学院课程设计6图5delete_link()删除函数流程图3print_link()全显函数在主函数中,通过输入“3”对全显函数进行调用。系统会按编号顺序显示当前图书库信息。全显函数流程图如图6所示。赋值继续查找YN开始头指针为空?输出图书库为空Y输入要删除的图书编号删除,指针后移定义变量N在链头?YN输出已删除输出没找到结束找到?寻找要删除的书的位置唐山学院课程设计7图6print_link()全显函数流程图4modify_link()修改函数在主函数中,通过输入4对修改函数进行调用。调用函数后,先输入要修改书籍的编号,系统自动查找相应的书籍编号,然后将其删除。若图书库中没找到要删除的书籍,系统将会提示没有找到相关书籍。修改函数如图7所示。N输出图书库为空Y定义变量p1,赋值p1-next?输出编号书名出版社作者价格开始p1-next为空?输出p1指向的内容结束YN唐山学院课程设计8图7modify_link()修改函数5功能模块的测试(1)主界面当进入系统时,系统会自动调用菜单函数,将所有功能显示在屏幕上。主界面如图8所示。p1-next为空?P1-number等于输入值?输出此书的信息YN输出修改成功P1指针后移一个位置输出没有找到此书结束输入要修改书籍的号码开始定义变量,赋值输入要修改的内容YN唐山学院课程设计9图8主界显示图(2)创建函数根据提示1回车请输入本次所创建的图书数:1回车请输入编号书名出版社作者价格1父亲中国物资梁晓声29回车(3)删除函数根据提示2回车显示结果如图9所示。唐山学院课程设计10图9删除函数显示图(4)全显函数根据提示3回车编号书名出版社作者价格1父亲中国物资梁晓声29(5)修改函数根据提示4回车请输入要修改书籍的号码:1此书籍的信息为:编号书名出版社作者价格1父亲中国物资梁晓声29请输入编号书名出版社作者价格2父亲中国物资梁晓声30修改成功!唐山学院课程设计11四总结通过近几天的课程设计,对C语言有了进一步认识,通过查找资料学习了结构体、链表的基本结构,明白了主函数和其他函数的关系。对很多函数有了进一步认识,同时也学会了运用功能函数。在老师的指导下学会了对软件的基本操作。本次设计以图书管理系统为题目,对图书进行录入、删除、显示、修改等功能。在本次设计中主要应用了链表,解决了添加、删除图书的无序性。用结构体可以将不同类型的变量存储在相邻的存储单元中,解决了图书信息多、存储混乱的问题。拿到题目时,感觉很茫然,无从下手。通过从网上查阅相关资料,对图书管理系统有了一定的了解。经过参考课本,明白了函数的定义、使用,对图书管理系统的设计有了自己的想法,接下来开始对各个模块进行设计。在设计过程中遇到了相当大的问题,形参与实参的传递、数组的使用、结构体的定义、链表的使用都需要查询资料。当程序基本结束时,又遇到更大的麻烦,在程序运行中接二连三的出现问题,经过自己耐心的查找、修改,终于解决了麻烦,看到了希望。本次设计主要实现了图书的载入、删除、全显、修改等功能。载入书籍模块可以将最新信息录入图书库;删除书籍模块可以将过时书籍或丢失的书籍及时删除,以免影响管理员对图书库书籍的准确管理;全显书籍模块可以将图书库中所有信息显示在主界面,随时查阅当前图书库信息;修改书籍模块可以避免因输入错误信息而造成的失误。由于时间和自己的能力有限,只能实现比较简单的功能。本次设计没有实现对载入书籍信息的保存功能和按不同方式对图书查找的功能。这次课程设计使我受益匪浅,不但磨练了我对追求知识的毅力,而且增强了对以后学习的信心。唐山学院课程设计12参考文献[1]谭浩强,张基温.C语言程序设计教程[M].第3版.高等教育出版社,2006[2]刘振安.C语言程序设计[M].机械工业出版社,2007唐山学院课程设计13附录源程序如下:#includestdio.h#includeiostreamusingnamespacestd;structbook{intnumber;charname[20];charaddr[30];charwriter[12];doubleprice;structbook*next;};typedefstructbooknode;typedefnode*link;voidprintstart(){printf(------------------------------------\n);}voidWrong(){printf(\n=====提示:输入错误!\n);}voidNotfind(){printf(\n=====提示:没有找到相应书籍!\n);}voidprintc(){printf(编号\t书名\t出版社\t作者\t价格\n);}linkinserte_link1(linkhead){intnumber;char*na=newchar[12];char*ad=newchar[30];char*writer=newchar[12];doubleprice;linkpPre,p2,pBac;printf(请输入);printc();scanf(%d%s%s%s%lf,&number,na,ad,writer,&price);p2=newnode;p2-number=number;strcpy(p2-name,na);strcpy(p2-addr,ad);strcpy(p2-writer,writer);p2-price=price;唐山学院课程设计14p2-next=NULL;deletena;if(p2-numberhead-number){p2-next=head;head=p2;returnhead;}else{pPre=head;pBac=pPre-next;while(1){if(p2-numberpBac-number&&p2-numberpPre-number){p2-next=pBac;pPre-next=p2;returnhead;}else{pPre=pBac;pBac=pBac-next;}}}}linkcreate_link(linkhead){head=newnode;head-number=-1;head-next=NULL;intm,i;printf(请输入本次所创建的图书数:\n);scanf(%d,&m);for(i=0;im;i++)head=inserte_link1(head);returnhead;}intprint_link(linkhead){linkp1;p1=head;if(p1-next==NULL){printstart();printf(此图书库为空!\n);printstart();return0;}printc();唐山学院课程设计15while(p1-next){coutp1-number'\t'p1-name'\t'p1-addr'\t'p1-writer'\t'p1-priceendl;p1=p1-next;}printstart();return0;}voidmenu(){printf(\n\n\n);printf(----------