数据结构课程设计图书管理系统.docx
- 文档编号:3313749
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:15
- 大小:97.06KB
数据结构课程设计图书管理系统.docx
《数据结构课程设计图书管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计图书管理系统.docx(15页珍藏版)》请在冰豆网上搜索。
数据结构课程设计图书管理系统
摘要书籍是人类不可缺少的精神食粮,图书管理系统是一些单位不可缺少的部分,尤其是对一些学校来说尤为的重要。
所以图书管理系统应该能够为用户提供重做的信息和快捷的查询手段。
但一直以来人们使用传统的人工的方式管理图书、期刊、试卷合订本等,这种管理方式存在着诸多的缺点,如:
效率低,保密性差,另外时间长了,将产生大量的文件和数据,这对于查找、更新和维护都带来不少的困难。
随着图书馆规模的不断扩大,图书数量也相应的增加,有关图书的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致图书馆管理上的混乱,人力与物力过多浪费,图书馆信息管理费用的增加,从而使图书馆的负担过重,影响整个图书馆的运作和控制管理,因此,必须制定一套合理、有效,规范和实用的图书管理系统,对图书资料进行集中统一的管理。
本论文主要是针对图书信息管理系统的研究,介绍的是一个典型的数据库应用系统,主要涉及数据的读写和数据的传递,利用VisualC++6.0工具,采用数据结构语言进行开发,介绍了系统的开发目的、系统分析、系统结构、系统设计等。
系统的建立将支持图书管理人员对各类信息进行快捷、准确、方便的查询;支持管理人员对图书的录入、列表、查询、借阅、归还。
关键词VisualC++6.0;图书管理;数据结构
1绪论
当今时代是飞速发展的信息时代。
在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。
计算机的最大好处在于利用它能够进行信息管理。
使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
本系统就是为了管理好图书馆信息而设计的。
数据处理手工操作,工作量大,出错率高,出错后不易更改。
图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。
如要对很长时间以前的图书进行更改就更加困难了。
基于这此问题,有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。
2系统功能介绍
2.1系统设计
本次设计的图书信息管理系统采用数据结构语言模式,通过内部网络处理和信息交换,开发结构、解决数据共享问题。
主要用于对图书馆日常工作的管理,主要任务是用计算机图书各种信息进行日常的管理,如录入、列表、查询、借阅、归还图书的管理等。
本系统实现了图书馆的信息自动化管理,完成了图书管理系统的基本功能,该系统主要包括管理员子系统和书籍管理子系统退出子系统两个部分。
其书籍管理子系统的主要功能是用于书籍信息的管理,如新书的入库、图书查询、借阅图书、归还图书等。
2.2系统流程及模块功能
系统模块功能结构分析图如图2-1所示
图2-1系统模块功能结构分析图
2.3模块功能介绍
本系统是图书管理系统,本系统启动后需要进入主界面,在这个界面,我们可以选择所需要的功能模块来实现所要的执行功能。
A)录入图书功能:
图书信息录入到数据库当中(主要包括图书的编号、书名、作者、出版社、出版日期、图书简介、图书类别等);
B)列表图书功能:
把数据库当中图书的录入信息的图书先列举出来,再对其进行保存;
C)查询图书功能:
方便管理工作人员对图书信息的了解,主要按照图书的编号和书名进行浏览图书信息;
D)借阅图书功能:
主要的是对图书馆中已被借阅的书进行信息存储;
E)归还图书功能:
该模块实现对图书馆中已被归还的书进行信息存储;
3系统各模块功能实现
3.1添加图书
该模块主要实现对新入库的图书进行信息录入,录入信息包括:
图书编号、名称、状态、借阅次数等。
运行界面如图2所示,运行成功提示如图:
图3-1添加图书
3.2列表图书
该模块主要实现对所有登记的图书进行信息列表。
运行界面如图3.2所示,运行成功提示如图:
图3-2列表图书
3.3查询图书
该模块实现对图书的信息查询功能,查询方式包括:
“按名查找”、“按类型查找”。
运行界面如图3-3-1、图3-3-2所示,运行成功提示如图:
图3-3-1按名查询
图3-3-2按类型查询
3.4借阅图书
该模块实现对所登记图书的借阅情况统计。
运行界面如图3-4所示,运行成功提示如图:
图3-4借阅图书
3.5归还图书
该模块实现对所借阅图书归还情况的统计。
运行界面如图3-5所示,运行成功提示如图:
图3-5归还图书
3.6总体运行
运行界面如图3-6所示,运行成功提示如图:
图3-6总体运行
4程序源代码
源代码如下:
#include
#include
#include
#defineBORROWED1
#defineNOBORROW0
/*定义图书结构*/
structBook{
int_id;//编号,唯一
char_name[32];//图书的名称,不唯一
int_type;//型,不唯一
int_status;//图书的状态,借出/没有借出
int_count;//图书借出的次数
structBook*_next;//下一本书
structBook*_prev;//上一本书
};/*定义图书类型*/
typedefstructBookBook;
/*操作的目录提示*/
charbook_menu[][32]={"addbooks","listbooks","searchbooks","borrowbooks","returnbooks","exit",""};
/*操作的目录提示1*/
charbook_menu_sub[][32]={"按名查找","s按类型查找",""};
/*添加图书类型,用户信息显示*/
charbook_types[][32]={"类型0","类型1","类型2",""};
/*添加图书状态,用户信息显示*/
charbook_status[][32]={"未借出","借出",""};
/*增加图书,id自动排号*/
intadd_books(Book*head,Book*book_for_add)
{
Book*p=head;
if(!
p)
return-1;
while(p->_next)
{
p=p->_next;
}
p->_next=book_for_add;
book_for_add->_id=p->_id+1;
book_for_add->_prev=p;
book_for_add->_next=NULL;
book_for_add->_count=0;
book_for_add->_status=0;
return0;
}
/*建立图书管理链表*/
Book*create_list(Book*book_head)
{
if(book_head)
{
book_head->_prev=book_head;
book_head->_next=NULL;
book_head->_id=1;
book_head->_count=0;
book_head->_status=0;
}
returnbook_head;
}/*释放链表*/
voidfree_list(Book*book_head)
{
Book*p,*p1;
p=book_head;
while(p)
{
p1=p->_next;
free(p);
p=p1;
}
}/*打印图书信息*/
voidprint_book(Book*book)
{printf("id:
%d,name:
%s,type:
%s,status:
%s,times:
%d\n",book->_id,book->_name,book_types[book->_type],book_status[book->_status],book->_count);}
/*列出所有登记的图书*/
voidlist_books(Book*book_head)
{
Book*p=book_head;
while(p)
{
print_book(p);
p=p->_next;
}
}/*借书,返回该书的指针,否则就返回NULL,可能不存在图书,或者已经被借走了*/
Book*borrow_books(Book*book_head,intid)
{
Book*p=book_head;
while(p)
{
if(p->_id==id)break;
p=p->_next;
}
if(!
p)/*不存在*/
returnNULL;
if(p->_status!
=0)/*已经被借走*/
returnNULL;
p->_status=1;/*借书登记*/
p->_count++;/*被借阅次数+1*/
returnp;
}/*查找书名称,返回查找到的数量,书名可能有重复的,一本书可能也有很多本,但是ID却是唯一的*/
intsearch_books_by_name(Book*book_head,char*name)
{
intcount=0;
Book*p=book_head;
while(p)
{
if(strcmp(p->_name,name)==0)
{
print_book(p);
++count;
}
p=p->_next;
}
returncount;
}/*查找书类型,返回查找到的数量,一个类型会有很多书*/
intsearch_books_by_type(Book*book_head,inttype)
{
intcount=0;
Book*p=book_head;
while(p)
{
if(p->_type==type)
{
print_book(p);
++count;
}
p=p->_next;
}
returncount;
}/*还书,正常归还就返回该书的指针,否则就返回NULL*/
Book*return_books(Book*book_head,intid)
{
Book*p=book_head;
while(p)
{
if(p->_id==id&&p->_status!
=0)
{
p->_status=0;/*还书登记*/
break;
}
p=p->_next;
}
returnp;
}/*打印操作选项*/
voidprint_menu(charmenus[][32])
{
intno=0;
printf("\nPLEASESELECTIDLIKE1or2..\n");
while(strlen(menus[no]))
{
printf("%d\t%s\n",no+1,menus[no]);++no;
}
printf("OPTION(");
while(no)
{
printf("/%d",no--);
}
printf("):
");
}
/*主函数*/
intmain(void)
{
charkey=0;charss[128];intloop=1;Bookfirst_book,*pBooks,*pTmp;strcpy(first_book._name,"nihao");first_book._type=0;pBooks=create_list(&first_book);
while(loop)
{
print_menu(book_menu);
gets(ss);
key=ss[0]-48;
if(key<0||key>6)
printf("Errorinput!
\n");
elseprintf("INPUT:
%d\n",key);
switch(key)
{
case1:
//addbooks
pTmp=(Book*)malloc(sizeof(Book));
if(pTmp)
{
printf("Add_Bookinputname:
");
gets(ss);
strncpy(pTmp->_name,ss,31);
print_menu(book_types);
gets(ss);
key=ss[0]-48;
if(key<=0||key>(sizeof(book_types)/32))
key=1;
pTmp->_type=key-1;
add_books(pBooks,pTmp);
}break;
case2:
//listbooks
list_books(pBooks);
break;
case3:
//searchbooks
print_menu(book_menu_sub);
gets(ss);
key=ss[0]-48;
printf("INPUT:
%d\n",key);
switch(key)
{
case1:
//searchbooksbyname
printf("inputbookname:
");
gets(ss);
key=search_books_by_name(pBooks,ss);
if(key==0)
printf("nofound!
\n");
case2:
//searchbooksbytype
print_menu(book_types);
gets(ss);
key=ss[0]-48;
key=search_books_by_type(pBooks,key-1);
if(key==0)
printf("nofound!
\n");
default:
break;
}break;
case4:
//borrowbooks
printf("Borrowbooks,inputbookid:
");
gets(ss);
key=atoi(ss);
pTmp=borrow_books(pBooks,key);
if(!
pTmp)
printf("borrowbooksfailed:
%d\n",key);
else
{printf("borrowbookssuccessful!
\n");
print_book(pTmp);
}break;
case5:
//returnbooks
printf("Returnbooks,inputbookid:
");
gets(ss);
key=atoi(ss);
pTmp=return_books(pBooks,key);
if(!
pTmp)
printf("returnbooksfailed:
%d\n",key);
else
{
printf("returnbookssuccessful!
\n");
print_book(pTmp);
}break;
case6:
//exit
loop=0;
break;
default:
break;
}
printf("--pause--");
gets(ss);}
free_list(pBooks);
return0;
}
5结论
不知不觉数据结构课结束了,通过此次课程设计,我深刻的了解了有关数据结构的一些操作和编程。
同时也对数据结构课程设计目的也有所感悟。
进一步熟悉了数据结构语言的结构和使用方法,另外同时也学到了有关数据结构以外的很多的知识,达到了能独立处理阅读、编制和调试一定规模的数据结构语言程序的水平。
此次课程设计的课题是图书信息管理系统,这需进行程序设计方法和技能的基本知识,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,理论知识的学习的关键不在于懂的多少,而在于你对其的实践应用,一开始的时候,编出来的程序有很多的问题,尤其是在图形用户界面程序上,因此在图书馆查阅了很多的资料,也请教了好几个同学帮忙修改,调试了好久才能正常的运行。
这次的综合课程设计让我对数据结构有了更深的认识,对各种“使用方法”有了更进一步的了解。
时间是短暂的,收获是丰厚的。
随着时间的流失,我会把现在学到的东西用到以后的学习当中,我会为了以后的路程而努力学习的,时刻记住只有付出才有收获的。
只有更好的掌握数据结构语言才能顺利的把程序编制出来,才能做出更好的程序。
同时在编写程序的时候要详细的理解每一个子程序的功能,对没有细节都要做到透明化。
对于每一个问题都要亲手的解决。
参考文献
[1]数据结构基础及应用案例开发李刚生王琰清华大学出版社2009
[2]C语言程序设计杨一平科学出版社2006
[3]Java程序参考大全鹿春江清华大学出版社2006
[4]C语言课程设计刘翼人民邮电出版社2005
[5]数据结构(C语言版)严蔚敏吴伟民清华大学出版社2007
致谢
首先我们衷心感谢我的指导老师王丽老师和曹冬燕老师给予我们在数据结构课程设计方面的大力支持。
在此期间,他们对我们的指导为我指明了设计的方向,对我们的鼓励使我勇于面对困难,对我们的鞭策让我们充满了前进的动力。
借此机会,向他们表示衷心的谢意!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 图书 管理 系统