Student: Kha Anh (Lisa) Nguyen
Student ID: 103814796
Course Grade: 95/100
Course Year: Sem 2, 2024
This portfolio demonstrates comprehensive understanding of Java programming fundamentals, object-oriented programming principles, and software design patterns through three major projects:
- Cinema Booking System (Assignment 1, Task 1)
- Insurance Management System (Assignment 1, Task 2)
- Travel Ticket Booking System (Assignment 2)
- Java Fundamentals: Variables, data types, control structures, arrays, and collections
- Exception Handling: Custom exceptions (InsuranceRequiredException) and try-catch blocks
- File I/O Operations: Object serialization for data persistence using ObjectOutputStreamandObjectInputStream
- Input Validation: Comprehensive user input validation with loops and error checking
- Private Fields: All class attributes are properly encapsulated with private access modifiers
- Getter/Setter Methods: Controlled access to object state through public methods
- Data Hiding: Internal implementation details are hidden from external classes
- Abstract Base Classes: dayToursabstract class defines common tour functionality
- Class Hierarchies:
- CityTour,- Attractions→- dayTours
- Queensland,- International→- Attractions→- dayTours
 
- Method Overriding: Abstract method requiresInsurance()implemented differently in each subclass
- Runtime Polymorphism: Different tour types handled uniformly through base class references
- Method Overloading: Multiple constructors and methods with different parameter signatures
- Interface Implementation: applyInsuranceinterface for insurance functionality
- Abstract Classes: dayToursprovides common structure while allowing specialization
- Interfaces: applyInsurancedefines contract for insurance-related operations
- Abstract Methods: requiresInsurance()must be implemented by concrete classes
- Factory Pattern: Tour creation based on type selection
- Strategy Pattern: Different insurance requirements for different tour types
- Template Method: Common booking process with tour-specific variations
- Composition: TicketscontainsdayToursreferences
- Aggregation: Customercontains collections ofPolicyobjects
- Association: Userobjects associated with ticket sales
- Single Responsibility: Each class has a focused purpose
- Open/Closed: Extensible design allowing new tour types without modification
- Liskov Substitution: Subclasses can replace base classes without breaking functionality
- Interface Segregation: Focused interfaces like applyInsurance
- Dependency Inversion: High-level modules depend on abstractions
Files: Task1.java, Task1Test.java
Features:
- 2D array-based seat management (8×10 grid)
- Auto-assignment and manual seat selection
- Ticket tracking with unique IDs
- Real-time availability checking
- Comprehensive input validation
OOP Concepts:
- Static methods and variables for system-wide state
- Encapsulation in Ticketclass
- Array-based data structures for seat management
Files: Task2.java, Task2Test.java
Features:
- Customer and policy management
- Enum types for TypeandPlan
- Policy modification and deletion
- Total coverage value calculation
- Input validation for positive values
OOP Concepts:
- Enum usage for type safety
- Composition relationship between CustomerandPolicy
- Method chaining and fluent interfaces
Files: stageD.java, stageDTest.java
Features:
- Multi-tier tour system (City, Attractions, Queensland, International)
- Insurance requirements based on tour type
- User authentication and role-based access
- Data persistence through serialization
- Complex pricing with discounts and service fees
- Customer detail management for flight bookings
Advanced OOP Concepts:
- Abstract classes and interfaces
- Exception handling with custom exceptions
- File I/O with object serialization
- Generic methods for data persistence
- Complex inheritance hierarchies
- Polymorphic behavior based on tour types
- Comprehensive Test Coverage: Each project includes dedicated test classes
- Test Categories: Valid inputs, invalid inputs, edge cases
- Assertion Methods: assertEquals,assertTrue,assertFalse,assertNotNull
- Test Setup: @BeforeEachfor consistent test initialization
- Valid Input Testing: Normal operation scenarios
- Invalid Input Testing: Error handling and edge cases
- Boundary Testing: Capacity limits and constraint validation
- Integration Testing: Multi-component interaction testing
- Arrays: 2D arrays for seat management, 1D arrays for collections
- Collections: ArrayList,HashMap,TreeMapfor dynamic data management
- Generic Types: Type-safe collections and methods
- Serialization: Object persistence to files
- Scanner Class: Interactive user input handling
- String Manipulation: Complex string formatting and parsing
- Static Methods: Utility functions and system-wide operations
- Code Documentation: Comprehensive comments and method descriptions
- Error Handling: Graceful failure management
- User Experience: Intuitive menu systems and clear feedback
- Data Validation: Input sanitization and constraint checking
- Meaningful Names: Descriptive variable and method names
- Small Methods: Focused, single-purpose functions
- Consistent Formatting: Proper indentation and spacing
- Comment Documentation: Clear explanation of complex logic
- Generic Methods: saveFile()andloadFile()for data persistence
- Utility Functions: Common operations extracted into reusable methods
- Modular Design: Independent components that can be easily modified
UML plan, documentation and test cases are available in the PDF files:
- 103814796_assignment_1/103814796_assignment_1.pdf- Assignment 1 documentation
- 103814796_assignment_2/103814796_assignment_2-2.pdf- Assignment 2 documentation