3.1数据表设计
基于模块化程序设计思想,为了更好的和其它程序之间交换数据,我们把物资分配问题的有关数据用数据库的形式组织和管理起来。程序运行时,从数据库中读取数据作为输入数据,运行的结果也输出保存在数据库中。由于物资分配问题可以用下面的框图来简单示意。所以围绕申请计划、库存情况和分配方案进行数据表的设计。

首先,我们需要列出物资分配问题所涉及的所有物资清单(不失一般性,我们考虑对
种物资的分配问题)。然后把这些物资作为物资申请计划数据表和仓库储存情况数据表的属性。物资申请计划数据表(Apply)
| 序号 | 数据元素名 | 列标识符 | 单位 | 数据类型 | 约束条件 |
| 1 | 计划编码 | Code | 整形 | 主码 | |
| 2 | 申请单位名称 | Name | 文本 | ||
| 3 | 单位优先类别 | Class | 整形 | 外码引用 | |
| 4 | 对物资1的申请量 | NQ1 | 单精度实数型 | ||
| 5 | 对物资2的申请量 | NQ2 | 单精度实数型 | ||
| ┄ | ┄ | ┄ | ┄ | ┄ | |
![]() | 对物资 的申请量 | NQi | 单精度实数型 |
单位优先级数据表(Power)
| 序号 | 数据元素名 | 列标识符 | 单位 | 数据类型 | 约束条件 |
| 1 | 单位优先类别 | Class | 整形 | 主码 | |
| 2 | 权系数 | Power | 单精度实数型 |
仓库情况数据表数据表(Gallery)
| 序号 | 数据元素名 | 列标识符 | 单位 | 数据类型 | 约束条件 |
| 1 | 仓库编码 | Code | 整形 | 主码 | |
| 2 | 仓库名称 | Name | 文本 | ||
| 3 | 物资1的现有存储量 | SQ1 | 单精度实数型 | ||
| 4 | 物资2的现有存储量 | SQ2 | 单精度实数型 | ||
| ┄ | ┄ | ┄ | ┄ | ┄ | |
![]() | 物资 的现有存储量 | SQi | 单精度实数型 | ||
![]() | 物资1的最低储备量 | RQ1 | 单精度实数型 | ||
![]() | 物资2的最低储备量 | RQ2 | 单精度实数型 | ||
| ┄ | ┄ | ┄ | ┄ | ┄ | |
![]() | 物资 的最低储备量 | RQi | 单精度实数型 |
物资分配结果数据表(Distribution)
| 序号 | 数据元素名 | 列标识符 | 单位 | 数据类型 | 约束条件 |
| 1 | 单位编码 | Code | 整形 | 主码 | |
| 2 | 单位名称 | Name | 文本 | ||
| 3 | 分得物资1的数量 | DQ1 | 单精度实数型 | ||
| 4 | 分得物资2的数量 | DQ2 | 单精度实数型 | ||
| ┄ | ┄ | ┄ | ┄ | ┄ | |
![]() | 分得物资 的数量 | DQi | 单精度实数型 |
3.2数据结构设计
在程序内部,为了避免多次读写数据库,我们为申请计划信息和库存情况信息设计了结构链表。这样程序初始化时一次性把数据库中的相关信息载入程序数据结构中。对物资分配结果,我们也定义了一个结构链表。程序对各个物资的分配结果保存在这个数据结构中。在系统命令驱动下或者是程序退出时,程序会从次分配结果结构链表向物资分配结果数据表写数据,用于其它程序,或者是用于把分配结果显示给用户。
现在给出在VC++(www.cppentry.com)6.0中的结构定义
用于保存申请计划信息的结构链表定义:
| typedef struct _Apply { int Code;//单位编码 CString Name;//申请单位名称 int Class;//单位优先类别 float NQ2;//对物资2的申请量 ┄ ┄ float NQi;//对物资i的申请量 }Apply; typedef CTypedPtrArray<CPtrArray, Apply *> CApplyArray; |
用于保存物资库存情况的结构链表定义
| typedef struct _Gallery { int Code;//仓库编码 CString Name;//仓库名称 float SQ1;//物资1的现有存储量 float SQ2;//物资2的现有存储量 ┄ ┄ float SQi;//物资i 的现有存储量 float RQ1;//物资1的最低储备量 float RQ2;//物资2的最低储备量 ┄ ┄ float RQi;//物资i的最低储备量 }Gallery; typedef CTypedPtrArray<CPtrArray, Gallery *> CGalleryArray; |
用于保存分配结果输出信息的结构链表定义
| typedef struct _ Distribution { int Code;//单位编码 CString Name;//申请单位名称 float NQ1;//该单位分得物资1的数量 float NQ2;// 该单位分得物资2的数量 ┄ ┄ float NQi;// 该单位分得物资i的数量 }Distribution; typedef CTypedPtrArray<CPtrArray, Distribution *> CDistributionArray; |

的申请量
的现有存储量 


的最低储备量
的数量