Jump to content

Recommended Posts

Posted

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

Posted

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

  • Vote 1

"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"

Posted

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"

Posted

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"

Posted

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

Posted (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 by apocsantos
geshi
Posted

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"

Posted

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"

Posted

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

Posted
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!!!");
								}
					}
		}

}
Posted (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 by apocsantos
geshi

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.