[code]package trab2;
import java.io.EOFException;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Manipular {
private RandomAccessFile RAF_Titular;
private RandomAccessFile RAF_Dependente;
private List<Titular> Lista_de_Titular = new ArrayList<Titular>();
private List<Dependente> Lista_de_Dependente = new ArrayList<Dependente>();
private final int CodigoInicial = 1001;
private final int CodigoInicialDependente = 20001;
private String Caminho_Dependente;
private String Caminho_Titular;
public Manipular(String Caminho_T,String Caminho_D){
Caminho_Dependente = Caminho_D;
Caminho_Titular = Caminho_T;
try {
RAF_Titular = new RandomAccessFile(Caminho_Titular, "rw");
RAF_Dependente = new RandomAccessFile(Caminho_Dependente, "rw");
System.out.println("oi");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void abrirEFechar() throws IOException
{
if(RAF_Titular!=null)
RAF_Titular.close();
if(RAF_Dependente!=null)
RAF_Dependente.close();
RAF_Titular = new RandomAccessFile(Caminho_Titular, "rw");
RAF_Dependente = new RandomAccessFile(Caminho_Dependente, "rw");
}
public void fecharArquivo() throws IOException {
if (RAF_Titular != null)
RAF_Titular.close();
if(RAF_Dependente!=null)
RAF_Dependente.close();
}
public void titular_criarTitular(Titular T){
T.setNumeroCarteira(Integer.parseInt(String.valueOf(titular_obterID())));
try {
RAF_Titular.seek((T.getNumeroCarteira()-CodigoInicial) * Titular.tamtitular);
if(titular_escrever(T))
{
System.out.println("Titular cadastrado com sucesso! "+ T.toString());
}
else
System.out.println("Erro ao cadastrar Titular");
} catch (IOException e) {
System.out.println("Erro ao cadastrar Titular");
}
}
public void dependente_criarDependente(Dependente D){
D.setNumeroCarteira(Integer.parseInt(String.valueOf(dependente_obterID())));
try {
//lembrar de mudar o tam
RAF_Dependente.seek((D.getNumeroCarteira()-CodigoInicialDependente) * Dependente.tamdependente);
if(dependente_escrever(D)) {
System.out.println("Dependente cadastrado com sucesso!");
D.toString();
}
else
System.out.println("Erro ao cadastrar dependente");
} catch (IOException e) {
System.out.println("Erro ao cadastrar dependente");
}
}
public List<Titular> getLista_de_Titular() {
atualizarListaTitular();
return Lista_de_Titular;
}
public List<Dependente> getLista_de_Dependente() {
atualizarListaDependente();
return Lista_de_Dependente;
}
public void titular_removerTitular(Titular T){
try {
RAF_Titular.seek((T.getNumeroCarteira()-CodigoInicial) * Titular.tamtitular);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
T.setNumeroCarteira(0);
if(titular_escrever(T)) // grava o registro no arquivo
System.out.println("Titular excluido com sucesso!");
else
System.out.println("Erro ao excluir titular");
}
public void dependente_removerDependente(Dependente D){
try {
RAF_Dependente.seek((D.getNumeroCarteira()-CodigoInicialDependente) * Dependente.tamdependente);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
D.setNumeroCarteira(0);
if(dependente_escrever(D)) // grava o registro no arquivo
System.out.println("Dependente excluido com sucesso!");
else
System.out.println("Erro ao excluir dependente");
}
private void atualizarListaTitular(){
try // lê um registro e exibe
{
abrirEFechar();
RAF_Titular.seek( 0 );
Lista_de_Titular= new ArrayList<Titular>();
while (true) {
Titular T = titular_ler();
if(T.getNumeroCarteira()!=0)
Lista_de_Titular.add(T);
}
}
catch (EOFException eofException)
{
return;
}
catch (IOException ioException) {
ioException.printStackTrace();
System.out.println("Erro ao ler o arquivo.");
System.exit(1);
}
}
public void atualizarListaDependente(){
try // lê um registro e exibe
{
abrirEFechar();
RAF_Dependente.seek( 0 );
Lista_de_Dependente = new ArrayList<Dependente>();
while (true) {
Dependente D = dependente_ler();
if(D.getNumeroCarteira()!=0)
Lista_de_Dependente.add(D);
}
}
catch (EOFException eofException)
{
return;
}
catch (IOException ioException) {
ioException.printStackTrace();
System.out.println("Erro ao ler o arquivo.");
System.exit(1);
}
}
private long titular_obterID()
{
try {
long Tam;
Tam = RAF_Titular.length();
return CodigoInicial+(Tam/Titular.tamtitular);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return -1;
}
}
private long dependente_obterID()
{
try {
long Tam;
Tam = RAF_Dependente.length();
return CodigoInicialDependente+(Tam/Dependente.tamdependente);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return -1;
}
}
public Titular titular_obterTitular(int Codigo)
{
titular_lerTitulares(false);
for (Titular T: Lista_de_Titular)
if (T.getNumeroCarteira() == Codigo)
return T;
return null;
}
public Dependente dependente_obterDependente(int Codigo)
{
//dependente_lerDependentes(false);
for (Dependente D: Lista_de_Dependente)
if (D.getNumeroCarteira() == Codigo)
return D;
return null;
}
public Dependente dependente_obterDependentetitular(int Codigo){
for(Dependente D: Lista_de_Dependente)
if(D.getCarteiratitular()==Codigo)
return D;
return null;
}
private boolean titular_escrever(Titular T) {
try {
RAF_Titular.writeInt(T.getNumeroCarteira());
titular_escreverNome(T.getNome());
RAF_Titular.writeInt(T.getAnocontrato());
RAF_Titular.writeDouble(T.getValorMensalidade());
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
private boolean dependente_escrever(Dependente D) {
try {
RAF_Dependente.writeInt(D.getNumeroCarteira());
dependente_escreverNome(D.getNome());
RAF_Dependente.writeDouble(D.getValorMensalidade());
RAF_Dependente.writeInt(D.getCarteiratitular());
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
private void titular_escreverNome(String nome) throws IOException {
StringBuffer buffer = null;
if (nome != null)
buffer = new StringBuffer(nome);
else
buffer = new StringBuffer(Titular.tamanhoNome);
buffer.setLength(Titular.tamanhoNome);
RAF_Titular.writeChars(buffer.toString());
}
private void dependente_escreverNome(String nome) throws IOException {
StringBuffer buffer = null;
if (nome != null)
buffer = new StringBuffer(nome);
else
buffer = new StringBuffer(Dependente.tamanhoNome);
buffer.setLength(Dependente.tamanhoNome);
RAF_Dependente.writeChars(buffer.toString());
}
//}
public void titular_atualizarTitular(Titular T) {
try {
RAF_Titular.seek((T.getNumeroCarteira()-CodigoInicial) * Titular.tamtitular);
if(titular_escrever(T)) // grava o registro no arquivo
System.out.println("Titular editado com sucesso!");
else
System.out.println("Erro ao editar titular");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void dependente_atualizarDependente(Dependente D) {
try {
RAF_Dependente.seek((D.getNumeroCarteira()-CodigoInicial) * Dependente.tamdependente);
if(dependente_escrever(D)) // grava o registro no arquivo
System.out.println("Dependnete editado com sucesso!");
else
System.out.println("Erro ao editar dependente");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void titular_lerTitulares(boolean Imprimir) {
try // lê um registro e exibe
{
abrirEFechar();
RAF_Titular.seek( 0 );
if(Imprimir)
System.out.printf("Codigo Nome ano Valor");
while (true) {
Titular T = titular_ler();
Lista_de_Titular.add(T);
if(T.getNumeroCarteira() != 0) {
// exibe o conteúdo de registro
if(Imprimir)
System.out.printf("%d %s %d %f\n",T.getNumeroCarteira(),
T.getNome(),T.getAnocontrato(),T.getValorMensalidade());
}
}
}
catch (EOFException eofException)
{
return;
}
catch (IOException ioException) {
ioException.printStackTrace();
System.out.println("Erro ao ler o arquivo.");
System.exit(1);
}
}
public void dependnete_lerDependnete(boolean Imprimir) {
try // lê um registro e exibe
{
abrirEFechar();
RAF_Dependente.seek( 0 );
if(Imprimir)
System.out.printf("Codigo Nome ano Valor");
while (true) {
Dependente D = dependente_ler();
Lista_de_Dependente.add(D);
if(D.getNumeroCarteira() != 0) {
// exibe o conteúdo de registro
if(Imprimir)
System.out.printf("%d %s %d %f\n",D.getCarteiratitular(),
D.getNome(),D.getNumeroCarteira(),D.getValorMensalidade());
}
}
}
catch (EOFException eofException)
{
return;
}
catch (IOException ioException) {
ioException.printStackTrace();
System.out.println("Erro ao ler o arquivo.");
System.exit(1);
}
}
//CORRIGIR
public void titular_Imprimir(int Codigo)
{
//atualizarListaDependente();
atualizarListaTitular();
/*if (Codigo == 2)
Collections.sort(Lista_de_Titular);
*/
System.out.printf("Codigo Nome Valor\n");
for (Titular T : Lista_de_Titular)
System.out.printf("%d %s %f\n",T.getNumeroCarteira(),
T.getNome(),T.getValorMensalidade());
}
public void dependente_Imprimir(int Codigo)
{
atualizarListaDependente();
System.out.printf("Codigo Nome Valor\n");
for (Dependente D : Lista_de_Dependente)
System.out.printf("%d %s %f\n",D.getNumeroCarteira(),
D.getNome(),D.getValorMensalidade());
}
public void dependente_Imprimirtitular(int Codigo)
{
atualizarListaDependente();
if(dependente_obterDependentetitular(Codigo)!=null){
System.out.printf("Codigo Nome Valor\n");
for (Dependente D : Lista_de_Dependente)
System.out.printf("%d %s %f\n",D.getNumeroCarteira(),
D.getNome(),D.getValorMensalidade());
}else{
System.out.println("Nao existe.");
}
}
//CORRIGIR
private String titular_lerNome() throws IOException {
char nome[] = new char[Titular.tamanhoNome], temp;
for (int i = 0; i < nome.length; i++) {
temp = RAF_Titular.readChar();
nome[i] = temp;
}
return new String(nome).replace('\0', ' ');
}
private String dependente_lerNome() throws IOException {
char nome[] = new char[Dependente.tamanhoNome], temp;
for (int i = 0; i < nome.length; i++) {
temp = RAF_Dependente.readChar();
nome[i] = temp;
}
return new String(nome).replace('\0', ' ');
}
//CORRIGIR
//CORRIGIR
private Titular titular_ler() throws IOException {
Titular T = new Titular();
T.setNumeroCarteira(RAF_Titular.readInt());
T.setNome(titular_lerNome());
T.setAnocontrato(RAF_Titular.readInt());
T.setValorMensalidade(RAF_Titular.readDouble());
return T;
}
private Dependente dependente_ler() throws IOException {
Dependente D = new Dependente();
D.setNumeroCarteira(RAF_Dependente.readInt());
D.setNome(dependente_lerNome());
D.setValorMensalidade(RAF_Dependente.readDouble());
D.setCarteiratitular(RAF_Dependente.readInt());
return D;
}
/*
*/
}
[/code]