1、数据结构课程设计图书管理系统数据结构课程设计报告(图书管理系统) 一.需求分析.3二.概要设计.3三.详细设计.4四.调试分析.6五.用户使用说明.6六.测试结果.7七.附录:带注释的源代码.8一.需求分析大学的图书馆藏书是非常庞大的,原始的人工借书也是非常麻烦的,因此用一种自动系统来管理图书是非常有必要的,所以设计一个图书管理系统,要能够自如管理借书,还书,以及注册,注销书本,这样就能节省很多资源,提高效率。明确规定:1.每种书的登记内容包括书号、书名、著作者、现存量和库存量;2.对书号建立索引表(线性表)以提高查找效率;3.系统主要功能如下:*采编入库:新购一种书,确定书号后,登记到图书帐
2、目表中,如果表中已有,则只将库存量增加;*借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;*归还:注销对借阅者的登记,改变该书的现存量。二.概要设计1.本题中用到了以下函数和结构体:本程序首先命名头文件:#include #include #include 以实现对各种函数的调用以及可能用到的各种循环。用“struct BOOK”结构体,用来存放书籍以及借书信息;并用到“void page_title”的页头函数,通过“void book_out”, “void book_in”来实现对书本的借出以及还书,定义“search_book”来实现对书本各种信息
3、的搜索任务,“void book_add”实现对书本的购进时的注册,用“void book_del”实现对书本的注销。最后通过“goto menu”语句跳出整个循环语句,在各种操作做完后能够返回到主菜单。用到goto语句原则上一般不符合结构化一些规定,但是此题中大大提高了效率,因此我采用了。2. 主程序的流程及各程序模块之间的层次:本程序运用到的是用数组作为线性表的一种代替方式,实现各种查询,对各种数据的管理,运用线性表的话可能会更加简便,但是我在用了数组代替后发现其实这样更容易看懂。“struct Book”结构体就保证了各种信息的存放和管理,接下来便是定义各种函数来一一实现对书籍的借出,归
4、还,注销和注册,而在这些函数中,有包括了一些小的函数以及循环,例如在搜索函数中,我用到了“for , if”等循环语句,当然少不了数组的添加,一个大的程序就是这些小的部分而组成的。也可以简单的归纳为:整个程序是由搜索,借书,还书,注册书,注销书这几个模块组成,这些又都是在整个“struct Book”结构体中。三.详细设计struct BOOK为主结构体;void page_title(char *menu_item)为页头函数也就是登录界面的显示; void return_confirm(void)为返回确认函数,以便返回主菜单;int search_book(void)为搜索书本信息的变量
5、定义;void book_out(void)为借出书本的变量定义;void book_in(void)为归还书本的变量定义;void book_add(void)为注册书本的变量定义;void book_del(void)为注销书本的变量定义;switch(getch()为多分支选择语句,即输入一个数,即选择了一个操作;goto menu返回主菜单的语句;001高等数学樊映川S01.002理论力学罗运祥L01.003高等数学华罗庚S01.004线性代数栾汝书S02.图书目录文件示例图struct Bookint search_book void book_out void book_in vo
6、id book_add void book_del函数调用关系图详细流程为: Start Homeuser option Member login Borrow Return RegisterationSearch book四.调试分析(1).调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析:在调试过程中主要遇到的问题是对函数的定义是出现过一些错误,最后是翻看教材找到了对这些函数的准确定义和使用解决了问题。(2).算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想:一个能执行的程序除了需要存储空间来寄存本身所用指令、常数、变量和输入数据外,也需要一
7、些对数据进行操作的工作单元和存储一些为实现计算所需要的信息的辅助空间。我的算法应当说是挺简单的一种方法实现的,空间可能做得不够好,但是时间我想是有保证的,这也就是弥补了那方面的不足了。需要改进的地方就是:每输入完一个操作,就得返回原来的操作界面,不能够继续在现有的面板上操作,这挺不方便的,需要改进。(3).经验和体会:经过了这次编程体验,我感想蛮多的,一个好的程序最起码要能运行成功,其次是里边的算法的简便度,这能够为你节省很多时间和空间,当然如果自己还不能运用高级算法,那么我们就用自己会的东西编,这也是一种达到目标的方法。五.用户使用说明首先成功运行程序后,会弹出一个运行窗口,窗口会有一个简单
8、的介绍操作步骤:如按照步骤,你可以很简便的实现各种操作,完成一个操作后,你必须按任意键返回到最初的界面然后继续接下来的操作。六.测试结果七.附录:带注释的源代码#include #include #include struct BOOK int id,usr10,total,store,days10; char name30,author20; books100; /*结构体,存放书籍及借书信息。*/ void page_title(char *menu_item) printf( 以下是图 书 管 理 系 统-请 按 要 求 操 作 nn- %s -nn,menu_item); /*页头函数
9、,可以通过参数menu_item,显示当前状态。*/ void return_confirm(void) printf(n任意键返回n); getch(); /*返回前请求确认函数,方便返回前观察结果*/ int search_book(void) int n,i; printf(请输入图书序号:); scanf(%d,&i); for(n=0;n0) printf(请输入借书证序号:); scanf(%d,&s); printf(请输入可借天数:); scanf(%d,&d); for(l=0;l10;l+) if(booksn.usrl=0) booksn.usrl=s; booksn.d
10、aysl=d; break; booksn.store-; if(n!=-1&booksn.store=0) printf(此书已经全部借出.n); return_confirm(); /*借书的函数,首先调用找书函数*/ void book_in(void) int n,s,l; page_title(还书); if(n=search_book()!=-1&booksn.storebooksn.total) printf(借阅者图书证列表:n); for(l=0;l10;l+) if (booksn.usrl!=0) printf(%d - %d天n,booksn.usrl,booksn.d
11、aysl); printf(请输入借书证序号:); scanf(%d,&s); for(l=0;l10;l+) if(booksn.usrl=s) booksn.usrl=0; booksn.daysl=0; break; booksn.store+; if(n!=-1&booksn.store=booksn.total) printf(全部入藏.n); return_confirm(); void book_add(void) int n; page_title(注册书); for(n=0;n100;n+) if(booksn.id=0) break; printf(序号:); scanf(
12、%d,&booksn.id); printf(书名:); scanf(%s,&booksn.name); printf(作者:); scanf(%s,&booksn.author); printf(数量:); scanf(%d,&booksn.total); booksn.store=booksn.total; return_confirm(); void book_del(void) int n; page_title(注销书); if(n=search_book()!=-1) booksn.id=0; printf(该书已注销.n); return_confirm(); void main(void) menu: page_title(操作选择单子); printf(请按以上要求选择操作nn); printf(1 借书n2 还书nn); printf(3 注册书n4 注销书nn); printf(n0 退出n); switch(getch() case 1 : book_out();break; case 2 : book_in();break; case 3 : book_add();break; case 4 : book_del();break; case 0 : exit(0); goto menu;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1