import java.io.*;
import java.util.*;

// Classe base
abstract class Pessoa {
    private String nome;
    private int idade;
    
    public Pessoa(String nome, int idade) {
        this.nome = nome;
        this.idade = idade;
    }
    
    public String getNome() {
        return nome;
    }
    
    public int getIdade() {
        return idade;
    }
    
    public abstract String getDados();
}

// Subclasse Aluno
class Aluno extends Pessoa {
    private String curso;
    private double[] notas;
    
    public Aluno(String nome, int idade, String curso, int numDisciplinas) {
        super(nome, idade);
        this.curso = curso;
        this.notas = new double[numDisciplinas];
    }
    
    public void setNota(int index, double nota) {
        this.notas[index] = nota;
    }
    
    public double[] getNotas() {
        return notas;
    }
    
    @Override
    public String getDados() {
        StringBuilder dados = new StringBuilder(getNome() + "," + getIdade() + ",Aluno," + curso);
        for (double nota : notas) {
            dados.append(",").append(nota);
        }
        return dados.toString();
    }
}

// Subclasse Professor
class Professor extends Pessoa {
    private String disciplina;
    private double salario;
    
    public Professor(String nome, int idade, String disciplina, double salario) {
        super(nome, idade);
        this.disciplina = disciplina;
        this.salario = salario;
    }
    
    public String getDisciplina() {
        return disciplina;
    }
    
    public double getSalario() {
        return salario;
    }
    
    @Override
    public String getDados() {
        return getNome() + "," + getIdade() + ",Professor," + disciplina + "," + salario;
    }
}

// Subclasse Funcionário
class Funcionario extends Pessoa {
    private String setor;
    private double salario;
    
    public Funcionario(String nome, int idade, String setor, double salario) {
        super(nome, idade);
        this.setor = setor;
        this.salario = salario;
    }
    
    public String getSetor() {
        return setor;
    }
    
    public double getSalario() {
        return salario;
    }
    
    @Override
    public String getDados() {
        return getNome() + "," + getIdade() + ",Funcionario," + setor + "," + salario;
    }
}

// Subclasse Visitante
class Visitante extends Pessoa {
    private String motivoVisita;
    private String departamentoVisitado;
    
    public Visitante(String nome, int idade, String motivoVisita, String departamentoVisitado) {
        super(nome, idade);
        this.motivoVisita = motivoVisita;
        this.departamentoVisitado = departamentoVisitado;
    }
    
    public String getMotivoVisita() {
        return motivoVisita;
    }
    
    public String getDepartamentoVisitado() {
        return departamentoVisitado;
    }
    
    @Override
    public String getDados() {
        return getNome() + "," + getIdade() + ",Visitante," + motivoVisita + "," + departamentoVisitado;
    }
}

public class SistemaArquivo {
    private static final String ARQUIVO = "dados.txt";

    public static int menu() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("\n*** Menu ***");
        System.out.println("1. Criar/Abrir arquivo");
        System.out.println("2. Inserir Dados");
        System.out.println("3. Excluir Dados");
        System.out.println("4. Pesquisar");
        System.out.println("5. Exibir Lista");
        System.out.println("6. Sair");
        System.out.print("Escolha uma opção: ");
        return scanner.nextInt();
    }

    private static void criarAbrirArquivo() {
        try {
            File arquivo = new File(ARQUIVO);
            if (arquivo.createNewFile()) {
                System.out.println("Arquivo criado com sucesso!");
            } else {
                System.out.println("Arquivo já existe.");
            }
        } catch (IOException e) {
            System.out.println("Erro ao criar/abrir o arquivo.");
        }
    }

    private static void inserirDados(Scanner scanner) {
        System.out.print("Digite o nome: ");
        scanner.nextLine(); 
        String nome = scanner.nextLine();
        System.out.print("Digite a idade: ");
        int idade = scanner.nextInt();
        
        // Escolher tipo de pessoa
        System.out.println("Escolha o tipo de pessoa: 1-Aluno, 2-Professor, 3-Funcionário, 4-Visitante");
        int tipoPessoa = scanner.nextInt();
        scanner.nextLine(); // Consumir a quebra de linha

        Pessoa pessoa = null;
        
        if (tipoPessoa == 1) {
            System.out.print("Digite o curso: ");
            String curso = scanner.nextLine();
            System.out.print("Digite o número de disciplinas: ");
            int numDisciplinas = scanner.nextInt();
            pessoa = new Aluno(nome, idade, curso, numDisciplinas);
            for (int i = 0; i < numDisciplinas; i++) {
                System.out.print("Digite a nota da disciplina " + (i + 1) + ": ");
                ((Aluno) pessoa).setNota(i, scanner.nextDouble());
            }
        } else if (tipoPessoa == 2) {
            System.out.print("Digite a disciplina: ");
            String disciplina = scanner.nextLine();
            System.out.print("Digite o salário: ");
            double salario = scanner.nextDouble();
            pessoa = new Professor(nome, idade, disciplina, salario);
        } else if (tipoPessoa == 3) {
            System.out.print("Digite o setor: ");
            String setor = scanner.nextLine();
            System.out.print("Digite o salário: ");
            double salario = scanner.nextDouble();
            pessoa = new Funcionario(nome, idade, setor, salario);
        } else if (tipoPessoa == 4) {
            System.out.print("Digite o motivo da visita: ");
            String motivoVisita = scanner.nextLine();
            System.out.print("Digite o departamento visitado: ");
            String departamentoVisitado = scanner.nextLine();
            pessoa = new Visitante(nome, idade, motivoVisita, departamentoVisitado);
        }
        
        try (PrintWriter out = new PrintWriter(new FileWriter(ARQUIVO, true))) {
            out.println(pessoa.getDados());
            System.out.println("Dados inseridos com sucesso!");
        } catch (IOException e) {
            System.out.println("Erro ao inserir dados.");
        }
    }

    private static void excluirDados(Scanner scanner) {
        System.out.print("Digite o nome da pessoa a ser excluída: ");
        scanner.nextLine();
        String nome = scanner.nextLine();
        List<String> linhas = new ArrayList<>();
        boolean encontrado = false;

        try (BufferedReader br = new BufferedReader(new FileReader(ARQUIVO))) {
            String linha;
            while ((linha = br.readLine()) != null) {
                if (!linha.startsWith(nome + ",")) {
                    linhas.add(linha);
                } else {
                    encontrado = true;
                }
            }
        } catch (IOException e) {
            System.out.println("Erro ao ler o arquivo.");
            return;
        }

        if (encontrado) {
            try (PrintWriter out = new PrintWriter(new FileWriter(ARQUIVO))) {
                for (String linha : linhas) {
                    out.println(linha);
                }
                System.out.println("Pessoa excluída com sucesso!");
            } catch (IOException e) {
                System.out.println("Erro ao excluir os dados.");
            }
        } else {
            System.out.println("Pessoa não encontrada.");
        }
    }

    private static void pesquisarDados(Scanner scanner) {
        System.out.print("Digite o nome da pessoa a ser pesquisada: ");
        scanner.nextLine();
        String nome = scanner.nextLine();
        boolean encontrado = false;

        try (BufferedReader br = new BufferedReader(new FileReader(ARQUIVO))) {
            String linha;
            while ((linha = br.readLine()) != null) {
                if (linha.startsWith(nome + ",")) {
                    System.out.println("Registro encontrado: " + linha);
                    encontrado = true;
                    break;
                }
            }
        } catch (IOException e) {
            System.out.println("Erro ao ler o arquivo.");
        }

        if (!encontrado) {
            System.out.println("Pessoa não encontrada.");
        }
    }

    private static void exibirLista() {
        System.out.println("\nLista de Registros:");
        try (BufferedReader br = new BufferedReader(new FileReader(ARQUIVO))) {
            String linha;
            while ((linha = br.readLine()) != null) {
                System.out.println(linha);
            }
        } catch (IOException e) {
            System.out.println("Erro ao ler o arquivo.");
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int opcao;
        do {
            opcao = menu();
            switch (opcao) {
                case 1 -> criarAbrirArquivo();
                case 2 -> inserirDados(scanner);
                case 3 -> excluirDados(scanner);
                case 4 -> pesquisarDados(scanner);
                case 5 -> exibirLista();
                case 6 -> System.out.println("Saindo...");
                default -> System.out.println("Opção inválida!");
            }
        } while (opcao != 6);
        scanner.close();
    }
}

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: