Relatório Linguagens de programação 11/12 João Caixinha nº5946
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 .
I. INTRODUÇÃO
S
egundo 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
Este relatório demonstra estas três fazes de desenvolvimento nas duas aplicações.
II. APRESENTAÇÃO DAS APLICAÇÕES
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
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.
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
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#)
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].
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 seleciona-se 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
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()
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.
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.
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.
VI. BIBLIOGRAFIA LumenWorks.Framework.IO.Csv http://www.codeproject.com/KB/database/CsvRead er.aspx SQLite http://www.sqlite.org/download.html. LINQ http://msdn.microsoft.com/en-us/library/bb308959.aspx Fsharp http://msdn.microsoft.com/en-us/vstudio/hh388569.aspx http://my.safaribooksonline.com/book/programming /microsoft-dotnet/9780470528013/inheritance/overriding#X2lu dGVybmFsX0ZsYXNoUmVhZGVyP3htbGlkPTk3 ODA0NzA1MjgwMTMvMTI1