A while back I created some custom inventory management and pulling software for an old employer. I recently went back and added some new features for them. The project has developed into a fairly full featured cool little piece of software, much more-so than I had envisioned when I started it. I took on the project when it became clear that the client needed a better way of organizing and pulling stock, but didn't want to transition to a new point of sale system or pay the fairly high quotes for integrating a more standardized inventory setup. I managed to create a system which would allow them to stick with their current POS program, use their existing barcode scanners, and request products from an iPad (or other web browser).
I originally had my program pulling the product info out of the client's point of sale system and storing it in a separate database in Microsoft Access. I hadn't ever edited an office file programatically before (or even used MS Access), so that was pretty fun to learn. I went with MS Access because it allowed me to quickly develop the project, without having to build database management features into my user interface. Eventually I decided that for the sake of simplicity, ease of use, and program independence I would move the database entirely over to Java using a derby database. Providing the user the ability to change, remove and add values to the database in a graphical form was a bit of a pain; my go-to solution was to use Swing's JTables which are pretty convoluted and difficult to work with. I've since moved away from Swing in favor of JavaFX which has been a vast improvement.
My most recent updates added the capabilty to track the monetary value of the inventory assets. I decided to go ahead and toss in some Google Charts for visualizing cost breakdown by category and assets over time. I found Google Charts to be well documented, very pleasant to use, and fairly consistent across all the major browsers. I've written a separate post on some of the tricks I discovered to getting the expected behavior out of the charts. The Google Charts post can be found here: http://nooleanbot.blogspot.com/2013/05/google-charts-tips.html