CMSC 335 Project SeaPort Solved Project 3 Introduction the SeaPort Project series For this set of projects for the course we wish to simulate some of the aspects of a number of Sea Ports
INSTRUCTIONS TO CANDIDATES
ANSWER ALL QUESTIONS
CMSC 335 Project Solved Project 3
Introduction - the SeaPort Project series
For this set of projects for the course, we wish to simulate some of the aspects of a number of Sea Ports.
Here are the classes and their instance variables we wish to define:
SeaPortProgram extends JFrame
o variables used by the GUI interface
o world: World
Thing implement Comparable
o index: int
o name: String
o parent: int
World extends Thing
o ports: ArrayList
o time: PortTime
SeaPort extends Thing
o docks: ArrayList
o que: ArrayList // the list of ships waiting to dock
o ships: ArrayList // a list of all the ships at this port
o persons: ArrayList // people with skills at this port
Dock extends Thing
o ship: Ship
Ship extends Thing
o arrivalTime, dockTime: PortTime
o draft, length, weight, width: double
o jobs: ArrayList
PassengerShip extends Ship
o numberOfOccupiedRooms: int
o numberOfPassengers: int
o numberOfRooms: int
CargoShip extends Ship
o cargoValue: double
o cargoVolume: double
o cargoWeight: double
Person extends Thing
o skill: String
Job extends Thing - optional till Projects 3 and 4
o duration: double
o requirements: ArrayList
// should be some of the skills of the persons
o time: int
Eventually, in Projects 3 and 4, you will be asked to show the progress of the jobs using JProgressBar's.
Here's a very quick overview of all projects:
1. Read a data file, create the internal data structure, create a GUI to display the structure, and let
the user search the structure.
2. Sort the structure, use hash maps to create the structure more efficiently.
3. Create a thread for each job, cannot run until a ship has a dock, create a GUI to show the
progress of each job.
4. Simulate competing for resources (persons with particular skills) for each job.
Project 3 General Objectives
Project 3 - More JDK classes - GUI's and threads
Explore other GUI classes, such as JTree, JTable, and JProgressBar.
Create and run threads
o Competing for one resource.
You should start working on a documentation file before you do anything else with these projects, and
fill in items as you go along. Leaving the documentation until the project is finished is not a good idea for
any number of reasons.
The documentation should include the following (graded) elements:
Cover page (including name, date, project, your class information)
o including a UML class diagram
o classes, variables and methods: what they mean and why they are there
o tied to the requirements of the project
o how would a user start and run your project
o any special features
o effective screen shots are welcome, but don't overdo this
o do this BEFORE you code anything
o what do you EXPECT the project to do
o justification for various data files, for example
o express yourself here
o a way to keep good memories of successes after hard work
Project 3 Specific Goals:
Implement threads and a GUI interface using advanced Java Swing classes.
1. Required data structure specified in Project 1:
1. World has SeaPort's
2. SeaPort has Dock's, Ship's, and Person's
3. Dock has a Ship
4. Ship has Job's
7. Person has a skill
8. Job requires skills- NEW CLASS for this project!
2. Extend Project 2 to use the Swing class JTree effectively to display the contents of the data file.
o (Optional) Implement a JTable to also show the contents of the data file. There are lots
of options here for extending your program.
o Implement a thread for each job representing a task that ship requires.
o Use the synchronize directive to avoid race conditions and insure that a dock is
performing the jobs for only one ship at a time.
the jobs of a ship in the queue should not be progressing
when all the jobs for a ship are done, the ship should leave the dock, allowing a
ship from the que to dock
once the ship is docked, the ships jobs should all progress
in Project 4, the jobs will also require persons with appropriate skills.
o The thread for each job should be started as the job is read in from the data file.
o Use delays to simulate the progress of each job.
o Use a JProgressBar for each job to display the progress of that job.
o Use JButton's on the Job panel to allow the job to be suspended or cancelled.
4. As before, the GUI elements should be distinct (as appropriate) from the other classes in the
5. See the code at the end of this posting for some suggestions.
Suggestions for Project 3 Job class. Here is a sample of code for a Job class in another context, the
Sorcerer's Cave project. The code for this class will need some modifications, but this should give you an
idea of the issues involved.
In fact, you should find much of this code redundant.
Also, some of the code at the following sites might give you some ideas about how to proceed with this
Project 3 Example - Sorcerer's Cave, note that even this one isn't complete
run method - detailed analysis of the run method in the Job class in the Cave project