Java Desktop App - Zoo Management System
Contents
Project description
In this project, we have created a GUI Java (Swing) Application for a Zoo Management System:
- You can try the application by downloading the Java Jar file from this link: http://perso.sinfronteras.ws/images/0/00/SMSimulator.jar
- You can also see or download the Java Project from our Github repository at: https://github.com/adeloaleman/JavaDesktopApp-ZooManagementSystem
- If you just want to take a look to the Application GUI, here we show some images that try to describe the most important features of the application.
Our Management System allows users (Zoo Administrators) to manage Animals and Zoo Keepers. Some of the functionalities that have been added to the system are:
- Search for Animals:
- Refine by: Type, Specie, Name, etc.
- Search for Keepers
- Add new animals to the database
- Add new keepers
- Update animals
- Manage aspects such as Medications, Vaccines, Offsprings, etc
- Update keepers
The most important concepts we have applied to build this applications are:
- Design Patters:
- We have implemented a Model-View-Controller MVC
- To facilitate communication between GUI components we have implemented a Mediator Pattern
- GUI Java Swing
- Inheritance, Polymorphism, Upcasting - Downcasting: These were the most important concepts we have learned and implemented in this project. Because animals are broken down into different types (see example below) we had implemented a class-based inheritance model where <Animal> is the super class. We often had to use Downcasting in order to get access to specific behaviors of a subclass into the Animal hierarchy.
- Abstraction
- Encapsulation
- Serialization: We have implemented data persistence through a file using serialization.
The Zoo has a number of Animals. These Animals are broken down into types: Mammal, Reptile, Avian, Aquatic, Insect. For example:
- Mammal:
- Avian
- Bat
- date of birth, date of arrival, fight, gender, ofspring, medication, vaccine, exhibit number
Class diagram
Figure 1: Data example
File:Fake news dataset example.pdf File:Fake news dataset example.odsError creating thumbnail: File with dimensions greater than 12.5 MP
An example of one of the classes
public class Test {
public static void main(String[] args) {
Cat c = new Cat();
System.out.println(c.health);
Dog d = new Dog();
System.out.println(d.health);
// // Upcasting
Mammal m = c; // Although there's no need to for programmer to upcast manually, it's legal to do so:
// Mammal m = (Mammal) new cat();
System.out.println(c); // This print: upcastingdowncasting.Cat@15db9742
System.out.println(m); // This will print the same: upcastingdowncasting.Cat@15db9742
// As you can see, Casting does not change the actual object type
// Cat is still exactly the same Cat after upcasting.
// It didn't change to a Mammal, it's just being labelled Mammal right now.
// This is allowed, because Cat is a Mammal.
// // Downcasting
if(m instanceof Cat){ // testing if the Animal is a Cat
System.out.println("It's a Cat! Now I can downcast it to a Cat, without a fear of failure.");
Cat c1 = (Cat)m; // Manual downcasting back to a Cat
}
// The following code will compile, but throws "java.lang.ClassCastException: Mammal cannot be cast to Cat" exception during runTime,
// because I’m trying to cast a Mammal, which is not a Cat, to a Cat.
Mammal m1 = new Mammal();
Cat c2 = (Cat)m1;
}
}
A look at the GUI