New Due Date: Wednesday, June 2, 2:30 pm, over the web (see turn-in details below).
In this final assignment, you will implement the C database you have been planning in homework 4a and 4b, working in your project teams.
By now, you and your group members have thought carefully about the user interface and high level behavior of your C/C++ database program, and possibly any additional restrictions you want to impose for your domain. As part of homework 5, you have also built a list data structure in C which you may find useful to adapt for your database. Your task is now to build your database program, using the rest of the development techniques and tools we've learned in lecture.
Refer back to HW 4b for the detailed specifications of the query language you should support.
Create a Makefile for development. In your project directory, create a Makefile with rules to help compile, run, debug, and test your program, along with any other rules you find useful for development. You may wish to adapt the Makefile from HW 5, and you may wish to learn about the include directive to run the test rule from your HW 4b Makefile.
Create or refine your high-level design. Before diving right into the code, think about what functions you will likely need to support the basic functionality of the program, such as reading commands, manipulating your data structures, and reading from and writing to disk. The layout of your program will likely be quite different than if you were working in an object-oriented setting like Java.
It is highly recommended to consider how to implement the features of your database incrementally, ensuring that each part works before moving on to more features. (Writing it all at once will make it very difficult to debug.) You may choose to add or restructure some of your test cases to better support this approach, if necessary.
Implement the Database. This is the bulk of the assignment, which should be straightforward by now. Your final product should pass all of your tests from HW 4b, though you may modify the tests if necessary. Things to keep in mind:
Create a README. In the top level of your project directory, create a README file that contains a brief summary of the purpose your program and your intended domain, along with instructions on how to use it. You may include a link to the query language specs instead of reproducing them, but you should explain any additional restrictions that you imposed on your input for your domain.
There is a small amount of extra credit available for interesting additional work that you choose to do and document. This could be in the form of domain-specific enhancements (eg. enforcing particular keys for row and validating the types of your values) or functional enhancements (eg. an interactive mode or statistical features).
Note: Your additions should not detract from the generality of your underlying representation. In other words, you should not have to make significant changes to your representation to support changes to your domain.
We'll grade this based on Hal Perkins's "restaurant style" extra credit-- one star for going beyond the requirements, two stars for significant and well-done enhancements, and three stars if it puts MySQL and Microsoft SQL Server to shame.
One person from each group should turn in a compressed hw6.tar.gz file containing the contents of an up to date working directory (not including your repository), after running "make clean". Use E-submit, not email, to submit the file.