estiglp-11/12-5946-csharp e Fsharp 1 Relatório Linguagens de programação 11/12 João Caixinha nº5946 1
estiglp-11/12-5946-csharp e Fsharp 2 Resumo - Este relatório relata as soluções encontradas para a criação das aplicações propostas no segundo trabalho de linguagens de programação, recorrendo as linguagens de programação c# e f# e ainda as modificações para a sua segunda versão. Este relatório demonstra estas três fazes de desenvolvimento nas duas aplicações. I. INTRODUÇÃO II. APRESENTAÇÃO DAS APLICAÇÕES Segundo o requerido no enunciado do trabalho prático número 2 da cadeira Linguagens de programação ano lectivo 2011/2012 na escola superior de tecnologia e gestão de beja, pretende-se o desenvolvimento de duas aplicações, uma escrita na linguagem c csharp e outra em f csharp, estas contam com as mesmas funcionalidades, pode-se dividir estas em três fases. Leitura dos ficheiros csv[1], interação com a base de dados SQLite[2] e geração de estatísticas a partir dos dados armazenados recorrendo a extensão LINQ. O objectivo será ler registos respeitantes as colocações no ensino superior no ano 2000 até ao ano 2010, estes dados estão disponíveis num conjunto de dez ficheiros csv[1] fornecidos pelo docente. Após a leitura dos ficheiros as aplicações permitem guardar as informações numa base de dados SQLite[2] gerida pela aplicação. As aplicações geram as seguintes estatísticas: Número de professores grau/estabelecimento/ano Número de professores categoria/estabelecimento/ano Número de estabelecimentos por ano. Número de professores por categoria/ano A. Interface gráfica C# e f# Esta aplicação conta com uma interface gráfica desenvolvida no visual studio 2010, utiliza a biblioteca System.Windows.Forms do.net framework 3.5[3]. A aplicação conta com duas Forms, a principal constituída por três botões principais: Open csv - Carrega o ficheiro csv[1] seleccionado num FileDialog para uma DataGrid que possibilita visualizar os registos. Dump to DB - Permite enviar os dados carregados para a base de dados. Uma vez o processo concluído é visualizado uma mensagem. Statistics - Mostar a segunda Form, dependendo da opção de estatística selecionada na Form principal através de quatro RadioButtons, será visualizado a estatística pretendida na segunda form. A segunda Form é constituída por quatro ListBox e uma DataGrid. As ListBox representam por ordem: A primeira os diferentes anos inseridos na base de dados, independentemente da estatística selecionada. A segunda permite nas duas primeira estatísticas, visualizar os estabelecimentos de ensino num dados ano, este selecionado 2
estiglp-11/12-5946-csharp e Fsharp 3 na primeira lista. Na terceira estatística permite visualizar-se a contagem de escolas nos diferentes anos, e ainda na quarta estatística todo as categorias num dado ano. A terceira permite a visualização dos diferentes graus e categorias, num dado estabelecimento e ano na primeira e segunda estatística, na terceira não conta com nenhuma funcionalidade e na quarta é utilizada para contar os professores de uma categoria num dado ano. A quarta lista é utilizada apenas nas duas primeiras estatísticas, justamente para mostrar a contagem dos professores numa dada categoria ou grau, num dado ano e estabelecimento de ensino. estes Strings, substituísse os carácteres por para evitar erros ao colocar os registos na base de dados. Por cada registo lido no csv[1] é criado um objecto Teacher e guardado na lista Teachers, a lista Teachers é indicada como DataSource do objecto DataGrid de forma a preencher as células da grelha e utilizador ter uma percepção visual da informação. B. Escrita dos registos na base de dados SQLite (c# e f#) Para ser possível a interação das aplicações com a base de dados SQLite[2], utilizou-se a driver System.Data.SQLite, a qual esta disponível no site http://www.sqlite.org/download.html. C. Criação do controlador para a base de dados (c# e f#) III. METODOLOGIA (C# E F#) A. Leitura de ficheiros csv(c# e f#) Para permitir a leitura dos registos nos ficheiros csv[1] de forma correta sem erros devido á caracteres mal interpretados pelo programa, utilizou-se a biblioteca LumenWorks.Framework.IO.Csv que permite tratar ficheiros csv[1] de forma correta. Tomou-se conhecimento desta biblioteca a partir do site http://www.codeproject.com/kb/database/csvread er.aspx. Esta permite iterar pelos registos do ficheiro, de forma a estruturar melhor a informação criou-se um modelo para os registos para representa os professores, a Class Teacher, esta classe conta com os atributos: (string Cod, string Name, string Degree, string Curse, string Catgory, string Regime, string Year, string TypeEstablishment, string Establishment ). No construtor da class, em cada atributo, sendo Para lidar com a base de dados foi criada a class SQLHandler que utiliza a driver para fazer ligação á base de dados. Esta conta com métodos para: Criação da base de dados (construtor) Criação de tabelas (createtable) Inserção de dados nas tabelas (insertdata) Leituras dos registos armazenados (getdata) D. Fluxo lógico para inserção de dados (c# e f#) O primeiro passo é a criação da base de dados e tabela, criou-se o método createtable que utilizando a ligação cria a tabela caso esta não exista. É enviada a lista Teachers para o método insertdata, este por sua vez inicia uma transação e insere os dados de cada professor representados por classes Teacher, na qual se alterou o método ToString() para retornar uma string com os todos atributos da instancia no formato SQL[4]. 3
estiglp-11/12-5946-csharp e Fsharp 4 Quando o processo esta completo é mostrado uma caixa de mensagem a indicar essa informação. E. Janela de estatísticas (C#) Para ser possível gerar as estatísticas, ao selecionase uma estatística, é lido todos os registos armazenados e estes são guardados numa lista genérica do tipo Teacher, para desta forma permitir a utilização do LINQ[5]. Para preencher as ListBox utilizou-se as seguintes técnicas: 1. Para visualizar-se os diferentes anos na primeira ListBox criou-se o método getyears(listbox list), recorrendo ao LINQ[5] este seleciona todos os campos Year nos objetos Teacher da lista Teachers e agrupa os por Year, obtendo-se todos os diferentes. De seguida inseridos na primeira ListBox nominada Years. 2. Para preencher a lista de estabelecimentos, criou-se o método getestablishments(string year, ListBox list) e utilizou-se o LINQ[5], para seleccionador todos os Teachers com o campo Year igual ao selecionado na primeira lista, e agrupando estes por estabelecimento, obtendo-se desta forma todos os estabelecimentos num dados ano. Isto para a primeira e segunda estatísticas, na terceira utiliza-se o LINQ[5] para contar o numero de escolas nos diferentes anos e na quarta estatística seleciona-se as diferentes categorias independentemente do estabelecimento, ou seja agrupando-se por categorias. 3. Na primeira e segunda estatística a ListaBox de categorias ou graus,é preenchida através do método getcatordegree(string scool, ListBox list) e utilizou-se o LINQ[5] para selecionar todos os registos onde os campos Year e Establishment sejam iguais aos itens selecionados na primeira e segunda ListBox, agrupando por categoria ou grau. Na terceira não tem funcionalidade, na quarta esta é utilizada para mostrar a contagem de professores num dado ano e categoria. 4. A grelha de dados(datagridview), é preenchida com todos os Teachers com os valores selecionados nas três nos respectivos campos, através do método getteachers(string year), preenchendo a DataGrid com a lista de Teacher resultante. 5. A lista de estatística(lista 4) é preenchida através do método getstatistics(string item, ListBox list), este por sua vez testa para todos os itens da lista Years o método getteachers(string year), como este retorna uma lista de professores, adiciona-se como item á lista de estatísticas, o ano seguido do tamanha da lista. F. Janela de estatísticas(f#) Da mesma forma que na aplicação de c#, na janela de estatísticas existem 4 ListBox e uma DataGrid. 1. Para preencher a primeira lista, itera-se por todos o objetos da lista Teachers e se o valor do campo Ano não existir na ListBox então é adicionado. 2. Na ListBox de estabelecimentos, o procedimento é o mesmo, mas a comparação é feita com o campo estabelecimento e o campo Ano selecionado na lista anterior. Como em c#, esta funciona desta forma para a primeira e segunda estatística, na terceira é preenchida com o numero de estabelecimentos de ensino por ano armazenados na tabela do SQLite[2].Na quarta opção é preenchida pelas diferentes categorias num dados ano através do methodo getcatgorys(). 3. Na ListBox de categorias ou graus, mais uma vez utiliza-se o procedimento anterior, comparado a existência do campo categoria se for o caso ou grau na ListBox. Na terceira estatística esta lista não tem qualquer funcionalidade mas na quarta é utilizada 4
estiglp-11/12-5946-csharp e Fsharp 5 para mostrar a contagem de professores numa dada categoria em todos os anos, isto é possível através do método countteacherscatgory(). 4. O preenchimento da DataGrid é feito através da criação de uma nova lista temp, que guarda os registos Teacher com os campos iguais aos selecionados nas ListBoxs anteriores. Na quanta opção é feita através do método fillgridforcatgorys() V. REFERENCIAS 1.CSV-Ficheiro com valores separados por vírgulas. 2.SQLite-Formato de base de dados. 3. framework 3.5-Versão do framework utilizado. 4.SQL- Linguagem estruturada para base de dados. 5.LINQ-Linguagem para integração de pesquisas. 5. As estatísticas são geradas através da iteração de cada item da lista Anos, contado o numero de professores com os valores dos campos iguais aos selecionados nas listas, adicionado á lista de estatísticas o ano e a contagem. VI. BIBLIOGRAFIA LumenWorks.Framework.IO.Csv http://www.codeproject.com/kb/database/csvread er.aspx SQLite IV. CONCLUSÕES A linguagem C# da Microsoft tem incontestáveis semelhanças á linguagem Java da SUN, contudo verifica-se que esta é mais flexível em termos de usabilidade. Nota-se melhorias em termos de velocidade de compilação e ainda, a utilização do visual studio de monstra grande facilidade de criação de interfaces gráficas. A linguagem F#, sendo uma linguagem nova, que permite a utilização de multiparadigma de programação, é bastante fácil de aprender a se desenvolver simples aplicações, pois esta também é baseada em C#, também, de bastante rapidez de execução, talvez até mais que a C#. Embora, no visual studio não seja possível criar as interfaces em F# como em C#, não existe grande complexidade na criação das mesmas. http://www.sqlite.org/download.html. LINQ Fsharp http://msdn.microsoft.com/enus/library/bb308959.aspx http://msdn.microsoft.com/enus/vstudio/hh388569.aspx http://my.safaribooksonline.com/book/programming /microsoftdotnet/9780470528013/inheritance/overriding#x2lu dgvybmfsx0zsyxnoumvhzgvyp3htbglkptk3 ODA0NzA1MjgwMTMvMTI1 5