Académique Documents
Professionnel Documents
Culture Documents
ESTUDO DE CASO II
Um sistema de venda de passagens de uma empresa de transportes visa um maior controle na venda de passagens, obedecendo ao limite de assentos dos veculos e evitando falhas. Empresas de transportes rodovirios e aerovirios so exemplos de uso desses sistemas.
TAREFA
Desenvolver em linguagem JAVA, seguindo estrutura do cdigo fonte do anexo I, um sistema para o controle de venda de passagens de uma empresa de transportes. No permitido alterar os arquivos Io.java, Passageiro.java, Veiculo.java, Trecho.java. No arquivo Onibus.java deve-se somente criar a classe com o nome Onibus, que o tipo de veculo utilizado pela empresa para o transporte de passageiros. No arquivo Viagem.java deve-se implementar o mtodo SimulaViagem(). permitido criar novos atributos, mtodos e classes, desde que sejam utilizados somente no mtodo SimulaViagem(). Vale ressaltar que possvel resolver o estudo de caso sem a necessidade de criar qualquer novo atributo, mtodo ou classe para uso em SimulaViagem(). Considere para o problema proposto neste estudo de caso que uma companhia de nibus chamada VIAO TATU possui vrios guichs de venda de passagens espalhados pelo pas. No entanto, os guichs vendem somente passagens dos nibus (com capacidade de 46 lugares/poltronas) que passam na cidade onde eles esto situados (itinerrio do nibus). Os clientes, no atendimento, s podem solicitar passagens com origem na cidade em que o guich est situado. O atendimento inicia com a chegada de um cliente em um guich. O cliente solicita ao atendente uma passagem informando a cidade de destino. Se houver vaga, a venda concretizada deixando a poltrona indisponvel para esse trecho. O que pode ocorrer na prtica que, algumas pessoas ao tentarem comprar passagem para um determinado trecho do itinerrio do nibus, no tenha mais poltrona disponvel. Se isso ocorrer, no possvel o passageiro viajar. dada prioridade de vaga no nibus pela ordem de atendimento no guich, independente da cidade. Considere para simulao somente um nibus no perodo de um dia. Tambm faz parte da tarefa redigir um texto descrevendo sucintamente (mximo de 2000 caracteres) quais tcnicas das disciplinas do primeiro ano do curso foram utilizadas neste estudo de caso.
ENTRADA
Consiste em dois arquivos modo texto com os nomes itinerario.txt e passageiros.txt contendo, respectivamente, o itinerrio de um nibus e uma lista ordenada cronologicamente (ordem de chegada) de pessoas que pretendem viajar na Viao Tatu. O arquivo itinerario.txt possui a ordem de cidades (trechos) em que o nibus ir percorrer e deve obedecer seguinte estrutura (por linha): <cidade_origem>;<cidade_destino>. Exemplo desse arquivo encontra-se no anexo II. O arquivo passageiros.txt um arquivo nico para todos os guichs e deve estar ordenado por ordem de atendimento dos passageiros nos guichs e obedecer seguinte estrutura por linha: <nome_passageiro>;<cidade_origem>;<cidade_destino>. Exemplo desse arquivo encontra-se no anexo III. A seguir so listadas situaes em que a venda de passagens no pode ser efetuada, logo as pessoas no viajam. Considere como referncia para os exemplos a seguir o arquivo do anexo II (itinerario.txt). O cliente solicitar uma passagem para um trecho inexistente no itinerrio do nibus. Por exemplo, os trechos So Luis-Macap, Porto Alegre-Palmas, Braslia-Belm so inexistentes; O cliente solicitar uma passagem de um trecho existente, mas anterior cidade em que est localizado o guich. Por exemplo, um cliente em Natal querer comprar uma passagem de Macap para Belm ou de Rio Branco para Manaus; O cliente solicitar uma passagem de um trecho existente, mas posterior cidade em que est localizado o guich. Por exemplo, um cliente em Natal querer comprar uma passagem de Joo Pessoa para Aracaju ou de So Paulo para Florianpolis; O nibus estar lotado, no havendo mais poltronas disponveis.
SADA
A sada consiste na emisso de dois relatrios, descritos a seguir: Relatrio 1: arquivo texto com o nome saida1.txt contendo somente os dados dos passageiros que conseguiram viajar. O arquivo deve seguir a estrutura <nome_passageiro>;<cidade_origem>;<cidade_destino>, nessa ordem e um por linha. O arquivo deve estar ordenado por <cidade_origem> obedecendo ao itinerrio do nibus. Considerando as entradas dos anexos II e III, veja no anexo IV um exemplo de sada do relatrio 1. Relatrio 2: arquivo texto com o nome saida2.txt contendo somente os dados dos passageiros que no conseguiram viajar. O arquivo deve seguir a estrutura <nome_passageiro>;<cidade_origem>;<cidade_destino>, nessa ordem e um por linha. O arquivo deve estar ordenado por <cidade_origem> obedecendo ao itinerrio do nibus. Considerando as entradas dos anexos II e III, veja no anexo V um exemplo de sada do relatrio 2.
//exibir a rota System.out.println("Ateno Sr. clientes! Aberto perodo para venda de passagens no veculo ("+viagem.getVeiculo().getNome()+") que ir executar a seguinte rota:"); for (int i = 0; i < viagem.itinerario.size(); i++) { System.out.println("Trecho "+Integer.toString(i+1)+" --------------------------------- "); System.out.println("sada de: "+viagem.itinerario.get(i).getCidadeOrigem()); System.out.println("chegada em: "+viagem.itinerario.get(i).getCidadeDestino()); } System.out.println("Nossos guichs esto abertos neste momento, nestas cidades. Aguardando clientes...");
if(viagem.getIo().gerarSaida2("saida2.txt")) { System.out.println("saida2.txt gerado com sucesso."); } else { System.out.println("Erro gerando saida2.txt"); } System.out.println("Atendimento finalizado. Obrigado por usar nossos servios."); } }
Passageiro.java
package estudodecaso2; /** * * @author UNITINS * Classe destinada a representar um passageiro. Possui como atribuitos o * nome e o trecho ao qual o passageiro pretende (possui inteno de) viajar. * */ public class Passageiro { private String nome; private TrechoPretendido trechoPretendido = new TrechoPretendido(); public class TrechoPretendido { String cidadeOrigem,cidadeDestino; } public Passageiro(String nome, String cOrigem,String cDestino) { this.nome = nome; this.trechoPretendido.cidadeOrigem = cOrigem; this.trechoPretendido.cidadeDestino = cDestino; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public TrechoPretendido getTrechoPretendido() { return trechoPretendido; } }
Veiculo.java
package estudodecaso2; /** * * @author UNITINS * Classe destinada a representar um veculo. Possui como atribuitos o * nmero de poltronas para passageiros e um nome para mera identificao. * */ public class Veiculo { int nPoltronas; String nome; public Veiculo(Integer nPoltronas,String sNome){ this.nome = sNome; this.nPoltronas = nPoltronas; } public int getNPoltronas() { return nPoltronas; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } }
Onibus.java
package estudodecaso2; /** * * @author UNITINS * Classe destinada a representar uma especializao de um veculo. * Deve-se, primeiramente, implementar esta classe para que todo o cdigo fonte * seja compilado. * */ // implemente aqui.
Trecho.java
package estudodecaso2; /** * * @author UNITINS * Classe destinada a representar um trecho, intervalo entre duas cidades. Vale lembrar que * um itinerrio formado por vrios trechos. Possui como atribuitos a cidade de * origem e de destino. * */
Viagem.java
package estudodecaso2; import java.util.ArrayList; /** * * @author UNITINS * Classe destinada a representar uma viagem. * */ public class Viagem { ArrayList<Trecho> itinerario; ArrayList<Passageiro> passageiros; Veiculo veiculo; int vetorOcupadas[]; private Io io; public Viagem(ArrayList<Trecho> itinerario,Veiculo veiculo,ArrayList<Passageiro> passageiros) { this.itinerario = itinerario; this.passageiros = passageiros; this.veiculo = veiculo; vetorOcupadas = new int[itinerario.size()]; for (int i = 0; i < vetorOcupadas.length; i++) { vetorOcupadas[i] = 0; } } /** * * @param io * Mtodo principal da classe. Tem a finalidade de simular a viagem para gerar os dados * de sada, ou seja, qual passageiro viajou e qual no viajou. * */
Io.java
/* * Arquivo de entrada e sada de dados * */ package estudodecaso2; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.StringTokenizer; /** * * @author UNITINS * Classe destinada a representar o objeto que realizar a leitura dos arquivos de entrada * (passageiros.txt e itinerario.txt) e a escrita dos arquivos de sada (saida1.txt e saida2.txt). * */ public class Io { private ArrayList<Passageiro> conseguiramViajar = new ArrayList<Passageiro>(); private ArrayList<Passageiro> naoConseguiramViajar = new ArrayList<Passageiro>(); public ArrayList<Trecho> lerArquivoItinerario(String sFileName, Veiculo veiculo) { File arquivo = new File(sFileName); if(!arquivo.exists()) { System.err.println("Arquivo \""+sFileName+"\" no existe."); return null; }
leitor.close(); //fechar leitor return lista; } catch (IOException e) { //exibe o erro na sada de erro (err) System.err.println("Ocorreu um erro: "+e.toString()); }//fim try catch return null; }// fim lerArquivoItinerario public ArrayList<Passageiro> lerArquivoPassageiros(String sFileName) { File arquivo = new File(sFileName); if(!arquivo.exists()) { System.err.println("Arquivo \""+sFileName+"\" no existe."); return null; } try //tentativa de execuo do seguinte cdigo: { ArrayList<Passageiro> lista = new ArrayList<Passageiro>(); BufferedReader leitor = new BufferedReader(new FileReader(arquivo)); //leitor sequencial // Recupera todas as linhas de modo sequencial String linha = null; while ((linha = leitor.readLine()) != null) { //<nome_passageiro>;<cidade_origem>;<cidade_destino> StringTokenizer st = new StringTokenizer(linha, ";"); String sNomePassageiro = st.nextToken(); String cOrigem = st.nextToken(); String cDestino = st.nextToken(); Passageiro passageiro = new Passageiro(sNomePassageiro,cOrigem,cDestino); lista.add(passageiro); }
public void AdicionarPassageiroConseguiuViajar(Passageiro p){ conseguiramViajar.add(p); } public void RemoverPassageiroConseguiuViajar(){ conseguiramViajar.remove(conseguiramViajar.size()-1); } public void AdicionarPassageiroNaoConseguiuViajar(Passageiro p){ naoConseguiramViajar.add(p); } public Boolean gerarSaida1(String sFileName){ BufferedWriter out = null; try { out = new BufferedWriter(new FileWriter(sFileName)); for (int i = 0; i < conseguiramViajar.size(); i++) { out.write(conseguiramViajar.get(i).getNome()+";"+ conseguiramViajar.get(i).getTrechoPretendido().cidadeOrigem+";"+ conseguiramViajar.get(i).getTrechoPretendido().cidadeDestino+"\r\n"); } out.close(); return true; } catch (IOException ex) { System.err.println("Ocorreu um erro gerando sada. ex="+ex.toString()); return false; } finally { try { out.close(); } catch (IOException ex) { System.err.println("Sada em memria: erro fechando arquivo de sada. ex="+ex.toString()); } } } public Boolean gerarSaida2(String sFileName){ BufferedWriter out = null; try { out = new BufferedWriter(new FileWriter(sFileName)); for (int i = 0; i < naoConseguiramViajar.size(); i++) { out.write(naoConseguiramViajar.get(i).getNome()+";"+ naoConseguiramViajar.get(i).getTrechoPretendido().cidadeOrigem+";"+ naoConseguiramViajar.get(i).getTrechoPretendido().cidadeDestino+"\r\n"); } out.close(); return true; } catch (IOException ex) { System.err.println("Ocorreu um erro gerando sada. ex="+ex.toString()); return false; } finally { try { out.close(); } catch (IOException ex) { System.err.println("Sada em memria: erro fechando arquivo de sada. ex="+ex.toString()); } } } }
ANEXO II itinerario.txt
Palmas; Cuiab Cuiab;Porto Velho Porto Velho;Rio Branco Rio Branco;Manaus Manaus;Boa Vista Boa Vista;Macap Macap;Belm Belm;So Lus So Lus;Teresina Teresina;Fortaleza Fortaleza;Natal Natal;Joo Pessoa Joo Pessoa;Recife Recife;Macei Macei;Aracaju Aracaju;Salvador Salvador;Vitria Vitria;Rio de Janeiro Rio de Janeiro;Belo Horizonte Belo Horizonte;Braslia Braslia;Goinia Goinia;Campo Grande Campo Grande;So Paulo So Paulo;Curitiba Curitiba;Florianpolis Florianpolis;Porto Alegre
10
11
12
13
14
Sabrina Maria;Natal;Joo Pessoa Sacramento Silva;Recife;Macei Safira Dias;Teresina;Fortaleza Saiene Alves;Boa Vista;Macap Sales Tavares;Aracaju;Salvador Svio Ramalho;Palmas;Cuiab Sandoval Arruda;Cuiab;Porto Velho Saulo Carlos;Porto Velho;Rio Branco Saturnino Medeiros;Boa Vista;Macap Pablo Genro;Macap;Belm Pacheco Silveira;Salvador;Vitria Pacfico Tales;Braslia;Goinia Padilha Santos;Recife;Macei Paiva Sobrinho;Salvador;Goinia Pamela Andria;Recife;Vitria Patrick Jos;Goinia;Curitiba Paula Toler;Braslia;Curitiba Paulete Viana;Teresina;Recife Paulamar Carla;Natal;Macei Pedro Henrique;Macei;Salvador Pedro Afonso;Rio de Janeiro;Braslia Pedro Alan;Recife;Vitria Penedo Andr;Macap;Teresina Penha Ribas;Belm;Teresina Cabral Portugus;Palmas;Porto Alegre Caciana Pereira;Recife;Macei Cacique Obama;Salvador;Braslia Cades Ivo;Natal;Aracaju Caian Santos;Manaus;Teresina Caim Pereira;Boa Vista;Natal Abel Anderson;Manaus;Natal Caio Falco;Braslia;Curitiba Caio Graco;Goinia;Porto Alegre Tcito Fernandes;Palmas;Cuiab Camila Andrade;Manaus;Boa Vista Calistene Josefa;Recife;Macei Caliel Santos;Salvador;Vitria Caleb das Arbias;Braslia;Goinia Carmelina Maria;Macap;Belm Carlota Joaquina;Salvador;Vitria Carlos Roberto;Teresina;Fortaleza Roberto Carlos;Cuiab;Macap Erasmo Carlos;Recife;Vitria Viviane S;Braslia;Goinia Valdir Pires;So Paulo;Curitiba Venncio Alves;Curitiba;Porto Alegre Vernica Maria;Macap;Belm Vera Lcia;Palmas;Natal Marco Antonio;Palmas;Florianpolis Marcelo Incio;Rio de Janeiro;Goinia Vagner Francisco;Teresina;Porto Alegre Alziro Dias;Palmas;Goinia
Paulo Franco;Porto Velho;Rio de Janeiro Marcos Valerio;Vitria;Rio de Janeiro Rosimeire Menezes;Braslia;So Paulo Ewerton Ferreira;Recife;Salvador Jlio Csar;Belo Horizonte;Porto Alegre Erika Arajo;So Paulo;Florianpolis Jos Cheute;Curitiba;Porto Alegre Carlos Eduardo;So Paulo;Porto Alegre Jadson Valeni;Vitria;Braslia Cludio Magalhes;Braslia;Campo Grande Lcio Tomaz;Goinia;So Paulo Srgio Silva;Vitria;Campo Grande Rinaldo Marques;Porto Velho;So Lus Elisabete Arendt;Palmas;Macap Eder Oliveira;Cuiab;Belm Juliana Santana;Palmas;Manaus Rachel Carneiro;Rio de Janeiro;Belo Horizonte Reinaldo Cruz;Manaus;Teresina Alexandre Carneiro;Palmas;Fortaleza Valmir Lemes;Porto Velho;Macap Juclio Bueno;Cuiab;Boa Vista Rafael Brando;Cuiab;Fortaleza Carlota Silva;Belo Horizonte;Goinia
15
16