Final Project

CS 265/571 Advanced Programming Tools and Techniques
Instructors: Jeremy Johnson and Kurt Schmidt
Due date: Wednesday, Mar. 16 at 11:55 pm

Introduction

The purpose of this project is to assimilate the various topics and tools discussed in the course through a programming project of modest difficulty with practical value. The project involves writing a program to assist with advising of Computer Science students. The program will access student grade information from a flat database (in CSV format) of student transcripts and display the course checklist for the Computer Science major with grades filled in for the courses that the student has taken. See Transcript.csv for an example of the file format (the example contains grade information for two students). The filled in checklist should be viewable as a web-page and the final implementation should allow users to request the filled-in checklist through a web interface.

Okay, some nitty-gritties:

Students may work on the project in teams of two students. Before beginning the implementation, a design document must be created. The design document should indicate the various tasks that the program must do, a decomposition of the tasks into components, with well-defined interfaces between the components. In addition the document should provide an outline of the implementation, including the implementation language, and indicating who will implement the different tasks. Finally, you need to come up with a test plan that indicates how the program will be tested.

Project Components

  1. Design Document
    1. Describe in detail the tasks that must be done and the data structures that are needed: 1) user interface, 2) read transcript, 3) fill out checklist, 4) display filled-in checklist.
    2. Describe the input format
    3. Describe how to determine which items in the checklist should be filled-in. Additional information may be needed, e.g. which courses count for which types of electives.
    4. How will you display the filled-in checklist.
    5. How will the different components for the different tasks communicate? What is the interface?
  2. Implementation Plan
    1. How will the different tasks be implemented?
    2. What language/languages will be used?
    3. Who is responsible for each component?
    4. How will your program interface with the web? Note that you may want to start with a standalone program that reads the student id and produces an html document encoding the filled-in checklist.
    5. Is there existing libraries, packages that may be helpful. If so, you will need to do some preliminary reading/experimenting to determine how to use these libraries/packages.
    6. What types of errors may encounter? How will you deal with these?
  3. Test Plan
    1. Using the information from the Design Document come up with a set of sample transcripts to test different features of your program. You will want to make sure you handle different sets of electives so that you can be assured that your program handles these properly. What about a student who has not completed any classes? What about NGR, INC? More than 25 science credits? Are there any ambiguities in the checklist?
    2. Make sure that you test
    3. How will you test the user interface? What if the requested student does not exist? More Free Electives than fit in the list? ...
  4. Implementation
    1. Provide a clean well-organized implementation with appropriate documentation.
    2. Indicate the results of performing your test plan.
    3. Is your performance reasonable with a large file of transcripts?

What to hand in

Listen carefully. Only one team member will submit all the files listed below. At the top of the README he/she will list his/her partners name and userID.

The partner not submitting the code will still submit a single README, as above, just listing his/her partner's name and ID.

Place your solution in a directory called project. Your directory should contain a file called README that describes all of the files in project and summarizes what you did. Make sure to indicate if any of the problems were not done or are not working. The README file should list all team members. Each student in the team should submit the project.

Include all of the following:

  1. design.xxx - Design Document (where xxx is doc, html, rtf, or pdf, whatever).
  2. implementation.xxx - Implementation Plan
  3. test.xxx - Test Plan
  4. Documented Source code - use multiple files as appropriate
  5. Makefile - Makefile to build executable, if needed.
  6. results.xxx - Results from running test plan

All assignments should be submitted using webct. You should submit your gzipped tar file, which will be called finalProj.tgz.