You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
text1/README.md

363 lines
10 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 图书管理系统
2023年5月1日
杨腾泽,孙英皓,李聪颖,刘彩月
## 项目简介
本系统是自建设计项目,实现了图书管理中的借书和还书,查询书籍,以及书籍的添加、删除和显示所有书籍等功能。项目采用 C/C++ 语言编程实现,在 VS Code 集成开发环境IDE中用 GCC 进行编译。系统采用模块化设计,程序结构清晰,采用菜单驱动的命令行界面,操作便捷,能够用 CSV 格式读取和保存数据,通用性强,能够用图表展示数据,直观清楚。
下载地址: https://bdgit.educoder.net/pkcs2aq9m/text1.git
项目开发过程中采用 Kanban看板进行任务管理和分工协作并使用 Git 对程序代码和文档进行版本管理。任务分工情况如下:
| 任务 | 设计 | 开发 | 测试 | 文档 |
|-----------|----------|-----------|-------------|------------|
| Ca-Cb | 孙英皓 | 孙英皓 | 孙英皓 | 孙英皓 |
| C0-C2 | 杨腾泽 | 杨腾泽 | 杨腾泽 | 杨腾泽 |
| C3-C5 | 刘彩月 | 刘彩月 | 刘彩月 | 刘彩月 |
| C6-C8 | 李聪颖 | 李聪颖 | 李聪颖 | 李聪颖 |
每个成员的工作量(百分比):
|杨腾泽|孙英皓|李聪颖|刘彩月|
|------|-----|------|-----|
| 25% | 25% | 25% | 25% |
## 关于图书管理系统
设计一个图书管理系统,要求采用命令行菜单界面进行交互,具备查书、借书、还书、打印书籍 、添加、删除等基本功能,能够以表格和图表形式展示数据,采用 CSV 格式保存数据。
\
系统的功能性需求:
- 数据的查书、借书、还书、打印书籍、添加、删除展示。
系统的非功能性需求:
- 菜单驱动的命令行交互界面。
## 需求分析
分析系统的功能需求和界面需求,编制用户手册如下。
### Ca启动程序
命令行中执行命令,系统启动,显示提示信息,然后显示功能菜单,等待用户输入命令。
```
*******图书管理系统启动*******
————————————————————————————————————————————
| 1 查书 | 2 借书 | 3 还书 | 4 打印 | 5 添加 |
| 6 删除 | 7 修改 | 8 排序 | 0 退出 |
————————————————————————————————————————————
请选择:
```
### Cb显示命令菜单
```
————————————————————————————————————————————
| 1 查书 | 2 借书 | 3 还书 | 4 打印 | 5 添加 |
| 6 删除 | 7 修改 | 8 排序 | 0 退出 |
————————————————————————————————————————————
请选择:
```
### C0退出程序
选择菜单命令:0 再输入:y,确认,则退出程序。若输入:n则继续程序。
```
请选择0
确定要退出吗?(Y/N): y
程序退出
```
```
请选择0
确定要退出吗?(Y/N): n
程序退出
```
### C1查找图书
选择菜单命令: 1 提示Find Book 和 Enter book ID: 字样若本身书籍库为空则提示Book data empty。继续输入图书编号。若没找到提示Not found;若找到提示Found 并 打印书籍信息。
```
请选择1
Find Book
Book data empty
```
```
请选择1
Find Book
Enter book ID: 1
Not found
```
```
请选择1
Find Book
Enter book ID: 1
Found
************
Book
**************** id: 1 ****************
**** title: 《 2 》****
************** Number: 3 **************
```
### C2借用图书
选择菜单命令2提示 Boorow Book若本身书籍库为空则提示Book data empty。提示 Which book you wanna boorow ?则继续输入图书编号。若该书本身不存在则提示NOT FOUND THIS BOOK如图书存在则提示OK。
```
请选择2
Boorow Book
Book data empty
```
```
请选择2
Boorow Book
Enter book ID:2
NOT FOUND THIS BOOK
```
```
请选择2
Boorow Book
Enter book ID:1
*********
OK
*********
```
### C3归还图书
选择菜单命令3提示归还图书 和 你想要归还哪一本书?输入图书编号,若在系统中没有该图书,则添加图书并输入图书的编号,数量和数目,显示相关信息并归还成功,否则直接退出。
`````
请选择3
Repaid Book
Enter book ID:2
Add Book
ID : 2
TITLE : 1
Number : 1
Book
**************** id: 2 ****************
**** title: 《 1 》****
************** Number: 1 **************
`````
`````
请选择3
Repaid Book
Enter book ID:1
`````
### C4打印书籍
选择菜单命令4提示打印书籍并打印图书信息若没有书则输出Total: 0 books若有书则输出书籍信息
```
请选择4
Print All Books
Total: 0 books
```
```
请选择4
Print All Books
Book
**************** id: 6 ****************
**** title: 《 6 》****
************** Number: 6 **************
Total: 1 books
```
### C5添加图书
选择菜单命令5 提示添加图书若图书库满提示Books full.提示输入想添加的图书编号标题和数目并输出Book输出添加完后图书的相关信息和“Added”。
```
请选择5
Books full
```
```
请选择5
Add Book
ID : 1
TITLE : 4
Number : 6
Book
**************** id: 1 ****************
**** title: 《 4 》****
************** Number: 6 **************
*******Added********
```
### C6删除书籍
选择菜单命令6 提示删除书籍、你想要删除哪本书籍和请输入图书编号则输入图书编号。若找到输出书籍的信息并提示Delele若没找到则提示Not Found.
```
请选择6
Delete Book
Enter book ID: 4
Book
**************** id: 4 ****************
**** title: 《 4 》****
************** Number: 4 **************
************************
Deleted
************************
```
```
请选择6
Delete Book
Enter book ID: 5
Not found
```
### C7修改图书
选择菜单命令: 7提示修改和输入图书编号输入图书编号再次提示图书数量输出你要在该图书编号下修改的图书数量并提示完成如果输入的图书编号不存在则提示没有这样的书。
`````
请选择7
Revise Book
Enter book ID : 1
Original book number : 1
Revised number :2
**********************
Revise success
`````
``````
请选择7
Revise Book
Enter book ID : 2
No such book
``````
### C8排序图书
选择菜单命令8提示Sort Books若图书库为空则提示Book data empty否则提示Sort success。
```
请选择8
Sort Books
Book data empty
```
```
请选择8
Sort Books
*****************************
Sort success
```
# 概要设计
系统主要分为用户界面和数据处理两大模块。
用户界面模块包括系统初始化init显示菜单display_menu选择菜单命令
make_choice、确认confirm、退出quit等子模块。
数据处理模块包括 添加图书( DoAddBook ) 、查找图书( DoFindBook ) 、删除图书( DoDeleteBook ) 、打印所有图书( DoPrintBook ) 、归还图书( DoRepaidBook ) 、借用图书 ( DoBoorowBook ) 、修改图书( DoReviseBook ) 、排序图书( DoSortBook )等子模块。
其中查询、添加、修改和删除数据还会用到根据编号查询数据的方法find
上述各模块通过主程序main进行调用系统模块图如下。
各模块的主要功能如下:
![Outline](Graph\Outline.drawio.svg)
## main
系统主函数模块,显示菜单,根据用户选择的菜单命令,执行相关操作。
## init
系统初始化。
## display_menu
显示菜单命令。
# 详细设计
针对概要设计
## main
```
Step 1: 初始化
Step 2: 根据用户选择的命令执行对应的操作
Step 2.1: 显示菜单
Step 2.2: 选择菜单命令 c
Step 2.3: if c == CMD_QUERY then 查找书籍
Step 2.4: if c == CMD_BOOROW then 借用书籍
Step 2.5: if c == CMD_REPAID then 归还书籍
Step 2.6: if c == CMD_PRINT then 打印书籍
Step 2.7: if c == CMD_INSERT then 添加书籍
Step 2.8: if c == CMD_DELETE then 删除书籍
Step 2.9: if c == CMD_UPDATE then 修改书籍
Step 2.10: if c == CMD_SORT then 排序书籍
Step 2.11: if c == CMD_QUIT then 选择退出
```
![main](Graph\Main.drawio.svg)
## DoAddBook
```
Step 1: if 图书库满 then 提示图书库满
Step 2: 输入图书编号
Step 3: 输入图书名
Step 4: 输入图书数量
Step 4: 添加新书籍
Step 5: 提示添加成功
```
![add](Graph\DoAddBook.drawio.svg)
## DoFindBook
```
Step 1: 提示添加书籍
Step 2: if 图书库空 then 提示库空
Step 3: 提示输入图书编号
Step 4: 输入图书编号
Step 5: if 找到图书 then 输出图书信息 并提示Found
Step 6: if 没找到 then 提示Not found
```
![find](Graph\DoFindBook.drawio.svg)
## DoDeleteBook
```
Step 1: 提示删除图书
Step 2: 输入图书编号
Step 3: if 存在此图书 then 输出图上述信息 并提示 Deleted
Step 4: if 不存在此图书 then 提示 Not found
```
![delete](Graph\DoDeleteBook.drawio.svg)
## DoPrintBook
```
Step 1: 提示输出所有书籍
Step 2: 输出所有书籍
Step 3: 显示总书籍个数
```
![print](Graph\DoPrintBook.drawio.svg)
## DoRepaidBook
```
Step 1: 提示归还图书
Step 2: 输入图书编号
Step 3: if 存在该书 then 图书数量变化 1
Step 4: if 不存在该书 then 添加此图书
```
![repaid](Graph\DoRepaidBook.drawio.svg)
## DoBoorowBook
```
Step 1: 提示借用图书
Step 2: if 图书库为空 then 提示 Books data empty
Step 3: 输入图书编号
Step 4: if 此书存在 if 数量不小于0 then 进行程序并提示 OK 以表示完成 else 提示 Book empty
Step 5: if 此书不存在 then 提示 NOT FOUND THIS BOOK
```
![boorow](Graph\DoBorrowBook.drawio.svg)
## DoReviseBook
```
Step 1: 提示修改图书
Step 2: 输入图书编号
Step 3: if 图书编号不存在,输出没有那样的书
Step 4: if 图书编号存在,提示原图书数量,输出需要修改的图书数量并输出修改成功信息
```
![修改图书](Graph\DoReviseBook.svg)
## DoSortBook
```
Step 1: 提示排序图书
Step 2: if 没有图书编号 输出图书为空并输出排序成功
Step 3: if 有图书编号 直接输出排序成功
```
![排序图书](Graph\DoSortBook.svg)