Sobre este projeto
it-programming / web-development
Aberto
Contexto Geral do Projeto
Parte 1 1- Modelar um sistema orientado a objetos, usando o diagrama de classes da UML, a partir de uma situação problema (domínio do problema). Para a modelagem, use alguma ferramenta free da Internet (ex: draw.io, edrawsoft, lucidchart, etc.) Ou alguma de sua preferência. Situação problema: 1. Domínio do problema: Sistema de Imobiliária a) Para a imobiliária é muito importante manter um cadastro dos imóveis que estão à venda e dos imóveis que estão disponíveis para locação. B) Para cada imóvel registrado é importante saber se o imóvel está disponível para venda ou locação ou se ele já foi vendido ou locado. Isso ajudará a filtrar a pesquisa por imóveis. Também é importante armazenar a data da construção do imóvel. C) Os imóveis da imobiliária podem pertencer a uma dentre quatro categorias: casa, apartamento, terreno ou sala comercial. D) Para os imóveis da categoria casa, as seguintes informações devem ser armazenadas: quantidade de quartos, quantidade de suites, quantidade de salas de estar, quantidade de salas de jantar, nro de vagas na garagem, área (em metros quadrados), se possui armário embutido, descrição (algum detalhe a mais que se deseja informar sobre a casa), se a casa fica em um condomínio e se possui piscina. E) Para os imóveis da categoria apartamento, as seguintes informações devem ser armazenadas: quantidade de quartos, quantidade de suites, quantidade de salas de estar, quantidade de salas de jantar, nro de vagas na garagem, área (em metros quadrados), se possui armário embutido, descrição (algum detalhe a mais que se deseja informar sobre o apartamento), andar, valor do condomínio e indicativo se o condomínio possui portaria 24hs. F) Para os imóveis da categoria sala comercial, as seguintes informações devem ser armazenadas: área em metros quadrados, quantidade de banheiros, quantidade de cômodos. G) Para os imóveis da categoria terreno, as seguintes informações devem ser armazenadas: área (em metros quadrados), largura, comprimento, se o terreno possui aclive/declive. H) Para cada imóvel disponível para locação ou venda é importante saber o seu endereço completo (rua, nro, complemento, cep e cidade) sendo muito importante cadastrar também o bairro no qual o imóvel está localizado, pois este campo ajudará a filtrar várias pesquisas feitas por cliente. I) É também importante armazenar o valor de venda ou de aluguel de cada imóvel. Este é o valor sugerido pelo cliente. J) Após o imóvel ser alugado/vendido é importante registrar o valor real de aluguel/venda, indicando quanto desse valor será destinado à imobiliária. K) Cada imóvel disponível para venda ou locação deve estar associado a um cliente da imobiliária, nomeado cliente proprietário. Um imóvel pode pertencer a mais de um cliente proprietário e um cliente proprietário pode ter mais de um imóvel na imobiliária. L) Os clientes proprietários da imobiliária devem ser cadastrados no sistema e as seguintes informações devem ser cadastradas: cpf, nome, endereço, telefones de contato, email, sexo, estado civil, profissão, data em que cadastrou o seu primeiro imóvel na imobiliária, m) Cada transação que ocorre na imobiliária, ou seja, venda ou aluguel de imóveis, deve ser registrada. Ela deve estar associada a um cliente da imobiliária, nomeado cliente usuário. N) Os clientes usuários da imobiliária devem ser cadastrados no sistema e as seguintes informações devem ser cadastradas: cpf, nome, endereço, telefones de contato, email, sexo, estado civil, profissão. Também devem ser armazenados : nome e cpf de uma pessoa que o indica como bom pagador (pelo menos 1). O) É importante registrar a data que um imóvel foi colocado à venda ou para alugar. P) Alguns imóveis, embora sejam anunciado para venda ou aluguel, acabam sendo retirados da imobiliária por decisão do cliente proprietário. É Preciso armazenar no banco a informação de que o imóvel não foi alugado/vendido, mas não está mais disponível para locação/venda. Q) Para cada um dos funcionários da imobiliária é importante armazenar: nome, telefone, cpf, endereço, telefone contato, telefone celular, data ingresso imobiliária, cargo e salário base. Também é importante armazenar os dados para login no sistema, como usuário e senha. Para a senha é importante ter um campo que consiga armazenar pelo menos 128 caracteres. Não é necessário neste trabalho se preocupar em criptografar a senha. R) Há um tipo especial de funcionário que são os corretores. O salário deles é calculado como o salário base mais a porcentagem das comissões das vendas/alugueis que ele fez no mês corrente. O valor da porcentagem de comissão é único para os corretores e atualmente tem o valor de 5%. Para os corretores é importante saber a data em que ele começou a trabalhar como corretor, mesmo que não seja nesta imobiliária e se possui algum curso de formação em vendas. S) Para cada venda ou aluguel é necessário registrar o funcionário que fez a transação. Um funcionário pode realizar mais de uma transação. T) Para cada transação (venda ou aluguel) é necessário realizar um registro que contenha além dos dados do imóvel, do cliente usuário e do corretor, a data que foi realizada a transação, o nro do contrato (que é um nro sequencial que identifica cada um dos contratos da empresa) e a forma de pagamento. U) As formas de pagamento disponíveis na empresa devem ser previamente cadastradas *---------------------------------------------------------------------------------------------------------------------------------------------------------------------* Parte 2 1- Implemente em Java, usando técnicas de encapsulamento todo o seu Sistema de Imobiliária, que foi modelado na Parte 1 do trabalho. É Muito importante que o diagrama seja corrigido antes de iniciar a implementação. A seguir um exemplo: public boolean setNome(String nome){ if (nome.length() > 0) { this.nome = nome; return true; } else { return false; } } a) Para validação de cpf, implemente o algoritmo real de validação de cpf (que é encontrado facilmente na Internet, implementado nas mais diversas linguagens). B) Para o atributo que indica a “situacao” da imóvel, deve-se usar um atributo do tipo byte: - 1 para representar o status Ativo (o imóvel está disponível para venda ou locação) - 2 para representar o status Inativo (o imóvel foi retirado, ou seja, não está mais disponível na imobiliária) - 3 para representar o status em Uso (o imóvel já foi vendido ou alugado) Na hora de exibir os dados da imóvel, deve ser exibido: Ativo, Inativo ou em Uso, de acordo com o código armazenado. Observação sobre encapsulamento: Note que não é possível saber como este atributo “situacao” está implementado, ou seja, o tipo do atributo. As demais classes do sistema apenas têm acesso à interface que dá acesso a este atributo, sem manipula-lo diretamente. Com isto, obtemos transparência em relação à implementação interna das classes, seus tipos de dados, etc. A transparência de implementação deve ser sempre perseguida na programação orientada a objetos. 2- Considerando o uso de construtores: a) Crie um construtor para a classe Imóvel de forma que este receba como parâmetro o(s) cliente(s) proprietário(s) do imóvel. Desta forma, obriga-se que a associação do imóvel com o cliente proprietário já exista no momento de sua instanciação. B) Crie um construtor default (sem parâmetros) explicitamente para a classe Imóvel. c. Crie um construtor da classe Transação, de forma que este receba como parâmetro o imóvel e o cliente usuário da transação. d. Crie construtores para cada uma das classes do problema de forma a atribuir valor aos atributos da classe com os parâmetros recebidos. Toda classe deve ter pelo menos um construtor criado por você. 3- Considerando os casos de herança, implemente todas as situações de herança descritas nos requisitos a) Lembre-se que existe um relacionamento de herança em dois níveis entre a classe imóvel e os tipos de imóvel. Temos um tipo especial de imóvel, que são os residenciais, que se dividem em apto e casa. B) Lembre-se também de implementar a herança entre os dois tipos de clientes (usuário e proprietário). C) Outra herança presente nos requisitos é entre os funcionários e um tipo especial de funcionário que são os corretores. A descrição do problema deixa claro que um corretor é um funcionário, ou seja, deve possuir todos os atributos de um funcionário, além de seus próprios atributos. D) Uma herança possível de ser implementada é a que representa as pessoas do sistema e tem como subclasses clientes e funcionários. Implemente também esse herança. E) Implemente um atributo estático na classe Funcionário para armazenar o valor do salário base, que é igual para todas as instâncias da classe. F) Implemente um atributo estático e final na classe corretor para armazenar o valor da porcentagem das comissões dos corretores. Este valor é fixado em 5%. G) Como estes atributos são encapsulados (private), crie os métodos get e set para manipulá-los. Os métodos devem ser estáticos. H) Implemente um método calcular Salario específico para corretores, calculado através da fórmula salário base + (porcentagemcomissao*VendasMes). Para isso, será necessário criar um atributo VendasMes para o corretor. Cada vez que ele executa uma transação, o valor da venda ou do aluguel do imóvel é acrescida ao atributo vendasMes. Crie também um método que permita zerar o valor das VendasMes. I) Implemente um método calcular Salario específico para funcionários, que é o seu salário base. 4- Considerando a transação, crie um método efetuar transação, que altere os campos necessários da classe imóvel, que atualize as vendasMes do corretor e que atualize os campos necessários da transação. 5- Classes Abstratas a) Implemente a classe Imóvel como abstrata. B) Implemente um método abstrato calculaIndiceVendaLocacao() na classe Imovél que é um índice que identifica o quão fácil vai ser realizar a venda ou a locação do imóvel. Note que um método abstrato não possui implementação. Cada subclasse tem sua própria implementação. Isto é conveniente, pois o cálculo do índice segue uma regra diferente para cada tipo de imóvel. C) Invente uma regra diferentes para o cálculo desse índice para cada tipo de imóvel (terreno, sala comercial, casa e apto). Não esqueça de escrever como você está considerando esse cálculo. 6- Classes para manter os dados a. Crie classes especiais capazes de manter os dados gerados no sistema. Por manter, entende-se: cadastrar, consultar e excluir. Para isto, crie as classes “ DadosClientes ” , “ DadosImovel ” , “DadosTranscao”, etc.. Estas classes serão responsáveis por encapsular o acesso a cada tipo de dado específico. Para isto, estas classes devem implementar um ArrayList privado para armazenar a informação, e métodos públicos para permitir o acesso à informação (inserir um novo objeto, buscar um objeto, excluir um objeto, etc.). Os objetos de dados deverão ser criados apenas uma vez na classe principal e utilizados ao longo da execução da aplicação. Exemplo: class DadosTransacao{ private ArrayList<Transacao> vetTrans = new ArrayList<Transacao>(); public void cadastrar(Transacao c) { this.vetTrans.add(c); //ADICIONA A TRANSAÇÃO no array system.out.println("Total de transacões inseridas: "); System.out.println(this.vetTrans.size()); } public void listar(){ for (Transacao objeto: this.vetTrans) { objeto.mostrarDados(); //método mostrarDados(); } } //este método retorna o objeto Transacao caso encontrado, ou null,caso não encontrado public Transacao buscar(String nro) { //pode-se usar também int Transacao c = null; for ( Transacao objeto: this.vetTrans) { if (objeto.getNroContrato().equals(nro)) { c = objeto; break; } } return c; } //este método usa o método buscar já implementado public boolean excluir(String nro){ Transacao c = this.buscar(nro); if (c != null) { this.vetTrans.remove(a); return true; } else { return false; } } } b) Acrescente ao seu programa uma funcionalidade para salvar os ArrayLists de dados em um arquivo binário. Crie um arquivo para cada ArrayList. C) Invente um requisito no sistema que justificasse a criação de uma interface no sistema. Não esqueça de descrever o requisito. *---------------------------------------------------------------------------------------------------------------------------------------------------------------------* Parte 3 Crie a interface que facilite o acesso as funcionalidades desenvolvidas anteriormente.
Categoria TI e Programação
Subcategoria Programação
Qual é o alcance do projeto? Bug ou alteração pequena
Isso é um projeto ou uma posição de trabalho? Um projeto
Tenho, atualmente Eu tenho especificações
Disponibilidade requerida Conforme necessário
Funções necessárias Desenvolvedor
Prazo de Entrega: 15 de Maio de 2021
Habilidades necessárias