Difference between revisions of "Java Desktop App - Zoo Management System"

From Sinfronteras
Jump to: navigation, search
Line 25: Line 25:
 
:* To facilitate communication between GUI components we have implemented a [[Object Orientation with Design Patterns#Mediator Pattern|Mediator Pattern]]
 
:* To facilitate communication between GUI components we have implemented a [[Object Orientation with Design Patterns#Mediator Pattern|Mediator Pattern]]
 
* [[Java GUI Programming|GUI Java Swing]]
 
* [[Java GUI Programming|GUI Java Swing]]
* [[Object-Oriented Concepts and Constructs#Upcasting - Downcasting|Upcasting - Downcasting]]
+
* [[Object-Oriented Concepts and Constructs#Upcasting - Downcasting|Upcasting - Downcasting]]: This was one of the most important concepts we have learned in this project. Because animals are broken down into different types (see example below) we had implemented a class-based inheritance model (Super class: Animal Class)  Upcasting - Downcasting in order to get access to the correct method
 +
 
 
* [[Object-Oriented Concepts and Constructs#Polymorphism|Polymorphism]]
 
* [[Object-Oriented Concepts and Constructs#Polymorphism|Polymorphism]]
 
* [[Object-Oriented Concepts and Constructs#Inheritance|Inheritance]]
 
* [[Object-Oriented Concepts and Constructs#Inheritance|Inheritance]]

Revision as of 12:02, 9 July 2019


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:
  • If you just want to take a look to the Application GUI, in the GUI Section 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:
  • GUI Java Swing
  • Upcasting - Downcasting: This was one of the most important concepts we have learned in this project. Because animals are broken down into different types (see example below) we had implemented a class-based inheritance model (Super class: Animal Class) Upcasting - Downcasting in order to get access to the correct method


The Zoo has a number of Animals. These Animals are broken down into types:

  • Mammal
  • Reptile
  • Avian
  • Aquatic
  • Insect


Example of Animals:

  • Mammal:
  • Tiger:
  • date of birth, date of arrival, gender, ofspring, medicaton, vaccine, exhibit number
  • Mammal:
  • Avian
  • Bat
  • date of birth, date of arrival, fight, gender, ofspring, medication, vaccine, exhibit number


Each Animal has a Zoo keeper that looks afer it:

  • Zoo keepers are only allowed to care for animals if they are qualified to do so.
  • A zoo keeper can look afer a max of 3 Animal types for a max of 10 animals.


Your system must be run on test data before the Zoo will accept it.


You are required to have a data set of at least 100 animals and 40 zoo keepers.



Class diagram

Class diagram1



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


ZooManagementSystem GUI 1.png


ZooManagementSystem GUI 2.png


ZooManagementSystem GUI 3.png


ZooManagementSystem GUI 4.png


ZooManagementSystem GUI 5.png


ZooManagementSystem GUI 6.png