Exemplo n.º 1
0
/*
 * 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