This is a Java Back-End project built with Maven, following the Model-View-Controller (MVC) design pattern.
The goal of the project is to create a simple Circle
class that can calculate and store geometric data (area and perimeter) based on a given radius.
Later, the project will include a SQL database to store all circle data entered via the keyboard.
Each entry will record:
- The radius
- The calculated perimeter
- The calculated area
- Input a circleโs radius.
- Compute the area and perimeter.
- Display results through the console view.
- Future feature: Store results in a SQL database.
The project follows the MVC (Model-View-Controller) pattern:
- Model: Represents the data and business logic (e.g., the
Circle
class). - View: Handles user interaction (e.g., console input/output).
- Controller: Coordinates communication between the Model and the View.
โโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโ
โ View โ <---> โ Controller โ <---> โ Model โ
โโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโ
Layer | Role | Class |
---|---|---|
Model | Represents the data and business logic | Circle.java |
View | Handles user interaction (input/output) | CircleView.java |
Controller | Coordinates interaction between model and view | CircleController.java |
java-mvc-circle/
โโโ src/
โ โโโ main/
โ โ โโโ java/
โ โ โ โโโ com/example/circle/
โ โ โ โโโ model/
โ โ โ โ โโโ Circle.java
โ โ โ โโโ view/
โ โ โ โ โโโ CircleView.java
โ โ โ โโโ controller/
โ โ โ โโโ CircleController.java
โ โ โโโ resources/
โ โโโ test/
โ โโโ java/
โ โโโ com/example/circle/
โ โโโ CircleTest.java
โโโ pom.xml
โโโ README.md
classDiagram
direction TB
class Circle {
- double radius
+ Circle(double radius)
+ getRadius() double
+ setRadius(double radius)
+ calculatePerimeter() double
+ calculateArea() double
+ toString() String
}
class CircleView {
- Scanner scanner
+ CircleView()
+ requestRadius() double
+ displayResults(perimeter double, area double) void
+ displayMessage(message String) void
}
class CircleController {
- CircleView view
+ CircleController(view CircleView)
+ start() void
}
CircleController --> CircleView : uses
CircleController --> Circle : creates/manages
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Circle โ <<Model>>
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ - radius: double โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ + Circle(radius: double) โ
โ + getRadius(): double โ
โ + setRadius(radius: double)โ
โ + calculatePerimeter(): double โ
โ + calculateArea(): double โ
โ + toString(): String โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โฒ
โ uses
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ CircleController โ <<Controller>>
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ - view: CircleView โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ + CircleController(v: CircleView) โ
โ + start(): void โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ calls
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ CircleView โ <<View>>
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ - scanner: Scanner โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ + CircleView() โ
โ + requestRadius(): double โ
โ + displayResults(p: double, a: double): void โ
โ + displayMessage(msg: String): void โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
package com.teoria.circulo.model;
public class Circle {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public double calculatePerimeter() {
return 2 * Math.PI * radius;
}
public double calculateArea() {
return Math.PI * Math.pow(radius, 2);
}
@Override
public String toString() {
return "Circle [radius=" + radius +
", perimeter=" + calculatePerimeter() +
", area=" + calculateArea() + "]";
}
}
package com.teoria.circulo.view;
import java.util.Scanner;
public class CircleView {
private Scanner scanner;
public CircleView() {
scanner = new Scanner(System.in);
}
public double requestRadius() {
System.out.print("Enter the circle's radius: ");
return scanner.nextDouble();
}
public void displayResults(double perimeter, double area) {
System.out.printf("Perimeter: %.2f%n", perimeter);
System.out.printf("Area: %.2f%n", area);
}
public void displayMessage(String message) {
System.out.println(message);
}
}
package com.teoria.circulo.controller;
import com.teoria.circulo.model.Circle;
import com.teoria.circulo.view.CircleView;
public class CircleController {
private CircleView view;
public CircleController(CircleView view) {
this.view = view;
}
public void start() {
double radius = view.requestRadius();
Circle circle = new Circle(radius);
double perimeter = circle.calculatePerimeter();
double area = circle.calculateArea();
view.displayResults(perimeter, area);
// Later: save to database
// saveToDB(circle);
}
}
package com.teoria.circulo;
import com.teoria.circulo.view.CircleView;
import com.teoria.circulo.controller.CircleController;
public class Main {
public static void main(String[] args) {
CircleView view = new CircleView();
CircleController controller = new CircleController(view);
controller.start();
}
}
Later, the project will add:
- A
CircleDAO
class (inmodel.dao
) to handle CRUD operations with SQL. - A
circles
table in the database with columns:
CREATE TABLE circles (
id INT AUTO_INCREMENT PRIMARY KEY,
radius DOUBLE,
perimeter DOUBLE,
area DOUBLE
);
- The controller will call
CircleDAO.insert(circle)
after calculating results.
- Java 17 or later
- Maven 3.8+
- (Optional later) MySQL or PostgreSQL for data persistence
-
Clone this repository:
git clone https://github.com/alexpjava/java-mvc-circle.git cd java-mvc-circle
-
Build the project with Maven:
mvn clean install
-
Run the application:
mvn exec:java -Dexec.mainClass="com.example.circle.Main"
- Add SQL database integration to store circle data.
- Add unit tests with JUnit.
- Add a graphical user interface (optional).
- Generate and include the UML diagram.
This project is open-source and available under the MIT License.
AlexP
GitHub: @alexpjava
Email: alexp.java@gmail.com