Isagpm Posted June 5, 2015 at 10:33 AM Report #584325 Posted June 5, 2015 at 10:33 AM Pretende-se realizar um programa para gerir a avaliação de uma turma (Classes Turma, Disciplina, Aluno) e que guarde as informações (novas ou modificadas/editadas/atualizadas) num ficheiro, para as ler quando necessário. Pede-se sugestões para realizar este código. Agradeço desde já a quem participar. Isabel
apocsantos Posted June 5, 2015 at 01:15 PM Report #584343 Posted June 5, 2015 at 01:15 PM Boa tarde, Assim de memória, uma turma, contem (identificação da turma,tipo string; ano, tipo inteiro; alunos, arraylist de alunos). Uma disciplina, contem (identificador de disciplina,do tipo string, ano; tipo inteiro; arraylist de turmas). Um aluno contem (numero, inteiro; nome, string; morada, string; contacto, string). A isto vai acrescer uma classe para ler dados de ficheiro, uma classe para gravar dados no ficheiro e o menu, que pode ficar na classe main. Agora é criar as classes, com os respectivos construtores, e o restante programa. Cordiais cumprimentos, Apocsantos 1 Report "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"
Isagpm Posted June 8, 2015 at 11:18 AM Author Report #584473 Posted June 8, 2015 at 11:18 AM Agradecida pela dica Apocsantos
apocsantos Posted June 8, 2015 at 01:30 PM Report #584484 Posted June 8, 2015 at 01:30 PM Boa tarde, Cá ficam alguns exemplos que poderão ajudar. public static String printMenu() { String s = ""; System.out.println("menu de opções"); System.out.println("1 - Ler do ficheiro"); System.out.println("2 - Gravar"); System.out.println("3 - Sair"); return (s); } printMenu(); String nl = System.getProperty("line.separator"); System.out.println("Insira uma opção"); Scanner leInput = new Scanner(System.in); String opcao = ""; opcao = leInput.nextLine(); switch (opcao) { case "1": break; case "2": break; case "3": try { System.out.println("Saindo" + nl); Thread.sleep(1000); } catch (Exception e) { } System.exit(0); break; default: System.out.println("Opcao invalida!" + nl + printMenu()); break; } /** * fecha e termina o scanner */ leInput.close(); } //Kazaar!!! Cordiais cumprimentos, Apocsantos "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"
Isagpm Posted June 8, 2015 at 02:46 PM Author Report #584497 Posted June 8, 2015 at 02:46 PM Muito agradecida, vou experimentar os seus exemplos. Quem me dera estruturar o código como você, vou fazer trabalhar para isso. Isabel
apocsantos Posted June 8, 2015 at 04:14 PM Report #584505 Posted June 8, 2015 at 04:14 PM Boa tarde, Não é complicado. É uma questão de se aprender, e torna-se fácil! Mas como tudo, antes de ser "fácil", é "difícil". Fica mais uma ajudinha, pode ser que ajude a organizar e estruturar o código: Classe Aluno: /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package turmas; /** * * @author Coffee */ public class aluno { private int numero; private String nome; private String morada; private int nif; private int anoCurricular; /** * * @param numero * @param nome * @param morada * @param nif * @param anoCurricular */ public aluno(int numero, String nome, String morada, int nif, int anoCurricular) { this.numero = numero; this.nome = nome; this.morada=morada; this.nif = nif; this.anoCurricular = anoCurricular; } //metodos de acesso public int getNumero () { return numero; } public String getNome () { return nome; } public String getMorada () { return morada; } public int getNif () { return nif; } public int getAnoCurricular () { return anoCurricular; } //metodos de mutação public void setNumero (int num) { try { this.numero = num; } catch (Exception e) {System.out.println("ocorreu uma excepção, " + e);} } public void setNome (String novoNome) { try { this.nome = novoNome; } catch (Exception e) {System.out.println("ocorreu uma excepção, " + e);} } public void setMorada (String novaMorada) { try { this.morada = novaMorada; } catch (Exception e) {System.out.println("ocorreu uma excepção, " + e);} } public void setNif (int contrib) { try { this.nif = contrib; } catch (Exception e) {System.out.println("ocorreu uma excepção, " + e);} } public void setAnoCurricular (int novoAno) { try { this.anoCurricular = novoAno; } catch (Exception e) {System.out.println("ocorreu uma excepção, " + e);} } } Classe Disciplina /** * * @author coffee */ public class disciplina { private int numeroDisciplina; private int anoCurricular; private String nomeDisciplina; public disciplina(int numeroDisciplina, int anoCurricular,String nomeDisciplina) { this.numeroDisciplina = numeroDisciplina; this.anoCurricular = anoCurricular; this.nomeDisciplina = nomeDisciplina; } } //faltam metodos de acesso e mutação Classe turma package turmas; import java.util.ArrayList; /** * * @author coffee */ public class turma { private String numeroTurma; private int anoCurricular; private ArrayList<aluno> alunosTurma; public turma(String numeroTurma, int anoCurricular, ArrayList<aluno> alunosTurma) { this.numeroTurma = numeroTurma; this.anoCurricular = anoCurricular; this.alunosTurma = alunosTurma; } } //e lá se foi o coffee break! Cordiais cumprimentos, Apocsantos "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"
Isagpm Posted June 10, 2015 at 03:26 AM Author Report #584608 Posted June 10, 2015 at 03:26 AM Muito agradecida Apocsantos, Mas agora ainda estou mais confusa. Foi uma grande ajuda na elaboração das classes. Mas confesso que não sei se vou conseguir por tudo a funcionar direitinho. Vou experimentar. Agradecida Isabel
Isagpm Posted June 10, 2015 at 04:09 AM Author Report #584609 Posted June 10, 2015 at 04:09 AM (edited) Estive a fazer o código das classes dentro de um pacote e correu tudo bem. Relativamente à classe printMenu, esta deve ser fora do pacote? Mas sendo fora ou dentro dá erros. Será que me pode esclarecer melhor? Dá erros até à linha 15 public static String printMenu() { String s = ""; System.out.println("menu de opções"); System.out.println("1 - Ler do ficheiro"); System.out.println("2 - Gravar"); System.out.println("3 - Sair"); return (s); } printMenu(); String nl = System.getProperty("line.separator"); System.out.println("Insira uma opção"); Scanner leInput = new Scanner(System.in); String opcao = ""; Dá erros até aqui opcao = leInput.nextLine(); switch (opcao) { case "1": break; case "2": break; case "3": try { System.out.println("Saindo" + nl); Thread.sleep(1000); } catch (Exception e) { } System.exit(0); break; default: System.out.println("Opcao invalida!" + nl + printMenu()); break; } /** * fecha e termina o scanner */ leInput.close(); } Muito agradecida por toda a ajuda k me tem prestado, incentivando-me a não parar en quem sabe um dia ser uma boa programadora. Agradecida, Isabel Ainda falta a classe para ler dados de ficheiro, uma classe para gravar dados no ficheiro e o menu no meu entender é o código que disponibilizou em public static String printMenu() {, certo?. Ou já estou muito confusa? Agradecida, Isabel Edited June 16, 2015 at 02:26 PM by apocsantos geshi
apocsantos Posted June 10, 2015 at 12:36 PM Report #584616 Posted June 10, 2015 at 12:36 PM Boa tarde, O menu escrevi-o na classe principal da "aplicação", não criei uma classe expecifica para ele, uma vez que tudo o que ele irá fazer, poderá ser feito na classe principal package javaapplication1; /** * imports de bibliotecas */ import java.io.*; import java.util.Scanner; public class JavaApplication1 { public static void main(String[] args) { // TODO code application logic here /** * Funcção main onde executa a função de impressão do menu lê do * utilizador uma opção executa as funções correspondentes à opção * seleccionada devolve o output correspondente */ printMenu(); String nl = System.getProperty("line.separator"); System.out.println("Insira uma opção"); Scanner leInput = new Scanner(System.in); String opcao = ""; opcao = leInput.nextLine(); switch (opcao) { /** * código correspontende à opção 1.*/ case "1": System.out.println("ILer do ficheiro"); break; /** * código correspontende à opção 2. */ case "2": System.out.println("Gravar"); String filenameread = leInput.nextLine(); break; case "3": /** * é executado o código correspondente a sair da app, com um * delay pequeno */ try { System.out.println("Saindo" + nl); Thread.sleep(1000); } catch (Exception e) { } System.exit(0); break; /** * opcao por defeito imprime a informação e imprime o menu novamente */ default: System.out.println("Opcao invalida!" + nl + printMenu()); break; } /** * fecha e termina o scanner */ leInput.close(); } public static String printMenu() { String s = ""; System.out.println("menu de opções"); System.out.println("1 - Lê Ficheiro"); System.out.println("2 - Grava ficheiro"); System.out.println("3 - Sair"); return (s); } } Ainda estão a faltar as classes para ler e escrever ficheiros. Neste caso a meu ver, faria mais sentido escrever ficheiros de texto em formato csv, para facilitar as operações de leitura e escrita. Para se escrever tudo num só ficheiro, convém entender a estrutura dos dados. Algo tipo "Uma turma tem alunos, os alunos têm disciplinas", o que em CSV (separado por ponto e virgula) seria algo parecido com o seguinte: 7A;7;1;Dennis;somewhere;1111111111;3;7;Fisica; 7A;7;2;Ghost;ridder st;100000000;3;7;Fisica; Isto para exemplo com dois alunos, a turma 7A, do 7º ano, cada um com o respectivo nome, morada, contribuinte, inscritos na disciplina numero 3, do 7 ano curricular, cujo nome é Física. Existe forma mais eficiente de armazenar os dados, por exemplo gravando primeiro os dados de turmas e disciplinas e posteriormente os dos alunos, mas esta parece-me até certo ponto mais fácil de entender. Quando chegar a hora de gravar no ficheiro, basicamente será gravada linha a linha, iterando todas as disciplinas e gravando os dados de cada aluno, de cada disciplina e decada ano, (da direita para a esquerda). Espero ter ajudado! Cordiais cumprimentos, Apocsantos "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"
Isagpm Posted June 10, 2015 at 12:46 PM Author Report #584617 Posted June 10, 2015 at 12:46 PM Agradecida, Vou tentar perceber melhor isto. Isabel
apocsantos Posted June 10, 2015 at 12:55 PM Report #584619 Posted June 10, 2015 at 12:55 PM Boa tarde, Os erros que estava a dar, creio que fossem por falta do import das bibliotecas java.io e java.util.scanner. As funções para leitura e gravação de ficheiro, não creio que sejam complexas de excrever. O importante será mesmo perceber o código! Entendendo o código, está "mais de meio caminho andado", para se programar bem. Para ler e gravar os ficheiros, vai ser necessário usar streamreader e streamwriter que serão escritas literalmente streams de dados. Uma vez que esteja tudo a funcionar em memória, implementar a leitura e gravação é o mais fácil e simples! Cordiais cumprimentos, Apocsantos "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"
Isagpm Posted June 11, 2015 at 12:21 PM Author Report #584654 Posted June 11, 2015 at 12:21 PM Olá, Já não dá nenhuns erros, agora sinto-me um pouco perdida mas grata por toda a ajuda. Não estou a conseguir completar o seu código, precisava de muito tempo para perceber bem. Fiz uma pequena formação e consegui acompanhar os vídeos e desenvolver o código que era feito nos vídeos da formação. Para conseguir completar o código que me enviou preciso retomar alguns vídeos novamente e o tempo para terminar o trabalho não me permite fazer isso. De certeza que com mais tempo vou conseguir desenvolver isto e muito mais mas só lá mais para a frente, preciso rever todas as aulas e começar a criar sozinha. Java não é fácil e precisa mesmo de muito treino ... é o que vou fazer daqui para a frente. Será que me consegue ajudar no que falta? Suas palavras da mensagem anterior: Ainda estão a faltar as classes para ler e escrever ficheiros. Neste caso a meu ver, faria mais sentido escrever ficheiros de texto em formato csv, para facilitar as operações de leitura e escrita. Para se escrever tudo num só ficheiro, convém entender a estrutura dos dados. Algo tipo "Uma turma tem alunos, os alunos têm disciplinas", o que em CSV (separado por ponto e virgula) seria algo parecido com o seguinte: Código : 7A;7;1;Dennis;somewhere;1111111111;3;7;Fisica; 7A;7;2;Ghost;ridder st;100000000;3;7;Fisica; Isto para exemplo com dois alunos, a turma 7A, do 7º ano, cada um com o respectivo nome, morada, contribuinte, inscritos na disciplina numero 3, do 7 ano curricular, cujo nome é Física. Existe forma mais eficiente de armazenar os dados, por exemplo gravando primeiro os dados de turmas e disciplinas e posteriormente os dos alunos, mas esta parece-me até certo ponto mais fácil de entender. Agradeço toda a ajuda Apocsantos Até agora todo o código que disponibilizou está a funcionar. Isabel
Isagpm Posted June 15, 2015 at 11:45 AM Author Report #584828 Posted June 15, 2015 at 11:45 AM Pois já tive a tentar fazer a classe ler mas não estou a conseguir. Agradeço ajuda Isabel
Isagpm Posted June 15, 2015 at 12:02 PM Author Report #584829 Posted June 15, 2015 at 12:02 PM ApocSantos, preciso da sua ajuda para fazer a classe ler e escrever. Agradecida
Isagpm Posted June 15, 2015 at 01:26 PM Author Report #584832 Posted June 15, 2015 at 01:26 PM import java.io.*; public class Ler { public static String umaString(){ String s = ""; try{ BufferedReader in = new BufferedReader(new InputStreamReader (System.in),1); s=in.readLine(); } catch (IOException e) { System.out.println("Erro ao ler fluxo de entrada."); } return s; } public static int umInt(){ while (true) { try { return Integer.valueOf(umaString().trim()).intValue(); } catch (Exception e) { System.out.println("Escreva um inteiro válido!!!"); } } } public static double umDouble(){ while (true) { try { return Double.valueOf(umaString().trim()).doubleValue(); } catch (Exception e) { System.out.println("Escreva um Double válido!!!"); } } } public static float umFloat(){ while (true) { try { return Float.valueOf(umaString().trim()).floatValue(); } catch (Exception e) { System.out.println("Escreva um float válido!!!"); } } } public static boolean umBoolean(){ while(true){ try{ String s = umaString().trim().toLowerCase(); if(s.equals("true")||s.equals("false")) return Boolean.valueOf(s).booleanValue(); else throw new IllegalArgumentException(""); } catch(IllegalArgumentException e){ System.out.println("Não é um 'boolean' válido!!!"); } } } public static char umChar(){ while(true){ try{ return umaString().charAt(0); } catch(Exception e){ System.out.println("Não é um 'char' válido!!!"); } } } }
Isagpm Posted June 16, 2015 at 10:44 AM Author Report #584872 Posted June 16, 2015 at 10:44 AM (edited) package stack; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class LeiaCVS { public static void main(String[] args) { LeiaCVS obj = new LeiaCVS(); obj.run(); } public void run() { String arquivoCSV = "arquivo.csv"; BufferedReader br = null; String linha = ""; String csvDivisor = ","; try { br = new BufferedReader(new FileReader(arquivoCSV)); while ((linha = br.readLine()) != null) { String[] pais = linha.split(csvDivisor); System.out.println("País [code= " + pais[pais.length-2] + " , name=" + pais[pais.length-1] + "]"); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } } } Edited June 16, 2015 at 02:24 PM by apocsantos geshi
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now