Previous Topic

Next Topic

Manage

The manage step provides data management functionality for your application and/or process.

Below is the code for Manage():

//
// Manage()
//
// Populates table and perform a simple query
//

VOID Manage(VOID)
{
   CTSIGNED quantity;
   CTFLOAT  price, total;
   TEXT     itemnumb[5+1], custnumb[4+1], ordrnumb[6+1], custname[47+1];
   CTBOOL   isOrderFound, isItemFound;

   printf("MANAGE\n");

   // populate the tables with data
   Add_CustomerMaster_Records();
   Add_CustomerOrders_Records();
   Add_OrderItems_Records();
   Add_ItemMaster_Records();

   // perform a query:
   // list customer name and total amount per order

   // name               total
   // @@@@@@@@@@@@@      $xx.xx

   // for each order in the CustomerOrders table
   //    fetch order number
   //    fetch customer number
   //    fetch name from CustomerMaster table based on customer number
   //    for each order item in OrderItems table
   //       fetch item quantity
   //       fetch item number
   //       fetch item price from ItemMaster table based on item number
   //    next
   // next

   printf("\n\tQuery Results\n");

   try
   {
      // get the first order
      isOrderFound = recordCustOrdr.First();

      while (isOrderFound) // for each order in the CustomerOrders table
      {
         // fetch order number
         strcpy(ordrnumb, recordCustOrdr.GetFieldAsString(2).c_str());
         // fetch customer number
         strcpy(custnumb, recordCustOrdr.GetFieldAsString(3).c_str());

         // fetch name from CustomerMaster table based on customer number
         recordCustMast.Clear();
         recordCustMast.SetFieldAsString(0, custnumb);
         if (!recordCustMast.Find(CTFIND_EQ))
            continue;   // not possible in our canned example
         strcpy(custname, recordCustMast.GetFieldAsString(4).c_str());

         // fetch item price from OrderItems table
         recordOrdrItem.Clear();
         recordOrdrItem.SetFieldAsString(2, ordrnumb);
         // define a recordset to scan only items applicable to this order
         recordOrdrItem.RecordSetOn(6);
         isItemFound = recordOrdrItem.First();

         total = 0;
         while (isItemFound) // for each order item in OrderItems table
         {
            // fetch item quantity
            quantity = recordOrdrItem.GetFieldAsSigned(1);
            // fetch item number
            strcpy(itemnumb, recordOrdrItem.GetFieldAsString(3).c_str());

            // fetch item price from ItemMaster table based on item number
            recordItemMast.Clear();
            recordItemMast.SetFieldAsString(2, itemnumb);
            recordItemMast.Find(CTFIND_EQ);
            price = recordItemMast.GetFieldAsFloat(1);

            // calculate order total
            total += (price * quantity);

            isItemFound = recordOrdrItem.Next();
         }

         recordOrdrItem.RecordSetOff();

         // output data to stdout
         printf("\t\t%-20s %.2f\n", custname, total);

         // read next order
         if (!recordCustOrdr.Next())
            isOrderFound = 0;
      }
   }
   catch(CTException E)
   {
      Handle_Exception(E);
   }
}

//
// Add_CustomerMaster_Records()
//
// This function adds records to table CustomerMaster from an
// array of strings
//

VOID Add_CustomerMaster_Records(VOID)
{
   typedef struct {
      cpTEXT number, zipcode, state, rating, name, address, city;
   } DATA_RECORD;

   DATA_RECORD data[] = {
      "1000", "92867", "CA", "1", "Bryan Williams", "2999 Regency",      "Orange",
      "1001", "61434", "CT", "1", "Michael Jordan", "13 Main",           "Harford",
      "1002", "73677", "GA", "1", "Joshua Brown",   "4356 Cambridge",    "Atlanta",
      "1003", "10034", "MO", "1", "Keyon Dooling",  "19771 Park Avenue", "Columbia"
   };
   CTSIGNED nRecords = sizeof(data) / sizeof(DATA_RECORD);

   Delete_Records(recordCustMast);

   printf("\tAdd records in table CustomerMaster...\n");

   try
   {
      for (CTSIGNED i = 0; i < nRecords; i++)
      {
         recordCustMast.Clear();

         // populate record buffer with data
         recordCustMast.SetFieldAsString(0, data[i].number);
         recordCustMast.SetFieldAsString(1, data[i].zipcode);
         recordCustMast.SetFieldAsString(2, data[i].state);
         recordCustMast.SetFieldAsString(3, data[i].rating);
         recordCustMast.SetFieldAsString(4, data[i].name);
         recordCustMast.SetFieldAsString(5, data[i].address);
         recordCustMast.SetFieldAsString(6, data[i].city);

         // add record
         recordCustMast.Write();
      }
   }

   catch(CTException E)
   {
      Handle_Exception(E);
   }
}


//
// Add_CustomerOrders_Records()
//
// This function adds records to table CustomerOrders from an
// array of strings
//

VOID Add_CustomerOrders_Records(VOID)
{
   CTDate   orderdate;
   CTDate   promisedate;

   typedef struct {
      cpTEXT orderdate, promisedate, ordernum, customernum;
   } DATA_RECORD;

   DATA_RECORD data[] = {
      {"09/01/2002", "09/05/2002",  "1",  "1001"},
      {"09/02/2002", "09/06/2002",  "2",  "1002"}
   };
   CTSIGNED nRecords = sizeof(data) / sizeof(DATA_RECORD);


   Delete_Records(recordCustOrdr);

   printf("\tAdd records in table CustomerOrders...\n");

   try
   {
      for (CTSIGNED i = 0; i < nRecords; i++)
      {
         recordCustOrdr.Clear();

         orderdate.StringToDate(data[i].orderdate, CTDATE_MDCY);
         promisedate.StringToDate(data[i].promisedate, CTDATE_MDCY);
         // populate record buffer with data
         recordCustOrdr.SetFieldAsDate(0, orderdate);
         recordCustOrdr.SetFieldAsDate(1, promisedate);
         recordCustOrdr.SetFieldAsString(2, data[i].ordernum);
         recordCustOrdr.SetFieldAsString(3, data[i].customernum);

         // add record
         recordCustOrdr.Write();
      }
   }

   catch(CTException E)
   {
      Handle_Exception(E);
   }
}


//
// Add_OrderItems_Records()
//
// This function adds records to table OrderItems from an
// array of strings
//

VOID Add_OrderItems_Records(VOID)
{
   typedef struct {
      CTSIGNED sequencenum, quantity;
      cpTEXT ordernum, itemnum;
   } DATA_RECORD;

   DATA_RECORD data[] = {
      {1,   2, "1",  "1"},
      {2,   1, "1",  "2"},
      {3,   1, "1",  "3"},
      {1,   3, "2",  "3"}
   };
   CTSIGNED nRecords = sizeof(data) / sizeof(DATA_RECORD);

   Delete_Records(recordOrdrItem);

   printf("\tAdd records in table OrderItems...\n");

   try
   {
      for (CTSIGNED i = 0; i < nRecords; i++)
      {
         recordOrdrItem.Clear();

         // populate record buffer with data
         recordOrdrItem.SetFieldAsSigned(0, data[i].sequencenum);
         recordOrdrItem.SetFieldAsSigned(1, data[i].quantity);
         recordOrdrItem.SetFieldAsString(2, data[i].ordernum);
         recordOrdrItem.SetFieldAsString(3, data[i].itemnum);

         // add record
         recordOrdrItem.Write();
      }
   }

   catch(CTException E)
   {
      Handle_Exception(E);
   }
}


//
// Add_ItemMaster_Records()
//
// This function adds records to table ItemMaster from an
// array of strings
//

VOID Add_ItemMaster_Records(VOID)
{
   typedef struct {
      CTSIGNED weight;
      CTMONEY  price;
      cpTEXT itemnum, description;
   } DATA_RECORD;

   DATA_RECORD data[] = {
      {10,  1995, "1",  "Hammer"},
      {3,   999,  "2",  "Wrench"},
      {4,   1659, "3",  "Saw"},
      {1,   398,  "4",  "Pliers"}
   };
   CTSIGNED nRecords = sizeof(data) / sizeof(DATA_RECORD);


   Delete_Records(recordItemMast);

   printf("\tAdd records in table ItemMaster...\n");

   try
   {
      for (CTSIGNED i = 0; i < nRecords; i++)
      {
         recordItemMast.Clear();

         // populate record buffer with data
         recordItemMast.SetFieldAsSigned(0, data[i].weight);
         recordItemMast.SetFieldAsMoney(1, data[i].price);
         recordItemMast.SetFieldAsString(2, data[i].itemnum);
         recordItemMast.SetFieldAsString(3, data[i].description);

         // add record
         recordItemMast.Write();
      }
   }

   catch(CTException E)
   {
      Handle_Exception(E);
   }
}


//
// Delete_Records()
//
// This function deletes all the records in the table
//

VOID Delete_Records(CTRecord& record)
{
   CTBOOL   found;

   printf("\tDelete records...\n");

   try
   {
      // read first record
      found = record.First();

      while (found)  // while records are found
      {
         // delete record
         record.Delete();
         // read next record
         found = record.Next();
      }
   }
   catch(CTException E)
   {
      Handle_Exception(E);
   }
}