/* * Searches for a inventory item based on that item's name. The search is * performed using the item name secondary database. Displays all * inventory items that use the specified name, as well as the vendor * associated with that inventory item. * * If no item name is provided, then all inventory items are displayed. */ int main(int argc, char *argv[]) { STOCK_DBS my_stock; int ch, ret; char *itemname; /* Initialize the STOCK_DBS struct */ initialize_stockdbs(&my_stock); /* Parse the command line arguments */ itemname = NULL; while ((ch = getopt(argc, argv, "h:i:?")) != EOF) switch (ch) { case 'h': if (optarg[strlen(optarg)-1] != '/' && optarg[strlen(optarg)-1] != '\\') return (usage()); my_stock.db_home_dir = optarg; break; case 'i': itemname = optarg; break; case '?': default: return (usage()); } /* Identify the files that hold our databases */ set_db_filenames(&my_stock); /* Open all databases */ ret = databases_setup(&my_stock, "example_database_read", stderr); if (ret != 0) { fprintf(stderr, "Error opening databases\n"); databases_close(&my_stock); return (ret); } if (itemname == NULL) ret = show_all_records(&my_stock); else ret = show_records(&my_stock, itemname); /* close our databases */ databases_close(&my_stock); return (ret); }
int main (int argc, char *argv[]) { char ch, lastChar; // Initialize the path to the database files std::string databaseHome("./"); std::string itemName; // Database names std::string vDbName("vendordb.db"); std::string iDbName("inventorydb.db"); std::string itemSDbName("itemname.sdb"); // Parse the command line arguments while ((ch = getopt(argc, argv, "h:i:")) != EOF) switch (ch) { case 'h': databaseHome = optarg; lastChar = databaseHome[databaseHome.size() -1]; if (lastChar != '/' && lastChar != '\\') return (usage()); break; case 'i': itemName = optarg; break; case '?': default: return (usage()); break; } try { // Open all databases. MyDb inventoryDB(databaseHome, iDbName); MyDb vendorDB(databaseHome, vDbName); MyDb itemnameSDB(databaseHome, itemSDbName, true); // Associate the secondary to the primary inventoryDB.getDb().associate(NULL, &(itemnameSDB.getDb()), get_item_name, 0); if (itemName.empty()) { show_all_records(inventoryDB, vendorDB); } else { show_item(itemnameSDB, vendorDB, itemName); } } catch (DbException &e) { std::cerr << "Error reading databases. " << std::endl; return (e.get_errno()); } catch (std::exception &e) { std::cerr << "Error reading databases. " << std::endl; std::cerr << e.what() << std::endl; return (-1); } return (0); } // End main