Instituto Superior de Engenharia do Porto Linguagens e Programação II – 2003/04 (1S) Proposta de Resolução ficha nº4 2. a) Classes da aplicação: Bolo: contém a definição para o bolo; Confeitaria: contém a definição da confeitaria; Fabrica: contém o conjunto de confeitarias e bolos que produz para todas as confeitarias; FabricaApp: classe responsável por arrancar a aplicação; Leitura: classe auxiliar com métodos de leitura de Strings, reais, inteiros,etc. b) import java.io.*; public class Bolo { private String designacao; private float preco; public Bolo() { designacao=""; preco=0.0f; } public Bolo(String d,float pr) { designacao=d; preco=pr; } public static Bolo criarBolo() throws IOException { System.out.println("Insercao de dados para um bolo"); String d=Leitura.lerString("Designacao :"); float p=Leitura.lerReal("Preco :"); return new Bolo(d,p); } public String getDesignacao() { return designacao; } public float getPreco() { return preco; } } página 1 Instituto Superior de Engenharia do Porto Linguagens e Programação II – 2003/04 (1S) Proposta de Resolução ficha nº4 import java.io.*; public class Confeitaria { private String nome; private String endereco; private int [] qtVendida; public Confeitaria() { nome=""; endereco=""; qtVendida=new int[10]; } public Confeitaria(String n,String e,int qt) { nome=n; endereco=e; qtVendida=new int[qt]; } public static Confeitaria criarConfeitaria(int qt) throws IOException { System.out.println("Insercao de dados para a nova confeitaria"); String n=Leitura.lerString("Nome :"); String e=Leitura.lerString("Endereco :"); return new Confeitaria(n,e,qt); } public String getNome() { return nome; } public int getVendas(int indiceBolo) { return qtVendida[indiceBolo]; } public void setVendas(int indiceBolo,int qtd) { qtVendida[indiceBolo]+= qtd; } public void aumentarConfeitaria() { qtVendida = aumentarArray(qtVendida,1); } static int [] aumentarArray(int [] b, int incremento) { int [] c = new int [b.length+incremento]; System.arraycopy(b, 0, c, 0, b.length); return c; } } página 2 Instituto Superior de Engenharia do Porto Linguagens e Programação II – 2003/04 (1S) Proposta de Resolução ficha nº4 import java.io.*; public class Fabrica { private Confeitaria [] vConfeitarias; private Bolo [] vBolos; private int qtBolos; private int qtConf; public Fabrica() throws IOException { //Criar bolos qtBolos=10; vBolos = new Bolo[qtBolos]; for(int i=0;i<qtBolos;i++) vBolos[i] = Bolo.criarBolo(); //Criar confeitarias qtConf=4; vConfeitarias = new Confeitaria[qtConf]; for(int i=0;i<qtConf;i++) vConfeitarias[i] = Confeitaria.criarConfeitaria(qtBolos); } // INSERIR BOLOS public void inserirBolo() throws IOException { // Aumentar ao vector de bolos vBolos = aumentarBolo(vBolos,1); vBolos[qtBolos++]=Bolo.criarBolo(); // Aumentar o tamanho a cada vector de confeitarias for(int i=0;i<qtConf;i++) vConfeitarias[i].aumentarConfeitaria(); } public void inserirConf() throws IOException { // Aumentar ao vector de confeitarias vConfeitarias = aumentarConfeitaria(vConfeitarias,1); vConfeitarias[qtConf++]=Confeitaria.criarConfeitaria(qtBolos); } página 3 Instituto Superior de Engenharia do Porto Linguagens e Programação II – 2003/04 (1S) Proposta de Resolução ficha nº4 // VISUALIZAÇÃO DAS VENDAS PARA TODAS AS CONFEITARIAS public void visualizarVendas() { System.out.println("\nVisualização das vendas de todas as confeitarias"); for(int i=0;i<qtConf;i++) { System.out.print("\nConfeitaria "+vConfeitarias[i].getNome()); for(int j=0;j<qtBolos;j++) System.out.print(" "+vConfeitarias[i].getVendas(j)); System.out.println(); } } // VISUALIZAÇÃO DO TOTAL DE VENDAS public void visualizarVendasTotais() throws IOException { System.out.println("\nVisualização das vendas para um bolo"); for(int i=0;i<qtBolos;i++) System.out.println("Bolo "+(i+1)+" "+vBolos[i].getDesignacao()); int x = Leitura.lerInteiro("Qual o numero do bolo? "); float soma=0f; float valor; valor= vBolos[x-1].getPreco(); for(int i=0;i<qtConf;i++) soma = soma + vConfeitarias[i].getVendas(x-1)*valor; System.out.println("\n Para o bolo "+x+" total de vendas: "+soma); } // INSERIR UMA VENDA DE BOLOS public void inserirVenda() throws IOException { System.out.println("\nInsercao de vendas"); for(int i=0;i<qtConf;i++) System.out.println("Confeitaria "+(i+1)+" "+vConfeitarias[i].getNome()); int confX = Leitura.lerInteiro("Qual o numero da confeitaria? "); for(int i=0;i<qtBolos;i++) System.out.println("Bolo "+(i+1)+" "+vBolos[i].getDesignacao()); int boloX = Leitura.lerInteiro("Qual o numero do bolo? "); int qtd = Leitura.lerInteiro("Qual a quantidade ? "); vConfeitarias[confX-1].setVendas(boloX-1,qtd); } página 4 Instituto Superior de Engenharia do Porto Linguagens e Programação II – 2003/04 (1S) Proposta de Resolução ficha nº4 static Bolo [] aumentarBolo(Bolo [] b, int inc) { Bolo [] c = new Bolo[b.length+inc]; System.arraycopy(b,0,c,0,b.length); return c; } static Confeitaria [] aumentarConfeitaria(Confeitaria [] b, int inc) { Confeitaria [] c = new Confeitaria[b.length+inc]; System.arraycopy(b,0,c,0,b.length); return c; } } import java.io.*; public class FabricaApp { public static void main (String args[]) throws IOException { System.out.println("Aplicacao fabrico de bolos"); Fabrica f1=new Fabrica(); f1.visualizarVendas(); f1.inserirVenda(); f1.inserirBolo(); f1.visualizarVendas(); f1.visualizarVendasTotais(); } } página 5 Instituto Superior de Engenharia do Porto Linguagens e Programação II – 2003/04 (1S) Proposta de Resolução ficha nº4 c) As classes Bolo e Confeitaria mantêm-se inalteradas. import java.io.*; import java.util.*; public class Fabrica { private Vector vConfeitarias; private Vector vBolos; private int qtBolos; private int qtConf; public Fabrica() throws IOException { //Criar bolos qtBolos=2; vBolos = new Vector(qtBolos); for(int i=0;i<qtBolos;i++) vBolos.addElement(Bolo.criarBolo()); //Criar confeitarias qtConf=3; vConfeitarias = new Vector(qtConf); for(int i=0;i<qtConf;i++) vConfeitarias.addElement(Confeitaria.criarConfeitaria(qtBolos)); } // INSERIR BOLOS public void inserirBolo() throws IOException { vBolos.addElement(Bolo.criarBolo()); qtBolos++; // Aumentar o tamanho a cada vector de confeitarias for(int i=0;i<qtConf;i++) { Confeitaria c = (Confeitaria)(vConfeitarias.elementAt(i)); c.aumentarConfeitaria(); } } public void inserirConf() throws IOException { // Aumentar ao vector de confeitarias vConfeitarias.addElement(Confeitaria.criarConfeitaria(qtBolos)); qtConf++; } página 6 Instituto Superior de Engenharia do Porto Linguagens e Programação II – 2003/04 (1S) Proposta de Resolução ficha nº4 // VISUALIZAÇÃO DAS VENDAS PARA TODAS AS CONFEITARIAS public void visualizarVendas() { System.out.println("\nVisualização das vendas de todas as confeitarias"); for(int i=0;i<qtConf;i++) { Confeitaria c = (Confeitaria)vConfeitarias.elementAt(i); System.out.print("\nConfeitaria "+c.getNome()); for(int j=0;j<qtBolos;j++) System.out.print(" "+c.getVendas(j)); System.out.println(); } } // VISUALIZAÇÃO DO TOTAL DE VENDAS public void visualizarVendasTotais() throws IOException { System.out.println("\nVisualização das vendas para um bolo"); for(int i=0;i<qtBolos;i++) { Bolo b=(Bolo)vBolos.elementAt(i); System.out.println("Bolo "+(i+1)+" "+b.getDesignacao()); } int x = Leitura.lerInteiro("Qual o numero do bolo? "); float soma=0f; float valor; Bolo b = (Bolo)vBolos.elementAt(x-1); valor= b.getPreco(); for(int i=0;i<qtConf;i++) { Confeitaria c = (Confeitaria)vConfeitarias.elementAt(i); soma = soma + c.getVendas(x-1)*valor; } System.out.println("\n Para o bolo "+x+" total de vendas: "+soma); } // INSERIR UMA VENDA DE BOLOS public void inserirVenda() throws IOException { System.out.println("\nInsercao de vendas"); for(int i=0;i<qtConf;i++) { Confeitaria c = (Confeitaria)vConfeitarias.elementAt(i); System.out.println("Confeitaria "+(i+1)+" "+c.getNome()); } int confX = Leitura.lerInteiro("Qual o numero da confeitaria? "); for(int i=0;i<qtBolos;i++) { Bolo b = (Bolo)vBolos.elementAt(i); página 7 Instituto Superior de Engenharia do Porto Linguagens e Programação II – 2003/04 (1S) Proposta de Resolução System.out.println("Bolo "+(i+1)+" ficha nº4 "+b.getDesignacao()); } int boloX = Leitura.lerInteiro("Qual o numero do bolo? "); int qtd = Leitura.lerInteiro("Qual a quantidade ? "); Confeitaria c = (Confeitaria)vConfeitarias.elementAt(confX-1); c.setVendas(boloX-1,qtd); } } página 8