Buscar

LPI-E4 - Entrada e Saída Textual


Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Continue navegando


Prévia do material em texto

1
Linguagem de Programação I
Entrada e Saída Textual com Persistência em Arquivos
Exercícios
Joinvile Batista Junior
UFGD - LPI-E4 - Joinvile Batista Junior 2
Exemplo 
package util;
import java.io.Serializable;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Data implements Serializable {
public static Data toData(String data_str) {
if (!data_str.matches("\\d{2}/\\d{2}/\\d{4}")) {
System.out.println("Erro na conversão para data do string: " + data_str);
return null;
}
String[] partes = data_str.split("/");
return new Data (Integer.parseInt (partes[0]),
Integer.parseInt (partes[1]), Integer.parseInt (partes[2]));
}
2
UFGD - LPI-E4 - Joinvile Batista Junior 3
Exemplo 
private int dia, mês, ano;
public Data(int dia, int mês, int ano) {
this.dia = dia;
this.mês = mês;
this.ano = ano;
}
public int getDia() {
return dia;
}
public int getMês() {
return mês;
}
public int getAno() {
return ano;
}
UFGD - LPI-E4 - Joinvile Batista Junior 4
Exemplo 
public int calcularIdade () {
GregorianCalendar data_atual = new GregorianCalendar();
int dia_atual = data_atual.get(Calendar.DAY_OF_MONTH);
int mês_atual = data_atual.get(Calendar.MONTH) + 1;
// GregorianCalendar: mês varia de 0 a 11
int ano_atual = data_atual.get(Calendar.YEAR);
int idade = ano_atual - ano;
if ((mês_atual < mês) || ((mês_atual == mês) && (dia_atual < dia)))
idade--;
return idade;
}
3
UFGD - LPI-E4 - Joinvile Batista Junior 5
Exemplo 
public int compareTo(Data data) {
if (ano > data.getAno()) return 1;
if (ano < data.getAno()) return -1;
if (mês > data.getMês()) return 1;
if (mês < data.getMês()) return -1; 
if (dia > data.getDia()) return 1;
if (dia < data.getDia()) return -1; 
return 0;
}
public String toString() {
String data;
if (dia < 10) data = "0" + dia; else data = "" + dia;
if (mês < 10) data += "/0" + mês + "/"; else data += "/" + mês + "/";
return data += ano;
}
}
UFGD - LPI-E4 - Joinvile Batista Junior 6
Exemplo 
package util;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class PersistênciaArquivo {
public static void salvar(Object raiz, String arquivo) {
if (raiz == null) return;
try {
ObjectOutputStream output
= new ObjectOutputStream (new FileOutputStream(arquivo));
output.writeObject(raiz);
output.close();
} catch (Exception exceção) {
System.out.println("Falha ao salvar no arquivo: " + arquivo + "\n");
}
}
4
UFGD - LPI-E4 - Joinvile Batista Junior 7
Exemplo 
public static Object recuperar(String arquivo) {
try {
ObjectInputStream input
= new ObjectInputStream(new FileInputStream(arquivo));
Object raizObject = input.readObject();
return raizObject;
} catch (Exception exceção) {
System.out.println("Falha na recuperação do arquivo: " + arquivo + "\n");
return null;
}
}
}
UFGD - LPI-E4 - Joinvile Batista Junior 8
Exemplo 
package entidade;
import java.io.Serializable;
import java.util.ArrayList;
public class Obra implements Serializable {
private static ArrayList<Obra> obras = new ArrayList();
public static void add(Obra obra) {
obras.add(obra);
}
public static ArrayList<Obra> getObras() {
return obras;
}
public static void setObras(ArrayList<Obra> obras) {
Obra.obras = obras;
}
5
UFGD - LPI-E4 - Joinvile Batista Junior 9
Exemplo 
protected String título;
protected String autor;
public Obra(String título, String autor) {
this.título = título;
this.autor = autor;
}
public String getTítulo() {
return título;
}
public String getAutor() {
return autor;
}
public String toString() {
return "Livro: " + título + "\n Autor: " + autor; 
}
}
UFGD - LPI-E4 - Joinvile Batista Junior 10
Exemplo 
package entidade;
import java.io.Serializable;
public class Livro extends Obra implements Serializable {
private String editora;
private int edição;
private int anoPublicação;
public Livro(String título, String autor, String editora, int edição, int 
anoPublicação) {
super(título, autor);
this.editora = editora;
this.edição = edição;
this.anoPublicação = anoPublicação;
}
6
UFGD - LPI-E4 - Joinvile Batista Junior 11
Exemplo 
public String getEditora() {
return editora;
}
public int getEdição() {
return edição;
}
public int getAnoPublicação() {
return anoPublicação;
}
public String toString() {
return "Livro: " + título + "\n Autor: " + autor + "\n Editora: " + editora
+ "\n Edição: " + edição + "\n Ano de Publicação: " + anoPublicação;
}
}
UFGD - LPI-E4 - Joinvile Batista Junior 12
Exemplo 
package entidade;
import java.io.Serializable;
import util.Data;
public class RelatórioTécnico extends Obra implements Serializable {
public enum GrauSigilo {confidencial, reservado, público};
public static GrauSigilo toGrauSigilo(String grau_sigilo_str) {
if (grau_sigilo_str.equals("confidencial")) return GrauSigilo.confidencial;
if (grau_sigilo_str.equals("reservado")) return GrauSigilo.reservado;
if (grau_sigilo_str.equals("público")) return GrauSigilo.público;
return null;
}
7
UFGD - LPI-E4 - Joinvile Batista Junior 13
Exemplo 
String empresa;
GrauSigilo grauSigilo;
Data data;
public RelatórioTécnico(String título, String autor, String empresa,
GrauSigilo grauSigilo, Data data) {
super(título, autor);
this.empresa = empresa;
this.grauSigilo = grauSigilo;
this.data = data;
}
public String getEmpresa() {
return empresa;
}
UFGD - LPI-E4 - Joinvile Batista Junior 14
Exemplo 
public GrauSigilo getGrauSigilo() {
return grauSigilo;
}
public Data getData() {
return data;
}
public String toString() {
return "Relatório Técnico: " + título + "\n Autor: " + autor
+ "\n Empresa: " + empresa + "\n Grau de Sigilo: " + grauSigilo
+ "\n Data: " + data;
} 
}
8
UFGD - LPI-E4 - Joinvile Batista Junior 15
Exemplo 
package entidade;
import java.io.Serializable;
import util.Data;
public class Tese extends Obra implements Serializable {
private String universidade, orientador;
private Data data;
public Tese(String título, String autor, String universidade, String orientador, 
Data data) {
super(título, autor);
this.universidade = universidade;
this.orientador = orientador;
this.data = data;
}
UFGD - LPI-E4 - Joinvile Batista Junior 16
Exemplo 
public String getUniversidade() {
return universidade;
}
public String getOrientador() {
return orientador;
}
public Data getData() {
return data;
}
public String toString() {
return "Tese: " + título + "\n Autor: " + autor
+ "\n Universidade: " + universidade
+ "\n Orientador: " + orientador + "\n Data: " + data;
} 
}
9
UFGD - LPI-E4 - Joinvile Batista Junior 17
Exemplo 
package interfaces;
import entidade.Livro;
import entidade.Obra;
import entidade.RelatórioTécnico;
import entidade.Tese;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import util.Data;
public class EntradaSaída {
private static BufferedReader buffer;
UFGD - LPI-E4 - Joinvile Batista Junior 18
Exemplo 
public static void loopleituraObras() {
System.out.println("--- Leitura de Dados de Obras");
buffer = new BufferedReader(new InputStreamReader(System.in));
String continuação = "S";
Obra obra = null;
while (continuação.equalsIgnoreCase("S")) {
obra = lerObra();
if (obra != null) Obra.add(obra);
else System.out.println("Erro na leitura da obra");
System.out.print("Continuar [S/N] : ");
try {
continuação = buffer.readLine();
} catch (IOException exceção) {
System.out.println("Erro na leitura da linha");
}
}
System.out.println();
}
10
UFGD - LPI-E4 - JoinvileBatista Junior 19
Exemplo 
private static Obra lerObra() {
String título = lerString("título da obra");
if (título == null) return null;
String autor = lerString("autor da obra");
if (autor == null) return null;
String tipo_obra = lerString("tipo da obra [L(livro)-R(relatório)-T(tese)]");
if (tipo_obra.equalsIgnoreCase("L")) {
String editora = lerString("editora do livro");
if (editora == null) return null;
int edição = lerInteiroPositivo("edição do livro");
if (edição == -1) return null;
int ano_publicação = lerInteiroPositivo("ano de publicação do livro");
if (ano_publicação == -1) return null;
return new Livro(título, autor, editora, edição, ano_publicação);
}
UFGD - LPI-E4 - Joinvile Batista Junior 20
Exemplo 
if (tipo_obra.equalsIgnoreCase("R")) {
String empresa = lerString("empresa do relatório técnico");
if (empresa == null) return null;
RelatórioTécnico.GrauSigilo grau_sigilo
= lerGrauSigilo("grau de sigilo do relatório técnico");
if (grau_sigilo == null) return null;
Data data = lerData("data do relatório técnico");
if (data == null) return null;
return new RelatórioTécnico(título, autor, empresa, grau_sigilo, data); 
} 
if (tipo_obra.equalsIgnoreCase("T")) {
String universidade = lerString("universidade da tese");
if (universidade == null) return null;
String orientador = lerString("nome do orientador da tese");
if (orientador == null) return null;
Data data = lerData("data da defesa da tese");
if (data == null) return null;
return new Tese(título, autor, universidade, orientador, data); 
}
return null;
}
11
UFGD - LPI-E4 - Joinvile Batista Junior 21
Exemplo 
private static String lerString(String dado) {
String string = "";
System.out.print("Informe " + dado + " : ");
try {
string = buffer.readLine();
} catch (IOException exceção) {
System.out.println("\nErro na leitura de: " + dado);
return null;
}
return string;
}
UFGD - LPI-E4 - Joinvile Batista Junior 22
Exemplo 
private static int lerInteiroPositivo(String dado) {
String string_número = "";
int número = 0;
System.out.print("Informe " + dado + " : ");
try {
string_número = buffer.readLine();
número = Integer.valueOf(string_número).intValue();
} catch (IOException exceção) {
System.out.println("\nErro na leitura de: " + dado);
return -1;
} catch (NumberFormatException exceção) {
System.out.println("\nErro na conversão para inteiro de: " + dado);
return -1;
}
return número;
}
12
UFGD - LPI-E4 - Joinvile Batista Junior 23
Exemplo 
private static Data lerData(String dado) {
String string = "";
System.out.print("Informe " + dado + " [dd/mm/aaaa] : ");
try {
string = buffer.readLine();
} catch (IOException exceção) {
System.out.println("\nErro na leitura de: " + dado);
return null;
}
return Data.toData(string);
} 
UFGD - LPI-E4 - Joinvile Batista Junior 24
Exemplo 
private static RelatórioTécnico.GrauSigilo lerGrauSigilo(String dado) {
String string = "";
System.out.print("Informe " + dado + " [C:confidencial - R:reservado - P:público] : ");
try {
string = buffer.readLine();
} catch (IOException exceção) {
System.out.println("\nErro na leitura de: " + dado);
return null;
}
if (string.equalsIgnoreCase("C")) string = "confidencial";
else if (string.equalsIgnoreCase("R")) string = "reservado";
else if (string.equalsIgnoreCase("P")) string = "público";
else return null;
return RelatórioTécnico.toGrauSigilo(string);
} 
}
13
UFGD - LPI-E4 - Joinvile Batista Junior 25
Exemplo 
package controle;
import entidade.Obra;
import interfaces.EntradaSaída;
import java.util.ArrayList;
import util.PersistênciaArquivo;
public class Biblioteca {
private static final String arquivo = "dados/Biblioteca.bds";
private static ArrayList<Obra> obras = new ArrayList();
public static void main(String[] args) {
recuperarAplicação();
imprimirObras("--- Obras Recuperadas do Arquivo:", Obra.getObras());
EntradaSaída.loopleituraObras();
salvarAplicação();
imprimirObras("--- Obras Salvas em Arquivo:", Obra.getObras());
}
UFGD - LPI-E4 - Joinvile Batista Junior 26
Exemplo 
private static void imprimirObras(String cabeçalho, ArrayList<Obra> obras) {
System.out.println(cabeçalho);
for (Obra obra : obras) System.out.println(obra.toString());
System.out.println();
}
public static void salvarAplicação() {
ArrayList objetos_aplicação = new ArrayList();
objetos_aplicação.add(Obra.getObras());
PersistênciaArquivo.salvar(objetos_aplicação, arquivo);
}
public static void recuperarAplicação() {
ArrayList objetos_aplicação = (ArrayList) PersistênciaArquivo.recuperar(arquivo);
if (objetos_aplicação != null) {
Obra.setObras((ArrayList<Obra>) objetos_aplicação.get(0));
}
}
}
14
UFGD - LPI-E4 - Joinvile Batista Junior 27
Lista de Exercícios
4.1 – Adapte o exemplo:
a) acrescente o atributo consulta [sim, não] na classe Obra, adaptando o 
método toString;
b) defina o método “boolean lerBoolean(String dado)” na classe 
EntradaSaída e adapte o método lerObra.
4.2 - Adapte o exercício 4.1:
a) acrescente o método “ArrayList<Obra> filtrarObras (char consulta, int 
ano_publicação_mínimo, RelatórioTécnico.GrauSigilo grau_sigilo, 
String universidade)” na classe Biblioteca, para selecionar as obras 
considerando que os filtros podem ser opcionais;
b) acrescente o método lerChar(String dado) na classe EntradaSaída;
c) acrescente o método “void selecionarObras (), na classe 
EntradaSaída, para ler os seguintes filtros de pesquisa (consulta, 
ano_publicação_mínimo, grau_sigilo, universidade), considerando que 
o usuário possa informar filtros opcionais, e chamar o método 
filtrarObras da classe Biblioteca;
d) acrescente no método main, da classe Biblioteca, a pesquisa de obras 
e a impressão das obras selecionadas. 
UFGD - LPI-E4 - Joinvile Batista Junior 28
Lista de Exercícios
4.3 - Adapte o exercício 4.2:
a) substituindo as classes Obra, Livro, RelatórioTécnico por Veículo 
(modelo, potência, ano, zero[sim, não]), Carro (combustível (gasolina, 
alcool, flex]), quatro_portas[sim, não]), Caminhão (n_eixos, 
capacidade[normal, bitrem, treminhão]) e Moto(n_cilindradas); 
b) substituindo os filtros de seleção por: ano_mínimo; zero, combustível, 
n_eixos_máximo, n_cilindradas_mínimo;
c) substitua o nome da classe Biblioteca por VendaVeículos, adaptando 
os métodos necessários das classes: EntradaSaída e VendaVeículos.
4.4 – Adapte o exercício 4.3:
a) acrescentando a classe Venda (valor, data, cliente, veículo) e classe 
Cliente (nome, CPF, telefone) e adaptando os métodos de criação e 
impressão para vendas;
b) adapte os métodos necessários de obras para vendas, nas classes 
EntradaSaída e VendaVeículos, e acrescente os filtros adicionais: 
valor_mínimo e valor_máximo.