Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package trabalhoPratico3;
- import java.util.Locale;
- import java.util.Scanner;
- public class ShopEST {
- public static void main(String[] args) {
- Locale.setDefault(Locale.US);
- int tamMax = 100;
- String[] nome = new String[tamMax];
- double[] quanto = new double[tamMax];
- double[] preco = new double[tamMax];
- boolean[] feito = new boolean[tamMax];
- //Arrays para copia de dados
- String[] nomeCopia = new String[tamMax];
- double[] quantoCopia = new double[tamMax];
- double[] precoCopia = new double[tamMax];
- boolean[] feitoCopia = new boolean[tamMax];
- int[] posicaoInserida = new int[tamMax];
- int posicaoUltimoInserido = 0;
- int nItens = 0;
- menuPrincipal(nItens, nome, quanto, preco, feito, posicaoUltimoInserido, posicaoInserida);
- }
- static void menuPrincipal(int nItens, String nome[], double quanto[], double preco[], boolean feito[], int posicaoUltimoInserido, int posicaoInserida[]) {
- char opcao;
- do {
- System.out.println("(E)ditar lista.");
- System.out.println("(F)azer compras.");
- System.out.println("Fazer (c)ontas.");
- System.out.println("(U)tilidades.");
- System.out.println("(S)air.");
- opcao = lerChar();
- switch (opcao) {
- case 'E':
- case 'e':
- nItens = editarLista(nItens, nome, quanto, preco, feito, posicaoUltimoInserido, posicaoInserida);
- break;
- case 'F':
- case 'f':
- fazerCompras(nItens, nome, quanto, preco, feito);
- break;
- case 'C':
- case 'c':
- fazerContas(nItens, nome, quanto, preco, feito);
- break;
- case 'U':
- case 'u':
- utilidades(nItens, nome, quanto, preco, feito);
- break;
- case 'S':
- case 's':
- System.out.println("**Adeus, obrigado por usar shopEST!**");
- break;
- default:
- System.out.println("Escolha uma opção válida.");
- break;
- }
- } while (opcao != 's' && opcao != 'S');
- }
- /*//////////////////////////////////////////////////
- //////////////////EDITAR LISTA////////////////////*/
- static int editarLista(int nItens, String nome[], double quanto[], double preco[], boolean feito[], int posicaoUltimoInserido, int posicaoInserida[]) {
- char editar;
- do {
- System.out.println("(I)nserir item no fim da lista.");
- System.out.println("Inserir item na (p)osição n da lista.");
- System.out.println("Apagar últim(o) item inserido na lista.");
- System.out.println("Apagar item na posição (n) da lista.");
- System.out.println("(A)pagar itens da posição m à n da lista.");
- System.out.println("(L)istar todos os itens.");
- System.out.println("(V)oltar.");
- editar = lerChar();
- switch (editar) {
- case 'I':
- case 'i':
- nItens = inserirFimLista(nItens, nome, quanto, preco, feito, posicaoUltimoInserido, posicaoInserida);
- posicaoUltimoInserido++;
- break;
- case 'p':
- case 'P':
- nItens = inserirPosicaoN(nItens, nome, quanto, preco, feito, posicaoUltimoInserido, posicaoInserida);
- posicaoUltimoInserido++;
- break;
- case 'o':
- case 'O':
- nItens = apagarUltimoInserido(nItens, nome, quanto, preco, feito, posicaoUltimoInserido, posicaoInserida);
- posicaoUltimoInserido--;
- break;
- case 'n':
- case 'N':
- nItens = apagarPosicaoN(nItens, nome, quanto, preco, feito);
- break;
- case 'a':
- case 'A':
- //como neste caso o nItens precisava do maior e menor da funcao, decidi fazer return do propio nItens.
- nItens = apagarMN(nItens, nome, quanto, preco, feito);
- break;
- case 'l':
- case 'L':
- listarItems(nItens, nome, quanto, preco, feito);
- break;
- case 'V':
- case 'v':
- System.out.println("A voltar atrás no menu...");
- break;
- default:
- System.out.println("Escolha uma opção válida.");
- break;
- }
- } while (editar != 'v' && editar != 'V');
- return nItens;
- }
- static int inserirFimLista(int nItens, String nome[], double quanto[], double preco[], boolean feito[], int posicaoUltimoInserido, int posicaoInserida[]) {
- if (nItens < nome.length) {
- System.out.println("Qual o nome do produto?");
- nome[nItens] = lerString();
- System.out.println("Quantas unidades?");
- quanto[nItens] = lerInt();
- System.out.println("Qual o preço?");
- preco[nItens] = lerDouble();
- feito[nItens] = false;
- posicaoInserida[posicaoUltimoInserido] = nItens;
- nItens++;
- } else {
- System.out.println("A lista já está cheia!");
- }
- return nItens;
- }
- static int inserirPosicaoN(int nItens, String nome[], double quanto[], double preco[], boolean feito[], int posicaoUltimoInserido, int posicaoInserida[]) {
- System.out.println("Em que posição deseja inserir o item?");
- int inserirPosicao = lerInt();
- if (nItens != 0) { /*caso a lista estiver vazia e quiser adicionar na posicao 0 é possivel*/
- while (inserirPosicao > nItens - 1 || inserirPosicao < 0) {
- System.out.println("Por favor, escolha uma posição já ocupada.");
- System.out.println("Em que posição deseja inserir o item?");
- inserirPosicao = lerInt();
- }
- /*Executamos um ciclo for para passar para a frente os items desde a posição em que foi inserido o item,
- colocando depois o item no espaço vazio que resultou do ciclo for.
- O aux server para aceder à posição inicial do item a passar para a direita.*/
- for (int i = 0, aux = 1; i < (nItens - inserirPosicao); i++, aux++) {
- nome[nItens - i] = nome[nItens - aux];
- quanto[nItens - i] = quanto[nItens - aux];
- preco[nItens - i] = preco[nItens - aux];
- feito[nItens - i] = feito[nItens - aux];
- }
- }
- System.out.println("Qual o nome do produto?");
- nome[inserirPosicao] = lerString();
- System.out.println("Quantas unidades?");
- quanto[inserirPosicao] = lerDouble();
- System.out.println("Qual o preço?");
- preco[inserirPosicao] = lerDouble();
- feito[inserirPosicao] = false;
- posicaoInserida[posicaoUltimoInserido] = inserirPosicao; /*Guarda no array posicaoInserida o indice da lista em que foi inserido, caso seja preciso apagar no futuro*/
- nItens++;
- return nItens;
- }
- static int apagarUltimoInserido(int nItens, String nome[], double quanto[], double preco[], boolean feito[], int posicaoUltimoInserido, int posicaoInserida[]) {
- if (nItens == 0) {
- System.out.println("A lista está vazia");
- } else {
- /*Vai buscar ao array posicaoInserida o valor do indice que temos que apagar, e caso esteja no meio da lista o
- ciclo for serve para puxar para trás uma casa cada item, desde a posição do item apagado*/
- for (int i = 1, aux = 0; i < (nItens - posicaoInserida[posicaoUltimoInserido - 1]); i++, aux++) {
- nome[posicaoInserida[posicaoUltimoInserido - 1] + aux] = nome[posicaoInserida[posicaoUltimoInserido - 1] + i];
- quanto[posicaoInserida[posicaoUltimoInserido - 1] + aux] = quanto[posicaoInserida[posicaoUltimoInserido - 1] + i];
- preco[posicaoInserida[posicaoUltimoInserido - 1] + aux] = preco[posicaoInserida[posicaoUltimoInserido - 1] + i];
- feito[posicaoInserida[posicaoUltimoInserido - 1] + aux] = feito[posicaoInserida[posicaoUltimoInserido - 1] + i];
- }
- nItens--;
- }
- return nItens;
- }
- static int apagarPosicaoN(int nItens, String nome[], double quanto[], double preco[], boolean feito[]) {
- if (nItens == 0) {
- System.out.println("A lista está vazia.");
- } else {
- System.out.println("Em que posição deseja retirar o item?");
- int apagarPosicao = lerInt();
- while (apagarPosicao > nItens - 1 || apagarPosicao < 0) {
- System.out.println("Por favor, escolha uma posição ocupada.");
- System.out.println("Em que posição deseja retirar o item?");
- apagarPosicao = lerInt();
- }
- /*Usamos o ciclo for para puxar para trás uma casa cada item, desde a posição do item apagado.
- O aux é usado para anexar o indice anterior, o i o indice a seguir, enquanto percorre a lista.*/
- for (int i = 1, aux = 0; i < (nItens - apagarPosicao); i++, aux++) {
- nome[apagarPosicao + aux] = nome[apagarPosicao + i];
- quanto[apagarPosicao + aux] = quanto[apagarPosicao + i];
- preco[apagarPosicao + aux] = preco[apagarPosicao + i];
- feito[apagarPosicao + aux] = feito[apagarPosicao + i];
- }
- nItens--;
- }
- return nItens;
- }
- static int apagarMN(int nItens, String nome[], double quanto[], double preco[], boolean feito[]) {
- if (nItens == 0) {
- System.out.println("A lista está vazia.");
- return nItens;
- } else {
- int posicaoM, posicaoN;
- System.out.println("Indique a posicao m e n para apagar da lista.");
- posicaoM = lerInt();
- posicaoN = lerInt();
- while (posicaoM == posicaoN || posicaoM > nItens || posicaoN > nItens || posicaoM < 0 || posicaoN < 0) {
- System.out.println("As posições têm de existir na lista e não podem ser iguais.");
- System.out.println("Indique a posicao m e n para apagar da lista.");
- posicaoM = lerInt();
- posicaoN = lerInt();
- }
- /*Usamos o codigo seguinte para caso os numeros introduzidos pelo utilizador não estejam ordenados,
- o aux será será o numero de vezes que temos que andar para a esquerda para "fechar" a lista quando apagadas as posições.*/
- int maior = (posicaoM > posicaoN) ? posicaoM : posicaoN;
- int menor = (posicaoM < posicaoN) ? posicaoM : posicaoN;
- int aux = nItens - maior - 1;
- /*Os numeros que se encontrarem a partir do maior para a frente serao copiados para o lugar do menor e adiante.*/
- for (int i = 0; i < aux; i++) {
- nome[menor + i] = nome[maior + i + 1];
- quanto[menor + i] = quanto[maior + i + 1];
- preco[menor + i] = preco[maior + i + 1];
- feito[menor + i] = feito[maior + i + 1];
- }
- nItens -= maior - menor + 1;
- return nItens;
- }
- }
- static void listarItems(int nItens, String nome[], double quanto[], double preco[], boolean feito[]) {
- if (nItens == 0) {
- System.out.println("\n**A lista está vazia.**");
- } else {
- System.out.printf("%7s %20s %15s %15s\n", "Item", "Quantidade", "Preço", "Comprado");
- for (int i = 0; i < nItens; i++) {
- System.out.printf("%d: %-15s %-12.3f %10.2f€ %12s\n", i, nome[i], quanto[i], preco[i], feito[i] ? "x" : "");
- }
- System.out.println();
- }
- }
- /*//////////////////////////////////////////////////
- //////////////////FAZER COMPRAS////////////////////*/
- static void fazerCompras(int nItens, String nome[], double quanto[], double preco[], boolean feito[]) {
- char fazerCompras;
- do {
- System.out.println("(M)arcar primeiro item por comprar.");
- System.out.println("(D)esmarcar primeiro item comprado.");
- System.out.println("Trocar estado por (n)ome.");
- System.out.println("Trocar estado por (p)osição.");
- System.out.println("(L)istar.");
- System.out.println("(V)oltar.");
- fazerCompras = lerChar();
- switch (fazerCompras) {
- case 'M':
- case 'm':
- marcarPrimeiro(nItens, feito);
- break;
- case 'd':
- case 'D':
- desmarcarPrimeiro(nItens, feito);
- break;
- case 'n':
- case 'N':
- trocarEstadoNome(nItens, nome, feito);
- break;
- case 'p':
- case 'P':
- trocarEstadoPosicao(nItens, feito);
- break;
- case 'l':
- case 'L':
- listar(nItens, nome, quanto, preco, feito);
- break;
- case 'V':
- case 'v':
- System.out.println("A voltar atrás no menu...");
- break;
- default:
- System.out.println("Escolha uma opção válida.");
- break;
- }
- } while (fazerCompras != 'v' && fazerCompras != 'V');
- }
- static void marcarPrimeiro(int nItens, boolean feito[]) {
- if (nItens == 0) {
- System.out.println("A lista está vazia.");
- } else {
- boolean porComprar = false;
- /*Vamos percorrer a lista e encontrar o 1º item que esteja por comprar e marca-lo como comprado.*/
- for (int i = 0; i < nItens; i++) {
- if (feito[i] == false) {
- feito[i] = true;
- porComprar = true;
- break;
- }
- }
- if (!porComprar) {
- System.out.println("Não há items por comprar.");
- }
- }
- }
- static void desmarcarPrimeiro(int nItens, boolean feito[]) {
- if (nItens == 0) {
- System.out.println("A lista está vazia.");
- } else {
- boolean comprado = false;
- /*Percorremos a lista e desmarcamos o primeiro item comprado que encontrarmos.*/
- for (int i = 0; i < nItens; i++) {
- if (feito[i] == true) {
- feito[i] = false;
- comprado = true;
- break;
- }
- }
- if (!comprado) {
- System.out.println("Não há items comprados para desmarcar.");
- }
- }
- }
- static void trocarEstadoNome(int nItens, String nome[], boolean feito[]) {
- if (nItens == 0) {
- System.out.println("A lista está vazia.");
- } else {
- System.out.println("Indique o nome do item para trocar de estado (comprado/não comprado)");
- String nomeTrocarEstado = lerString();
- boolean nomeExiste = false;
- for (int i = 0; i < nItens; i++) {
- if (nome[i].equalsIgnoreCase(nomeTrocarEstado)) {
- feito[i] = !feito[i];
- nomeExiste = true;
- break;
- }
- }
- if (!nomeExiste) {
- System.out.println("O nome que procura não existe.");
- }
- }
- }
- static void trocarEstadoPosicao(int nItens, boolean feito[]) {
- if (nItens == 0) {
- System.out.println("A lista está vazia.");
- } else {
- System.out.println("Indique a posição do item para trocar de estado (comprado/não comprado)");
- int posicaoTrocarEstado = lerInt();
- if (posicaoTrocarEstado < 0 || posicaoTrocarEstado > nItens - 1) {
- System.out.println("A posição não existe.");
- } else {
- feito[posicaoTrocarEstado] = !feito[posicaoTrocarEstado];
- }
- }
- }
- static void listar(int nItens, String nome[], double quanto[], double preco[], boolean feito[]) {
- char listar;
- do {
- System.out.println("Listar (t)odos os itens");
- System.out.println("Listar itens (c)omprados");
- System.out.println("Listar itens (p)or comprar");
- System.out.println("(V)oltar.");
- listar = lerChar();
- switch (listar) {
- case 't':
- case 'T':
- listarItems(nItens, nome, quanto, preco, feito);
- break;
- case 'c':
- case 'C':
- listaComprados(nItens, nome, quanto, preco, feito);
- break;
- case 'p':
- case 'P':
- listaPorComprar(nItens, nome, quanto, preco, feito);
- break;
- case 'V':
- case 'v':
- System.out.println("A voltar atrás no menu...");
- break;
- default:
- System.out.println("Escolha uma opção válida.");
- break;
- }
- } while (listar != 'v' && listar != 'V');
- }
- static void listaComprados(int nItens, String nome[], double quanto[], double preco[], boolean feito[]) {
- int itensComprados = 0;
- if (nItens == 0) {
- System.out.println("\nA lista está vazia.");
- } else {
- for (int i = 0; i < nItens; i++) {
- if (feito[i]) {
- itensComprados++;
- }
- }
- if (itensComprados < 1) {
- System.out.println("Não ha itens comprados.");
- } else {
- String nomeAux[] = new String[itensComprados];
- double quantoAux[] = new double[itensComprados];
- double precoAux[] = new double[itensComprados];
- boolean feitoAux[] = new boolean[itensComprados];
- for (int i = 0, j = 0; i < nItens; i++) {
- if (feito[i]) {
- nomeAux[j] = nome[i];
- quantoAux[j] = quanto[i];
- precoAux[j] = preco[i];
- feitoAux[j] = feito[i];
- j++;
- }
- }
- listarItems(itensComprados, nomeAux, quantoAux, precoAux, feitoAux);
- System.out.println();
- }
- }
- }
- static void listaPorComprar(int nItens, String nome[], double quanto[], double preco[], boolean feito[]) {
- int porComprar = 0;
- if (nItens == 0) {
- System.out.println("\nA lista está vazia.");
- } else {
- for (int i = 0; i < nItens; i++) {
- if (!feito[i]) {
- porComprar++;
- }
- }
- if (porComprar < 1) {
- System.out.println("Não restam itens por comprar.");
- } else {
- String nomeAux[] = new String[porComprar];
- double quantoAux[] = new double[porComprar];
- double precoAux[] = new double[porComprar];
- boolean feitoAux[] = new boolean[porComprar];
- for (int i = 0, j = 0; i < nItens; i++) {
- if (!feito[i]) {
- nomeAux[j] = nome[i];
- quantoAux[j] = quanto[i];
- precoAux[j] = preco[i];
- feitoAux[j] = feito[i];
- j++;
- }
- }
- listarItems(porComprar, nomeAux, quantoAux, precoAux, feitoAux);
- System.out.println();
- }
- }
- }
- /*//////////////////////////////////////////////////
- //////////////////FAZER CONTAS////////////////////*/
- static void fazerContas(int nItens, String nome[], double quanto[], double preco[], boolean feito[]) {
- char fazerContas;
- do {
- System.out.println("Quanto custa a (l)ista?");
- System.out.println("Quanto já (g)astei?");
- System.out.println("Quanto custa o que (f)alta comprar?");
- System.out.println("Qual o preço (m)édio por item?");
- System.out.println("(V)oltar.");
- fazerContas = lerChar();
- switch (fazerContas) {
- case 'l':
- case 'L':
- custoLista(nItens, quanto, preco);
- break;
- case 'g':
- case 'G':
- quantoGastei(nItens, quanto, preco, feito);
- break;
- case 'f':
- case 'F':
- quantoCustaFaltaComprar(nItens, quanto, preco, feito);
- break;
- case 'm':
- case 'M':
- precoMedio(nItens, quanto, preco);
- break;
- case 'V':
- case 'v':
- System.out.println("A voltar atrás no menu...");
- break;
- default:
- System.out.println("Escolha uma opção válida.");
- break;
- }
- } while (fazerContas != 'v' && fazerContas != 'V');
- }
- static void custoLista(int nItens, double quanto[], double preco[]) {
- if (nItens == 0) {
- System.out.println("A lista está vazia.");
- } else {
- double custoLista = 0;
- for (int i = 0; i < nItens; i++) {
- custoLista += preco[i] * quanto[i];
- }
- System.out.printf("A lista custa %.2f€\n", custoLista);
- }
- }
- static void quantoGastei(int nItens, double quanto[], double preco[], boolean feito[]) {
- if (nItens == 0) {
- System.out.println("A lista está vazia.");
- } else {
- double gasto = 0;
- for (int i = 0; i < nItens; i++) {
- if (feito[i]) {
- gasto += preco[i] * quanto[i];
- }
- }
- System.out.printf("Gastou %.2f€\n", gasto);
- }
- }
- static void quantoCustaFaltaComprar(int nItens, double quanto[], double preco[], boolean feito[]) {
- if (nItens == 0) {
- System.out.println("A lista está vazia.");
- } else {
- double faltaComprar = 0;
- for (int i = 0; i < nItens; i++) {
- if (!feito[i]) {
- faltaComprar += preco[i] * quanto[i];
- }
- }
- System.out.printf("Falta comprar o total de: %.2f€\n", faltaComprar);
- }
- }
- static void precoMedio(int nItens, double quanto[], double preco[]) {
- double precoMedio = 0;
- double quantidadeTotal = 0;
- if (nItens == 0) {
- System.out.println("A lista está vazia.");
- } else {
- for (int i = 0; i < nItens; i++) {
- precoMedio += preco[i] * quanto[i];
- quantidadeTotal += quanto[i];
- }
- System.out.printf("Preço médio por item: %.2f€\n", precoMedio / quantidadeTotal);
- }
- }
- /*//////////////////////////////////////////////////
- //////////////////UTILIDADES//////////////////////*/
- static void utilidades(int nItens, String nome[], double quanto[], double preco[], boolean feito[]) {
- char utilidades;
- do {
- System.out.println("(L)istar itens.");
- System.out.println("Co(p)iar itens da posição m à n");
- System.out.println("(C)ortar itens da posição m à n.");
- System.out.println("(I)nserir na posição n a partir da memória.");
- System.out.println("(S)ubstituir na posição n a partir da memória.");
- System.out.println("(E)ditar item.");
- System.out.println("(V)oltar.");
- utilidades = lerChar();
- switch (utilidades) {
- case 'l':
- case 'L':
- listarItems(nItens, nome, quanto, preco, feito);
- break;
- case 'p':
- case 'P':
- copiarMN();
- break;
- case 'C':
- case 'c':
- cortarMN();
- break;
- case 'I':
- case 'i':
- inserirPosicaoNMemoria();
- break;
- case 'S':
- case 's':
- substituirPosicaoNMemoria();
- break;
- case 'E':
- case 'e':
- editarItem();
- break;
- case 'V':
- case 'v':
- System.out.println("A voltar atrás no menu...");
- break;
- default:
- System.out.println("Escolha uma opção válida.");
- break;
- }
- } while (utilidades != 'v' && utilidades != 'V');
- }
- static int copiarMN(String nome[], double quanto[], double preco[], boolean feito[], String nomeCopia[], double quantoCopia[], double precoCopia[], boolean feitoCopia[]) {
- System.out.println("Insira as posições a copia");
- int posicao1 = lerInt();
- int posicao2 = lerInt();
- int maior = posicao1 > posicao2? posicao1:posicao2;
- int menor = posicao1 < posicao2? posicao1:posicao2;
- int mAn = maior - menor;
- for (int i = 0;i<mAn;i++) {
- nomeCopia[i] = nome[menor+i];
- quantoCopia[i] = quanto[menor+i];
- precoCopia[i] = preco[menor+i];
- feitoCopia[i] = feito[menor+i];
- }
- return mAn;
- }
- static void cortarMN() {
- System.out.println("funcionou C");
- }
- static void inserirPosicaoNMemoria(int mAn) {
- System.out.println("Em que posição quer inserir?");
- int posicaoN = lerInt();
- }
- static void substituirPosicaoNMemoria() {
- System.out.println("Funcionou s");
- }
- static void editarItem() {
- System.out.println("Funcionou E");
- }
- static char lerChar() {
- Scanner sc = new Scanner(System.in);
- char ch;
- ch = sc.next().charAt(0);
- sc.nextLine();
- return ch;
- }
- static int lerInt() {
- Scanner sc = new Scanner(System.in);
- int inteiro;
- while(!sc.hasNextInt()) {
- System.out.println("Insira um número inteiro");
- sc.nextLine();
- }
- inteiro = sc.nextInt();
- sc.nextLine();
- return inteiro;
- }
- static double lerDouble() {
- Scanner sc = new Scanner(System.in);
- double nReal;
- while(!sc.hasNextInt()) {
- System.out.println("Insira o preço");
- sc.nextLine();
- }
- nReal= sc.nextDouble();
- sc.nextLine();
- return nReal;
- }
- static String lerString() {
- Scanner sc = new Scanner(System.in);
- String nome ;
- nome= sc.nextLine();
- return nome;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement