·
Ciência da Computação ·
Estrutura de Dados
Send your question to AI and receive an answer instantly
Recommended for you
11
Estrutura de Dados
Estrutura de Dados
UNIP
38
Desenvolvimento de Sistema para Manipulação de Dados em Arquivos e Estruturas Dinâmicas
Estrutura de Dados
UNIP
4
Lista de Exercícios Estrutura de Dados UNIP - Dicionários Listas Filas e Algoritmos
Estrutura de Dados
UNIP
6
Sistema para Analise de Performance de Algoritmo de Ordenação de Dados
Estrutura de Dados
UNIP
41
Eficiência e Complexidade Computacional: Conceitos e Exemplos
Estrutura de Dados
UFS
2
Trabalho Estrutura de Dados II: Tela de Controle Aluno com PreparedStatement e Banco de Dados
Estrutura de Dados
UNESC
6
Analise Textual de Resumos Cientificos - Trabalho Academico
Estrutura de Dados
USJT
21
Análise Comparativa de Algoritmos de Ordenação em C e Golang: Estudo de Desempenho com Dados Reais
Estrutura de Dados
UNIOESTE
1
Trabalho Pratico de Programacao Orientada a Objetos - Sistema com Entidades e Persistencia
Estrutura de Dados
UFSJ
2
Prova de Grafos
Estrutura de Dados
UESPI
Preview text
2º3º Ciência da Computação CC Orientações para a disciplina de Atividades Práticas Supervisionadas 2019 ESTRUTURA DE DADOS TEMA PROPOSTA DO TRABALHO APRESENTAÇÃO DO TRABALHO ATIVIDADES PRÁTICAS SUPERVISIONADAS APS I TEMA DESENVOLVIMENTO DE SISTEMA PARA MANIPULAÇÃO DE SISTEMA DE UNIVERSIDADE II PROPOSTA DO TRABALHO As Atividades Práticas Supervisionadas serão constituídas pelos seguintes tópicos 1 O grupo deverá desenvolver um sistema para gerenciamento da Univerdade Amazônia responsável por pesquisar desenvolver artigos científicos e livros relacionados à ciência e ao meio ambiente 2 O grupo deverá usar a linguagem Java e um sistema de arquivos no formato CSV Para fazer a interface deve ser desenvolvido um menu na entrada padrão do sistema 3 No banco de dados teremos três tipos de arquivos Um arquivo CSV com os dados dos alunos na ordem idnome Um arquivo CSV com os dados dos cursos na ordem nomenívelano Para cada curso um arquivo com o nome nomenívelanocsv com as informações das notas dos alunos naquele curso na ordem iddoalunonotaNP1notaNP2notareposicaonotaexame Havendo a possibilidade de o arquivo não ter nenhum dado representando o fato de que ninguém cursou aquela matéria naquele ano 4 É esperado que o sistema tenha um controle de erros para entradas do usuário final 5 O grupo deverá escrever uma monografia sobre os aspectos teóricos que envolvem o projeto bem como sobre todos os assuntos relativos ao desenvolvimento do sistema computacional A estrutura básica da monografia é apresentada abaixo a Introdução deve conter uma breve descrição a respeito do uso de uma linguagem orientada à objetos b Referencial Teórico deve apresentar e explicar os algoritmos e classes usadas no processamento de dados c Desenvolvimento deve descrever todos os estágios do processo de desenvolvimento do sistema computacional Deverão ser abordados os seguintes tópicos Processo de acesso aos dados processo de visualização dos dados processo de algoritmos referentes ao processamento dos dados processo da implementação da interface com o usuário d Resultados e Discussão deve apresentar um conjunto de testes envolvendo as técnicas implementadas Nestes testes o grupo deverá demonstrar a imagens do programa funcionando É fundamental que a estrutura do programa seja apresentada em forma de diagrama de identificar as vantagens de cada classepacote usada e Considerações Finais deve apresentar as considerações do grupo a respeito das técnicas escolhidas bem como sobre os resultados obtidos f Referências Bibliográficas deve conter todas as referências utilizadas para escrita e desenvolvimento do projeto g Código Fonte deve apresentar todo o código fonte do projeto desenvolvido 6 O nível de refinamento tratamento de erros assim como a composição escolhida para as classes terão impacto direto na nota final deste trabalho Novas funcionalidades poderão ser implementadas neste sistema desde que relacionadas ao tema abordado 7 A nota atribuída ao trabalho entregue configura a nota das APS III APRESENTAÇÃO DO TRABALHO 1 O grupo deverá ser composto de no máximo 5 alunos 2 Todas as etapas do trabalho deverão ser escritas em fonte ARIAL 12 espaçamento 15 margem direita 25 cm e margem esquerda 25 cm O trabalho deverá ter formato A4 3 Limites de páginas Introdução 2 páginas e no máximo 4 páginas Referencial Teórico 3 páginas e no máximo 5 páginas Desenvolvimento mínimo de 10 páginas e máximo de 15 páginas Resultados e Discussão mínimo de 6 páginas e máximo de 10 páginas Considerações Finais mínimo de 1 página e máximo de 3 páginas Referências Bibliográficas mínimo 2 páginas Código Fonte não há limite 4 O trabalho junto com a ficha padrão de Atividades Práticas Supervisionadas de cada integrante do grupo ilustrando cronologicamente cada um dos itens segundo a orientação do professor supervisor desta atividade deverá ser postado em httptrabalhosacademicosunipbrentrega até 23112019 Total 80 horas 5 Estrutura do trabalho 51Capa identificando o curso o tema a relação de alunos do grupo nomeRA 52Índice 53Objetivo do trabalho 54Introdução 55Referencial Teórico 56Desenvolvimento 57Resultados e Discussão 58Considerações Finais 59 Referências Bibliográficas 510 Código fonte 511 Ficha de Atividades Práticas Supervisionadas IV MODELO DE FICHA DE ATIVIDADES PRÁTICAS SUPERVISIONADAS FICHA DE ATIVIDADES PRÁTICAS SUPERVISIONADAS APS Atividades Práticas Supervisionadas laboratórios atividades em biblioteca Iniciação Científica trabalhos individuais e em grupo práticas de NOME RA CURSO CAMPUS SEMESTRE TUR DATA ATIVIDADE TOTAL DE HORAS ALUNO TOTAL DE HOR APS DESENVOLVIMENTO DE SISTEMA PARA MANIPULAÇÃO DE SISTEMA DE UNIVERSIDADE Ciências da Computação NOME ALUNO MATRÍCULA São Paulo 2º3º Semestre 1 SUMÁRIO 1 INTRODUÇÃO2 2 REFERENCIAL TEÓRICO4 3 DESENVOLVIMENTO7 4 RESULTADOS E DISCUSSÃO12 5 CONSIDERAÇÕES FINAIS18 6 REFERÊNCIAS BIBLIOGRÁFICAS19 7 CÓDIGO FONTE20 2 1 INTRODUÇÃO As linguagens de programação orientadas a objetos são muito populares na área de desenvolvimento de software Estas linguagens possuem um poder de expressividade e facilita o processo de modelagem de situaçõesproblema A orientação a objetos tem como objetivo principal modelar o mundo real e garantir que as taxas de manutenibilidade manutenção sejam maiores diante deste contexto Isso é possível pois utilizando uma linguagem de programação orientada a objetos conseguese obter um desenvolvimento mais rápido visto que este desenvolvimento ocorre em módulos em blocos de códigos correspondentes aos objetos e seus acoplamentos Através da orientação a objetos podese obter uma maior qualidade e agilidade no desenvolvimento pois o fator reusabilidade reutilização permite que se reutilize outros objetos que foram anteriormente desenvolvidos e podem ser facilmente incorporados na aplicação A reusabilidade também garante uma melhor manuseabilidade do programa pois os testes referentes aos componentes já foram previamente executados garantindo assim a utilização coesa dos objetos CLARO SOBRAL 2008 Um dos grandes diferenciais da programação orientada a objetos em relação a outros paradigmas de programação que também permitem a definição de estruturas e operações sobre essas estruturas está no conceito de herança mecanismo através do qual definições existentes podem ser facilmente estendidas Juntamente com a herança deve ser enfatizada a importância do polimorfismo que permite selecionar funcionalidades que um programa irá utilizar de forma dinâmica durante sua execução RICARTE 2001 Na orientação objetos qualquer parte modelada é vista como um objeto de uma classe Uma classe é um template de um objeto que especifica seus atributos e ações Os atributos são propriedades de um objeto Por exemplo a classe Pessoa pode possuir os atributos nome telefone e CPF Um objeto da classe Pessoa pode ser por exemplo uma determinada pessoa com nome João que possui telefone 99 999999999 e CPF 01234567890 Uma outra característica das linguagens orientadas a objetos é o encapsulamento que permite que classes não consigam acessar diretamente os atributos de outras classes Isto é importante para que o código fique mais organizado e padronizado tornando o mesmo mais legível 3 Dessa forma detalhes internos sobre a operação do objeto não são conhecidos permitindo que o usuário do objeto trabalhe em um nível mais alto de abstração sem preocupação com os detalhes internos da classe Essa facilidade permite simplificar a construção de programas com funcionalidades complexas tais como interfaces gráficas ou aplicações distribuídas RICARTE 2001 Uma das linguagens orientadas a objetos mais conhecida é a linguagem Java Através de classes objetos atributos métodos dentre outras características da orientação a objetos conseguese modelar o mundo real e abstrair informações incorporandoas à linguagem Java CLARO SOBRAL 2008 Java é uma linguagem simples de fácil aprendizado ou migração pois possui um reduzido número de construções A diminuição das construções mais suscetíveis a erros de programação tais como ponteiros e gerenciamento de memória via código de programação também faz com que a programação em Java seja mais eficiente Contém um conjunto de bibliotecas que fornecem grande parte da funcionalidade básica da linguagem incluindo rotinas de acesso à rede e criação de interface gráfica INDRUSIAK 1996 Java é a linguagem de programação orientada a objetos desenvolvida pela Sun Microsystems capaz de criar tanto aplicativos para desktop aplicações comerciais softwares robustos completos e independentes aplicativos para a Web Além disso caracterizase por ser muito parecida com C eliminando as características consideradas complexas dentre as quais ponteiros e herança múltipla CLARO SOBRAL 2008 Neste trabalho tem como objetivo desenvolver uma aplicação desktop para o auxílio do gerenciamento da Univerdade Amazônia dos seus alunos e cursos utilizando uma linguagem orientada a objetos Neste presente capítulo apresentamos de forma sucinta uma introdução às linguagens orientadas a objetos No Capítulo 2 será descrito o referencial teórico onde serão apresentados os algoritmos e classes usadas no processamento de dados No capítulo 3 será descrito todos os estágios do processo de desenvolvimento do sistema computacional No capítulo 4 será apresentado os resultados e discussões No capítulo 5 serão descritas as considerações finais deste trabalho O capítulo 6 conterá as referências bibliográficas utilizadas Por fim no capítulo 7 é apresentado o código fonte da aplicação 4 2 REFERENCIAL TEÓRICO A situação problema referese ao controle e armazenamento de dados de alunos e cursos Temos as seguintes classes em nossa aplicação Aluno Modela aluno Atributos int id Identificador do aluno String nome Nome do aluno Métodos public int getId Retorna o id do aluno public void setIdint id Atualiza o id do aluno public String getNome Retorna o nome do aluno public void setNomeString nome Atualiza o nome do aluno public Boolean compareToAluno outro Responsável por ditar como a classe deve ser ordenado Curso Modela curso Atributos String nome Nome do curso String nivel Nível do curso técnico graduação especialização mestrado e entre outros int ano Ano do curso Métodos public String getNome Retorna o nome do curso public void setNomeString nome Atualiza o nome do curso public String getNivel Retorna o nível do curso public void setNivelString nivel Atualiza o nível do curso public int getAno Retorna o ano do curso public void setAnoint ano Atualiza o ano do curso Matricula Modela o relacionamento aluno e curso ou seja alunos matriculados Atributos int iddoaluno Identificador do aluno double notaNP1 Nota do aluno na prova 1 double notaNP2 Nota do aluno na prova 2 5 double notareposicao Nota do aluno na prova de reposição double notaexame Nota do aluno no exame Métodos public int getIddoaluno Retorna o id do aluno public void setIddoalunoint iddoaluno Atualiza o id do aluno public double getNotaNP1 Retorna a nota da prova 1 public void setNotaNP1double notaNP1 Atualiza a nota da prova 1 public double getNotaNP2 Retorna a nota da prova 2 public void setNotaNP2double notaNP2 Atualiza a nota da prova 2 public double getNotareposicao Retorna a nota da prova de reposição public void setNotareposicaodouble notareposicao Atualiza a nota da prova de reposição public double getNotaexame Retorna a nota do exame public void setNotaexamedouble notaexame Atualiza a nota no exame Ordenação Modela os métodos de ordenação Atributos Não possui atributos Métodos public ArrayListAluno bubbleSortArrayListAluno alunos Responsável por ordenar uma lista de alunos utilizando o método de ordenação BubbleSort CORMEN et al 2002 public ArrayListAluno insertionSortArrayListAluno alunos Responsável por ordenar uma lista de alunos utilizando o método de ordenação InsertionSort CORMEN et al 2002 AplicacaoAluno Responsável pela aplicação Atributos ListAluno alunos Lista de alunos cadastrados no sistema ListCurso cursos Lista de cursos cadastrados no sistema Ordenacao ordenacao Objeto de ordenação Métodos 6 public static int menu Lista as opções do menu ler a opção selecionada pelo usuário e retorna a mesma public static void mainString args Primeira a função a ser executada Irá intermediar a aplicação public static void inserirAluno Ler os dados de um aluno e armazena na lista de alunos public static void inserirCurso Ler os dados de um curso e armazena na lista de cursos public static void inserirMatricula Ler os dados de uma matricula e armazena os dados em arquivo public static void listarAlunosDeUmCurso Imprime os dados dos alunos de um curso específico ordenados de forma alfabética public static void carregarDados Ler os dados de alunos e cursos armazenados nos arquivos public static void salvarDados Armazena os dados de alunos e cursos armazenados nos arquivos Abaixo é apresentado o diagrama de classes da aplicação resumindo o que foi exposto sobre as classes Figura 1 Diagrama de Classes Fonte Próprio autor 7 3 DESENVOLVIMENTO A aplicação foi desenvolvida na linguagem Java utilizando a IDE Apache NetBeans A aplicação tem as seguintes funções Inserir Aluno Cadastrar um novo aluno Inserir Curso Cadastrar um novo curso Inserir Matrícula Vincula um aluno a um curso Listar Alunos Lista todos os alunos em ordem alfabética Listar Alunos de um Curso Lista todos os alunos de um curso Sair Sair da aplicação Todos os dados são persistidos em arquivos csv Um arquivo CSV Comma Separated Values em português valores separados por vírgulas é um arquivo de texto simples que armazena informações de planilhas e tabelas O conteúdo geralmente é uma tabela de texto números ou datas Os arquivos CSV podem ser facilmente importados e exportados usando programas que armazenam dados em tabelas Em nossa aplicação temos as seguintes estruturas de arquivos alunoscsv Armazena os dados dos alunos Cada linha deste arquivo equivale a um aluno São armazenados os dados de id e senha do aluno cursoscsv Armazena os dados dos cursos Cada linha deste arquivo é equivalente a um curso São armazenados os seguintes dados nome nível e ano Para cada linha de cursoscsv é criado o arquivo nomenivelanocsv substituindo os devidos valores Esse arquivo irá armazenar os dados da matrícula Cada linha deste arquivo irá armazenar o id do aluno nota NP1 nota NP2 nota reposição e nota exame 8 Os dados de alunos e cursos são mantidos em memória e quando o usuário desejar sair da aplicação os mesmos serão persistidos Já os dados de matrícula não são armazenados temporariamente em memória apenas persistindo no seu arquivo correspondente Abaixo está apresentado por meio de fluxogramas como se dá o passo a passo das funcionalidades do sistema desenvolvido Figura 2 Inserir Aluno Fonte Próprio autor Figura 4 Inserir Aluno Fonte Próprio autor Figura 5 Inserir Matrícula 9 Fonte Próprio autor Figura 6 Listar Alunos Fonte Próprio autor Figura 7 Listar Alunos por Curso Fonte Próprio autor Figura 8 Sair 10 Fonte Próprio autor Nas etapas de listar alunos temos que um dos passos da aplicação consiste em ordenar os alunos para só depois imprimir os dados Precisamos neste passo ensinar ao programa a como ordenar objetos do tipo Aluno No java podemos sobrescrever a função compareTo que compara dois objetos iguais Nossa implementação é apresentada abaixo public Boolean compareToAluno outro return thisgetNomecompareTooutrogetNome 0 A ideia do código acima é ordenar os objetos alunos de acordo com a ordenação dos nomes associados a estes objetos no caso em ordem alfabética Para ordenar optamos por implementar dois algoritmos muito famosos na literatura BubbleSort e InsertionSort A ideia do BubbleSort é percorrer a lista de elementos várias vezes de forma a inverter os elementos das posições j e j1 caso estejam desordenados Se repetirmos este procedimento o tamanho da lista temos que a lista final estará ordenada Já o algoritmo InsertionSort possui como ideia ordenar a medida que for inserindo um novo elemento na lista As implementações dos algoritmos estão descritos abaixo Figura 9 Algoritmo BubbleSort 11 Fonte Próprio autor Figura 10 Algoritmo InsertionSort Fonte Próprio autor Ambos os algoritmos possuem a mesma complexidade de pior caso 𝑂𝑛 2 Porém caso apenas algumas posições estejam fora de ordem a complexidade de melhor caso do InsertionSort é Já o BubbleSort sempre terá a mesma 𝑂𝑛 complexidade ou seja Θ𝑛 2 12 4 RESULTADOS E DISCUSSÃO Nesta seção será demonstrado a partir de imagens o funcionamento da aplicação Figura 11 Inserir Alunos 13 Fonte Próprio autor Figura 12 Inserir Cursos 14 Fonte Próprio autor Figura 13 Inserir Matrículas Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Informatica ERRO Curso não encontrado Matrícula não pode ser inserida Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Matematica Digite o ID do aluno 5 ERRO Aluno não encontrado Matrícula não pode ser inserida Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Matematica Digite o ID do aluno 1 Digite a nota NP1 10 Digite a nota NP2 10 Digite a nota de reposição 10 Digite a nota do exame 10 Matrícula inserida com sucesso Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Matematica Digite o ID do aluno 4 Digite a nota NP1 9 Digite a nota NP2 8 Digite a nota de reposição 7 Digite a nota do exame 6 Matrícula inserida com sucesso 16 Fonte Próprio autor Figura 14 Listar Alunos Fonte Próprio autor Figura 15 Listar Alunos por Curso Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 5 Digite o nome do curso Historia ERRO Curso não encontrado Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 5 Digite o nome do curso Matematica Alunos do Curso Matematica ID 4 Nome Gabriel ID 1 Nome Paulo Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 6 Saindo do sistema BUILD SUCCESSFUL total time 8 minutes 30 seconds Fonte Próprio autor 18 5 CONSIDERAÇÕES FINAIS Este trabalho propôs para os alunos que dado um contexto real construir uma aplicação eficiente para o problema proposto Neste trabalho apresentamos conceitos de linguagens orientadas a objetos e também sobre algoritmos de ordenação Vimos que em um contexto onde iremos ordenar e após inserir objetos a melhor técnica a ser utilizada é o InsertionSort Atividades que visam mesclar o aprendizado teórico com a prática tende a agregar muito no processo de aprendizagem Acreditamos que este trabalho contribuiu para o aprendizado e nos proporcionou um cenário de trabalho em equipe 19 6 REFERÊNCIAS BIBLIOGRÁFICAS CLARO D B SOBRAL J B M Programação em JAVA Livro programando em Java 1ª edição p 12 2008 CORMEN T H et al Algoritmos teoria e prática Editora Campus v 2 2002 INDRUSIAK L S Linguagem java Grupo JavaRS JUG Rio Grande do Sul 1996 RICARTE I L M Programação Orientada a Objetos uma abordagem com Java Disponível em httpwwwdcafeeunicampbrcursosPooJavaAulaspoojava Acesso em 17 de Agosto de 2023 v 29 n 10 2001 20 7 CÓDIGO FONTE Alunojava package aplicacaoaluno public class Aluno private int id private String nome public Alunoint id String nome thisid id thisnome nome public int getId return id public void setIdint id thisid id public String getNome return nome public void setNomeString nome thisnome nome public Boolean compareToAluno outro return thisgetNomecompareTooutrogetNome 0 Cursojava package aplicacaoaluno public class Curso private String nome private String nivel private int ano 21 public CursoString nome String nivel int ano thisnome nome thisnivel nivel thisano ano public String getNome return nome public void setNomeString nome thisnome nome public String getNivel return nivel public void setNivelString nivel thisnivel nivel public int getAno return ano public void setAnoint ano thisano ano Matriculajava package aplicacaoaluno public class Matricula private int iddoaluno private double notaNP1 private double notaNP2 private double notareposicao private double notaexame public Matriculaint iddoaluno double notaNP1 double notaNP2 double notareposicao double notaexame 22 thisiddoaluno iddoaluno thisnotaNP1 notaNP1 thisnotaNP2 notaNP2 thisnotareposicao notareposicao thisnotaexame notaexame public int getIddoaluno return iddoaluno public void setIddoalunoint iddoaluno thisiddoaluno iddoaluno public double getNotaNP1 return notaNP1 public void setNotaNP1double notaNP1 thisnotaNP1 notaNP1 public double getNotaNP2 return notaNP2 public void setNotaNP2double notaNP2 thisnotaNP2 notaNP2 public double getNotareposicao return notareposicao public void setNotareposicaodouble notareposicao thisnotareposicao notareposicao public double getNotaexame return notaexame public void setNotaexamedouble notaexame thisnotaexame notaexame 23 Ordenaçãojava package aplicacaoaluno import javautilArrayList public class Ordenacao public ArrayListAluno bubbleSortArrayListAluno alunos int n alunossize for int i 0 i n 1 i for int j 0 j n i 1 j if alunosgetjcompareToalunosgetj 1 Trocar alunosgetj e alunosgetj1 Aluno temp alunosgetj alunossetj alunosgetj 1 alunossetj 1 temp return alunos public ArrayListAluno insertionSortArrayListAluno alunos int n alunossize for int i 1 i n i Aluno chave alunosgeti int j i 1 while j 0 alunosgetjcompareTochave alunossetj 1 alunosgetj j j 1 alunossetj 1 chave return alunos AplicacaoAlunojava package aplicacaoaluno import javaioBufferedReader import javaioBufferedWriter import javaioFileReader 24 import javaioFileWriter import javaioIOException import javautilArrayList import javautilList import javautilScanner public class AplicacaoAluno private static ListAluno alunos new ArrayList private static ListCurso cursos new ArrayList private static Ordenacao ordenacao new Ordenacao public static int menu int opcao do SystemoutprintlnDigite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair Scanner scanner new ScannerSystemin opcao scannernextInt if opcao 0 opcao 7 SystemoutprintlnOpção Inválida while opcao 0 opcao 7 return opcao public static void mainString args carregarDados while true int opcao menu switch opcao case 1 inserirAluno break case 2 inserirCurso break case 3 inserirMatricula break case 4 listarAlunos break case 5 listarAlunosDeUmCurso break 25 case 6 salvarDados SystemoutprintlnSaindo do sistema return public static void inserirAluno Scanner scanner new ScannerSystemin SystemoutprintDigite o ID do aluno int id scannernextInt SystemoutprintDigite o nome do aluno scannernextLine String nome scannernextLine for Aluno aluno alunos if alunogetId id SystemoutprintlnERRO ID já cadastrado aluno não inserido return Aluno aluno new Alunoid nome alunosaddaluno SystemoutprintlnAluno inserido com sucesso public static void inserirCurso Scanner scanner new ScannerSystemin SystemoutprintDigite o nome do curso String nome scannernextLine forCurso curso cursos ifcursogetNomeequalsnome SystemoutprintlnERRO Nome de curso já existente return SystemoutprintDigite o nível do curso String nivel scannernextLine SystemoutprintDigite o ano do curso int ano scannernextInt Curso curso new Cursonome nivel ano cursosaddcurso String caminho cursogetNome cursogetNivel StringvalueOfcursogetAno csv 26 try FileWriter fileWriter new FileWritercaminho BufferedWriter bufferedWriter new BufferedWriterfileWriter bufferedWriterclose catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados SystemoutprintlnCurso inserido com sucesso public static void inserirMatricula Scanner scanner new ScannerSystemin SystemoutprintDigite o nome do curso String nomeCurso scannernextLine Curso cursoEncontrado null forCurso curso cursos ifcursogetNomeequalsnomeCurso cursoEncontrado curso break ifcursoEncontrado null SystemoutprintlnERRO Curso não encontrado Matrícula não pode ser inserida return SystemoutprintDigite o ID do aluno int idAluno scannernextInt Aluno alunoEncontrado null for Aluno aluno alunos if alunogetId idAluno alunoEncontrado aluno break if alunoEncontrado null SystemoutprintlnERRO Aluno não encontrado Matrícula não pode ser inserida return 27 String caminho cursoEncontradogetNome cursoEncontradogetNivel StringvalueOfcursoEncontradogetAno csv SystemoutprintDigite a nota NP1 double notaNP1 scannernextDouble SystemoutprintDigite a nota NP2 double notaNP2 scannernextDouble SystemoutprintDigite a nota de reposição double notaReposicao scannernextDouble SystemoutprintDigite a nota do exame double notaExame scannernextDouble Matricula matricula new MatriculaidAluno notaNP1 notaNP2 notaReposicao notaExame try FileWriter fileWriter new FileWritercaminho true BufferedWriter bufferedWriter new BufferedWriterfileWriter bufferedWriterwritematriculagetIddoaluno matriculagetNotaNP1 matriculagetNotaNP2 matriculagetNotareposicao matriculagetNotaexame bufferedWriternewLine bufferedWriterclose catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados SystemoutprintlnMatrícula inserida com sucesso public static void listarAlunos alunos ordenacaobubbleSortArrayListAluno alunos alunos ordenacaoinsertionSortArrayListAluno alunos SystemoutprintlnLista de Alunos for Aluno aluno alunos SystemoutprintlnID alunogetId Nome alunogetNome public static void listarAlunosDeUmCurso Scanner scanner new ScannerSystemin SystemoutprintDigite o nome do curso String nomeCurso scannernextLine Curso cursoEncontrado null 28 forCurso curso cursos ifcursogetNomeequalsnomeCurso cursoEncontrado curso break ifcursoEncontrado null SystemoutprintlnERRO Curso não encontrado return SystemoutprintlnAlunos do Curso nomeCurso String caminho cursoEncontradogetNome cursoEncontradogetNivel StringvalueOfcursoEncontradogetAno csv ListAluno alunosCurso new ArrayList try FileReader fileReader new FileReadercaminho BufferedReader bufferedReader new BufferedReaderfileReader String line while line bufferedReaderreadLine null String parts linesplit int id IntegerparseIntparts0 Aluno alunoEncontrado null for Aluno aluno alunos if alunogetId id alunoEncontrado aluno break alunosCursoaddalunoEncontrado bufferedReaderclose catch IOException e SystemoutprintlnERRO Não foi possível carregar os dados alunosCurso ordenacaobubbleSortArrayListAluno alunosCurso alunosCurso ordenacaoinsertionSortArrayListAluno alunosCursossss for Aluno aluno alunosCurso SystemoutprintlnID alunogetId Nome alunogetNome 29 public static void carregarDados try FileReader fileReader new FileReaderalunoscsv BufferedReader bufferedReader new BufferedReaderfileReader String line while line bufferedReaderreadLine null String parts linesplit int id IntegerparseIntparts0 String nome parts1 Aluno aluno new Alunoid nome alunosaddaluno bufferedReaderclose catch IOException e SystemoutprintlnERRO Não foi possível carregar os dados Alunos try FileReader fileReader1 new FileReadercursoscsv BufferedReader bufferedReader1 new BufferedReaderfileReader1 String line while line bufferedReader1readLine null String parts linesplit String nome parts0 String nivel parts1 int ano IntegerparseIntparts2 Curso curso new Cursonome nivel ano cursosaddcurso bufferedReader1close catch IOException e SystemoutprintlnERRO Não foi possível carregar os dados Cursos public static void salvarDados try FileWriter fileWriter new FileWriteralunoscsv BufferedWriter bufferedWriter new BufferedWriterfileWriter for Aluno aluno alunos 30 bufferedWriterwritealunogetId alunogetNome bufferedWriternewLine bufferedWriterclose catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados try FileWriter fileWriter1 new FileWritercursoscsv BufferedWriter bufferedWriter1 new BufferedWriterfileWriter1 for Curso curso cursos bufferedWriter1writecursogetNome cursogetNivel cursogetAno bufferedWriter1newLine bufferedWriter1close catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados APS DESENVOLVIMENTO DE SISTEMA PARA MANIPULAÇÃO DE SISTEMA DE UNIVERSIDADE Ciências da Computação NOME ALUNO MATRÍCULA 1 São Paulo 2º3º Semestre SUMÁRIO 1 INTRODUÇÃO2 2 REFERENCIAL TEÓRICO4 3 DESENVOLVIMENTO 7 4 RESULTADOS E DISCUSSÃO12 5 CONSIDERAÇÕES FINAIS18 6 REFERÊNCIAS BIBLIOGRÁFICAS19 7 CÓDIGO FONTE20 2 1 INTRODUÇÃO As linguagens de programação orientadas a objetos são muito populares na área de desenvolvimento de software Estas linguagens possuem um poder de expressividade e facilita o processo de modelagem de situaçõesproblema A orientação a objetos tem como objetivo principal modelar o mundo real e garantir que as taxas de manutenibilidade manutenção sejam maiores diante deste contexto Isso é possível pois utilizando uma linguagem de programação orientada a objetos conseguese obter um desenvolvimento mais rápido visto que este desenvolvimento ocorre em módulos em blocos de códigos correspondentes aos objetos e seus acoplamentos Através da orientação a objetos podese obter uma maior qualidade e agilidade no desenvolvimento pois o fator reusabilidade reutilização permite que se reutilize outros objetos que foram anteriormente desenvolvidos e podem ser facilmente incorporados na aplicação A reusabilidade também garante uma melhor manuseabilidade do programa pois os testes referentes aos componentes já foram previamente executados garantindo assim a utilização coesa dos objetos CLARO SOBRAL 2008 Um dos grandes diferenciais da programação orientada a objetos em relação a outros paradigmas de programação que também permitem a definição de estruturas e operações sobre essas estruturas está no conceito de herança mecanismo através do qual definições existentes podem ser facilmente estendidas Juntamente com a herança deve ser enfatizada a importância do polimorfismo que permite selecionar funcionalidades que um programa irá utilizar de forma dinâmica durante sua execução RICARTE 2001 Na orientação objetos qualquer parte modelada é vista como um objeto de uma classe Uma classe é um template de um objeto que especifica seus atributos e ações Os atributos são propriedades de um objeto Por exemplo a classe Pessoa pode possuir os atributos nome telefone e CPF Um objeto da classe Pessoa pode 3 ser por exemplo uma determinada pessoa com nome João que possui telefone 99 999999999 e CPF 01234567890 Uma outra característica das linguagens orientadas a objetos é o encapsulamento que permite que classes não consigam acessar diretamente os atributos de outras classes Isto é importante para que o código fique mais organizado e padronizado tornando o mesmo mais legível Dessa forma detalhes internos sobre a operação do objeto não são conhecidos permitindo que o usuário do objeto trabalhe em um nível mais alto de abstração sem preocupação com os detalhes internos da classe Essa facilidade permite simplificar a construção de programas com funcionalidades complexas tais como interfaces gráficas ou aplicações distribuídas RICARTE 2001 Uma das linguagens orientadas a objetos mais conhecida é a linguagem Java Através de classes objetos atributos métodos dentre outras características da orientação a objetos conseguese modelar o mundo real e abstrair informações incorporandoas à linguagem Java CLARO SOBRAL 2008 Java é uma linguagem simples de fácil aprendizado ou migração pois possui um reduzido número de construções A diminuição das construções mais suscetíveis a erros de programação tais como ponteiros e gerenciamento de memória via código de programação também faz com que a programação em Java seja mais eficiente Contém um conjunto de bibliotecas que fornecem grande parte da funcionalidade básica da linguagem incluindo rotinas de acesso à rede e criação de interface gráfica INDRUSIAK 1996 Java é a linguagem de programação orientada a objetos desenvolvida pela Sun Microsystems capaz de criar tanto aplicativos para desktop aplicações comerciais softwares robustos completos e independentes aplicativos para a Web Além disso caracterizase por ser muito parecida com C eliminando as características consideradas complexas dentre as quais ponteiros e herança múltipla CLARO SOBRAL 2008 Neste trabalho tem como objetivo desenvolver uma aplicação desktop para o auxílio do gerenciamento da Univerdade Amazônia dos seus alunos e cursos utilizando uma linguagem orientada a objetos Neste presente capítulo apresentamos de forma sucinta uma introdução às linguagens orientadas a objetos No Capítulo 2 será descrito o referencial teórico onde serão apresentados os algoritmos e classes usadas no processamento de 4 dados No capítulo 3 será descrito todos os estágios do processo de desenvolvimento do sistema computacional No capítulo 4 será apresentado os resultados e discussões No capítulo 5 serão descritas as considerações finais deste trabalho O capítulo 6 conterá as referências bibliográficas utilizadas Por fim no capítulo 7 é apresentado o código fonte da aplicação 2 REFERENCIAL TEÓRICO A situação problema referese ao controle e armazenamento de dados de alunos e cursos Temos as seguintes classes em nossa aplicação Aluno Modela aluno Atributos int id Identificador do aluno String nome Nome do aluno Métodos public int getId Retorna o id do aluno public void setIdint id Atualiza o id do aluno public String getNome Retorna o nome do aluno public void setNomeString nome Atualiza o nome do aluno public Boolean compareToAluno outro Responsável por ditar como a classe deve ser ordenado Curso Modela curso Atributos String nome Nome do curso String nivel Nível do curso técnico graduação especialização mestrado e entre outros int ano Ano do curso Métodos public String getNome Retorna o nome do curso public void setNomeString nome Atualiza o nome do curso public String getNivel Retorna o nível do curso public void setNivelString nivel Atualiza o nível do curso public int getAno Retorna o ano do curso public void setAnoint ano Atualiza o ano do curso 5 Matricula Modela o relacionamento aluno e curso ou seja alunos matriculados Atributos int iddoaluno Identificador do aluno double notaNP1 Nota do aluno na prova 1 double notaNP2 Nota do aluno na prova 2 double notareposicao Nota do aluno na prova de reposição double notaexame Nota do aluno no exame Métodos public int getIddoaluno Retorna o id do aluno public void setIddoalunoint iddoaluno Atualiza o id do aluno public double getNotaNP1 Retorna a nota da prova 1 public void setNotaNP1double notaNP1 Atualiza a nota da prova 1 public double getNotaNP2 Retorna a nota da prova 2 public void setNotaNP2double notaNP2 Atualiza a nota da prova 2 public double getNotareposicao Retorna a nota da prova de reposição public void setNotareposicaodouble notareposicao Atualiza a nota da prova de reposição public double getNotaexame Retorna a nota do exame public void setNotaexamedouble notaexame Atualiza a nota no exame Ordenação Modela os métodos de ordenação Atributos Não possui atributos Métodos public ArrayListAluno bubbleSortArrayListAluno alunos Responsável por ordenar uma lista de alunos utilizando o método de ordenação BubbleSort CORMEN et al 2002 public ArrayListAluno insertionSortArrayListAluno alunos Responsável por ordenar uma lista de alunos utilizando o método de ordenação InsertionSort CORMEN et al 2002 6 AplicacaoAluno Responsável pela aplicação Atributos ListAluno alunos Lista de alunos cadastrados no sistema ListCurso cursos Lista de cursos cadastrados no sistema Ordenacao ordenacao Objeto de ordenação Métodos public static int menu Lista as opções do menu ler a opção selecionada pelo usuário e retorna a mesma public static void mainString args Primeira a função a ser executada Irá intermediar a aplicação public static void inserirAluno Ler os dados de um aluno e armazena na lista de alunos public static void inserirCurso Ler os dados de um curso e armazena na lista de cursos public static void inserirMatricula Ler os dados de uma matricula e armazena os dados em arquivo public static void listarAlunosDeUmCurso Imprime os dados dos alunos de um curso específico ordenados de forma alfabética public static void carregarDados Ler os dados de alunos e cursos armazenados nos arquivos public static void salvarDados Armazena os dados de alunos e cursos armazenados nos arquivos Abaixo é apresentado o diagrama de classes da aplicação resumindo o que foi exposto sobre as classes Figura 1 Diagrama de Classes 7 Fonte Próprio autor 3 DESENVOLVIMENTO A aplicação foi desenvolvida na linguagem Java utilizando a IDE Apache NetBeans A aplicação tem as seguintes funções Inserir Aluno Cadastrar um novo aluno Inserir Curso Cadastrar um novo curso Inserir Matrícula Vincula um aluno a um curso Listar Alunos Lista todos os alunos em ordem alfabética Listar Alunos de um Curso Lista todos os alunos de um curso Sair Sair da aplicação Todos os dados são persistidos em arquivos csv Um arquivo CSV Comma Separated Values em português valores separados por vírgulas é um arquivo de texto simples que armazena informações de planilhas e tabelas O conteúdo geralmente é uma tabela de texto números ou datas Os arquivos CSV 8 podem ser facilmente importados e exportados usando programas que armazenam dados em tabelas Em nossa aplicação temos as seguintes estruturas de arquivos alunoscsv Armazena os dados dos alunos Cada linha deste arquivo equivale a um aluno São armazenados os dados de id e senha do aluno cursoscsv Armazena os dados dos cursos Cada linha deste arquivo é equivalente a um curso São armazenados os seguintes dados nome nível e ano Para cada linha de cursoscsv é criado o arquivo nomenivelanocsv substituindo os devidos valores Esse arquivo irá armazenar os dados da matrícula Cada linha deste arquivo irá armazenar o id do aluno nota NP1 nota NP2 nota reposição e nota exame Os dados de alunos e cursos são mantidos em memória e quando o usuário desejar sair da aplicação os mesmos serão persistidos Já os dados de matrícula não são armazenados temporariamente em memória apenas persistindo no seu arquivo correspondente Abaixo está apresentado por meio de fluxogramas como se dá o passo a passo das funcionalidades do sistema desenvolvido Figura 2 Inserir Aluno Fonte Próprio autor Figura 4 Inserir Aluno Mensagem de ERRO Aluno cadastrado com sucesso Verifica se o id já foi cadastrado Solicita os dados de id e nome 9 Fonte Próprio autor Figura 5 Inserir Matrícula Fonte Próprio autor Figura 6 Listar Alunos Fonte Próprio autor Figura 7 Listar Alunos por Curso Solicita dados de nome nível e ano Mensagem de ERRO Curso cadastrado com sucesso Verifica se o nome já foi cadastrado Matrícul a Cadastr Recebe dados de notas Solicita dados de id do Mensag em de ERRO Solicita nome do curso Verifica se o id é cadastra Ordena Lista de Alunos Imprime Alunos 10 Fonte Próprio autor Figura 8 Sair Fonte Próprio autor Nas etapas de listar alunos temos que um dos passos da aplicação consiste em ordenar os alunos para só depois imprimir os dados Precisamos neste passo ensinar ao programa a como ordenar objetos do tipo Aluno No java podemos sobrescrever a função compareTo que compara dois objetos iguais Nossa implementação é apresentada abaixo public Boolean compareToAluno outro return thisgetNomecompareTooutrogetNome 0 A ideia do código acima é ordenar os objetos alunos de acordo com a ordenação dos nomes associados a estes objetos no caso em ordem alfabética Para ordenar optamos por implementar dois algoritmos muito famosos na literatura BubbleSort e InsertionSort A ideia do BubbleSort é percorrer a lista de elementos várias vezes de forma a inverter os elementos das posições j e j1 caso estejam desordenados Se Mensag em de ERRO Verifica se o nome Recebe nome do curso Ordena Lista de Alunos Imprime Alunos Persistir dados dos alunos e cursos Sair do Sistema 11 repetirmos este procedimento o tamanho da lista temos que a lista final estará ordenada Já o algoritmo InsertionSort possui como ideia ordenar a medida que for inserindo um novo elemento na lista As implementações dos algoritmos estão descritos abaixo Figura 9 Algoritmo BubbleSort Fonte Próprio autor Figura 10 Algoritmo InsertionSort Fonte Próprio autor Ambos os algoritmos possuem a mesma complexidade de pior caso On 2 Porém caso apenas algumas posições estejam fora de ordem a complexidade de melhor caso do InsertionSort é On Já o BubbleSort sempre terá a mesma complexidade ou seja Θn 2 12 4 RESULTADOS E DISCUSSÃO Nesta seção será demonstrado a partir de imagens o funcionamento da aplicação Figura 11 Inserir Alunos 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 1 Digite o ID do aluno 1 Digite o nome do aluno Paulo Aluno inserido com sucesso Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 1 Digite o ID do aluno 1 Digite o nome do aluno Andre ERRO ID já cadastrado aluno não inserido Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 1 Digite o ID do aluno 2 Digite o nome do aluno Andre Aluno inserido com sucesso 14 Fonte Próprio autor Figura 12 Inserir Cursos 15 Fonte Próprio autor Figura 13 Inserir Matrículas Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Informatica ERRO Curso não encontrado Matrícula não pode ser inserida Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Matematica Digite o ID do aluno 5 ERRO Aluno não encontrado Matrícula não pode ser inserida Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Matematica Digite o ID do aluno 1 Digite a nota NP1 10 Digite a nota NP2 10 Digite a nota de reposição 10 Digite a nota do exame 10 Matrícula inserida com sucesso Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Matematica Digite o ID do aluno 4 Digite a nota NP1 9 Digite a nota NP2 8 Digite a nota de reposição 7 Digite a nota do exame 6 Matrícula inserida com sucesso 17 Fonte Próprio autor Figura 14 Listar Alunos Fonte Próprio autor Figura 15 Listar Alunos por Curso Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 5 Digite o nome do curso Historia ERRO Curso não encontrado Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 5 Digite o nome do curso Matematica Alunos do Curso Matematica ID 4 Nome Gabriel ID 1 Nome Paulo Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 6 Saindo do sistema BUILD SUCCESSFUL total time 8 minutes 30 seconds Fonte Próprio autor 19 5 CONSIDERAÇÕES FINAIS Este trabalho propôs para os alunos que dado um contexto real construir uma aplicação eficiente para o problema proposto Neste trabalho apresentamos conceitos de linguagens orientadas a objetos e também sobre algoritmos de ordenação Vimos que em um contexto onde iremos ordenar e após inserir objetos a melhor técnica a ser utilizada é o InsertionSort Atividades que visam mesclar o aprendizado teórico com a prática tende a agregar muito no processo de aprendizagem Acreditamos que este trabalho contribuiu para o aprendizado e nos proporcionou um cenário de trabalho em equipe 20 6 REFERÊNCIAS BIBLIOGRÁFICAS CLARO D B SOBRAL J B M Programação em JAVA Livro programando em Java 1ª edição p 12 2008 CORMEN T H et al Algoritmos teoria e prática Editora Campus v 2 2002 INDRUSIAK L S Linguagem java Grupo JavaRS JUG Rio Grande do Sul 1996 RICARTE I L M Programação Orientada a Objetos uma abordagem com Java Disponível em httpwwwdcafeeunicampbrcursosPooJavaAulaspoojava Acesso em 17 de Agosto de 2023 v 29 n 10 2001 21 7 CÓDIGO FONTE Alunojava package aplicacaoaluno public class Aluno private int id private String nome public Alunoint id String nome thisid id thisnome nome public int getId return id public void setIdint id thisid id public String getNome return nome public void setNomeString nome thisnome nome public Boolean compareToAluno outro return thisgetNomecompareTooutrogetNome 0 Cursojava package aplicacaoaluno public class Curso private String nome private String nivel private int ano 22 public CursoString nome String nivel int ano thisnome nome thisnivel nivel thisano ano public String getNome return nome public void setNomeString nome thisnome nome public String getNivel return nivel public void setNivelString nivel thisnivel nivel public int getAno return ano public void setAnoint ano thisano ano Matriculajava package aplicacaoaluno public class Matricula private int iddoaluno private double notaNP1 private double notaNP2 private double notareposicao private double notaexame public Matriculaint iddoaluno double notaNP1 double notaNP2 double notareposicao double notaexame thisiddoaluno iddoaluno 23 thisnotaNP1 notaNP1 thisnotaNP2 notaNP2 thisnotareposicao notareposicao thisnotaexame notaexame public int getIddoaluno return iddoaluno public void setIddoalunoint iddoaluno thisiddoaluno iddoaluno public double getNotaNP1 return notaNP1 public void setNotaNP1double notaNP1 thisnotaNP1 notaNP1 public double getNotaNP2 return notaNP2 public void setNotaNP2double notaNP2 thisnotaNP2 notaNP2 public double getNotareposicao return notareposicao public void setNotareposicaodouble notareposicao thisnotareposicao notareposicao public double getNotaexame return notaexame public void setNotaexamedouble notaexame thisnotaexame notaexame 24 Ordenaçãojava package aplicacaoaluno import javautilArrayList public class Ordenacao public ArrayListAluno bubbleSortArrayListAluno alunos int n alunossize for int i 0 i n 1 i for int j 0 j n i 1 j if alunosgetjcompareToalunosgetj 1 Trocar alunosgetj e alunosgetj1 Aluno temp alunosgetj alunossetj alunosgetj 1 alunossetj 1 temp return alunos public ArrayListAluno insertionSortArrayListAluno alunos int n alunossize for int i 1 i n i Aluno chave alunosgeti int j i 1 while j 0 alunosgetjcompareTochave alunossetj 1 alunosgetj j j 1 alunossetj 1 chave return alunos AplicacaoAlunojava package aplicacaoaluno import javaioBufferedReader import javaioBufferedWriter import javaioFileReader import javaioFileWriter import javaioIOException 25 import javautilArrayList import javautilList import javautilScanner public class AplicacaoAluno private static ListAluno alunos new ArrayList private static ListCurso cursos new ArrayList private static Ordenacao ordenacao new Ordenacao public static int menu int opcao do SystemoutprintlnDigite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair Scanner scanner new ScannerSystemin opcao scannernextInt if opcao 0 opcao 7 SystemoutprintlnOpção Inválida while opcao 0 opcao 7 return opcao public static void mainString args carregarDados while true int opcao menu switch opcao case 1 inserirAluno break case 2 inserirCurso break case 3 inserirMatricula break case 4 listarAlunos break case 5 listarAlunosDeUmCurso break case 6 salvarDados 26 SystemoutprintlnSaindo do sistema return public static void inserirAluno Scanner scanner new ScannerSystemin SystemoutprintDigite o ID do aluno int id scannernextInt SystemoutprintDigite o nome do aluno scannernextLine String nome scannernextLine for Aluno aluno alunos if alunogetId id SystemoutprintlnERRO ID já cadastrado aluno não inserido return Aluno aluno new Alunoid nome alunosaddaluno SystemoutprintlnAluno inserido com sucesso public static void inserirCurso Scanner scanner new ScannerSystemin SystemoutprintDigite o nome do curso String nome scannernextLine forCurso curso cursos ifcursogetNomeequalsnome SystemoutprintlnERRO Nome de curso já existente return SystemoutprintDigite o nível do curso String nivel scannernextLine SystemoutprintDigite o ano do curso int ano scannernextInt Curso curso new Cursonome nivel ano cursosaddcurso String caminho cursogetNome cursogetNivel StringvalueOfcursogetAno csv try FileWriter fileWriter new FileWritercaminho BufferedWriter bufferedWriter new BufferedWriterfileWriter 27 bufferedWriterclose catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados SystemoutprintlnCurso inserido com sucesso public static void inserirMatricula Scanner scanner new ScannerSystemin SystemoutprintDigite o nome do curso String nomeCurso scannernextLine Curso cursoEncontrado null forCurso curso cursos ifcursogetNomeequalsnomeCurso cursoEncontrado curso break ifcursoEncontrado null SystemoutprintlnERRO Curso não encontrado Matrícula não pode ser inserida return SystemoutprintDigite o ID do aluno int idAluno scannernextInt Aluno alunoEncontrado null for Aluno aluno alunos if alunogetId idAluno alunoEncontrado aluno break if alunoEncontrado null SystemoutprintlnERRO Aluno não encontrado Matrícula não pode ser inserida return String caminho cursoEncontradogetNome cursoEncontradogetNivel StringvalueOfcursoEncontradogetAno csv 28 SystemoutprintDigite a nota NP1 double notaNP1 scannernextDouble SystemoutprintDigite a nota NP2 double notaNP2 scannernextDouble SystemoutprintDigite a nota de reposição double notaReposicao scannernextDouble SystemoutprintDigite a nota do exame double notaExame scannernextDouble Matricula matricula new MatriculaidAluno notaNP1 notaNP2 notaReposicao notaExame try FileWriter fileWriter new FileWritercaminho true BufferedWriter bufferedWriter new BufferedWriterfileWriter bufferedWriterwritematriculagetIddoaluno matriculagetNotaNP1 matriculagetNotaNP2 matriculagetNotareposicao matriculagetNotaexame bufferedWriternewLine bufferedWriterclose catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados SystemoutprintlnMatrícula inserida com sucesso public static void listarAlunos alunos ordenacaobubbleSortArrayListAluno alunos alunos ordenacaoinsertionSortArrayListAluno alunos SystemoutprintlnLista de Alunos for Aluno aluno alunos SystemoutprintlnID alunogetId Nome alunogetNome public static void listarAlunosDeUmCurso Scanner scanner new ScannerSystemin SystemoutprintDigite o nome do curso String nomeCurso scannernextLine Curso cursoEncontrado null forCurso curso cursos ifcursogetNomeequalsnomeCurso cursoEncontrado curso break 29 ifcursoEncontrado null SystemoutprintlnERRO Curso não encontrado return SystemoutprintlnAlunos do Curso nomeCurso String caminho cursoEncontradogetNome cursoEncontradogetNivel StringvalueOfcursoEncontradogetAno csv ListAluno alunosCurso new ArrayList try FileReader fileReader new FileReadercaminho BufferedReader bufferedReader new BufferedReaderfileReader String line while line bufferedReaderreadLine null String parts linesplit int id IntegerparseIntparts0 Aluno alunoEncontrado null for Aluno aluno alunos if alunogetId id alunoEncontrado aluno break alunosCursoaddalunoEncontrado bufferedReaderclose catch IOException e SystemoutprintlnERRO Não foi possível carregar os dados alunosCurso ordenacaobubbleSortArrayListAluno alunosCurso alunosCurso ordenacaoinsertionSortArrayListAluno alunosCursossss for Aluno aluno alunosCurso SystemoutprintlnID alunogetId Nome alunogetNome public static void carregarDados try 30 FileReader fileReader new FileReaderalunoscsv BufferedReader bufferedReader new BufferedReaderfileReader String line while line bufferedReaderreadLine null String parts linesplit int id IntegerparseIntparts0 String nome parts1 Aluno aluno new Alunoid nome alunosaddaluno bufferedReaderclose catch IOException e SystemoutprintlnERRO Não foi possível carregar os dados Alunos try FileReader fileReader1 new FileReadercursoscsv BufferedReader bufferedReader1 new BufferedReaderfileReader1 String line while line bufferedReader1readLine null String parts linesplit String nome parts0 String nivel parts1 int ano IntegerparseIntparts2 Curso curso new Cursonome nivel ano cursosaddcurso bufferedReader1close catch IOException e SystemoutprintlnERRO Não foi possível carregar os dados Cursos public static void salvarDados try FileWriter fileWriter new FileWriteralunoscsv BufferedWriter bufferedWriter new BufferedWriterfileWriter for Aluno aluno alunos bufferedWriterwritealunogetId alunogetNome bufferedWriternewLine bufferedWriterclose 31 catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados try FileWriter fileWriter1 new FileWritercursoscsv BufferedWriter bufferedWriter1 new BufferedWriterfileWriter1 for Curso curso cursos bufferedWriter1writecursogetNome cursogetNivel cursogetAno bufferedWriter1newLine bufferedWriter1close catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados
Send your question to AI and receive an answer instantly
Recommended for you
11
Estrutura de Dados
Estrutura de Dados
UNIP
38
Desenvolvimento de Sistema para Manipulação de Dados em Arquivos e Estruturas Dinâmicas
Estrutura de Dados
UNIP
4
Lista de Exercícios Estrutura de Dados UNIP - Dicionários Listas Filas e Algoritmos
Estrutura de Dados
UNIP
6
Sistema para Analise de Performance de Algoritmo de Ordenação de Dados
Estrutura de Dados
UNIP
41
Eficiência e Complexidade Computacional: Conceitos e Exemplos
Estrutura de Dados
UFS
2
Trabalho Estrutura de Dados II: Tela de Controle Aluno com PreparedStatement e Banco de Dados
Estrutura de Dados
UNESC
6
Analise Textual de Resumos Cientificos - Trabalho Academico
Estrutura de Dados
USJT
21
Análise Comparativa de Algoritmos de Ordenação em C e Golang: Estudo de Desempenho com Dados Reais
Estrutura de Dados
UNIOESTE
1
Trabalho Pratico de Programacao Orientada a Objetos - Sistema com Entidades e Persistencia
Estrutura de Dados
UFSJ
2
Prova de Grafos
Estrutura de Dados
UESPI
Preview text
2º3º Ciência da Computação CC Orientações para a disciplina de Atividades Práticas Supervisionadas 2019 ESTRUTURA DE DADOS TEMA PROPOSTA DO TRABALHO APRESENTAÇÃO DO TRABALHO ATIVIDADES PRÁTICAS SUPERVISIONADAS APS I TEMA DESENVOLVIMENTO DE SISTEMA PARA MANIPULAÇÃO DE SISTEMA DE UNIVERSIDADE II PROPOSTA DO TRABALHO As Atividades Práticas Supervisionadas serão constituídas pelos seguintes tópicos 1 O grupo deverá desenvolver um sistema para gerenciamento da Univerdade Amazônia responsável por pesquisar desenvolver artigos científicos e livros relacionados à ciência e ao meio ambiente 2 O grupo deverá usar a linguagem Java e um sistema de arquivos no formato CSV Para fazer a interface deve ser desenvolvido um menu na entrada padrão do sistema 3 No banco de dados teremos três tipos de arquivos Um arquivo CSV com os dados dos alunos na ordem idnome Um arquivo CSV com os dados dos cursos na ordem nomenívelano Para cada curso um arquivo com o nome nomenívelanocsv com as informações das notas dos alunos naquele curso na ordem iddoalunonotaNP1notaNP2notareposicaonotaexame Havendo a possibilidade de o arquivo não ter nenhum dado representando o fato de que ninguém cursou aquela matéria naquele ano 4 É esperado que o sistema tenha um controle de erros para entradas do usuário final 5 O grupo deverá escrever uma monografia sobre os aspectos teóricos que envolvem o projeto bem como sobre todos os assuntos relativos ao desenvolvimento do sistema computacional A estrutura básica da monografia é apresentada abaixo a Introdução deve conter uma breve descrição a respeito do uso de uma linguagem orientada à objetos b Referencial Teórico deve apresentar e explicar os algoritmos e classes usadas no processamento de dados c Desenvolvimento deve descrever todos os estágios do processo de desenvolvimento do sistema computacional Deverão ser abordados os seguintes tópicos Processo de acesso aos dados processo de visualização dos dados processo de algoritmos referentes ao processamento dos dados processo da implementação da interface com o usuário d Resultados e Discussão deve apresentar um conjunto de testes envolvendo as técnicas implementadas Nestes testes o grupo deverá demonstrar a imagens do programa funcionando É fundamental que a estrutura do programa seja apresentada em forma de diagrama de identificar as vantagens de cada classepacote usada e Considerações Finais deve apresentar as considerações do grupo a respeito das técnicas escolhidas bem como sobre os resultados obtidos f Referências Bibliográficas deve conter todas as referências utilizadas para escrita e desenvolvimento do projeto g Código Fonte deve apresentar todo o código fonte do projeto desenvolvido 6 O nível de refinamento tratamento de erros assim como a composição escolhida para as classes terão impacto direto na nota final deste trabalho Novas funcionalidades poderão ser implementadas neste sistema desde que relacionadas ao tema abordado 7 A nota atribuída ao trabalho entregue configura a nota das APS III APRESENTAÇÃO DO TRABALHO 1 O grupo deverá ser composto de no máximo 5 alunos 2 Todas as etapas do trabalho deverão ser escritas em fonte ARIAL 12 espaçamento 15 margem direita 25 cm e margem esquerda 25 cm O trabalho deverá ter formato A4 3 Limites de páginas Introdução 2 páginas e no máximo 4 páginas Referencial Teórico 3 páginas e no máximo 5 páginas Desenvolvimento mínimo de 10 páginas e máximo de 15 páginas Resultados e Discussão mínimo de 6 páginas e máximo de 10 páginas Considerações Finais mínimo de 1 página e máximo de 3 páginas Referências Bibliográficas mínimo 2 páginas Código Fonte não há limite 4 O trabalho junto com a ficha padrão de Atividades Práticas Supervisionadas de cada integrante do grupo ilustrando cronologicamente cada um dos itens segundo a orientação do professor supervisor desta atividade deverá ser postado em httptrabalhosacademicosunipbrentrega até 23112019 Total 80 horas 5 Estrutura do trabalho 51Capa identificando o curso o tema a relação de alunos do grupo nomeRA 52Índice 53Objetivo do trabalho 54Introdução 55Referencial Teórico 56Desenvolvimento 57Resultados e Discussão 58Considerações Finais 59 Referências Bibliográficas 510 Código fonte 511 Ficha de Atividades Práticas Supervisionadas IV MODELO DE FICHA DE ATIVIDADES PRÁTICAS SUPERVISIONADAS FICHA DE ATIVIDADES PRÁTICAS SUPERVISIONADAS APS Atividades Práticas Supervisionadas laboratórios atividades em biblioteca Iniciação Científica trabalhos individuais e em grupo práticas de NOME RA CURSO CAMPUS SEMESTRE TUR DATA ATIVIDADE TOTAL DE HORAS ALUNO TOTAL DE HOR APS DESENVOLVIMENTO DE SISTEMA PARA MANIPULAÇÃO DE SISTEMA DE UNIVERSIDADE Ciências da Computação NOME ALUNO MATRÍCULA São Paulo 2º3º Semestre 1 SUMÁRIO 1 INTRODUÇÃO2 2 REFERENCIAL TEÓRICO4 3 DESENVOLVIMENTO7 4 RESULTADOS E DISCUSSÃO12 5 CONSIDERAÇÕES FINAIS18 6 REFERÊNCIAS BIBLIOGRÁFICAS19 7 CÓDIGO FONTE20 2 1 INTRODUÇÃO As linguagens de programação orientadas a objetos são muito populares na área de desenvolvimento de software Estas linguagens possuem um poder de expressividade e facilita o processo de modelagem de situaçõesproblema A orientação a objetos tem como objetivo principal modelar o mundo real e garantir que as taxas de manutenibilidade manutenção sejam maiores diante deste contexto Isso é possível pois utilizando uma linguagem de programação orientada a objetos conseguese obter um desenvolvimento mais rápido visto que este desenvolvimento ocorre em módulos em blocos de códigos correspondentes aos objetos e seus acoplamentos Através da orientação a objetos podese obter uma maior qualidade e agilidade no desenvolvimento pois o fator reusabilidade reutilização permite que se reutilize outros objetos que foram anteriormente desenvolvidos e podem ser facilmente incorporados na aplicação A reusabilidade também garante uma melhor manuseabilidade do programa pois os testes referentes aos componentes já foram previamente executados garantindo assim a utilização coesa dos objetos CLARO SOBRAL 2008 Um dos grandes diferenciais da programação orientada a objetos em relação a outros paradigmas de programação que também permitem a definição de estruturas e operações sobre essas estruturas está no conceito de herança mecanismo através do qual definições existentes podem ser facilmente estendidas Juntamente com a herança deve ser enfatizada a importância do polimorfismo que permite selecionar funcionalidades que um programa irá utilizar de forma dinâmica durante sua execução RICARTE 2001 Na orientação objetos qualquer parte modelada é vista como um objeto de uma classe Uma classe é um template de um objeto que especifica seus atributos e ações Os atributos são propriedades de um objeto Por exemplo a classe Pessoa pode possuir os atributos nome telefone e CPF Um objeto da classe Pessoa pode ser por exemplo uma determinada pessoa com nome João que possui telefone 99 999999999 e CPF 01234567890 Uma outra característica das linguagens orientadas a objetos é o encapsulamento que permite que classes não consigam acessar diretamente os atributos de outras classes Isto é importante para que o código fique mais organizado e padronizado tornando o mesmo mais legível 3 Dessa forma detalhes internos sobre a operação do objeto não são conhecidos permitindo que o usuário do objeto trabalhe em um nível mais alto de abstração sem preocupação com os detalhes internos da classe Essa facilidade permite simplificar a construção de programas com funcionalidades complexas tais como interfaces gráficas ou aplicações distribuídas RICARTE 2001 Uma das linguagens orientadas a objetos mais conhecida é a linguagem Java Através de classes objetos atributos métodos dentre outras características da orientação a objetos conseguese modelar o mundo real e abstrair informações incorporandoas à linguagem Java CLARO SOBRAL 2008 Java é uma linguagem simples de fácil aprendizado ou migração pois possui um reduzido número de construções A diminuição das construções mais suscetíveis a erros de programação tais como ponteiros e gerenciamento de memória via código de programação também faz com que a programação em Java seja mais eficiente Contém um conjunto de bibliotecas que fornecem grande parte da funcionalidade básica da linguagem incluindo rotinas de acesso à rede e criação de interface gráfica INDRUSIAK 1996 Java é a linguagem de programação orientada a objetos desenvolvida pela Sun Microsystems capaz de criar tanto aplicativos para desktop aplicações comerciais softwares robustos completos e independentes aplicativos para a Web Além disso caracterizase por ser muito parecida com C eliminando as características consideradas complexas dentre as quais ponteiros e herança múltipla CLARO SOBRAL 2008 Neste trabalho tem como objetivo desenvolver uma aplicação desktop para o auxílio do gerenciamento da Univerdade Amazônia dos seus alunos e cursos utilizando uma linguagem orientada a objetos Neste presente capítulo apresentamos de forma sucinta uma introdução às linguagens orientadas a objetos No Capítulo 2 será descrito o referencial teórico onde serão apresentados os algoritmos e classes usadas no processamento de dados No capítulo 3 será descrito todos os estágios do processo de desenvolvimento do sistema computacional No capítulo 4 será apresentado os resultados e discussões No capítulo 5 serão descritas as considerações finais deste trabalho O capítulo 6 conterá as referências bibliográficas utilizadas Por fim no capítulo 7 é apresentado o código fonte da aplicação 4 2 REFERENCIAL TEÓRICO A situação problema referese ao controle e armazenamento de dados de alunos e cursos Temos as seguintes classes em nossa aplicação Aluno Modela aluno Atributos int id Identificador do aluno String nome Nome do aluno Métodos public int getId Retorna o id do aluno public void setIdint id Atualiza o id do aluno public String getNome Retorna o nome do aluno public void setNomeString nome Atualiza o nome do aluno public Boolean compareToAluno outro Responsável por ditar como a classe deve ser ordenado Curso Modela curso Atributos String nome Nome do curso String nivel Nível do curso técnico graduação especialização mestrado e entre outros int ano Ano do curso Métodos public String getNome Retorna o nome do curso public void setNomeString nome Atualiza o nome do curso public String getNivel Retorna o nível do curso public void setNivelString nivel Atualiza o nível do curso public int getAno Retorna o ano do curso public void setAnoint ano Atualiza o ano do curso Matricula Modela o relacionamento aluno e curso ou seja alunos matriculados Atributos int iddoaluno Identificador do aluno double notaNP1 Nota do aluno na prova 1 double notaNP2 Nota do aluno na prova 2 5 double notareposicao Nota do aluno na prova de reposição double notaexame Nota do aluno no exame Métodos public int getIddoaluno Retorna o id do aluno public void setIddoalunoint iddoaluno Atualiza o id do aluno public double getNotaNP1 Retorna a nota da prova 1 public void setNotaNP1double notaNP1 Atualiza a nota da prova 1 public double getNotaNP2 Retorna a nota da prova 2 public void setNotaNP2double notaNP2 Atualiza a nota da prova 2 public double getNotareposicao Retorna a nota da prova de reposição public void setNotareposicaodouble notareposicao Atualiza a nota da prova de reposição public double getNotaexame Retorna a nota do exame public void setNotaexamedouble notaexame Atualiza a nota no exame Ordenação Modela os métodos de ordenação Atributos Não possui atributos Métodos public ArrayListAluno bubbleSortArrayListAluno alunos Responsável por ordenar uma lista de alunos utilizando o método de ordenação BubbleSort CORMEN et al 2002 public ArrayListAluno insertionSortArrayListAluno alunos Responsável por ordenar uma lista de alunos utilizando o método de ordenação InsertionSort CORMEN et al 2002 AplicacaoAluno Responsável pela aplicação Atributos ListAluno alunos Lista de alunos cadastrados no sistema ListCurso cursos Lista de cursos cadastrados no sistema Ordenacao ordenacao Objeto de ordenação Métodos 6 public static int menu Lista as opções do menu ler a opção selecionada pelo usuário e retorna a mesma public static void mainString args Primeira a função a ser executada Irá intermediar a aplicação public static void inserirAluno Ler os dados de um aluno e armazena na lista de alunos public static void inserirCurso Ler os dados de um curso e armazena na lista de cursos public static void inserirMatricula Ler os dados de uma matricula e armazena os dados em arquivo public static void listarAlunosDeUmCurso Imprime os dados dos alunos de um curso específico ordenados de forma alfabética public static void carregarDados Ler os dados de alunos e cursos armazenados nos arquivos public static void salvarDados Armazena os dados de alunos e cursos armazenados nos arquivos Abaixo é apresentado o diagrama de classes da aplicação resumindo o que foi exposto sobre as classes Figura 1 Diagrama de Classes Fonte Próprio autor 7 3 DESENVOLVIMENTO A aplicação foi desenvolvida na linguagem Java utilizando a IDE Apache NetBeans A aplicação tem as seguintes funções Inserir Aluno Cadastrar um novo aluno Inserir Curso Cadastrar um novo curso Inserir Matrícula Vincula um aluno a um curso Listar Alunos Lista todos os alunos em ordem alfabética Listar Alunos de um Curso Lista todos os alunos de um curso Sair Sair da aplicação Todos os dados são persistidos em arquivos csv Um arquivo CSV Comma Separated Values em português valores separados por vírgulas é um arquivo de texto simples que armazena informações de planilhas e tabelas O conteúdo geralmente é uma tabela de texto números ou datas Os arquivos CSV podem ser facilmente importados e exportados usando programas que armazenam dados em tabelas Em nossa aplicação temos as seguintes estruturas de arquivos alunoscsv Armazena os dados dos alunos Cada linha deste arquivo equivale a um aluno São armazenados os dados de id e senha do aluno cursoscsv Armazena os dados dos cursos Cada linha deste arquivo é equivalente a um curso São armazenados os seguintes dados nome nível e ano Para cada linha de cursoscsv é criado o arquivo nomenivelanocsv substituindo os devidos valores Esse arquivo irá armazenar os dados da matrícula Cada linha deste arquivo irá armazenar o id do aluno nota NP1 nota NP2 nota reposição e nota exame 8 Os dados de alunos e cursos são mantidos em memória e quando o usuário desejar sair da aplicação os mesmos serão persistidos Já os dados de matrícula não são armazenados temporariamente em memória apenas persistindo no seu arquivo correspondente Abaixo está apresentado por meio de fluxogramas como se dá o passo a passo das funcionalidades do sistema desenvolvido Figura 2 Inserir Aluno Fonte Próprio autor Figura 4 Inserir Aluno Fonte Próprio autor Figura 5 Inserir Matrícula 9 Fonte Próprio autor Figura 6 Listar Alunos Fonte Próprio autor Figura 7 Listar Alunos por Curso Fonte Próprio autor Figura 8 Sair 10 Fonte Próprio autor Nas etapas de listar alunos temos que um dos passos da aplicação consiste em ordenar os alunos para só depois imprimir os dados Precisamos neste passo ensinar ao programa a como ordenar objetos do tipo Aluno No java podemos sobrescrever a função compareTo que compara dois objetos iguais Nossa implementação é apresentada abaixo public Boolean compareToAluno outro return thisgetNomecompareTooutrogetNome 0 A ideia do código acima é ordenar os objetos alunos de acordo com a ordenação dos nomes associados a estes objetos no caso em ordem alfabética Para ordenar optamos por implementar dois algoritmos muito famosos na literatura BubbleSort e InsertionSort A ideia do BubbleSort é percorrer a lista de elementos várias vezes de forma a inverter os elementos das posições j e j1 caso estejam desordenados Se repetirmos este procedimento o tamanho da lista temos que a lista final estará ordenada Já o algoritmo InsertionSort possui como ideia ordenar a medida que for inserindo um novo elemento na lista As implementações dos algoritmos estão descritos abaixo Figura 9 Algoritmo BubbleSort 11 Fonte Próprio autor Figura 10 Algoritmo InsertionSort Fonte Próprio autor Ambos os algoritmos possuem a mesma complexidade de pior caso 𝑂𝑛 2 Porém caso apenas algumas posições estejam fora de ordem a complexidade de melhor caso do InsertionSort é Já o BubbleSort sempre terá a mesma 𝑂𝑛 complexidade ou seja Θ𝑛 2 12 4 RESULTADOS E DISCUSSÃO Nesta seção será demonstrado a partir de imagens o funcionamento da aplicação Figura 11 Inserir Alunos 13 Fonte Próprio autor Figura 12 Inserir Cursos 14 Fonte Próprio autor Figura 13 Inserir Matrículas Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Informatica ERRO Curso não encontrado Matrícula não pode ser inserida Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Matematica Digite o ID do aluno 5 ERRO Aluno não encontrado Matrícula não pode ser inserida Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Matematica Digite o ID do aluno 1 Digite a nota NP1 10 Digite a nota NP2 10 Digite a nota de reposição 10 Digite a nota do exame 10 Matrícula inserida com sucesso Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Matematica Digite o ID do aluno 4 Digite a nota NP1 9 Digite a nota NP2 8 Digite a nota de reposição 7 Digite a nota do exame 6 Matrícula inserida com sucesso 16 Fonte Próprio autor Figura 14 Listar Alunos Fonte Próprio autor Figura 15 Listar Alunos por Curso Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 5 Digite o nome do curso Historia ERRO Curso não encontrado Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 5 Digite o nome do curso Matematica Alunos do Curso Matematica ID 4 Nome Gabriel ID 1 Nome Paulo Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 6 Saindo do sistema BUILD SUCCESSFUL total time 8 minutes 30 seconds Fonte Próprio autor 18 5 CONSIDERAÇÕES FINAIS Este trabalho propôs para os alunos que dado um contexto real construir uma aplicação eficiente para o problema proposto Neste trabalho apresentamos conceitos de linguagens orientadas a objetos e também sobre algoritmos de ordenação Vimos que em um contexto onde iremos ordenar e após inserir objetos a melhor técnica a ser utilizada é o InsertionSort Atividades que visam mesclar o aprendizado teórico com a prática tende a agregar muito no processo de aprendizagem Acreditamos que este trabalho contribuiu para o aprendizado e nos proporcionou um cenário de trabalho em equipe 19 6 REFERÊNCIAS BIBLIOGRÁFICAS CLARO D B SOBRAL J B M Programação em JAVA Livro programando em Java 1ª edição p 12 2008 CORMEN T H et al Algoritmos teoria e prática Editora Campus v 2 2002 INDRUSIAK L S Linguagem java Grupo JavaRS JUG Rio Grande do Sul 1996 RICARTE I L M Programação Orientada a Objetos uma abordagem com Java Disponível em httpwwwdcafeeunicampbrcursosPooJavaAulaspoojava Acesso em 17 de Agosto de 2023 v 29 n 10 2001 20 7 CÓDIGO FONTE Alunojava package aplicacaoaluno public class Aluno private int id private String nome public Alunoint id String nome thisid id thisnome nome public int getId return id public void setIdint id thisid id public String getNome return nome public void setNomeString nome thisnome nome public Boolean compareToAluno outro return thisgetNomecompareTooutrogetNome 0 Cursojava package aplicacaoaluno public class Curso private String nome private String nivel private int ano 21 public CursoString nome String nivel int ano thisnome nome thisnivel nivel thisano ano public String getNome return nome public void setNomeString nome thisnome nome public String getNivel return nivel public void setNivelString nivel thisnivel nivel public int getAno return ano public void setAnoint ano thisano ano Matriculajava package aplicacaoaluno public class Matricula private int iddoaluno private double notaNP1 private double notaNP2 private double notareposicao private double notaexame public Matriculaint iddoaluno double notaNP1 double notaNP2 double notareposicao double notaexame 22 thisiddoaluno iddoaluno thisnotaNP1 notaNP1 thisnotaNP2 notaNP2 thisnotareposicao notareposicao thisnotaexame notaexame public int getIddoaluno return iddoaluno public void setIddoalunoint iddoaluno thisiddoaluno iddoaluno public double getNotaNP1 return notaNP1 public void setNotaNP1double notaNP1 thisnotaNP1 notaNP1 public double getNotaNP2 return notaNP2 public void setNotaNP2double notaNP2 thisnotaNP2 notaNP2 public double getNotareposicao return notareposicao public void setNotareposicaodouble notareposicao thisnotareposicao notareposicao public double getNotaexame return notaexame public void setNotaexamedouble notaexame thisnotaexame notaexame 23 Ordenaçãojava package aplicacaoaluno import javautilArrayList public class Ordenacao public ArrayListAluno bubbleSortArrayListAluno alunos int n alunossize for int i 0 i n 1 i for int j 0 j n i 1 j if alunosgetjcompareToalunosgetj 1 Trocar alunosgetj e alunosgetj1 Aluno temp alunosgetj alunossetj alunosgetj 1 alunossetj 1 temp return alunos public ArrayListAluno insertionSortArrayListAluno alunos int n alunossize for int i 1 i n i Aluno chave alunosgeti int j i 1 while j 0 alunosgetjcompareTochave alunossetj 1 alunosgetj j j 1 alunossetj 1 chave return alunos AplicacaoAlunojava package aplicacaoaluno import javaioBufferedReader import javaioBufferedWriter import javaioFileReader 24 import javaioFileWriter import javaioIOException import javautilArrayList import javautilList import javautilScanner public class AplicacaoAluno private static ListAluno alunos new ArrayList private static ListCurso cursos new ArrayList private static Ordenacao ordenacao new Ordenacao public static int menu int opcao do SystemoutprintlnDigite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair Scanner scanner new ScannerSystemin opcao scannernextInt if opcao 0 opcao 7 SystemoutprintlnOpção Inválida while opcao 0 opcao 7 return opcao public static void mainString args carregarDados while true int opcao menu switch opcao case 1 inserirAluno break case 2 inserirCurso break case 3 inserirMatricula break case 4 listarAlunos break case 5 listarAlunosDeUmCurso break 25 case 6 salvarDados SystemoutprintlnSaindo do sistema return public static void inserirAluno Scanner scanner new ScannerSystemin SystemoutprintDigite o ID do aluno int id scannernextInt SystemoutprintDigite o nome do aluno scannernextLine String nome scannernextLine for Aluno aluno alunos if alunogetId id SystemoutprintlnERRO ID já cadastrado aluno não inserido return Aluno aluno new Alunoid nome alunosaddaluno SystemoutprintlnAluno inserido com sucesso public static void inserirCurso Scanner scanner new ScannerSystemin SystemoutprintDigite o nome do curso String nome scannernextLine forCurso curso cursos ifcursogetNomeequalsnome SystemoutprintlnERRO Nome de curso já existente return SystemoutprintDigite o nível do curso String nivel scannernextLine SystemoutprintDigite o ano do curso int ano scannernextInt Curso curso new Cursonome nivel ano cursosaddcurso String caminho cursogetNome cursogetNivel StringvalueOfcursogetAno csv 26 try FileWriter fileWriter new FileWritercaminho BufferedWriter bufferedWriter new BufferedWriterfileWriter bufferedWriterclose catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados SystemoutprintlnCurso inserido com sucesso public static void inserirMatricula Scanner scanner new ScannerSystemin SystemoutprintDigite o nome do curso String nomeCurso scannernextLine Curso cursoEncontrado null forCurso curso cursos ifcursogetNomeequalsnomeCurso cursoEncontrado curso break ifcursoEncontrado null SystemoutprintlnERRO Curso não encontrado Matrícula não pode ser inserida return SystemoutprintDigite o ID do aluno int idAluno scannernextInt Aluno alunoEncontrado null for Aluno aluno alunos if alunogetId idAluno alunoEncontrado aluno break if alunoEncontrado null SystemoutprintlnERRO Aluno não encontrado Matrícula não pode ser inserida return 27 String caminho cursoEncontradogetNome cursoEncontradogetNivel StringvalueOfcursoEncontradogetAno csv SystemoutprintDigite a nota NP1 double notaNP1 scannernextDouble SystemoutprintDigite a nota NP2 double notaNP2 scannernextDouble SystemoutprintDigite a nota de reposição double notaReposicao scannernextDouble SystemoutprintDigite a nota do exame double notaExame scannernextDouble Matricula matricula new MatriculaidAluno notaNP1 notaNP2 notaReposicao notaExame try FileWriter fileWriter new FileWritercaminho true BufferedWriter bufferedWriter new BufferedWriterfileWriter bufferedWriterwritematriculagetIddoaluno matriculagetNotaNP1 matriculagetNotaNP2 matriculagetNotareposicao matriculagetNotaexame bufferedWriternewLine bufferedWriterclose catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados SystemoutprintlnMatrícula inserida com sucesso public static void listarAlunos alunos ordenacaobubbleSortArrayListAluno alunos alunos ordenacaoinsertionSortArrayListAluno alunos SystemoutprintlnLista de Alunos for Aluno aluno alunos SystemoutprintlnID alunogetId Nome alunogetNome public static void listarAlunosDeUmCurso Scanner scanner new ScannerSystemin SystemoutprintDigite o nome do curso String nomeCurso scannernextLine Curso cursoEncontrado null 28 forCurso curso cursos ifcursogetNomeequalsnomeCurso cursoEncontrado curso break ifcursoEncontrado null SystemoutprintlnERRO Curso não encontrado return SystemoutprintlnAlunos do Curso nomeCurso String caminho cursoEncontradogetNome cursoEncontradogetNivel StringvalueOfcursoEncontradogetAno csv ListAluno alunosCurso new ArrayList try FileReader fileReader new FileReadercaminho BufferedReader bufferedReader new BufferedReaderfileReader String line while line bufferedReaderreadLine null String parts linesplit int id IntegerparseIntparts0 Aluno alunoEncontrado null for Aluno aluno alunos if alunogetId id alunoEncontrado aluno break alunosCursoaddalunoEncontrado bufferedReaderclose catch IOException e SystemoutprintlnERRO Não foi possível carregar os dados alunosCurso ordenacaobubbleSortArrayListAluno alunosCurso alunosCurso ordenacaoinsertionSortArrayListAluno alunosCursossss for Aluno aluno alunosCurso SystemoutprintlnID alunogetId Nome alunogetNome 29 public static void carregarDados try FileReader fileReader new FileReaderalunoscsv BufferedReader bufferedReader new BufferedReaderfileReader String line while line bufferedReaderreadLine null String parts linesplit int id IntegerparseIntparts0 String nome parts1 Aluno aluno new Alunoid nome alunosaddaluno bufferedReaderclose catch IOException e SystemoutprintlnERRO Não foi possível carregar os dados Alunos try FileReader fileReader1 new FileReadercursoscsv BufferedReader bufferedReader1 new BufferedReaderfileReader1 String line while line bufferedReader1readLine null String parts linesplit String nome parts0 String nivel parts1 int ano IntegerparseIntparts2 Curso curso new Cursonome nivel ano cursosaddcurso bufferedReader1close catch IOException e SystemoutprintlnERRO Não foi possível carregar os dados Cursos public static void salvarDados try FileWriter fileWriter new FileWriteralunoscsv BufferedWriter bufferedWriter new BufferedWriterfileWriter for Aluno aluno alunos 30 bufferedWriterwritealunogetId alunogetNome bufferedWriternewLine bufferedWriterclose catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados try FileWriter fileWriter1 new FileWritercursoscsv BufferedWriter bufferedWriter1 new BufferedWriterfileWriter1 for Curso curso cursos bufferedWriter1writecursogetNome cursogetNivel cursogetAno bufferedWriter1newLine bufferedWriter1close catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados APS DESENVOLVIMENTO DE SISTEMA PARA MANIPULAÇÃO DE SISTEMA DE UNIVERSIDADE Ciências da Computação NOME ALUNO MATRÍCULA 1 São Paulo 2º3º Semestre SUMÁRIO 1 INTRODUÇÃO2 2 REFERENCIAL TEÓRICO4 3 DESENVOLVIMENTO 7 4 RESULTADOS E DISCUSSÃO12 5 CONSIDERAÇÕES FINAIS18 6 REFERÊNCIAS BIBLIOGRÁFICAS19 7 CÓDIGO FONTE20 2 1 INTRODUÇÃO As linguagens de programação orientadas a objetos são muito populares na área de desenvolvimento de software Estas linguagens possuem um poder de expressividade e facilita o processo de modelagem de situaçõesproblema A orientação a objetos tem como objetivo principal modelar o mundo real e garantir que as taxas de manutenibilidade manutenção sejam maiores diante deste contexto Isso é possível pois utilizando uma linguagem de programação orientada a objetos conseguese obter um desenvolvimento mais rápido visto que este desenvolvimento ocorre em módulos em blocos de códigos correspondentes aos objetos e seus acoplamentos Através da orientação a objetos podese obter uma maior qualidade e agilidade no desenvolvimento pois o fator reusabilidade reutilização permite que se reutilize outros objetos que foram anteriormente desenvolvidos e podem ser facilmente incorporados na aplicação A reusabilidade também garante uma melhor manuseabilidade do programa pois os testes referentes aos componentes já foram previamente executados garantindo assim a utilização coesa dos objetos CLARO SOBRAL 2008 Um dos grandes diferenciais da programação orientada a objetos em relação a outros paradigmas de programação que também permitem a definição de estruturas e operações sobre essas estruturas está no conceito de herança mecanismo através do qual definições existentes podem ser facilmente estendidas Juntamente com a herança deve ser enfatizada a importância do polimorfismo que permite selecionar funcionalidades que um programa irá utilizar de forma dinâmica durante sua execução RICARTE 2001 Na orientação objetos qualquer parte modelada é vista como um objeto de uma classe Uma classe é um template de um objeto que especifica seus atributos e ações Os atributos são propriedades de um objeto Por exemplo a classe Pessoa pode possuir os atributos nome telefone e CPF Um objeto da classe Pessoa pode 3 ser por exemplo uma determinada pessoa com nome João que possui telefone 99 999999999 e CPF 01234567890 Uma outra característica das linguagens orientadas a objetos é o encapsulamento que permite que classes não consigam acessar diretamente os atributos de outras classes Isto é importante para que o código fique mais organizado e padronizado tornando o mesmo mais legível Dessa forma detalhes internos sobre a operação do objeto não são conhecidos permitindo que o usuário do objeto trabalhe em um nível mais alto de abstração sem preocupação com os detalhes internos da classe Essa facilidade permite simplificar a construção de programas com funcionalidades complexas tais como interfaces gráficas ou aplicações distribuídas RICARTE 2001 Uma das linguagens orientadas a objetos mais conhecida é a linguagem Java Através de classes objetos atributos métodos dentre outras características da orientação a objetos conseguese modelar o mundo real e abstrair informações incorporandoas à linguagem Java CLARO SOBRAL 2008 Java é uma linguagem simples de fácil aprendizado ou migração pois possui um reduzido número de construções A diminuição das construções mais suscetíveis a erros de programação tais como ponteiros e gerenciamento de memória via código de programação também faz com que a programação em Java seja mais eficiente Contém um conjunto de bibliotecas que fornecem grande parte da funcionalidade básica da linguagem incluindo rotinas de acesso à rede e criação de interface gráfica INDRUSIAK 1996 Java é a linguagem de programação orientada a objetos desenvolvida pela Sun Microsystems capaz de criar tanto aplicativos para desktop aplicações comerciais softwares robustos completos e independentes aplicativos para a Web Além disso caracterizase por ser muito parecida com C eliminando as características consideradas complexas dentre as quais ponteiros e herança múltipla CLARO SOBRAL 2008 Neste trabalho tem como objetivo desenvolver uma aplicação desktop para o auxílio do gerenciamento da Univerdade Amazônia dos seus alunos e cursos utilizando uma linguagem orientada a objetos Neste presente capítulo apresentamos de forma sucinta uma introdução às linguagens orientadas a objetos No Capítulo 2 será descrito o referencial teórico onde serão apresentados os algoritmos e classes usadas no processamento de 4 dados No capítulo 3 será descrito todos os estágios do processo de desenvolvimento do sistema computacional No capítulo 4 será apresentado os resultados e discussões No capítulo 5 serão descritas as considerações finais deste trabalho O capítulo 6 conterá as referências bibliográficas utilizadas Por fim no capítulo 7 é apresentado o código fonte da aplicação 2 REFERENCIAL TEÓRICO A situação problema referese ao controle e armazenamento de dados de alunos e cursos Temos as seguintes classes em nossa aplicação Aluno Modela aluno Atributos int id Identificador do aluno String nome Nome do aluno Métodos public int getId Retorna o id do aluno public void setIdint id Atualiza o id do aluno public String getNome Retorna o nome do aluno public void setNomeString nome Atualiza o nome do aluno public Boolean compareToAluno outro Responsável por ditar como a classe deve ser ordenado Curso Modela curso Atributos String nome Nome do curso String nivel Nível do curso técnico graduação especialização mestrado e entre outros int ano Ano do curso Métodos public String getNome Retorna o nome do curso public void setNomeString nome Atualiza o nome do curso public String getNivel Retorna o nível do curso public void setNivelString nivel Atualiza o nível do curso public int getAno Retorna o ano do curso public void setAnoint ano Atualiza o ano do curso 5 Matricula Modela o relacionamento aluno e curso ou seja alunos matriculados Atributos int iddoaluno Identificador do aluno double notaNP1 Nota do aluno na prova 1 double notaNP2 Nota do aluno na prova 2 double notareposicao Nota do aluno na prova de reposição double notaexame Nota do aluno no exame Métodos public int getIddoaluno Retorna o id do aluno public void setIddoalunoint iddoaluno Atualiza o id do aluno public double getNotaNP1 Retorna a nota da prova 1 public void setNotaNP1double notaNP1 Atualiza a nota da prova 1 public double getNotaNP2 Retorna a nota da prova 2 public void setNotaNP2double notaNP2 Atualiza a nota da prova 2 public double getNotareposicao Retorna a nota da prova de reposição public void setNotareposicaodouble notareposicao Atualiza a nota da prova de reposição public double getNotaexame Retorna a nota do exame public void setNotaexamedouble notaexame Atualiza a nota no exame Ordenação Modela os métodos de ordenação Atributos Não possui atributos Métodos public ArrayListAluno bubbleSortArrayListAluno alunos Responsável por ordenar uma lista de alunos utilizando o método de ordenação BubbleSort CORMEN et al 2002 public ArrayListAluno insertionSortArrayListAluno alunos Responsável por ordenar uma lista de alunos utilizando o método de ordenação InsertionSort CORMEN et al 2002 6 AplicacaoAluno Responsável pela aplicação Atributos ListAluno alunos Lista de alunos cadastrados no sistema ListCurso cursos Lista de cursos cadastrados no sistema Ordenacao ordenacao Objeto de ordenação Métodos public static int menu Lista as opções do menu ler a opção selecionada pelo usuário e retorna a mesma public static void mainString args Primeira a função a ser executada Irá intermediar a aplicação public static void inserirAluno Ler os dados de um aluno e armazena na lista de alunos public static void inserirCurso Ler os dados de um curso e armazena na lista de cursos public static void inserirMatricula Ler os dados de uma matricula e armazena os dados em arquivo public static void listarAlunosDeUmCurso Imprime os dados dos alunos de um curso específico ordenados de forma alfabética public static void carregarDados Ler os dados de alunos e cursos armazenados nos arquivos public static void salvarDados Armazena os dados de alunos e cursos armazenados nos arquivos Abaixo é apresentado o diagrama de classes da aplicação resumindo o que foi exposto sobre as classes Figura 1 Diagrama de Classes 7 Fonte Próprio autor 3 DESENVOLVIMENTO A aplicação foi desenvolvida na linguagem Java utilizando a IDE Apache NetBeans A aplicação tem as seguintes funções Inserir Aluno Cadastrar um novo aluno Inserir Curso Cadastrar um novo curso Inserir Matrícula Vincula um aluno a um curso Listar Alunos Lista todos os alunos em ordem alfabética Listar Alunos de um Curso Lista todos os alunos de um curso Sair Sair da aplicação Todos os dados são persistidos em arquivos csv Um arquivo CSV Comma Separated Values em português valores separados por vírgulas é um arquivo de texto simples que armazena informações de planilhas e tabelas O conteúdo geralmente é uma tabela de texto números ou datas Os arquivos CSV 8 podem ser facilmente importados e exportados usando programas que armazenam dados em tabelas Em nossa aplicação temos as seguintes estruturas de arquivos alunoscsv Armazena os dados dos alunos Cada linha deste arquivo equivale a um aluno São armazenados os dados de id e senha do aluno cursoscsv Armazena os dados dos cursos Cada linha deste arquivo é equivalente a um curso São armazenados os seguintes dados nome nível e ano Para cada linha de cursoscsv é criado o arquivo nomenivelanocsv substituindo os devidos valores Esse arquivo irá armazenar os dados da matrícula Cada linha deste arquivo irá armazenar o id do aluno nota NP1 nota NP2 nota reposição e nota exame Os dados de alunos e cursos são mantidos em memória e quando o usuário desejar sair da aplicação os mesmos serão persistidos Já os dados de matrícula não são armazenados temporariamente em memória apenas persistindo no seu arquivo correspondente Abaixo está apresentado por meio de fluxogramas como se dá o passo a passo das funcionalidades do sistema desenvolvido Figura 2 Inserir Aluno Fonte Próprio autor Figura 4 Inserir Aluno Mensagem de ERRO Aluno cadastrado com sucesso Verifica se o id já foi cadastrado Solicita os dados de id e nome 9 Fonte Próprio autor Figura 5 Inserir Matrícula Fonte Próprio autor Figura 6 Listar Alunos Fonte Próprio autor Figura 7 Listar Alunos por Curso Solicita dados de nome nível e ano Mensagem de ERRO Curso cadastrado com sucesso Verifica se o nome já foi cadastrado Matrícul a Cadastr Recebe dados de notas Solicita dados de id do Mensag em de ERRO Solicita nome do curso Verifica se o id é cadastra Ordena Lista de Alunos Imprime Alunos 10 Fonte Próprio autor Figura 8 Sair Fonte Próprio autor Nas etapas de listar alunos temos que um dos passos da aplicação consiste em ordenar os alunos para só depois imprimir os dados Precisamos neste passo ensinar ao programa a como ordenar objetos do tipo Aluno No java podemos sobrescrever a função compareTo que compara dois objetos iguais Nossa implementação é apresentada abaixo public Boolean compareToAluno outro return thisgetNomecompareTooutrogetNome 0 A ideia do código acima é ordenar os objetos alunos de acordo com a ordenação dos nomes associados a estes objetos no caso em ordem alfabética Para ordenar optamos por implementar dois algoritmos muito famosos na literatura BubbleSort e InsertionSort A ideia do BubbleSort é percorrer a lista de elementos várias vezes de forma a inverter os elementos das posições j e j1 caso estejam desordenados Se Mensag em de ERRO Verifica se o nome Recebe nome do curso Ordena Lista de Alunos Imprime Alunos Persistir dados dos alunos e cursos Sair do Sistema 11 repetirmos este procedimento o tamanho da lista temos que a lista final estará ordenada Já o algoritmo InsertionSort possui como ideia ordenar a medida que for inserindo um novo elemento na lista As implementações dos algoritmos estão descritos abaixo Figura 9 Algoritmo BubbleSort Fonte Próprio autor Figura 10 Algoritmo InsertionSort Fonte Próprio autor Ambos os algoritmos possuem a mesma complexidade de pior caso On 2 Porém caso apenas algumas posições estejam fora de ordem a complexidade de melhor caso do InsertionSort é On Já o BubbleSort sempre terá a mesma complexidade ou seja Θn 2 12 4 RESULTADOS E DISCUSSÃO Nesta seção será demonstrado a partir de imagens o funcionamento da aplicação Figura 11 Inserir Alunos 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 1 Digite o ID do aluno 1 Digite o nome do aluno Paulo Aluno inserido com sucesso Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 1 Digite o ID do aluno 1 Digite o nome do aluno Andre ERRO ID já cadastrado aluno não inserido Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 1 Digite o ID do aluno 2 Digite o nome do aluno Andre Aluno inserido com sucesso 14 Fonte Próprio autor Figura 12 Inserir Cursos 15 Fonte Próprio autor Figura 13 Inserir Matrículas Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Informatica ERRO Curso não encontrado Matrícula não pode ser inserida Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Matematica Digite o ID do aluno 5 ERRO Aluno não encontrado Matrícula não pode ser inserida Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Matematica Digite o ID do aluno 1 Digite a nota NP1 10 Digite a nota NP2 10 Digite a nota de reposição 10 Digite a nota do exame 10 Matrícula inserida com sucesso Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 3 Digite o nome do curso Matematica Digite o ID do aluno 4 Digite a nota NP1 9 Digite a nota NP2 8 Digite a nota de reposição 7 Digite a nota do exame 6 Matrícula inserida com sucesso 17 Fonte Próprio autor Figura 14 Listar Alunos Fonte Próprio autor Figura 15 Listar Alunos por Curso Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 5 Digite o nome do curso Historia ERRO Curso não encontrado Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 5 Digite o nome do curso Matematica Alunos do Curso Matematica ID 4 Nome Gabriel ID 1 Nome Paulo Digite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair 6 Saindo do sistema BUILD SUCCESSFUL total time 8 minutes 30 seconds Fonte Próprio autor 19 5 CONSIDERAÇÕES FINAIS Este trabalho propôs para os alunos que dado um contexto real construir uma aplicação eficiente para o problema proposto Neste trabalho apresentamos conceitos de linguagens orientadas a objetos e também sobre algoritmos de ordenação Vimos que em um contexto onde iremos ordenar e após inserir objetos a melhor técnica a ser utilizada é o InsertionSort Atividades que visam mesclar o aprendizado teórico com a prática tende a agregar muito no processo de aprendizagem Acreditamos que este trabalho contribuiu para o aprendizado e nos proporcionou um cenário de trabalho em equipe 20 6 REFERÊNCIAS BIBLIOGRÁFICAS CLARO D B SOBRAL J B M Programação em JAVA Livro programando em Java 1ª edição p 12 2008 CORMEN T H et al Algoritmos teoria e prática Editora Campus v 2 2002 INDRUSIAK L S Linguagem java Grupo JavaRS JUG Rio Grande do Sul 1996 RICARTE I L M Programação Orientada a Objetos uma abordagem com Java Disponível em httpwwwdcafeeunicampbrcursosPooJavaAulaspoojava Acesso em 17 de Agosto de 2023 v 29 n 10 2001 21 7 CÓDIGO FONTE Alunojava package aplicacaoaluno public class Aluno private int id private String nome public Alunoint id String nome thisid id thisnome nome public int getId return id public void setIdint id thisid id public String getNome return nome public void setNomeString nome thisnome nome public Boolean compareToAluno outro return thisgetNomecompareTooutrogetNome 0 Cursojava package aplicacaoaluno public class Curso private String nome private String nivel private int ano 22 public CursoString nome String nivel int ano thisnome nome thisnivel nivel thisano ano public String getNome return nome public void setNomeString nome thisnome nome public String getNivel return nivel public void setNivelString nivel thisnivel nivel public int getAno return ano public void setAnoint ano thisano ano Matriculajava package aplicacaoaluno public class Matricula private int iddoaluno private double notaNP1 private double notaNP2 private double notareposicao private double notaexame public Matriculaint iddoaluno double notaNP1 double notaNP2 double notareposicao double notaexame thisiddoaluno iddoaluno 23 thisnotaNP1 notaNP1 thisnotaNP2 notaNP2 thisnotareposicao notareposicao thisnotaexame notaexame public int getIddoaluno return iddoaluno public void setIddoalunoint iddoaluno thisiddoaluno iddoaluno public double getNotaNP1 return notaNP1 public void setNotaNP1double notaNP1 thisnotaNP1 notaNP1 public double getNotaNP2 return notaNP2 public void setNotaNP2double notaNP2 thisnotaNP2 notaNP2 public double getNotareposicao return notareposicao public void setNotareposicaodouble notareposicao thisnotareposicao notareposicao public double getNotaexame return notaexame public void setNotaexamedouble notaexame thisnotaexame notaexame 24 Ordenaçãojava package aplicacaoaluno import javautilArrayList public class Ordenacao public ArrayListAluno bubbleSortArrayListAluno alunos int n alunossize for int i 0 i n 1 i for int j 0 j n i 1 j if alunosgetjcompareToalunosgetj 1 Trocar alunosgetj e alunosgetj1 Aluno temp alunosgetj alunossetj alunosgetj 1 alunossetj 1 temp return alunos public ArrayListAluno insertionSortArrayListAluno alunos int n alunossize for int i 1 i n i Aluno chave alunosgeti int j i 1 while j 0 alunosgetjcompareTochave alunossetj 1 alunosgetj j j 1 alunossetj 1 chave return alunos AplicacaoAlunojava package aplicacaoaluno import javaioBufferedReader import javaioBufferedWriter import javaioFileReader import javaioFileWriter import javaioIOException 25 import javautilArrayList import javautilList import javautilScanner public class AplicacaoAluno private static ListAluno alunos new ArrayList private static ListCurso cursos new ArrayList private static Ordenacao ordenacao new Ordenacao public static int menu int opcao do SystemoutprintlnDigite 1 Inserir Aluno 2 Inserir Curso 3 Inserir Matricula 4 Listar Alunos 5 Listar Alunos de um Curso 6 Sair Scanner scanner new ScannerSystemin opcao scannernextInt if opcao 0 opcao 7 SystemoutprintlnOpção Inválida while opcao 0 opcao 7 return opcao public static void mainString args carregarDados while true int opcao menu switch opcao case 1 inserirAluno break case 2 inserirCurso break case 3 inserirMatricula break case 4 listarAlunos break case 5 listarAlunosDeUmCurso break case 6 salvarDados 26 SystemoutprintlnSaindo do sistema return public static void inserirAluno Scanner scanner new ScannerSystemin SystemoutprintDigite o ID do aluno int id scannernextInt SystemoutprintDigite o nome do aluno scannernextLine String nome scannernextLine for Aluno aluno alunos if alunogetId id SystemoutprintlnERRO ID já cadastrado aluno não inserido return Aluno aluno new Alunoid nome alunosaddaluno SystemoutprintlnAluno inserido com sucesso public static void inserirCurso Scanner scanner new ScannerSystemin SystemoutprintDigite o nome do curso String nome scannernextLine forCurso curso cursos ifcursogetNomeequalsnome SystemoutprintlnERRO Nome de curso já existente return SystemoutprintDigite o nível do curso String nivel scannernextLine SystemoutprintDigite o ano do curso int ano scannernextInt Curso curso new Cursonome nivel ano cursosaddcurso String caminho cursogetNome cursogetNivel StringvalueOfcursogetAno csv try FileWriter fileWriter new FileWritercaminho BufferedWriter bufferedWriter new BufferedWriterfileWriter 27 bufferedWriterclose catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados SystemoutprintlnCurso inserido com sucesso public static void inserirMatricula Scanner scanner new ScannerSystemin SystemoutprintDigite o nome do curso String nomeCurso scannernextLine Curso cursoEncontrado null forCurso curso cursos ifcursogetNomeequalsnomeCurso cursoEncontrado curso break ifcursoEncontrado null SystemoutprintlnERRO Curso não encontrado Matrícula não pode ser inserida return SystemoutprintDigite o ID do aluno int idAluno scannernextInt Aluno alunoEncontrado null for Aluno aluno alunos if alunogetId idAluno alunoEncontrado aluno break if alunoEncontrado null SystemoutprintlnERRO Aluno não encontrado Matrícula não pode ser inserida return String caminho cursoEncontradogetNome cursoEncontradogetNivel StringvalueOfcursoEncontradogetAno csv 28 SystemoutprintDigite a nota NP1 double notaNP1 scannernextDouble SystemoutprintDigite a nota NP2 double notaNP2 scannernextDouble SystemoutprintDigite a nota de reposição double notaReposicao scannernextDouble SystemoutprintDigite a nota do exame double notaExame scannernextDouble Matricula matricula new MatriculaidAluno notaNP1 notaNP2 notaReposicao notaExame try FileWriter fileWriter new FileWritercaminho true BufferedWriter bufferedWriter new BufferedWriterfileWriter bufferedWriterwritematriculagetIddoaluno matriculagetNotaNP1 matriculagetNotaNP2 matriculagetNotareposicao matriculagetNotaexame bufferedWriternewLine bufferedWriterclose catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados SystemoutprintlnMatrícula inserida com sucesso public static void listarAlunos alunos ordenacaobubbleSortArrayListAluno alunos alunos ordenacaoinsertionSortArrayListAluno alunos SystemoutprintlnLista de Alunos for Aluno aluno alunos SystemoutprintlnID alunogetId Nome alunogetNome public static void listarAlunosDeUmCurso Scanner scanner new ScannerSystemin SystemoutprintDigite o nome do curso String nomeCurso scannernextLine Curso cursoEncontrado null forCurso curso cursos ifcursogetNomeequalsnomeCurso cursoEncontrado curso break 29 ifcursoEncontrado null SystemoutprintlnERRO Curso não encontrado return SystemoutprintlnAlunos do Curso nomeCurso String caminho cursoEncontradogetNome cursoEncontradogetNivel StringvalueOfcursoEncontradogetAno csv ListAluno alunosCurso new ArrayList try FileReader fileReader new FileReadercaminho BufferedReader bufferedReader new BufferedReaderfileReader String line while line bufferedReaderreadLine null String parts linesplit int id IntegerparseIntparts0 Aluno alunoEncontrado null for Aluno aluno alunos if alunogetId id alunoEncontrado aluno break alunosCursoaddalunoEncontrado bufferedReaderclose catch IOException e SystemoutprintlnERRO Não foi possível carregar os dados alunosCurso ordenacaobubbleSortArrayListAluno alunosCurso alunosCurso ordenacaoinsertionSortArrayListAluno alunosCursossss for Aluno aluno alunosCurso SystemoutprintlnID alunogetId Nome alunogetNome public static void carregarDados try 30 FileReader fileReader new FileReaderalunoscsv BufferedReader bufferedReader new BufferedReaderfileReader String line while line bufferedReaderreadLine null String parts linesplit int id IntegerparseIntparts0 String nome parts1 Aluno aluno new Alunoid nome alunosaddaluno bufferedReaderclose catch IOException e SystemoutprintlnERRO Não foi possível carregar os dados Alunos try FileReader fileReader1 new FileReadercursoscsv BufferedReader bufferedReader1 new BufferedReaderfileReader1 String line while line bufferedReader1readLine null String parts linesplit String nome parts0 String nivel parts1 int ano IntegerparseIntparts2 Curso curso new Cursonome nivel ano cursosaddcurso bufferedReader1close catch IOException e SystemoutprintlnERRO Não foi possível carregar os dados Cursos public static void salvarDados try FileWriter fileWriter new FileWriteralunoscsv BufferedWriter bufferedWriter new BufferedWriterfileWriter for Aluno aluno alunos bufferedWriterwritealunogetId alunogetNome bufferedWriternewLine bufferedWriterclose 31 catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados try FileWriter fileWriter1 new FileWritercursoscsv BufferedWriter bufferedWriter1 new BufferedWriterfileWriter1 for Curso curso cursos bufferedWriter1writecursogetNome cursogetNivel cursogetAno bufferedWriter1newLine bufferedWriter1close catch IOException e SystemoutprintlnERRO Não foi possível armazenar os dados