图书馆管理系统设计:数据结构课程实践

版权申诉
0 下载量 61 浏览量 更新于2024-06-25 1 收藏 214KB DOC 举报
"数据结构课程设计图书管理系统是一个模拟图书馆管理的程序,涵盖了图书采编入库、借书、还书、查询等核心功能。管理员可以录入图书的基本信息,用户可以按不同条件查询图书。系统主要使用两种抽象数据类型:LinearList和String,分别用于存储图书信息和处理字符串操作。此外,系统包含多个子程序来实现各项功能,如二分查找、图书入库、借阅处理、归还处理等。" 在这个图书管理系统中,主要涉及以下几个知识点: 1. **需求分析**: - 管理员功能:输入图书基本信息,包括书号、书名、作者、现存量、库存量和借阅记录,并保存记录。 - 用户查询:按书号、书名或作者查询图书信息。 - 图书操作:管理员可执行采编入库(更新库存)、借阅、归还和销毁图书。 2. **概要设计**: - **ADT LinearList**:线性列表,用于存储图书数据,包含初始化、销毁、清空、判断是否为空、获取长度、定位元素、获取和设置数据、插入和删除元素的操作。 - **ADT String**:字符串类型,用于处理图书信息中的文本,包含赋值、插入、删除、复制、检查是否为空、截取、拼接、查找、替换和销毁字符串的操作。 3. **子程序与功能**: - `InitBook` 和 `InitRead`:初始化图书和借阅者信息。 - `BinarySearch`:使用二分查找算法快速定位图书。 - `Buy`:新书采编入库,维护库存。 - `Delete`:清除图书信息,处理库存调整。 - `Borrow` 和 `Return`:处理图书的借阅和归还,更新现存量和借阅记录。 - `SearchByNum`, `SearchByName`, `SearchByAuth`:按书号、书名、作者查询。 - `Menu` 和 `Search`:用户界面和查询子菜单。 - `main`:主函数,负责程序流程控制。 4. **数据结构**: - 线性列表是基础数据结构,用于存储图书信息,支持动态扩展和高效操作。 - 字符串处理涉及到字符串的创建、修改和查找,是图书信息处理的关键部分。 5. **算法**: - 二分查找算法用于提高查询效率,特别是对于大量数据的搜索。 - 插入和删除操作可能涉及列表的动态调整,需要考虑数据结构的平衡和效率。 通过以上设计,该系统能够实现一个基本的图书馆管理系统,提供高效的数据管理和用户友好的交互。
2023-05-31 上传
用C++语言实现图书管理系统 摘 要 图书管理系统主要是对图书的录入、读者借阅、读者归还等功能进行实现。本课程设计 的系统开发平台为Windows XP,程序设计语言为C++,程序运行平台为Windws98/2000/XP/Seven。在程序设计中采用 了B-树方法提高书籍的查找速度。 关键词 程序设计;图书管理系统; C++;数据结构;B-树 1 索引 1.1课程设计目的 设计一个小型的图书管理系统,可以实现新增图书,读者借阅,读者归还等功能。 1.2.系统性能要求 能较快的查到所要查找的图书;能准确统计当前每种书的库存,以确定此书是否可以外 借;并且对外借的图书进行管理,记录借出时间、应还时间等。 1.3.功能的实现 1) 新书入库:确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加; 2) 借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变 现存量; 3)归还:注销对借阅者的登记,改变该书的现存量。 2 系统详细设计及实现 1.所用的知识体系 在整个程序的设计过程当中,用到了C++的一些基础知识,面向对象的思想和结构化 的程序设计思想。数据结构的B-树建立索引,用索引提高查找的效率等。 2.系统功能组成框图 3 . 系统功能模块划分 " " 摸块保称 "功能说明 " "1 "系统管理 "显示库存,借阅,归还 " "2 "图书管理 "图书的添加,查询等操作 " "3 "借还书管理 "对每次借书信息的添加,删除等操作 " 4.流程图 4.1录入图书信息 4.2借阅图书 4.3归还图书 5 功能实现 5.1 运行程序的主界面 图5—1 操作界面 5.2 新书入库功能的操作界面 图5-2新书入库 5.3 查询数据的界面 图5-3查询书籍 5.4 查询所有书籍的界面 图 5-4显示库存 5.5 图书借阅的界面 图5-5借阅书籍 5.6 还书的界面 图5-6还书 3 参考文献 [1] 谭浩强 C语言设计(第三版)清华大学出版社 [2] 严蔚敏 吴伟民 数据结构(C语言版) 清华大学出版社 [3] 谭浩强 C++ 程序设计清华大学出版社 [4]参考网址http://www.php.net/manual/zh/function.fopen.php [5]参考网址http://hi.baidu.com/%B3%D5%B3%D5%B5%C4145/blog/item/48f2b1ed1d99d 1d2b21cb15c.html 附录 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #include<time.h> //定义局变量 #define N 10000 //表示状态的字段 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef char *string ; #define m 3 //B-树的阶,设为 // 借阅者的结构体 typedef struct User{ unsigned int number; //借书证号码 int year; int month; int day; //借书时间 int dyear; //截至日期的年 int dmonth; //截至日期的月 int dday; //截至日期的日 struct User *next; //下一个借阅者 }User; //定义用户的的信息 //书的结构体 struct Book{ unsigned int key; //图书的书号 char bname[20]; // 书名 char writter[20]; // 著者 unsigned int left; // 现存量 unsigned int total; // 总存量 User *user; //借阅该书的人 }b[N]; //定义书的信息 //B- 树的存储结构 typedef Book KeyType; typedef struct BTNode{ int keynum; //结点中关键字个数,即结点的大小 struct BTNode *parent; //指向双亲结点 KeyType key[m + 1]; //关键字向量,号单元未用 struct BTNode *ptr[m + 1]; //子树指针向量 }BTNode,*BTree; //查找结果的存储结构体 typedef struct{ BTNode *pt; //指向找到的结点 int i; //1……m,在结