Tuesday, March 8, 2016

UVa 330 - Inventory Maintenance

Accepted date: 2016-03-08
Run Time: 0.053
Ranking (as of 2016-03-08): 3 out of 141
Language: C++

/*
  UVa 330 - Inventory Maintenance

  To build using Visual Studio 2012:
    cl -EHsc -O2 UVa_330_Inventory_Maintenance.cpp
*/

#include <string>
#include <map>
#include <cstdio>
#include <cstring>
using namespace std;

const int nr_chars_max = 15, nr_items_max = 200;

struct item_name {
   char name_[nr_chars_max + 1];

  bool operator<(const item_name& itn) const {return strcmp(name_, itn.name_) < 0;}
  bool operator==(const item_name& itn) const {return !strcmp(name_, itn.name_);}
};

struct item {
  bool deleted_;
  double cost_, price_;
  int in_stock_;
};

int main()
{
  map<item_name, item> items;
  char activity[nr_chars_max + 1];
  item_name itn;
  int quantity;
  double profit = 0.0;
  while (scanf("%s", activity) != EOF && activity[0] != '*') {
    switch (activity[0]) {
    case 'n':
    {
      item it;
      scanf("%s %lf %lf", itn.name_, &it.cost_, &it.price_);
      it.deleted_ = false, it.in_stock_ = 0;
      items[itn] = it;
    }
      break;
    case 'b':
      scanf("%s %d", itn.name_, &quantity);
      items[itn].in_stock_ += quantity;
      break;
    case 's':
    {
      scanf("%s %d", itn.name_, &quantity);
      item& it = items[itn];
      it.in_stock_ -= quantity;
      profit += (it.price_ - it.cost_) * quantity;
    }
      break;
    case 'd':
    {
      scanf("%s", itn.name_);
      item& it = items[itn];
      it.deleted_ = true;
            profit -= it.cost_ * it.in_stock_;
            it.in_stock_ = 0;
    }
      break;
    default: // report
      double total = 0.0;
      puts("                  INVENTORY REPORT");
      puts("Item Name     Buy At      Sell At      On Hand        Value");
      puts("---------     ------      -------      -------        -----");
      for (map<item_name, item>::const_iterator ii = items.begin(), ie = items.end();
        ii != ie; ++ii) {
        const item& it = ii->second;
        if (!it.deleted_) {
          double value = it.cost_ * it.in_stock_;
          printf("%-10s %9.2lf %12.2lf %12d %12.2lf\n",
            ii->first.name_, it.cost_, it.price_, it.in_stock_, value);
          total += value;
        }
      }
      puts("------------------------");
      printf("Total value of inventory                       %12.2lf\n", total);
      printf("Profit since last report                       %12.2lf\n\n", profit);
      profit = 0.0;
      break;
    }
  }
  return 0;
}

No comments:

Post a Comment