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); } } |
|||