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.
teamworks/README.md

417 lines
12 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/21
杨腾泽,孙英皓,刘彩月,李聪颖
## 项目简介
本系统是程序设计与问题求解课程设计项目,实现了库存零件 CSV 格式数据文件的读取和保存以及数据的增删改查CRUD、排序和图表显示等功能。项目采用 C 语言编程实现,在 VS Code 集成开发环境IDE中用 GCC 进行编译。系统采用模块化设计,程序结构清晰,采用菜单驱动的命令行界面,操作便捷,能够用 CSV 格式读取和保存数据,通用性强,能够用图表展示数据,直观清楚。
下载地址https://gitee.com/sjandsy/parts-management.git
项目开发过程中采用 Kanban看板进行任务管理和分工协作并使用 Git 对程序代码和文档进行版本管理。任务分工情况如下:
| 任务 | 设计 | 开发 | 测试 | 文档 |
| ---- | ---- | ---- | ---- | ---- |
| C1-C3 菜单驱动的用户界面 | 孙英皓 | 杨腾泽 | 刘彩月 | 孙英皓 |
|C4 添加库存记录 | 李聪颖 | 李聪颖 | 杨腾泽 孙英皓 |李聪颖 |
|C5 查询库存记录 | 李聪颖 | 李聪颖 | 杨腾泽 孙英皓 | 李聪颖 |
|C6 打印库存列表 | 李聪颖 | 李聪颖 | 杨腾泽 孙英皓 | 李聪颖 |
|C7 修改库存记录 | 刘彩月 | 刘彩月 | 李聪颖 杨腾泽 | 刘彩月 |
|C8 删除库存记录 | 刘彩月 | 刘彩月 | 李聪颖 杨腾泽 | 刘彩月 |
|C9 库存记录排序 | 刘彩月 | 刘彩月 | 李聪颖 杨腾泽 | 刘彩月 |
|C10 读取库存文件 | 杨腾泽 | 杨腾泽 | 李聪颖 刘彩月 | 杨腾泽 |
|C11 将库存保存到文件 | 杨腾泽 | 杨腾泽 | 孙英皓 刘彩月 | 杨腾泽 |
每个成员的工作量(百分比):
| 杨腾泽 | 孙英皓 | 刘彩月 | 李聪颖 |
|--------|-------|---------|-------|
| 25% | 25% | 25% | 25% |
|--------|-------|---------|-------|
## 关于零件库存管理系统
设计一个库存零件管理系统,要求采用命令行菜单界面进行交互,具备读取、保存、打印、查询、修改、插入、删除和排序等基本功能,能够以表格和图表形式展示数据,采用 CSV 格式保存数据。
系统的功能性需求:
- 数据的读取、保存、打印、查询、修改、插入、删除、排序和图表展示。
系统的非功能性需求:
- 菜单驱动的命令行交互界面。
## 需求分析
分析系统的功能需求和界面需求,编制用户手册如下。
#### C1: 启动程序
命令行中执行命令 `./app`,系统启动,显示提示信息,然后显示功能菜单,等待用户输入命令。
```
==欢迎来到商品管理系统===
1.功能菜单 | 2.退出
请输入想要操作的选项*-*
```
#### C2: 显示命令菜单
```
==欢迎来到商品管理系统===
1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加
6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出
请输入想要操作的选项*-*
```
#### C3: 退出程序
选择菜单命令 `0`,再输入 `y` 确认,则退出程序。
```
请输入想要操作的选项*-*0
确定要退出吗?(Y/N): y
程序退出
```
#### C4: 添加库存记录
选择菜单命令 `5`,提示输入零件编号,若该零件不存在,则继续输入零件名称、库存数量,添加零件,并提示完成;若零件编号已存在,则提示零件已存在,并结束。
```
请输入想要操作的选项*-*5
请输入id101
请输入商品名:电脑
请输入商品数量20
商品 101 已添加成功
1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加
6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出
```
#### C5: 查询库存记录
选择菜单命令 `4`,提示输入零件编号,若该零件存在,则输出零件信息;否则提示零件不存在并结束。
```
请输入想要操作的选项*-*4
请输入需要查找的商品id101
商品的id101
商品的名称:电脑
商品的数量20
1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加
6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出
请输入想要操作的选项*-*4
请输入需要查找的商品id100
输入的商品信息无效!!!
```
#### C6: 打印库存列表
选择菜单命令 `3`,打印
```
请输入想要操作的选项*-*3
商品的id101
商品的名称:电脑
商品的数量20
```
#### C7: 修改库存记录
选择菜单命令 `6`,根据提示输入零件编号,若零件存在,则继续输入新的零件名和库存数量,并修改库存记录;否则,提示零件不存在并结束。
```
请输入想要操作的选项*-*6
请输入需要修改的商品id101
原商品的数量20
请输入修改的商品数量12
商品数量修改成功 *_*
1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加
6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出
请输入想要操作的选项*-*3
商品的id101
商品的名称:电脑
商品的数量12
1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加
6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出
请输入想要操作的选项*-*6
请输入需要修改的商品id100
您输入的商品名称没有找到!!
```
#### C8: 删除库存记录
选择菜单命令 `7`,根据提示输入零件编号,若零件存在,则删除之;否则提示零件不存在并结束。
```
请输入想要操作的选项*-*7
请输入需要删除的商品id100
您输入的商品名称没有找到!!
1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加
6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出
请输入想要操作的选项*-*7
请输入需要删除的商品id101
商品 101 已被删除!!
1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加
6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出
请输入想要操作的选项*-*3
商品的id101
您的数据库内没有商品!
```
#### C9: 库存记录排序
选择菜单命令 `8`,对库存记录按零件编号从小到大排序。
```
请输入想要操作的选项*-*3
商品的id101
商品的名称:电脑
商品的数量20
1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加
6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出
请输入想要操作的选项*-*8
排序
排序已完成
1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加
6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出
请输入想要操作的选项*-*3
商品的id101
商品的名称:电脑
商品的数量20
```
#### C10: 从文件中读取库存记录
选择菜单命令 `1`,提示输入文件名,若文件存在,则打开文件读取 CSV 格式保存的所有库存记录;否则,若文件不存在,则给出错误信息并结束。
假设文件 `a.csv` 中,以 CSV Comma-Separated Values格式保存了如下记录
```
103,显示器,8
104,手机,12
101,电脑,20
102,打印机,10
```
则读取记录的过程如下:
```
请输入想要操作的选项*-*1
读取数据
请输入文件名data1.csv
数据库种有4种商品信息
读取 4 记录
1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加
6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出
请输入想要操作的选项*-*3
商品的id103
商品的名称:显示器
商品的数量8
1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加
6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出
请输入想要操作的选项*-*1
读取数据
请输入文件名称a
a:读取数据失败
注意:您的数据库内没有商品信息
```
#### C11: 将库存保存保存到文件
选择菜单命令 `2`,提示输入文件名,将所有库存记录以 CSV 格式保存到指定的文件中。
```
请输入想要操作的选项*-*2
请输入文件名data2.csv
已经保存 1 种商品信息
请输入想要操作的选项*-*2
您没有商品信息不用保存
请输入想要操作的选项*-*2
请输入文件名data2.csv
文件打开失败
```
#### C12: 以图表方式显示库存记录
选择菜单命令 `9`,以图表方式显示库存记录。
```
请输入想要操作的选项*-*9
ID | NAME Amount
您的数据库没有商品!
请输入想要操作的选项*-*9
ID | NAME Amount
101 电脑 20
1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加
6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出
```
## 概要设计
系统主要分为用户界面和数据处理两大模块。
用户界面模块包括系统初始化init显示菜单menu选择菜单命令menu1、确认confirm、退出exit等子模块。
数据处理模块包括读取数据read_data、保存数据saveData、打印数据show_goods、查询数据find_goods、添加数据insert、更新数据increase_count、删除数据delete_from_list、数据排序sort和图表Show等子模块。其中查询、添加、更新和删除数据还会用到根据编号查询数据的方法find
上述各模块通过主程序main进行调用系统模块图如下。
![系统模块图](images/main.drawio.svg)
各模块的主要功能如下:
#### main
系统主函数模块,显示菜单,根据用户选择的菜单命令,执行相关操作。
#### init
系统初始化。
#### display_menu
显示菜单命令。
## 详细设计
针对概要设计
#### main
Step 1: 初始化
Step 2: 根据用户选择的命令执行对应的操作
Step 2.1: 显示菜单
Step 2.2: 选择菜单命令 c
Step 2.3: if c == CMD_READ then 读取数据
Step 2.4: if c == CMD_SAVE then 保存数据
Step 2.5: if c == CMD_PRINT then 打印数据
Step 2.6:
![主程序流程图](graph/main.drawio.svg)
#### savedata
Step 1: 输入文件名
Step 2: 打开文件
Step 3: if 打开文件失败 then 提示打开文件失败并结束
Step 4: 将所有库存记录写入文件
Step 5: 关闭文件
![保存数据流程图](graph/saveData.drawio.svg)
#### insert
Step 1: if 数据库满 then 提示数据库满并结束
Step 2: 输入零件编号
Step 3: if 零件已存在 then 提示零件已存在并结束
Step 4: 输入零件名和库存数量
Step 5: 添加新零件到数据
Step 6: 提示添加成功
![添加库存记录流程图](graph/insert.drawio.svg)
#### show_goods
Step 1: 创建表格边框
Step 2: 如果没有商品
Step 3: 提示“数据库内没有商品”
Step 4: 输入编号
Step 5: 打印商品
![打印数据流程图](graph/show_goods.drawio.svg)
#### readData
Step 1: if数据库空则返回“读取数据失败”
Step 2: if没有商品则返回“注意您的数据库内没有商品信息”
Step 3: 输入文件名称
Step 4: 输出数据库里的商品信息
![读取数据流程图](graph/readData.drawio.svg)
#### find_goods
Step1: if数据库为空则返回“数据库数据为空请先添加商品信息”
Step2: 输入需要查找的商品ID
Step3: 输出商品信息
Step4: if输入的商品信息不存在则返回 "输入的商品信息无效!!!”
![查询数据流程图](graph/find_goods.drawio.svg)
#### increase_count
Step1: if数据库为空则返回“数据库数据为空请先添加商品信息”
Step2: 输入需要修改的商品ID
Step3: 修改信息并显示修改成功
Step4: if没有需要修改的商品则返回
![修改模块流程图](graph/increase_count.drawio.svg)
#### sort
Step1 : 输入需要排序的商品编号
Step2 : 进行排序
Step3 : 排序完成
![排序模块流程图](graph/sort.drawio.svg)
#### delete_from_list
Step1: if数据库为空则返回“数据库数据为空请先添加商品信息”
Step2: 输入需要删除的商品id
Step3: 删除商品并显示删除成功
Step4: if输入的商品id不存在则返回“您输入的商品名称没有找到
![删除数据流程图](graph/delete_from_list.drawio.svg)
#### Show
Step1if没有商品数据则显示“您的数据库内没有商品
step2: 输入商品编号打印表格
![图表模块流程图](graph/Show.drawio.svg)