# 1题目与要求
## 1.1问题描述
某电子公司仓库中有若干批次的同一种电脑,按价格、数量来存储。要求实现功能:
1. 初始化 n 批不同价格电脑入库;
1. 出库:销售 m 台价格为 p 的电脑;
1. 入库:新到 m 台价格为 p 的电脑;
1. 盘点:电脑的总台数,总金额,最高价,最低价,平均价格。
注:每个数据元素含有价格与数量;同一价格的电脑存储为一个数据元素。
## 1.2本系统涉及的知识点
仓库管理系统可以使用顺序表、有序表、单链表、有序循环链表等实现,本设计采用有序表实现。
所谓有序表,是指这样的线性表,其中所有的元素以递增或递减方式有序排列。
首先要指出的是,有序表是基于顺序表而延伸出来的一种数据结构,其共同点是用一组地址连续的存储单元依次存储线性表的数据元素。
其次,是有序表的独特之处,它其中的数据元素按照一定的顺序有序排列。仓库管理系统适合采用有序表,原因是可以按照商品的价格或数量进行有序
排列,方便用户比对价格、数量。
## 1.3功能要求
1. 初始化仓库:初始化 n 批不同型号的电脑入库;
1. 入库:新到 m 台价格为 p 的电脑;
1. 出库:销售 m 台价格为 p 的电脑;
1. 盘点仓库:列出仓库的关键数据:电脑的总台数、总金额、最高价、平均价格等;
按照有序表的特点以及所使用的编程语言(C++)的特性,本程序还提供了以下功能:
1. 查询某一型号的电脑的价格、数量;
2. 重新对仓库数据按照一定规则排序;
3. 导出仓库数据到外部文件;
4. 从外部文件导入数据,以初始化仓库。
# 2 功能设计
## 2.1数据结构定义
一、基本数据元素:电脑
```c++
typedef struct computer { char type[50]; // 型号
double price; // 价 格
int number; // 数量
} Computer, ElemType;
```
基本数据元素电脑(Computer/ElemType)采用结构体表示,用于存储某一类电脑的信息:型号(type[50])、价格(price)、库存数量(number)。
二、数据结构:有序表
```c++
typedef struct {
ElemType *elem; // 基地址
int length; // 当前有效数据的个数
int listsize; // 当前存储容量
bool isInit{false}; // 有序表是否已经初始化
int sortWay{1}; // 有序表的排序方式
} SqList;
```
数据结构有序表(SqList)由以下几个部分组成:
1. 数组指针 elem 指示有序表的基地址;
1. length 指示有序表的当前有效数据个数(长度);
1. listsize 指示有序表当前分配的存储空间大小,一旦因插入数据元素(Computer)而空间不足时,可进行再分配;
1. isInit 指示有序表是否已经初始化(即是否有一个确定的基地址);
1. sortWay 指示有序表的排序方式,按照值的不同,对应的有序表排序方式也不同。本程序具体设计了以下四种排序方式:1-按照价格升序、2-按照价格降序、3-按照数量升序、4-按照数量降序。
整体的数据结构如下图所示:

图 1.1 有序表数据结构
## 2.2模块图
### 一、入库
入库有两种方式,一是在仓库中已有和待入库电脑型号相同的数据,此时, 检查给出的价格是否与仓库中一致,若一致,同意用户的入库操作。然后只需更改仓库中此种电脑型号的数量。
示意图如下:

图 2.1 入库仓库中已有型号的电脑
第二种方式,入库一种新型号的电脑,则应该按照有序表的排序方式
(sortWay)在正确位置插入元素。示意图如下:

图 2.2 入库一种新型号的电脑
### 二、出库
可以出库的前提是,在仓库中有待出库型号的电脑且仓库中的库存数量大于等于待出库数量。
第一类情况,待出库电脑的数量在库存中充足(即库存数量大于待出库数量),此时只需更改相应的数据元素。
示意图如下:

图 2.3 出库电脑数量充足
第二类情况,此种型号的电脑恰好全部出库完,则需要删除相应的数据元素。示意图如下:

图 2.4 此种型号的电脑恰好全部出库完
# 3 功能代码
## 3.1初始化动态顺序表
有序表的数据结构是基于顺序表实现的,所以在进行一切操作前,应当初始化一个空的动态顺序表。
代码如下:
```c++
Status InitSqList(SqList &L, int n) {
auto listsize{((n / 10) + 1) * 10}; // 确定顺序表初始内存占用空间
L.elem = new ElemType[listsize]; // 分配基地址、顺序表内存
if (!L.elem) // 内存不足
return OVERFLOW;
L.length = 0; // 此时顺序表还没有元素,L.length 为 0
L.listsize = listsize; return OK;
}
```
有序表初始分配的内存空间(listsize)并没有简单采用一个常数大小(如 10
个 ElemType 字节),这样不用限制用户输入的电脑类型最大个数,对用户友好。具体是通过给定的 n,计算表达式((n/10)+1)\*10,使得初始分配的内存为 10 的整数倍大小的 ElemType 字节,比如 n 为 12,表达式((n/10)+1)\*10 则为 20。
需要注意的是,初始化动态顺序表时,还暂无数据元素,L.length 应为 0。
## 3.2创建(初始化)仓库
创建仓库的前提是,已经初始化过一个空的动态顺序表,这个检测可以在主函数中完成。
创建有序表式的仓库步骤:
1. 输入 n 个数据元素,存储到顺序表中;
1. 对已创建的顺序表按照有序表的排序方式(L.sortWay)进行快速排序。
1. 更新有序表的相应参数(length、isInit、sortWay)
代码如下:
```c++
void CreateWarehouse(SqList &L, int n, int sort_way) {
cout << "请输入这" << n << "种电脑各自的型号、单价、总数:(以空格分隔)"
<< endl;
// 输入n 个数据元素
for (int i = 0; i < n; i++)
cin >> L.elem[i].type >> L.elem[i].price >> L.elem[i].number;
// 按照 sort_way 对刚创建的顺序表排序
switch (sort_way) { case 1:
// 按价格升序
sort(L.elem, L.elem + n, cmp1); break;
case 2:
// 按价格降序
sort(L.elem, L.elem + n, cmp2); break;
case 3:
// 按数量升序
sort(L.elem, L.elem + n, cmp3); break;
case 4:
// 按数量降序
sort(L.elem, L.elem + n, cmp4); break;
default:
break;
}
// 更新L 的参数
L.sortWay = sort_way; L.length = n; L.isInit = true;
}
```
如果使用文件流创建仓库,那么代码略有不同,这部分属于 C++的知识。
不同代码(输入 n 数据元素)如下:
```c++
string s;
// 从文件流输入n 个数据元素
for (int i = 0; i < n; i++) {
ImportFile >> L.elem[i].type >> L.elem[i].price >> L.elem[i].number; getline(ImportFile, s);
}
```
## 3.3显示仓库
顾名思义,就是将仓库的数据打印出来。代码如下:
```c++
// 显示仓库
void PrintWarehouse(SqList L) { if (!L.length)
cout << "当前仓库没有数据!" << endl; else {
cout << "当前仓库数据如下:" << endl; string sort_way;
switch (L.sortWay) { case 1:
sort_way = "(按照价格升序)"; break;
case 2:
sort_way = "(按照价格降序)"; break;
case 3:
sort_way = "(按照数量升序)"; break;
case 4:
sort_way = "(按照数量降序)"; break;
default:
break;
}
cout << sort_way << en
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++实现(控制台)仓库管理系统【100010021】
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉

详情介绍:https://blog.csdn.net/s1t16/article/details/128271414 某电子公司仓库中有若干批次的同一种电脑,按价格、数量来存储。要求实现功能: 初始化 n 批不同价格电脑入库; 出库:销售 m 台价格为 p 的电脑; 入库:新到 m 台价格为 p 的电脑; 盘点:电脑的总台数,总金额,最高价,最低价,平均价格。 注:每个数据元素含有价格与数量;同一价格的电脑存储为一个数据元素。
资源推荐
资源详情
资源评论
















收起资源包目录






























共 26 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论

- m0_748945612023-01-24资源简直太好了,完美解决了当下遇到的难题,这样的资源很难不支持~
神仙别闹
- 粉丝: 1958
- 资源: 5086

上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制
