当前位置:首页 > (完整word版)大数据结构课程设计图书管理系统
实用标准文案
数据结构课程设计图书管理系统
一 需求分析
该程序是模拟图书馆管理系统,实现图书采编入库、借书、还书、查询等基本业务。此程序规定:
(1) 管理员能够向系统中输入每种书的基本信息,包括书号、书名、作者、现存量和库存量、借阅记录,并保存记录;
(2) 用户(读者)能够按书号、书名、作者查询图书信息;
(3) 管理员能够实现图书采编入库(新购入一本书,经分类和确定书号之后登记到图书账目中去。如果这种书在帐中已有,则只将总库存量增加)、借阅(如果书的现存量大于0,则借出一本,登记借阅者的图书证号和归还期限)、归还(删除对借阅者的登记,改变该书的现存量)、销毁(将图书从账目中删除)等操作。
二 概要设计
? 系统用到的抽象数据类型定义:
1、ADT LinearList{
数据元素:D={ai|ai∈D0,i=1,2,…,n,n≥0,D0为某一数据对象} 关系:S={
(1) InitList(L) (2) DestroyList(L) (3) ClearList(L) (4) EmptyList(L) (5) ListLength(L) (6) Locate(L,e) (7) GetData(L,i) (8) InsList(L,i,e) (9) DelList(L,i,&e) }ADT LinearList 2、ADT String{
数据对象:D={ai|ai∈CharacterSet,i=1,2,…,n;n≧0} 数据关系:R={
(10)SubString(Sub,S,pos,len) (11)StrIndex(S,pos,T) (12)StrReplace(S,T,V)
精彩文档
实用标准文案
(13)StrDestroy(S)
}ADT String
?
系统中的子程序和功能说明:
InitBo(Book &boo);初始化图书信息 InitRe(lend &Lin);初始化借阅者信息
BinarySearch(Book boo,char SearchNum[]);二分法查找比较书号 Buy(Book &boo, char BuyNum[]);新书采编入库系统
Delete(Book &boo,char DeleteNum[]);清除图书信息系统
Borrow(Book &boo,lend &Lin,char BorrowNum[],char CaNum[]);借阅图书处理系统 Return(Book &boo,lend &Lin,char ReturnNum[],char BorrowerNum[]);归还图书系统 SearchByNum(Book &boo,char SeaNum[]);按书号查找系统 SearchByName(Book &boo);按书名查找系统 SearchByAuth(Book &boo);按作者查询系统 Menu();主菜单显示系统 Search();查询系统子菜单 main();主函数
? 系统程序功能结构图
图书馆管理系统 图书信息录入 查询图书信息 处理图书信息 基本信息 借阅记录 按书号查询 按书名查询 按作者查询 图书采编入库 图书借阅情况 图书归还情况 图书销毁情况
三 详细设计
?
功能实现过程
bool BinarySearch(Book boo,char SearchNum[]) //二分法查找比较书号 {
while(low<=high) {
计算中间点;
if(查找到书号相同的) {
返回值true; }
if(查找书号不相同)
精彩文档
实用标准文案
用二分法进一步进行查找; }
if(库中没有所要查找的书) 返回值false;
}
void Buy(Book &boo, char BuyNum[])/*采编入库*/ {
if(书库中有此书)
{
总库存加1; 现库存加1; }
if(书库中无此书) {
for(i=total;i>mid&&total;i--)/*将新采购的书插在适合位置,保持有序*/ 空出插入位置;
输入新购书籍的相关信息:书号、书名、作者、出版社;
boo[i].next=NULL; total++;/*总量加1*/
}
}
void Delete(Book &boo,char DeleteNum[])/*清除图书信息*/ {
if(书库中没有此书)
输出“无此书”; if(书库中有此书) {
strcpy(连续两本书的相关信息); 现存量减1;库存量减1; }
else 输出“此书已有借阅者,无法删除!”; }
void Borrow(Book &boo,lend &Lin,char BorrowNum[],char CaNum[])/*借阅图书信息*/ {
if(没有找到此书) 输出“书库中无此书!”; if(书库中有此书) {
借出一本书后,该书的现存量减1;并在借阅记录链表中插入该条记录;再对应读者信息记录链表,如果已有该读者证号信息,直接在该链表中插入此次借阅记录;如果无该读者证号信息,申请新单链表存放借阅记录。 }
else 输出“该书现存量为0”; }
void Return(Book &boo,lend &Lin,char ReturnNum[],char BorrowerNum[])/*归还图书信
精彩文档
实用标准文案
息*/ {
if(书库中无此书)
输出“无此书记录”; if(书库中有此书)
{
查找图书文件,修改图书的现存量;查找记录借阅信息的单链表,填入还书日期,删除借阅信息;查找记录读者信息的单链表,删除证号信息。 } }
void SearchByNum(Book &boo,char SeaNum[])/*按书号查找*/ {
if(书库中无此书信息)/*用二分法查找*/ 输出“无此书”;
else/*书库中有此书信息*/ 输出与此书有关的相关信息; }
void SearchByName(Book &boo)/*按书名查找*/ {
输入想要查找书的书名; 用顺序查找法查找;
if(查找到需要查找的书) 输出与此书相关的信息; }
建议画出主要模块流程图。
四 设计与调试分析
1、这个程序设计中要注意定义两个结构体:图书结构体、借阅人结构体。其中定义数组存放图书信息,申请链表存放借阅记录和读者信息记录。
2、程序中运用到大多的插入与删除,所以申请链表比较方便插入与删除。但应前期需求分析的准备工作不充分,导致程序运行功能不全,比如查找时关于此书的信息不能全部显示出来,并且添加删除时库存的变化不能直接显示出来。程序的健壮性不能达到预期的结果,这些都是需要改进的。
3、在程序中的函数调用是个非常重要的部分,也是经常需要用到的,在编写程序过程中,因为函数调用不准确,使得循环进不去,后来改变函数的调用关系,才达到了预期结果。 4、程序中还定义了全局变量,之前没定义全局变量,在下面的编写过程,同样性质的地方需要重复定义,比较麻烦,定义全局变量使得程序比较简明一点。
五 用户手册
【 使用说明 】
精彩文档
共分享92篇相关文档