CIS*2750 - Software Systems Development and Integration

Instructor: D. McCaughan

Course Description:
Techniques and tools used in the development of large software systems. Methods for organizing and constructing modular systems, manipulating files, an introduction to interface design, and use of databases. Software tools for managing projects, database connectivity, configuration management, and system application programmer interfaces.

Class Project:
This class's project was an individual assignment in which we were to make a simple compiler for a relatively simple language. This project was broken into four milestones which had to be working properly before any part of the next milestone could be completed.


Milestone 1:

Make a parsing library in C for files which have the following format (anywhere after the # is considered a comment for the rest of the line):

# Sample configuration file for a1example.c
na me   =  Bill_Jones;   # whitespace is irrelavent
id     =               # this comment is spurious, but is legal

regstat=true;          # no spaces here, but shouldn't matter
# average is absent in this file - optional parameter in example
marks  ={ BILL, BOB}; average = 10.555;

# average is absent in this file - optional parameter in example

The parsing library should be able to handle both required and optional parameters giving the user an error message if any field failed to validate (i.e. trying to store an string into an integer) or if a required parameter is missing from the file completely.

Milestone 2:

Take the parsing library from Milestone 1 and make a Java GUI that will allow the user to compile these files into a Java Graphical User Interface (GUI) of it's own. The first time the file is parsed, the application should require the following fields:

During this pass, we'll retrieve basically the core content about what will be displayed on the Java GUI once it's created. The second pass will then take all of the information from the first pass that were in the 'fields' and 'buttons' sections and now start looking for them as required parameters. The values that are associated with the fields will be used later to validate the information that the user enters in the Java GUI's fields. The values which are associated with the buttons are the Java classes that will be attached to the buttons once they are added.

title = A2 Test;    #name of app

fields = {  Name,
    };  #field names

#button names
buttons = { Add, Update, Delete, Query };

Name = string;
Student_ID = integer;
A1 = integer;
A2 = integer;
A3 = integer;
A4 = integer;

Add = AddListener;
Update = UpdateListener;
Delete = DeleteListener;
Query = QueryListener;
Milestone 3:

In this milestone, we created a lex and yacc parser for the same configuration files using regular expressions which would then be used as an alternative for the user to use instead of the parser which was built in Milestone 1. At this time, each of the fields in the generated GUI will be validated against the corresponding data type (as specified in the configuration file) and an exception is thrown if any of them fail to validate. The buttons now have the specified classes attached to them and will complete whatever they were supposed to do once the user clicks on it.

Milestone 4:

The final milestone attaches the generated GUI with a MySQL database. There are also some constants which are used in the configuration file that are associated with specific actions (for buttons). These constants are: