Programinha da faculdade

6 respostas
fsbarbosa

Pessoal, estou precisando fazer um programinha com o tema “Universidade”.

O sistema deve ser elaborado em 3 camadas (VISÃO, CONTROLE E MODELO)
Tem que ter um repositório para adicionar, remover e listar as informações.
Tem que ter um método de lógica de negócio. Fazer uma classe de formulário onte terá um método main.

Eu já criei as camadas com as classes, na camada modelo (Aluno, Professor, Curso e Turma) com os atributos e os get e set separadamente. Para cada classe criei o DAO, mas não adicionei código nenhum.

package modelo;

public class Aluno {	

private Integer matricula;

private String nome;

private String curso;
public Aluno(){
	}

public void setMatProf(Integer matricula){
	this.matricula = matricula;
}	
public Integer getMatricula(){
	return matricula;
}	
public void setNome(String nome){
	this.nome = nome;
}	
public String getNome(){
	return nome;
}	
public void setCurso(String curso){
	this.curso = curso;
}	
public String getCurso(){
	return curso;
}

}

Não sei como continuar para criar o restante. A parte para listar, adicionar, alterar e excluir e gravar as informações na memória. Acima tem um exemplo da classe Aluno.

6 Respostas

pedruhenrik

http://www.caelum.com.br/apostilas/

fsbarbosa

Só preciso de um exemplo de código de uma classe para eu poder seguir nas outras.

edumoreira

Olá Barbosa,

Primeiro sugiro implementar o design pattern Facade (Ask Google).

Segue um exemplo para o seu DAO - Omiti os imports de propósito. [Ctrl+Shift+O] no Eclipse resolve. No NetBeans [Ctrl+Shift+I]

public abstract class Facade {

    public abstract boolean insert(Object o) throws SQLException;
    public abstract boolean update(Object o) throws SQLException;
    public abstract boolean delete(int idf) throws SQLException;
    public abstract Object find(int id) throws SQLException;
    public abstract List findAll() throws SQLException;
}

Agora em cada DAO faça extends Facade, ele vai pedir pra implementar os métodos abstratos…

usando o seu Bean, ou TO, ou POJO. denovo Ask Google.

Segue o DAO, só vou implementar um método, já é suficiente para vc ter uma idéia.

public class Aluno extends Facade {

    private String query = "";
    Connection conn;
    PreparedStatement stmt;
    Conexao c;

    public Aluno() {
        Conexao c = new Conexao();
    }
  
    @Override
    public boolean insert(Object o) throws SQLException {

        Connection conn = null;
        PreparedStatement stmt = null;

        Aluno alu = (Aluno) o;

        query = "INSERT INTO aluno(alu_matricula, alu_nome, alu_curso) VALUES (?,?,?)";

        try {

            conn = c.getConexao();
            stmt = conn.prepareStatement(query);

            stmt.setInt(1, alu.getMatricula());
            stmt.setString(2, alu.getNome());
            stmt.setString(3, alu.getCurso());

            stmt.executeUpdate();

        } catch (Exception e) {
            return false;

        } finally {
            c.Fechar();

        }

        return true;
    }

    @Override
    public boolean update(Object o) throws SQLException {
...
        return true;
    }

    @Override
    public boolean delete(int idf) throws SQLException {
...
        return true;
    }

    @Override
    public Object find(int id) throws SQLException {
...
        return usu;
    }

    @Override
    public List findAll() throws SQLException {
...
        return lista;
    }

    public List findUserName(String nome) throws SQLException {
...
        return lista;
    }
}

Agora vamos ao seu controlador…

public class AlunoInserirCtrl extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

        // Pegando os valores da tela
        String matricula = request.getParameter("alu_matricula");
        String nome = request.getParameter("alu_nome");
        String curso = request.getParameter("alu_curso");

        String pagina = "";

        // Instanciando e inicializando a classe DAO        
        AlunoDAO dao = new AlunoDAO();

        // Instanciando e inicializando a classe Aluno Bean, caso não seja inicializado ocorre um NullPointException
        Aluno alu = new Aluno();
        
        // Setando os valores no Bean para transferencia ao DAO
        alu.setMatricula(Integer.parseInt(matricula));
        alu.setNome(nome);
        alu.setCurso(curso);
        
        try {

            // Chamando o método insert(alu) da classe AlunoDAO e validando o retorno true|false
            if(dao.insert(alu)){
                   pagina = "sucesso.jsp";

            }else{
                   pagina = "erro.jsp";
            }

        } catch (SQLException ex) {
            Logger.getLogger(ClienteListarCtrl.class.getName()).log(Level.SEVERE, null, ex);
        }

        getServletContext().getRequestDispatcher(pagina).forward(request, response);
        
    } 

    // Restante do código do Servlet exlcuído......

}

Lembrando que fiz bem simples pra facilitar o entendimento…

Sugiro fazer uma classe(Servlet) Ctrl para cada ação, Inserir, Editar, Listar etc… Isso facilita a manutenção e desacopla sua plicação, ou seja, diminui a interdependência entre classes.

No mais espero ter ajudado… :arrow:

fsbarbosa

edumoreira:
Olá Barbosa,

Primeiro sugiro implementar o design pattern Facade (Ask Google).

Segue um exemplo para o seu DAO - Omiti os imports de propósito. [Ctrl+Shift+O] no Eclipse resolve. No NetBeans [Ctrl+Shift+I]

public abstract class Facade {

    public abstract boolean insert(Object o) throws SQLException;
    public abstract boolean update(Object o) throws SQLException;
    public abstract boolean delete(int idf) throws SQLException;
    public abstract Object find(int id) throws SQLException;
    public abstract List findAll() throws SQLException;
}

Agora em cada DAO faça extends Facade, ele vai pedir pra implementar os métodos abstratos…

usando o seu Bean, ou TO, ou POJO. denovo Ask Google.

Segue o DAO, só vou implementar um método, já é suficiente para vc ter uma idéia.

public class Aluno extends Facade {

    private String query = "";
    Connection conn;
    PreparedStatement stmt;
    Conexao c;

    public Aluno() {
        Conexao c = new Conexao();
    }
  
    @Override
    public boolean insert(Object o) throws SQLException {

        Connection conn = null;
        PreparedStatement stmt = null;

        Aluno alu = (Aluno) o;

        query = "INSERT INTO aluno(alu_matricula, alu_nome, alu_curso) VALUES (?,?,?)";

        try {

            conn = c.getConexao();
            stmt = conn.prepareStatement(query);

            stmt.setInt(1, alu.getMatricula());
            stmt.setString(2, alu.getNome());
            stmt.setString(3, alu.getCurso());

            stmt.executeUpdate();

        } catch (Exception e) {
            return false;

        } finally {
            c.Fechar();

        }

        return true;
    }

    @Override
    public boolean update(Object o) throws SQLException {
...
        return true;
    }

    @Override
    public boolean delete(int idf) throws SQLException {
...
        return true;
    }

    @Override
    public Object find(int id) throws SQLException {
...
        return usu;
    }

    @Override
    public List findAll() throws SQLException {
...
        return lista;
    }

    public List findUserName(String nome) throws SQLException {
...
        return lista;
    }
}

Agora vamos ao seu controlador…

public class AlunoInserirCtrl extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

        // Pegando os valores da tela
        String matricula = request.getParameter("alu_matricula");
        String nome = request.getParameter("alu_nome");
        String curso = request.getParameter("alu_curso");

        String pagina = "";

        // Instanciando e inicializando a classe DAO        
        AlunoDAO dao = new AlunoDAO();

        // Instanciando e inicializando a classe Aluno Bean, caso não seja inicializado ocorre um NullPointException
        Aluno alu = new Aluno();
        
        // Setando os valores no Bean para transferencia ao DAO
        alu.setMatricula(Integer.parseInt(matricula));
        alu.setNome(nome);
        alu.setCurso(curso);
        
        try {

            // Chamando o método insert(alu) da classe AlunoDAO e validando o retorno true|false
            if(dao.insert(alu)){
                   pagina = "sucesso.jsp";

            }else{
                   pagina = "erro.jsp";
            }

        } catch (SQLException ex) {
            Logger.getLogger(ClienteListarCtrl.class.getName()).log(Level.SEVERE, null, ex);
        }

        getServletContext().getRequestDispatcher(pagina).forward(request, response);
        
    } 

    // Restante do código do Servlet exlcuído......

}

Lembrando que fiz bem simples pra facilitar o entendimento…

Sugiro fazer uma classe(Servlet) Ctrl para cada ação, Inserir, Editar, Listar etc… Isso facilita a manutenção e desacopla sua plicação, ou seja, diminui a interdependência entre classes.

No mais espero ter ajudado… :arrow:

Muito bom mesmo, mas tem muita coisa que eu ainda não sei nas linhas que você passou. Estou na faculdade e tenho que fazer esse programinha no Eclipse valendo um ponto. Um ponto na matéria que você é totalmente leigo é bem proveitoso. Trabalho com infra-estrutura de rede e não saco muito de java. Você teria um email para eu te passar o que já fiz e vc de repente me passar umas dicas em cima do que você já passou?

Um abraço e muito obrigado pela ajuda e principalmente pela dedicação em ajudar ao próximo.

edumoreira

Barbosa,

Fica difícil saber sua necessidade, comece implemantando o que passei, a medida que forem surgindo dúvidas pesquise no fórum, tem muita coisa no fórum.

Que bom que já está começando do jeito certo, usando MVC.

Model.
View.
Controller.

Basicamente o MVC funciona assim:

Model: contém sua regra de negocio, consultas ao banco e querys em geral, fiz o exemplo usando o design pattern FACADE, isto é, apenas uma fachada que “diz” os métodos que suas classes devem implementar.

View: A telinha que o usuário vê, pode ser html, desktop, mobile etc. Geralmente com extenção .jsp (no caso de web). Estes arquivos nunca acessam as classes do model! Sua comunicação se dá com as classes do controller.

Controller: Recebe as requisições HTTP das views, processa, acessando ou não as classes do model e responde via HTTP para a view.

Convenções:

Classes do Model: Bean, TO ou POJO (ask google), *Bean.java e *DAO.java

  • *Bean.java contém seus objetos de transferência e *DAO.java seus métodos de manipulação do banco (insert, delete, find etc.)

Classes do Controller: *Ctrl.java (Servlet), toda servlet extende HttpServlet. Esta classe recebe as requisições HTTP do usuário, ou cliente, e envia respostas à estes.

Arquivos do View: *.jsp, *.html, *.htm, estes arquivos NUNCA acessam classes do model, segue um exemplo de view.

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Aluno</title>        
    </head>
    <body>
        <div>
            <span>Cadastro de Alunos</span>
            <fieldset>
                <form name="form_aluno" action="AlunoInsertCtrl" method="POST">
                    <label><span>Matricula</span></label>
                    <label><input type="text" id="matricula" name="matricula" value="" /></label>
                    
                    <label><span>Nome</span></label>
                    <label><input type="text" id="nome" name="nome" value="" /></label>
                    
                    <label><span>Curso</span></label>
                    <label><input type="text" id="curso" name="curso" value="" /></label>

                    <label><input type="submit" value="Enviar" /></label>
                    <label><input type="button" value="Voltar" onclick="javascript: history-1" /></label>
                </form>
            </fieldset>
        </div>
    </body>
</html>

Teu xml ficaria parecido com isso:

...
    <servlet>
        <servlet-name>AlunoInsertCtrl</servlet-name>
        <servlet-class>[b]<seu pacote>[/b].AlunoInsertCtrl</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>AlunoInsertCtrl</servlet-name>
        <url-pattern>/AlunoInsertCtrl</url-pattern>
    </servlet-mapping>
...

No mais é pesquisar, e principalmente praticar…

Flws… :arrow:

fsbarbosa

edumoreira:
Barbosa,

Fica difícil saber sua necessidade, comece implemantando o que passei, a medida que forem surgindo dúvidas pesquise no fórum, tem muita coisa no fórum.

Que bom que já está começando do jeito certo, usando MVC.

Model.
View.
Controller.

Basicamente o MVC funciona assim:

Model: contém sua regra de negocio, consultas ao banco e querys em geral, fiz o exemplo usando o design pattern FACADE, isto é, apenas uma fachada que “diz” os métodos que suas classes devem implementar.

View: A telinha que o usuário vê, pode ser html, desktop, mobile etc. Geralmente com extenção .jsp (no caso de web). Estes arquivos nunca acessam as classes do model! Sua comunicação se dá com as classes do controller.

Controller: Recebe as requisições HTTP das views, processa, acessando ou não as classes do model e responde via HTTP para a view.

Convenções:

Classes do Model: Bean, TO ou POJO (ask google), *Bean.java e *DAO.java

  • *Bean.java contém seus objetos de transferência e *DAO.java seus métodos de manipulação do banco (insert, delete, find etc.)

Classes do Controller: *Ctrl.java (Servlet), toda servlet extende HttpServlet. Esta classe recebe as requisições HTTP do usuário, ou cliente, e envia respostas à estes.

Arquivos do View: *.jsp, *.html, *.htm, estes arquivos NUNCA acessam classes do model, segue um exemplo de view.

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Aluno</title>        
    </head>
    <body>
        <div>
            <span>Cadastro de Alunos</span>
            <fieldset>
                <form name="form_aluno" action="AlunoInsertCtrl" method="POST">
                    <label><span>Matricula</span></label>
                    <label><input type="text" id="matricula" name="matricula" value="" /></label>
                    
                    <label><span>Nome</span></label>
                    <label><input type="text" id="nome" name="nome" value="" /></label>
                    
                    <label><span>Curso</span></label>
                    <label><input type="text" id="curso" name="curso" value="" /></label>

                    <label><input type="submit" value="Enviar" /></label>
                    <label><input type="button" value="Voltar" onclick="javascript: history-1" /></label>
                </form>
            </fieldset>
        </div>
    </body>
</html>

Teu xml ficaria parecido com isso:

...
    <servlet>
        <servlet-name>AlunoInsertCtrl</servlet-name>
        <servlet-class>[b]<seu pacote>[/b].AlunoInsertCtrl</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>AlunoInsertCtrl</servlet-name>
        <url-pattern>/AlunoInsertCtrl</url-pattern>
    </servlet-mapping>
...

No mais é pesquisar, e principalmente praticar…

Flws… :arrow:

Moreira,

Bom dia!

Eu coloquei aqueles códigos que vc me passou, mas mesmo alterando algumas coisas para ficar de acordo com as minhas classes, ainda está com vários erros em várias linhas. Não entendi algumas linhas que estão com HTTP, o sistema seria para desktop mesmo. Cara, tenho que entregar isso hoje e estou perdidinho. A matéria desse trabalho valendo apenas um ponto é “Sistemas Distribuidos I”. Se vc poder me dá mais uma força nesse trabalhinho eu vou ficar muito agradecido. Meu email é [email removido] e se você precisar de algo relacionado a Infra, aí eu posso ajudar. Um abração…

Criado 12 de abril de 2011
Ultima resposta 15 de abr. de 2011
Respostas 6
Participantes 3