Duvidas em gravar 3 utilizadores para um ficheiro e chamar o menu relacionado com cada um

5 respostas
X

Bom dia

Estou a desenvolver um projeto para a escola em java atraves do programa bluej para a minha escola mas as minhas dificuldades em java sao tantas e as duvidas em programas também...

A minha duvida é a seguinte, atraves do codigo que vou postar de seguida estou a criar o registo do docente ou do aluno e do funcionario que penso estar bem e penso estar a gravar (estou a gravar para ficheiros binarios), o meu login e o registo do utilizador esta dentro desta classe, so que o login não me chama o menu correspondente a cada um, quando crio um utilizador se criar dois utilizadores com a mesma pass diz que ja existe logo penso que esta a gravar mas quando faço o login n m salta para o menu desse utilizador

import java.io.*;
import java.util.*;

public class GereEscola implements Serializable 
{
   String user;
   Menu m = new Menu();

   // login
   public void login(Hashtable<String,String> listaUsers) throws IOException
   {
       String password;
       int i;
       
       Docente doc = new Docente();
       Funcionario func = new Funcionario();
       Aluno al = new Aluno();

       System.out.println("****************LOGIN***************");
       System.out.println("Username: ");
       user = Leitura.LeString();
       System.out.println("Password: ");
       password = Leitura.LeString();
       System.out.println("************************************"); 
         
       for(i=0;i<listaUsers.size();i++){
           //tentei desta forma
            if(listaUsers.containsKey(user) && listaUsers.containsValue(al) && password==al.getPass()){
                m.menuAluno();}
                else if (user==doc.getUser() && password==doc.getPass()){ // e desta forma
                    m.menuDocente();}
                    else if (user==func.getUser() && password==func.getPass()) {
                        m.menuFuncionario();}
                            else {
                                System.out.println("user ou password inválida");
                                m.menuInicio(listaUsers);}
       }
       }
   
   // registo de utilizadores
   public void registo_docente(Hashtable<String,Docente> listaUsers) throws IOException
   {   
       String pass, nome, data_nasc, disciplina;
       int BI, NIF;
       
       System.out.println("************* REGISTO DE DOCENTE **************");
       System.out.println("NOME: ");
       nome=Leitura.LeString(); 
       System.out.println("DISCIPLINA: ");
       disciplina=Leitura.LeString();  
       System.out.println("DATA DE NASCIMENTO: ");
       data_nasc=Leitura.LeString();
       System.out.println("BI: ");
       BI=Leitura.LeInt();
       System.out.println("NIF: ");       
       NIF=Leitura.LeInt();
       System.out.println("USERNAME: ");
       user= Leitura.LeString();
       System.out.println("PASSWORD: ");
       pass= Leitura.LeString();
            
       Docente doc = new Docente(nome,disciplina,data_nasc,BI,NIF,user,pass);
       String chave = doc.getUser();
           
       if(listaUsers.get(chave) == null){
           listaUsers.put(chave, doc);
           Ficheiro f = new Ficheiro();
           f.GravaUtilizadoresFicheiro(listaUsers);
           System.out.println("Docente registado");
           m.menuInicio(listaUsers);
       }else{
           System.out.println("O utilizador com o username "+user+" já existe");
           m.menuInicio(listaUsers);
       }
   }
   
   public void registo_aluno(Hashtable<String,Aluno> listaUsers) throws IOException
   {   
       String pass, nome, data_nasc;
       int BI, NIF, numero;
       
       System.out.println("************* REGISTO DE ALUNO **************");
       System.out.println("NOME: ");
       nome= Leitura.LeString();
       System.out.println("NUMERO: ");
       numero=Leitura.LeInt(); 
       System.out.println("DATA DE NASCIMENTO: ");
       data_nasc=Leitura.LeString();
       System.out.println("BI: ");
       BI=Leitura.LeInt();
       System.out.println("NIF: ");  
       NIF=Leitura.LeInt();
       System.out.println("USERNAME: ");
       user=Leitura.LeString();
       System.out.println("PASSWORD: ");
       pass=Leitura.LeString();
            
       Aluno al = new Aluno(nome,numero,data_nasc,BI,NIF,user,pass);
       String chave = al.getUser();
           
       if(listaUsers.get(chave) == null){
           listaUsers.put(chave, al);
           Ficheiro f = new Ficheiro();
           f.GravaUtilizadoresFicheiro(listaUsers);
           System.out.println("Aluno registado");
           m.menuInicio(listaUsers);
       }else{
           System.out.println("O utilizador com o username "+user+" já existe");
           m.menuInicio(listaUsers);
       }
   }
   
   public void registo_func(Hashtable<String,Funcionario> listaUsers) throws IOException
   {   
       String pass, nome, data_nasc;
       int BI, NIF;
       
       System.out.println("************* REGISTO DE FUNCIONARIO **************");
       System.out.println("NOME: ");
       nome=Leitura.LeString();
       System.out.println("DATA DE NASCIMENTO: ");
       data_nasc=Leitura.LeString();
       System.out.println("BI: ");
       BI=Leitura.LeInt();
       System.out.println("NIF: ");       
       NIF=Leitura.LeInt();
       System.out.println("USERNAME: ");
       user=Leitura.LeString();
       System.out.println("PASSWORD: ");
       pass=Leitura.LeString();
            
       Funcionario func = new Funcionario(nome, data_nasc, BI, NIF, user, pass);
       String chave = func.getUser();
           
       if(listaUsers.get(chave) == null){
           listaUsers.put(chave, func);
           Ficheiro f = new Ficheiro();
           f.GravaUtilizadoresFicheiro(listaUsers);
           System.out.println("Funcionario registado");
           m.menuInicio(listaUsers);
       }else{
           System.out.println("O utilizador com o username "+user+" já existe");

       }
   }

Classe do menu esta desta forma:

import java.io.*;
import java.util.*;
import java.text.ParseException;

public class Menu 
{
    private int x;

    public void menuInicio(Hashtable listaUsers) throws IOException
    {
        GereEscola gere = new GereEscola();
        
        System.out.println("*************SISTEMA DE GESTAO ESCOLAR************");
        System.out.println("*********Escolha uma das seguintes opções*********");
        System.out.println("*********   1 - LOGIN                    *********");
        System.out.println("*********   2 - REGISTO                  *********");
        System.out.println("*********   3 - SAIR                     *********");
        System.out.println("*                                                *");
        System.out.println("**************************************************");
        x=Leitura.LeInt();
        switch (x) {
        case 1:
            gere.login(listaUsers);
            break;
        case 2:
            menuRegisto(listaUsers);
            break;
        case 3:
            System.exit(0);
            break;
            default:
            System.out.println("Esta opcao nao valida!!!");
        }
    }
    
    public void menuRegisto(Hashtable listaUsers) throws IOException
    {
        GereEscola gere = new GereEscola();
        
        System.out.println("*************REGISTO DE UTILIZADORES**************");
        System.out.println("*********Escolha uma das seguintes opções*********");
        System.out.println("*********   1 - Registo de Docente       *********");
        System.out.println("*********   2 - Registo de Aluno         *********");
        System.out.println("*********   3 - Registo de Funcionario   *********");
        System.out.println("*********   4 - Voltar                   *********");
        System.out.println("*                                                *");
        System.out.println("**************************************************");
        x=Leitura.LeInt();
        switch (x) {
        case 1:
            gere.registo_docente(listaUsers);
            break;
        case 2:
            gere.registo_aluno(listaUsers);
            break;
        case 3:
            gere.registo_func(listaUsers);
            break;
        case 4:
            menuInicio(listaUsers);
            break;
            default:
            System.out.println("Esta opcao nao valida!!!");
        }
    }
}

a classe do ficheiro esta assim

import java.io.*;
import java.util.*;


public class Ficheiro 
{
    // utilizadores
    public void GravaUtilizadoresFicheiro(Hashtable listaUsers) throws IOException{
        
        try {
           
        File file = new File("users.dat");
        
        if (!file.exists()) {
                //cria um ficheiro (vazio)
                file.createNewFile();
        }
        
        FileOutputStream os = new FileOutputStream(new File("users.dat"));
        ObjectOutputStream oos = new ObjectOutputStream(os);
        
        oos.writeObject(listaUsers);
        oos.flush(); 
        oos.close();
        
       } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        
    }
    
    public Hashtable LeUtilizadores(Hashtable listaUsers) throws FileNotFoundException, IOException, ClassNotFoundException{

        File f = new File("users.dat");
      
        if(f.exists()){
            FileInputStream is = new FileInputStream(f);
            ObjectInputStream ois = new ObjectInputStream(is);
        
            listaUsers = (Hashtable) ois.readObject();
        
            ois.close();
            is.close();
        }
        else
            System.out.println("ficheiro nao existe");
        return listaUsers;
        
    }
a classe do main esta desta forma:
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Hashtable;

public class Escola
{
  public static void main(String[] args) throws IOException, FileNotFoundException, ClassNotFoundException {

    //criação de objecto
        
        Ficheiro f = new Ficheiro();
        Menu m = new Menu();
                
    //criação de Hashtables    

        Hashtable listaUsers = new Hashtable(); 
              
    //leitura dos ficheiros para as hashtables
                
        listaUsers = f.LeUtilizadores(listaUsers);
      
    //entrada no menu
        m.menuInicio(listaUsers);     
  }

este programa ainda m da um warning que tb n entendo que é o seguinte: "warning from last compilation

c:\users\projeto\menu.java uses unchecked or unsafe operations. Recompile with -Xint:unchecked for details.". O que posso fazer para evitar este warnig? Estou a gravar bem os utilizadores? Porque o metodo login não esta a chamar o menu de cada utilizador?

Agradeco toda a ajuda possivel que isto esta mto complicado e a pressão e o desespero cada vez maior

Obrigado e cumprimentos ao pessoal

5 Respostas

R

está usando eclipse? não tem algum lugar do seu código que está em amarelo não?

coloca o código que voce postou entre as tags CODE pra ficar formatado e melhor de visualizar…

X

já está, desculpa so li essa parte no forum depois de ter postado :s, mas ja meti…

uso o bluej…

X

se for preciso enviar em anexo o codigo k tenho feito n tenho problema em enviar, sou um nabo a programação so keria mm acabar o curso :frowning:

R

que faz o método m.menuAluno() ?

no método login voce não passa o usuário que está logado… apenas diz se é docente ou aluno… talvez seja aí que está a resposta.

um debug resolveria tudo :stuck_out_tongue:

X

o metodo m.menuAluno() vai chamar o menu do aluno a classe menu caso a autenticação seja do aluno se for do docente chama o menu do docente se for funcionario chama o menu do funcionario.

Criado 23 de janeiro de 2013
Ultima resposta 23 de jan. de 2013
Respostas 5
Participantes 2