Purpose:
    A BillOfMaterialsFactory object can be used
    to create the bill of materials that is involved in the manufacture
    a particular array of products.
  
Product: A final product (i.e., a product that is sold to customers).
Assembly: An intermediat assembly (i.e., a manufactured part of a final product) used in the production process.
Material: A raw material used to manufacture either an intermediate assembly or a final product.
Bill of Materials: The number of products/assemblies/materials involved in the manufacture of a particular set of products/assemblies/materials.
BillOfMaterialsFactory and related classes
  are being designed and implemented for a small company called
  The Clip, LLC.
  The Clip manufacturers a variety of products:
| Product Name | Item Number | 
| Clipboard | 0 | 
| Bag_Clip | 1 | 
| Refrigerator_Clip | 2 | 
| Door_Clip | 3 | 
| Message_Board | 4 | 
| Door_Closer | 5 | 
They also manufacture a variety of assemblies:
| Assembly Name | Item Number | 
| Clip_Assembly | 6 | 
| Clip_Front | 7 | 
| Clip_Back | 8 | 
| Door_Mount | 9 | 
They manufacture these products and assemblies from the following raw materials:
| Raw Material | Item Number | 
| Rivet | 10 | 
| Sheet_Metal | 11 | 
| Spring | 12 | 
| Magnet | 13 | 
BillOfMaterialsFactory
  have already been implemented, including a BillOfMaterials
  class:
  BillOfMaterials ( Header , Implementation )
  and a ProductsReader class:
  
ProductsReader ( Header , Implementation )
The purpose of the former should be obvious. The purpose of the latter is to: read the names of the various products/assemblies/materials from a file, read the units of measurement for the various products/assemblies/materials from a file, and read the production requirements for the various products/assemblies/materials from a file.
These files already exist:
  All three files contain one "line" for each product/assembly/
  material (ordered by item number).  The file inputs.txt
  also contains one column for each product/assembly/material.
  "Line" 0 of inputs.txt is:
  
0 0 0 0 0 0 1 0 0 0 4 100 0 0
This "line" can be interpreted as follows: One clipboard (item number 0) is manufactured from 1 clip assembly (column 6), 4 rivets (column 10), and 100 square inches of sheet metal (column 11).
/**
 * Explicit Value Constructor
 *
 * @param products   The number of final products in a BOM
 * @param assemblies The number of intermediate assemblies in a BOM
 * @param materials  The number of raw materials in a BOM
 * @param names      An array of product, assembly, and material names
 * @param units      An array of product, assembly, and material units
 * @param inputs     A two-dimensional array of the input requirements
 */
BillOfMaterialsFactory::BillOfMaterialsFactory(int products, 
                                               int assemblies, 
                                               int materials,
                                               string *names, 
                                               string *units,
                                               int  **inputs);
  
/** * Create a BillOfMaterials for a given array of desired outputs * (which includes final products, intermediate assemblies, * and raw materials) * * @param outputs An array containing the desired number of each item */ BillOfMaterials *BillOfMaterialsFactory::createBillOfMaterials(int *outputs)
  This method, or the method that it calls to actually do the work,
  must use recursion to create the
  BillOfMaterials.  (Note: A "trivial" use of recursion
  will not satisfy this requirement.)
  
string class
  that is in the <string> library (instead of a
  char[]).  You should familiarize
  yourself with it before you start doing anything else.
  BillOfMaterialsFactory
  should be quite short.  You should spend most of your time thinking 
  about how to write a recursive algorithm for creating a bill of materials.
  inputs.txt you should be able to convince
  yourself that the bill of materials for 1 clipboard is:
  1 clipboard, 1 clip assembly, 1 clip front, 1 clip back, 6 rivets, 120
  square inches of sheet metal and 1 spring.  (Note that a bill of materials
  contains some "double counting".  Obviously, one doesn't really need
  a clipboard to make a clipboard.  Also, the clip assembly consists of
  a clip front, clip back and some rivets.  The bill of materials is intended
  to show all of the products, assemblies and materials involved in the
  process.)
  BillOfMaterialsFactory:
  
Copyright 2010