// 🧱 ETAPA 1 — MODELAGEM (bem simples) | 📌 Entidades principais
// Classe O que representa | Cliente Quem faz o pedido | Produto O que é vendido | Pedido A compra
// ItemPedido Produto + quantidade | StatusPedido Situação do pedido | SistemaERP Classe principal / menu
// 📂 ETAPA 2 — Estrutura do projeto
// erp-pedidos
// │
// ├── pom.xml
// │
// └── src/main/java/com/joaodddev
// ├── Main.java
// │
// ├── model
// │ ├── Cliente.java
// │ ├── Produto.java
// │ ├── Pedido.java
// │ ├── ItemPedido.java
// │ └── StatusPedido.java
// │
// └── service
// └── RelatorioService.java
// 🧍 1️⃣ Cliente.java | 📁 model/Cliente.java
package com.joaodddev.model;
public class Cliente {
private int id;
private String nome;
public Cliente(int id, String nome) {
this.id = id;
this.nome = nome;
}
public int getId() {
return id;
}
public String getNome() {
return nome;
}
}
// 📦 2️⃣ Produto.java | 📁 model/Produto.java
package com.joaodddev.model;
public class Produto {
private int id;
private String nome;
private double preco;
public Produto(int id, String nome, double preco) {
this.id = id;
this.nome = nome;
this.preco = preco;
}
public int getId() {
return id;
}
public String getNome() {
return nome;
}
public double getPreco() {
return preco;
}
}
// 🧾 3️⃣ StatusPedido (ENUM) | 📁 model/StatusPedido.java
package com.joaodddev.model;
public enum StatusPedido {
CRIADO,
FATURADO,
CANCELADO
}
// 🧮 4️⃣ ItemPedido.java (composição) | 📁 model/ItemPedido.java
package com.joaodddev.model;
public class ItemPedido {
private Produto produto;
private int quantidade;
public ItemPedido(Produto produto, int quantidade) {
this.produto = produto;
this.quantidade = quantidade;
}
public double getSubtotal() {
return produto.getPreco() * quantidade;
}
public Produto getProduto() {
return produto;
}
public int getQuantidade() {
return quantidade;
}
}
// 📋 5️⃣ Pedido.java | 📁 model/Pedido.java
package com.joaodddev.model;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
public class Pedido {
private int id;
private Cliente cliente;
private LocalDate data;
private StatusPedido status;
private List<ItemPedido> itens;
public Pedido(int id, Cliente cliente) {
this.id = id;
this.cliente = cliente;
this.data = LocalDate.now();
this.status = StatusPedido.CRIADO;
this.itens = new ArrayList<>();
}
public void adicionarItem(ItemPedido item) {
itens.add(item);
}
public double calcularTotal() {
double total = 0;
for (ItemPedido item : itens) {
total += item.getSubtotal();
}
return total;
}
public void faturar() {
this.status = StatusPedido.FATURADO;
}
public int getId() {
return id;
}
public Cliente getCliente() {
return cliente;
}
public StatusPedido getStatus() {
return status;
}
public LocalDate getData() {
return data;
}
public List<ItemPedido> getItens() {
return itens;
}
}
// 🧾 6️⃣ RelatorioService.java | 📁 service/RelatorioService.java
package com.joaodddev.service;
import com.joaodddev.model.Pedido;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
public class RelatorioService {
public static void exportarCSV(List<Pedido> pedidos) {
try (FileWriter writer = new FileWriter("pedidos.csv")) {
writer.write("ID,Cliente,Data,Status,Total\n");
for (Pedido p : pedidos) {
writer.write(
p.getId() + "," +
p.getCliente().getNome() + "," +
p.getData() + "," +
p.getStatus() + "," +
p.calcularTotal() + "\n"
);
}
System.out.println("Arquivo CSV gerado com sucesso!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 🖥 7️⃣ Main.java (menu) | 📁 Main.java
package com.joaodddev;
import com.joaodddev.model.*;
import com.joaodddev.service.RelatorioService;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
private static List<Pedido> pedidos = new ArrayList<>();
private static int contadorPedidos = 1;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Cliente clientePadrao = new Cliente(1, "Empresa XPTO");
Produto p1 = new Produto(1, "Notebook", 3500.00);
Produto p2 = new Produto(2, "Mouse", 150.00);
int opcao;
do {
System.out.println("\n===== MENU ERP =====");
System.out.println("1 - Criar novo pedido");
System.out.println("2 - Listar pedidos");
System.out.println("3 - Faturar pedido");
System.out.println("4 - Filtrar pedidos por período");
System.out.println("5 - Exportar pedidos para CSV");
System.out.println("0 - Sair");
opcao = scanner.nextInt();
switch (opcao) {
case 1:
Pedido pedido = new Pedido(contadorPedidos++, clientePadrao);
pedido.adicionarItem(new ItemPedido(p1, 1));
pedido.adicionarItem(new ItemPedido(p2, 2));
pedidos.add(pedido);
System.out.println("Pedido criado com sucesso!");
break;
case 2:
listarPedidos(pedidos);
break;
case 3:
System.out.print("Digite o ID do pedido: ");
int id = scanner.nextInt();
faturarPedido(id);
break;
case 4:
filtrarPorPeriodo(scanner);
break;
case 5:
RelatorioService.exportarCSV(pedidos);
break;
}
} while (opcao != 0);
scanner.close();
}
private static void listarPedidos(List<Pedido> lista) {
for (Pedido p : lista) {
System.out.println("Pedido #" + p.getId()
+ " | Cliente: " + p.getCliente().getNome()
+ " | Data: " + p.getData()
+ " | Status: " + p.getStatus()
+ " | Total: R$ " + p.calcularTotal());
}
}
private static void faturarPedido(int id) {
for (Pedido p : pedidos) {
if (p.getId() == id) {
p.faturar();
System.out.println("Pedido faturado!");
return;
}
}
System.out.println("Pedido não encontrado!");
}
// ====== ETAPA 2 entra aqui ======
private static void filtrarPorPeriodo(Scanner scanner) {
System.out.print("Data inicial (AAAA-MM-DD): ");
LocalDate inicio = LocalDate.parse(scanner.next());
System.out.print("Data final (AAAA-MM-DD): ");
LocalDate fim = LocalDate.parse(scanner.next());
List<Pedido> filtrados = new ArrayList<>();
for (Pedido p : pedidos) {
if (!p.getData().isBefore(inicio) && !p.getData().isAfter(fim)) {
filtrados.add(p);
}
}
listarPedidos(filtrados);
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: