Advertisement
Guest User

Untitled

a guest
May 26th, 2015
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.25 KB | None | 0 0
  1. /*
  2. entradas:
  3. blocos
  4. andares por bloco
  5. unidades por andar
  6. consumo
  7. opção
  8.  
  9. saídas:
  10. Média do consumo de cada bloco
  11. Bloco com maior consumo médio
  12. Porcentagem do bloco anterior em relação ao total
  13.  
  14. Média de consumo de cada andar
  15. Unidade com maior consumo de cada andar
  16. Andar do bloco com maior consumo diário
  17. Porcentagem em relação ao condomínio
  18. Porcentagem em relação ao bloco ao qual pertence
  19.  
  20. Unidade com maior consumo do bloco
  21.  
  22. Identificação (unidade, andar e bloco) da unidade que apresentou maior consumo
  23. */
  24. package controlehidrico;
  25. import java.util.*;
  26. import java.io.*;
  27. import java.lang.ArithmeticException;
  28.  
  29. public class ControleHidrico{
  30.  
  31. public static final int blocos = 3;
  32. public static final int andares = 20;
  33. public static final int unidades = 6;
  34.  
  35. public static void main(String[] args){
  36.  
  37. boolean finExec=false;
  38. boolean dadosInseridos = false;
  39. boolean relatorio = false;
  40.  
  41.  
  42. int opcao;
  43. Scanner in = new Scanner(System.in);
  44.  
  45. double[][][] condominio = new double[blocos][andares][unidades];
  46.  
  47. while(finExec==false){
  48.  
  49. System.out.println("\n\t--------- Sistema Controle de Consumo Hidrico Diario ---------\n");
  50. System.out.println("\tEscolha uma das opcoes a seguir:");
  51. System.out.println("\t1 - Entrada do Consumo do Dia");
  52. System.out.println("\t2 - Análise do Consumo Diario");
  53. System.out.println("\t3 - Entrada do Consumo do Dia (Arquivo)");
  54. System.out.println("\t4 - Relatorio do Consumo Diario (Arquivo)");
  55. System.out.println("\t5 - Sair");
  56. System.out.print("\tOpcao escolhida ==> ");
  57. opcao = in.nextInt();
  58. System.out.println("\n\t--------------------------------------------------------------\n");
  59.  
  60. in.nextLine(); //limpa buffer
  61. switch(opcao){
  62.  
  63. case 1:
  64. System.out.println("\t1 - Entrada do Consumo do Dia");
  65. dadosInseridos = LeMatriz(condominio);
  66. break;
  67.  
  68. case 2:
  69. //chamada de funções que fazem análise do consumo diário
  70. System.out.println("\t2 - Análise do Consumo Diario");
  71. analise(condominio, relatorio);
  72. break;
  73.  
  74. case 3:
  75. //chamada de função que pede arquivo
  76. System.out.println("\t3 - Entrada do Consumo do Dia (Arquivo)");
  77. System.out.print("\tCertifique-se que inseriu os valores de todos as unidades do condominio na ordem crescente de bloco, andar e apartamento.\n\tUtilize duas casas decimais para melhorar a precisão, mesmo que sejam 0.\n\tDigite o caminho completo do arquivo: ");
  78. String caminho = in.nextLine();
  79.  
  80. dadosInseridos = leArquivo(caminho, condominio);
  81. break;
  82.  
  83. case 4:
  84. //chamada de função que gera relatorio em arquivo
  85. System.out.println("\t4 - Relatorio do Consumo Diario (Arquivo)");
  86. gerarTXT(condominio, dadosInseridos, relatorio);
  87. break;
  88.  
  89. case 5:
  90. finExec=encerra();
  91. break;
  92.  
  93. default:
  94. System.out.println("\tComando Inválido!"); ;
  95. break;
  96. }
  97. }
  98. }
  99.  
  100. // OPCAO1 - Entrada dos dados a um a um
  101. public static boolean LeMatriz(double m[][][]) {
  102.  
  103. Scanner in = new Scanner(System.in);
  104.  
  105. for (int i = 0; i < blocos; i++) {
  106. for (int j = 0; j < andares; j++) {
  107. for (int k = 0; k < unidades; k++) {
  108. System.out.print("\n\tBloco: " + (i + 1) + ", Andar: " + (j + 1) + ", Unidade: " + (j + 1) + "" + 0 + (k + 1) + ": ");
  109. m[i][j][k] = in.nextDouble();
  110. }
  111. }
  112. }
  113. return true;
  114. }
  115.  
  116.  
  117. // OPCAO2 - Analise
  118.  
  119. public static void analise(double condominio[][][], boolean omiteContinua, String... caminho){
  120.  
  121. double[][] somaAndar = new double[blocos][andares];
  122. double[] somaBloco = new double[blocos];
  123. int[][] idUniMaiorConsumoAndar = new int[blocos][andares];
  124. int[] idUniMaiorConsumoBloco = new int[blocos];
  125. int[] idAndarMaiorConsumoMedio = new int[blocos];
  126.  
  127.  
  128. double mediaBloco[] = new double[blocos];
  129. double mediaAndar[][] = new double[blocos][andares];
  130.  
  131. double somaDasMedias=0;
  132.  
  133. double porcenBlocoMaiorMedia;
  134. double porcenAndarCond;
  135. double porcenAndarBloco;
  136.  
  137. double maior = 0;
  138. double totalBlocos = 0;
  139. Scanner in = new Scanner(System.in);
  140.  
  141. int idDoMaior=0;
  142.  
  143. double maiorglobal = 0;
  144. int maioru = 0;
  145. int maiora = 0;
  146. int maiorb = 0;
  147.  
  148. maioresConsumos(condominio, idUniMaiorConsumoAndar, idUniMaiorConsumoBloco, idAndarMaiorConsumoMedio, somaAndar);
  149.  
  150. System.out.println("\t******************************************************");
  151. System.out.println("\t* Análise do Consumo Diário *");
  152. System.out.println("\t******************************************************");
  153.  
  154. System.out.println("\tMédia do Consumo diário e total por bloco: ");
  155. for (int l = 0; l < blocos; l++) {
  156.  
  157. somaBloco[l] = soma(condominio, 'b', l);
  158.  
  159. mediaBloco[l] = somaBloco[l]/(andares*unidades);
  160. somaDasMedias=somaDasMedias + mediaBloco[l];
  161.  
  162. System.out.println("\tBloco " + (l + 1) + ": " + arredonda(mediaBloco[l]) + " litros");
  163. System.out.println("\tTotal do Bloco " + (l + 1) + ": " + arredonda(somaBloco[l]) + " litros\n");
  164. totalBlocos = totalBlocos + somaBloco[l];
  165. if (maior < mediaBloco[l]) {
  166. maior = mediaBloco[l];
  167. idDoMaior = l;
  168.  
  169. }
  170. }
  171.  
  172. porcenBlocoMaiorMedia = arredonda(100.0*mediaBloco[idDoMaior]/somaDasMedias);
  173.  
  174. System.out.println("\n\tConsumo total: " + somaBloco[0] + "L + " + somaBloco[1] + "L + " + somaBloco[2] + "L = " + totalBlocos + "L");
  175. System.out.println("\n\tO Bloco " + (idDoMaior+1) + " obteve o maior consumo médio diário (" + arredonda(porcenBlocoMaiorMedia) +"% do total).");
  176.  
  177. if(omiteContinua==false)
  178. continua();
  179.  
  180. maior = 0;
  181. for(int i=0; i<blocos; i++){
  182. System.out.println("\tBloco " + (i + 1) + " : Média de consumo e unidade com maior consumo por Andar");
  183. for(int j=0; j<andares; j++){
  184.  
  185. somaAndar[i][j]=soma(condominio, 'a', i, j);
  186.  
  187. mediaAndar[i][j]=somaAndar[i][j]/unidades;
  188.  
  189.  
  190. System.out.println("\r\t" +(j + 1) + "º Andar:"+arredonda(mediaAndar[i][j])+" litros (unidade "+(j + 1)+"0"+(idUniMaiorConsumoAndar[i][j] + 1)+" teve maior consumo)");
  191.  
  192. for(int k=0 ; k < unidades ; k++){
  193. if( condominio[i][j][k] > maiorglobal){
  194. maiorglobal = condominio[i][j][k];
  195.  
  196. maioru = k+1;
  197. maiora = j+1;
  198. maiorb = i+1;
  199. }
  200. }
  201. }
  202.  
  203. porcenAndarCond = arredonda(100.0*(somaAndar[i][idAndarMaiorConsumoMedio[i]]/totalBlocos));
  204.  
  205. System.out.println("\n\tO " + (idAndarMaiorConsumoMedio[i]+1) + "º andar obteve o maior consumo médio diário");
  206.  
  207. System.out.println("\t" + porcenAndarCond + " % em relação ao Condomínio");
  208.  
  209. porcenAndarBloco=arredonda((somaAndar[i][idAndarMaiorConsumoMedio[i]]/somaBloco[i])*100);
  210.  
  211. System.out.println("\t" + porcenAndarBloco + " % em relação ao bloco " + (i+1) + ".");
  212.  
  213. System.out.println("\tA unidade " + idUniMaiorConsumoBloco[i] + " obteve o maior consumo do bloco " + (i+1));
  214.  
  215. if(omiteContinua==false)
  216. continua();
  217.  
  218. }
  219. // maior consumo de todas as unidades
  220. System.out.println("\tA unidade "+maiora+"0"+maioru+ " do "+maiora+"º Andar do Bloco "+maiorb+" teve o maior consumo do condominio");
  221. System.out.println("\n\t--------------------------------------------------------------");
  222.  
  223.  
  224. }
  225.  
  226. // OPCAO3 - ENTRADA DE ARQUIVO
  227. public static boolean leArquivo(String caminho, double condominio[][][]){
  228.  
  229. int contador=0;
  230. int totalDeUnidades = unidades*andares*blocos;
  231. try{
  232.  
  233. Scanner in = new Scanner(new FileReader(caminho)).useDelimiter(";|\n");
  234.  
  235. while(in.hasNext()){
  236. String campo1 = in.next();
  237. String campo2 = in.next();
  238. String campo3 = in.next();
  239. String campo4 = in.next();
  240.  
  241. int bloco = Integer.parseInt(campo1) - 1 ;
  242. int andar = Integer.parseInt(campo2) - 1 ;
  243. int uni = Integer.parseInt(campo3) - 1 ;
  244. double consumo = Double.parseDouble(campo4);
  245.  
  246. int tratamento=(uni/100);
  247. uni = uni - tratamento*100;
  248. condominio[bloco][andar][uni] = consumo;
  249.  
  250. contador++;
  251. }
  252.  
  253. if(contador < (totalDeUnidades)){
  254.  
  255. System.out.println("\tATENÇÃO! Existe(m) " + (totalDeUnidades - contador) + " unidade(s) sem dados de consumo. Nesta versão do programa podem ocorrer erros nessas condições...\n");
  256. }
  257.  
  258. return true;
  259.  
  260. } catch (IOException ioe){
  261. System.out.println("\tErro ao ler o arquivo: " + ioe.getMessage());
  262. }
  263.  
  264. return false;
  265.  
  266. }
  267.  
  268. public static void gerarTXT(double cond[][][], boolean dadosInseridos, boolean omiteContinua){
  269.  
  270. try{
  271. if(dadosInseridos==true){
  272.  
  273. Scanner entrada = new Scanner(System.in);
  274. String nome;
  275. String local;
  276. String relatorio;
  277.  
  278. System.out.print("\tEscolha um nome para o arquivo: ");
  279. nome = entrada.nextLine();
  280.  
  281. System.out.print("\tEscolha um local para salvar o arquivo - formato [C:\\Users\\Nome Usuario\\Desktop\\ ]: ");
  282. local = entrada.nextLine();
  283.  
  284. nome = local + nome + ".txt";
  285. System.out.print("\tArquivo gerado : " + nome);
  286. PrintStream stdout = System.out;
  287. PrintStream out = new PrintStream(new FileOutputStream(nome));
  288.  
  289. System.setOut(out);
  290. omiteContinua=true;
  291. analise(cond, omiteContinua);
  292. System.setOut(stdout);
  293. }
  294. else{
  295. System.out.println("\tNão é possível gerar o relatório. Dados de consumo não inseridos!\n");
  296. continua();
  297. }
  298. } catch (IOException geratxt){
  299. System.out.println("\tErro ao escrever o arquivo: " + geratxt.getMessage());
  300. }
  301. }
  302.  
  303.  
  304. /****************************************/
  305. /* */
  306. /* FUNÇÕES AUXILIARES */
  307. /* */
  308. /****************************************/
  309.  
  310.  
  311. public static boolean encerra(){
  312.  
  313. Scanner in = new Scanner(System.in);
  314. char sairNouS;
  315. boolean saida;
  316.  
  317. System.out.println("\tDeseja abandonar o sistema? [s]im ou [n]ao");
  318. System.out.print("\tResposta ==> ");
  319. sairNouS = in.next().charAt(0);
  320.  
  321. switch(sairNouS){
  322.  
  323. case 'n':
  324. saida = false;
  325. break;
  326.  
  327. case 's':
  328. System.out.println("\tObrigado por usar o sistema e poupar agua.");
  329. System.out.println("\tAinda precisa chover muito para sair do volume morto e cada gota conta.\n");
  330. saida = true;
  331. break;
  332.  
  333. default:
  334. System.out.println(sairNouS);
  335. System.out.println("\tComando inválido!");
  336. encerra();
  337. saida = false;
  338. break;
  339. }
  340.  
  341. return saida;
  342. }
  343.  
  344. public static void continua(){
  345. System.out.println("\t--------------------------------------------------------------");
  346. System.out.println("\tPressione enter para continua.");
  347. System.out.println("\t--------------------------------------------------------------");
  348. try{
  349. System.in.read();
  350. } catch(IOException error) {
  351. System.out.println("\tErro. Pressione enter para continuar.");
  352. System.out.println("\t--------------------------------------------------------------");
  353. }
  354. }
  355.  
  356.  
  357. public static void maioresConsumos (double m[][][], int idUniComMaiorConsumoAndar[][], int idUniComMaiorConsumoBloco[], int idAndarComMaiorConsumoMedio[], double somaDoAndar[][]){
  358. double maiorConsumoUniAndar=0;
  359. double maiorConsumoMedioAndar=0;
  360. double maiorConsumoUniBloco=0;
  361.  
  362. for (int i = 0; i < blocos; i++) {
  363. maiorConsumoMedioAndar=0;
  364. for (int j = 0; j < andares; j++) {
  365. maiorConsumoUniAndar=0;
  366. for (int k = 0; k < unidades; k++) {
  367.  
  368. if(maiorConsumoUniAndar < m[i][j][k]){
  369. maiorConsumoUniAndar = m[i][j][k];
  370. idUniComMaiorConsumoAndar[i][j] = k;
  371. }
  372.  
  373. if(maiorConsumoUniBloco < m[i][j][k]){
  374. maiorConsumoUniBloco = m[i][j][k];
  375. idUniComMaiorConsumoBloco[i] = ((j+1)*100 + (k + 1));
  376. }
  377.  
  378. somaDoAndar[i][j] = soma(m, 'a', i, j);
  379.  
  380. if(maiorConsumoMedioAndar < (somaDoAndar[i][j]/unidades)){
  381. maiorConsumoMedioAndar = (somaDoAndar[i][j]/unidades);
  382. idAndarComMaiorConsumoMedio[i]=j;
  383. }
  384. }
  385. }
  386. maiorConsumoUniBloco=0;
  387. }
  388. }
  389.  
  390.  
  391. public static double mediaDoBloco(double baseDeDados[][][], int IdBloco) {
  392. double soma = 0;
  393. double contador = 0;
  394. for (int i = 0; i < andares; i++) {
  395. for (int j = 0; j < unidades; j++) {
  396.  
  397. soma = soma + baseDeDados[IdBloco][i][j];
  398. contador++;
  399. }
  400. }
  401. return (soma / contador);
  402.  
  403. }
  404.  
  405. public static double soma(double m[][][], char escolha, Integer... id){
  406. double somaAndar=0;
  407. double somaBloco=0;
  408. double somaCond=0;
  409.  
  410. for (int i=0; i<blocos; i++) {
  411.  
  412. somaBloco = 0;
  413.  
  414. if( escolha=='b' ) //i = idBloco;
  415. i=id[0];
  416.  
  417. for (int j=0; j<andares; j++) {
  418. somaAndar=0;
  419.  
  420. if(escolha=='a') //j=idAndar;
  421. j=id[1];
  422.  
  423. for (int k=0; k<unidades; k++) {
  424. somaAndar = somaAndar + m[i][j][k];
  425. }
  426. if( escolha=='a') return somaAndar;
  427.  
  428. somaBloco = somaBloco + somaAndar;
  429. }
  430. if( escolha=='b') return somaBloco;
  431. somaCond = somaCond + somaBloco;
  432. }
  433.  
  434. return somaCond;
  435.  
  436. }
  437.  
  438. public static double arredonda(double entrada){
  439. double rounded;
  440. double resto;
  441.  
  442. entrada=entrada*1000;
  443. resto=entrada%5;
  444.  
  445. entrada=(entrada - resto);
  446.  
  447. if( entrada%10 == 5 ){
  448. rounded=(entrada+5)/1000;
  449. }
  450. else{
  451. rounded=(entrada)/1000;
  452. }
  453. return rounded;
  454. }
  455. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement