iMasters Similar Entries -...

7
25/8/2014 Cadastro de alunos com foto em C# com XML (iMasters) https://www.ibm.com/developerworks/community/blogs/fd26864d-cb41-49cf-b719-d89c6b072893/entry/cadastro_de_alunos_com_foto_em_c_com_xml2?lang… 1/7 iMasters | Dec 3 2010 | Tags: banco_de_dados xml vb.net .net | 4,153 Visits Cadastro de alunos com foto em C# com XML Nem sempre você vai precisar de um banco de dados para guardar informações. Os bancos de dados relacionais são a melhor opção quando o objetivo é armazenar e recuperar informações, mas apresentam diversos problemas. Se o seu caso não requer a utilização de um banco de dados, considere armazenar informações em arquivos XML. As perspectivas de XML para armazenamento de dados são surpreendentes e até mesmo os Data WareHouses já estão armazenando informações no formato XML. Como o objetivo principal de armazéns de dados é armazenar dados não-operacionais a longo prazo, ou seja, para trocá-los ao longo do tempo, as razões fundamentais para o sucesso esmagador do XML como um formato de troca também esperam por data warehouses. Um data warehouse (ou armazém de dados, ou depósito de dados no Brasil) é um sistema de computação utilizado para armazenar informações relativas às atividades de uma organização em bancos de dados, de forma consolidada. O desenho da base de dados favorece os relatórios, a análise de grandes volumes de dados e a obtenção de informações estratégicas que podem facilitar a tomada de decisão. Se pensarmos que a plataforma .NET oferece diversos recursos para que possamos tratar informações no formato XML, de forma rápida e descomplicada, temos aí um motivo a mais para pensarmos na utilização do formato XML quando realmente indicado. Neste artigo, eu vou mostrar como criar uma aplicação usando a linguagem C# que realiza o gerenciamento de informações sobre alunos, incluindo a foto, persistindo e recuperando as informações de um arquivo XML. É uma aplicação simples, mas meu objetivo é mostrar o potencial que tem esse recurso na plataforma .NET. No exemplo deste artigo, eu vou armazenar as seguintes informações sobre os alunos: Código Nome Curso Mensalidade Foto Irei utilizar o arquivo Alunos.xml para armazenar as informações dos alunos. Esse arquivo possui a seguinte estrutura: <?xml version="1.0" standalone="yes"?> <alunos> <aluno> <codigo>10</codigo> <nome>Jimmi Hendrix</nome> <curso>Musica</curso> <mensalidade>3500</mensalidade> <foto>10)hendrix.jpg</foto> </aluno> </alunos> As fotos dos alunos serão armazenadas em uma pasta do projeto chamada Dados juntamente com o arquivo xml. Para evitar que existam nomes de fotos duplicadas (esse é um dos problemas de usar essa solução), eu vou sempre concatenar o código do aluno mais o caractere cerquilha (#) com o nome da foto. Dessa forma, sempre teremos um nome único para a foto. Para criar o projeto deste artigo, eu vou usar o Visual C# 2008 Express Edition e, antes de iniciar o projeto, vou mostrar a aparência que terá a My Blogs Public Blogs My Updates Search This Blog iMasters Log in to participate iMasters Overview Recent Updates Members Blog Feeds Forums Bookmarks Wiki Files Activities Tags Find a Tag .net agile android aplicativos banco banco_de_dados c# carreira certificações cloud cloud_computing computing dados de desenvolvimento design e framework gerência gerência_ti google ibm imasters java javascript jquery lançamento linguagens linux livre mercado mobile mysql oracle pesquisa php projetos python redes ruby segurança servidores sistema software software_livre tecnologia tendências ti web w ordpress Cloud List Similar Entries MQ v8: SSL connectio... Blog: MQdev Blog Sudhanshu Pant UpdatedAug 22 0 0 Do you know, that z/... Blog: Ingolf's z/VS... Ingolf24 UpdatedJuly 9 0 0 IBM CLM using Websph... Blog: Notes from Ra... RohitBalduw a UpdatedJune 6 1 0 50 DB2 Nuggets #27 :... Blog: Thoughts from... MaryKKassey UpdatedMay 20 0 0 JSONiq: JSON->XML Blog: HermannSW HermannSW UpdatedMay 16 0 0 Archive January 2014 August 2013 July 2013 May 2013 April 2013 March 2013 February 2013 January 2013 December 2012 November 2012 October 2012 September 2012 August 2012 July 2012 June 2012 May 2012 April 2012 March 2012 February 2012 January 2012 December 2011 November 2011 October 2011 September 2011 August 2011 July 2011 June 2011 May 2011 iMasters Sign in (or register) English IBM Technical topics Evaluation software Community Events Search developerWork s My hom e Forums Blogs Communities Profiles Podcasts Wikis Activities IBM Champion program

Transcript of iMasters Similar Entries -...

25/8/2014 Cadastro de alunos com foto em C# com XML (iMasters)

https://www.ibm.com/developerworks/community/blogs/fd26864d-cb41-49cf-b719-d89c6b072893/entry/cadastro_de_alunos_com_foto_em_c_com_xml2?lang… 1/7

iMasters | Dec 3 2010 | Tags: banco_de_dados xml vb.net .net | 4,153 Visits

Cadastro de alunos com foto em C# com XML

Nem sempre você vai precisar de um banco de dados para guardar

informações. Os bancos de dados relacionais são a melhor opção

quando o objetivo é armazenar e recuperar informações, mas

apresentam diversos problemas. Se o seu caso não requer a utilização

de um banco de dados, considere armazenar informações em arquivos

XML.

As perspectivas de XML para armazenamento de dados são

surpreendentes e até mesmo os Data WareHouses já estão

armazenando informações no formato XML. Como o objetivo principal de

armazéns de dados é armazenar dados não-operacionais a longo prazo,

ou seja, para trocá-los ao longo do tempo, as razões fundamentais para o

sucesso esmagador do XML como um formato de troca também

esperam por data warehouses.

Um data warehouse (ou armazém de dados, ou depósito de dados no

Brasil) é um sistema de computação utilizado para armazenar

informações relativas às atividades de uma organização em bancos de

dados, de forma consolidada. O desenho da base de dados favorece os

relatórios, a análise de grandes volumes de dados e a obtenção de

informações estratégicas que podem facilitar a tomada de decisão.

Se pensarmos que a plataforma .NET oferece diversos recursos para que

possamos tratar informações no formato XML, de forma rápida e

descomplicada, temos aí um motivo a mais para pensarmos na utilização

do formato XML quando realmente indicado.

Neste artigo, eu vou mostrar como criar uma aplicação usando a

linguagem C# que realiza o gerenciamento de informações sobre alunos,

incluindo a foto, persistindo e recuperando as informações de um arquivo

XML. É uma aplicação simples, mas meu objetivo é mostrar o potencial

que tem esse recurso na plataforma .NET.

No exemplo deste artigo, eu vou armazenar as seguintes informações

sobre os alunos:

Código

Nome

Curso

Mensalidade

Foto

Irei utilizar o arquivo Alunos.xml para armazenar as informações dos

alunos. Esse arquivo possui a seguinte estrutura:

<?xml version="1.0" standalone="yes"?>

<alunos>

<aluno>

<codigo>10</codigo>

<nome>Jimmi Hendrix</nome>

<curso>Musica</curso>

<mensalidade>3500</mensalidade>

<foto>10)hendrix.jpg</foto>

</aluno>

</alunos>

As fotos dos alunos serão armazenadas em uma pasta do projeto

chamada Dados juntamente com o arquivo xml. Para evitar que existam

nomes de fotos duplicadas (esse é um dos problemas de usar essa

solução), eu vou sempre concatenar o código do aluno mais o caractere

cerquilha (#) com o nome da foto. Dessa forma, sempre teremos um

nome único para a foto.

Para criar o projeto deste artigo, eu vou usar o Visual C# 2008 Express

Edition e, antes de iniciar o projeto, vou mostrar a aparência que terá a

My Blogs Public Blogs My UpdatesSearchThis Blog

iMasters Log in to participate

iMasters

Overview

Recent Updates

Members

▪ Blog

Feeds

Forums

Bookmarks

Wiki

Files

Activities

Tags

Find a Tag

.net agile android aplicativos

banco banco_de_dados c#

carreira certificações cloud

cloud_computing computing

dados de

desenvolvimentodesign e framework

gerência gerência_ti google

ibm imasters java javascript

jquery lançamento linguagens

linux livre mercado

mobile mysql oracle

pesquisa php projetos

python redes ruby

segurança servidores

sistema software

software_livre tecnologia

tendências ti web

w ordpress

Cloud List

Similar Entries

MQ v8: SSL connectio...

Blog: MQdev Blog

Sudhanshu Pant

UpdatedAug 22

0 0

Do you know, that z/...

Blog: Ingolf's z/VS...

Ingolf24

UpdatedJuly 9

0 0

IBM CLM using Websph...

Blog: Notes from Ra...

RohitBalduw a

UpdatedJune 6

1 0

50 DB2 Nuggets #27 :...

Blog: Thoughts from...

MaryKKassey

UpdatedMay 20

0 0

JSONiq: JSON->XML

Blog: HermannSW

HermannSW

UpdatedMay 16

0 0

Archive

January 2014

August 2013

July 2013

May 2013

April 2013

March 2013

February 2013

January 2013

December 2012

November 2012

October 2012

September 2012

August 2012

July 2012

June 2012

May 2012

April 2012

March 2012

February 2012

January 2012

December 2011

November 2011

October 2011

September 2011

August 2011

July 2011

June 2011

May 2011

iMasters

Sign in (or register)EnglishIBM

Technical topics Evaluation software Community Events Search developerWorks

My home Forums Blogs Communities Profiles Podcasts Wikis Activities

IBM Champion program

25/8/2014 Cadastro de alunos com foto em C# com XML (iMasters)

https://www.ibm.com/developerworks/community/blogs/fd26864d-cb41-49cf-b719-d89c6b072893/entry/cadastro_de_alunos_com_foto_em_c_com_xml2?lang… 2/7

nossa aplicação na figura abaixo:

Agora vamos ao que interessa...

Criando a aplicação Windows Forms no Vsual C# 2008

Express Edition

Abra o Visual C# 2008 Express e crie um novo projeto do tipo Windows

Forms Application no menu File->New Project -> Windows Forms

Application com o nome CadastroAlunos.

No formulário form1.cs, vamos incluir os controles a partir da ToolBox

conforme o layout da figura abaixo:

1 DataGridView - gdvAlunos

4 TextBox : txtCodigo, txtNome, txtCurso, txtMensalidade, picFoto

11 Buttons assim designados:

01. Buttons para movimentação dos registros:

btnPrimeiro

btnAnterior

btnProximo

btnUltimo

02. Botões para operações de manutenção de dados:

btnInlcuir

btnProcurar

btnAtualizar

btnDeletar

btnLimpar

btnCarregaXML

btnSair

btnLocalizarFoto

1 Contrrole PictureBox - picFoto

Além disso, vamos usar dois controles OpenFileDialog: ofd1 e ofd2. Após

incluir os controles acima e definir o nome de cada um conforme

indicado, defina os controles conforme o layout acima. A seguir, vamos

definir os namespaces usados no projeto no início do formulário

form1.cs:

using

System;

April 2011

March 2011

February 2011

January 2011

December 2010

November 2010

October 2010

September 2010

August 2010

July 2010

April 2010

Blog Authors

iMasters

AlêBorba

Klederson

1 - 3 of 3 authors

25/8/2014 Cadastro de alunos com foto em C# com XML (iMasters)

https://www.ibm.com/developerworks/community/blogs/fd26864d-cb41-49cf-b719-d89c6b072893/entry/cadastro_de_alunos_com_foto_em_c_com_xml2?lang… 3/7

using System.Data;

using System.Drawing;

using System.Windows.Forms;

using Microsoft.VisualBasic;

using System.IO;

Feito isso, vamos definir as variáveis que serão usadas no projeto:

//define variáveis usadas no projeto

DataSet ds;

string fcaminho;

string fdiretorio;

string pcaminho;

string pnome;

string pdestino;

int reg = 0;

DataRow linharegistro;

Vou começar definindo o código do botão de comando Carregar Arquivo

XML.

Ao clicar no botão, será aberta uma janela de diálogo OpenFileDialog

para que seja possível selecionar o arquivo XML que desejamos carregar

e exibir no controle DataGridView - gdvAlunos. O código é visto abaixo:

private void btnCarregaXML_Click(object sender, EventArgs e)

{

try

{

ofd1.Filter = "xml|*.xml|all files|*.*";

DialogResult res = ofd1.ShowDialog();

if (res == DialogResult.OK)

{

gdvAlunos.DataSource = null;

btnLimpar.PerformClick();

fcaminho = ofd1.FileName;

ds = new DataSet();

ds.ReadXml(fcaminho);

//definindo a chave primaria a fim de procurar o registro

usando o método find

ds.Tables[0].Constraints.Add("pk_codigo", ds.Tables[0].Columns[0],

true);

gdvAlunos.DataSource = ds.Tables[0];

fdiretorio = fcaminho.Substring(0, fcaminho.LastIndexOf("\\") +

1);

mostrarDados();

}

}

catch(Exception ex)

{ MessageBox.Show("Informação inválida : " + ex.Message, "Aviso",

MessageBoxButtons.YesNo, MessageBoxIcon.Warning); }

}

Se um arquivo for selecionado, então faremos o seguinte:

Limpamos os controles do formulário: btnLimpar.PerformClick();

Obtemos o caminho e o nome do arquivo selecionado: fcaminho

= ofd1.FileName;

Criamos um dataset e, usando o método ReadXml(fcaminho),

lemos o conteúdo do arquivo XML para o dataset;

Definimos uma chave primária na tabela a fim de procurar o

registro usando o método Find;

O método Find da coleção Rows retorna um objeto DataRow, e, nesse

caso, uma única linha e não um array de linhas. Esse método precisa que

você defina a propriedade chave primária (Primary Key) antes de usá-lo.

Se você não fizer isso, vai obter uma exceção.

Chamamos a rotina mostrarDados() para exibir os dados no

DataGridView.

Vejamos a seguir o código da rotina mostrarDados():

void mostrarDados()

{

if (ds.Tables[0].Rows.Count > 0)

{

picFoto.Image = null;

txtCodigo.Text = ds.Tables[0].Rows[reg][0].ToString();

txtNome.Text = ds.Tables[0].Rows[reg][1].ToString();

txtCurso.Text = ds.Tables[0].Rows[reg][2].ToString();

txtMensalidade.Text = ds.Tables[0].Rows[reg][3].ToString();

picFoto.ImageLocation = fdiretorio + ds.Tables[0].Rows[reg]

[4].ToString();

}

else

MessageBox.Show("Não existem registros.","Aviso",

25/8/2014 Cadastro de alunos com foto em C# com XML (iMasters)

https://www.ibm.com/developerworks/community/blogs/fd26864d-cb41-49cf-b719-d89c6b072893/entry/cadastro_de_alunos_com_foto_em_c_com_xml2?lang… 4/7

MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

}

Este código verifica se existem linhas na tabela:

if(ds.Tables[0].Rows.Count > 0)

Em caso positivo, exibe os dados nos controles do formulário. Estamos

usando um dataset não tipado, no qual temos que definir a posição do

registro na tabela do dataset da seguinte forma:

ds.Tables[0].Rows[reg][0].ToString()

ds - o dataset

ds.Tables[0] - a primeira tabela do dataset (só existe uma mesmo)

ds.Tables[0].Rows[reg][n] - campo de índice igual a n existente na

linha (Rows)

A rotina mostrarDados() não retorna nada, por isso o modificador void.

Ela será usada sempre que desejamos exibir informações nos controles

do formulário.

Vejamos agora o código do botão Incluir que deverá incluir um novo aluno

no arquivo XML:

private void btnIncluir_Click(object sender, EventArgs e)

{

linharegistro = null;

linharegistro = ds.Tables[0].Rows.Find(txtCodigo.Text);

if (linharegistro == null)

{

//atribui os valores dos controles ao datarow

linharegistro = ds.Tables[0].NewRow();

linharegistro[0] = txtCodigo.Text;

linharegistro[1] = txtNome.Text;

linharegistro[2] = txtCurso.Text;

linharegistro[3] = txtMensalidade.Text;

salvaFoto();

linharegistro[4] = pnome;

//inclui uma linha na tabela

ds.Tables[0].Rows.Add(linharegistro);

reg = ds.Tables[0].Rows.IndexOf(linharegistro);

//salva dados no arquivo xml

ds.WriteXml(fcaminho);

MessageBox.Show("Registro incluído com sucesso.", "Aviso",

MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

}

else

MessageBox.Show("Registro já existe.O código deve ser

único.","Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

}

Verificamos se o registro já existe usando o método Find: linharegistro =

ds.Tables[0].Rows.Find(txtCodigo.Text).

Em caso positivo, criamos uma nova linha(NewRow) e atribuímos os

valores informados no TextBox à nova linha. Chamamos a rotina

SalvaFoto() e incluímos a nova linha na tabela e, em seguida, gravamos

os dados no arquivo XML usando o método ds.WriteXml().

A rotina SalvaFoto() tem seu código exibido a seguir:

void salvaFoto()

{

//Procurando o nome da foto

//salvando na pasta do arquivo xml com nome unico

(codigo+nome_foto)

pcaminho = picFoto.ImageLocation;

pnome = txtCodigo.Text + "#" +

(pcaminho.Substring(pcaminho.LastIndexOf('\\') + 1));//(codigo + nome da

foto)

pdestino = fdiretorio + pnome;

picFoto.Image.Save(pdestino);//salva imagem no disco

}

Neste código, atribuímos o caminho da foto à variável pcaminho e

montamos o nome da foto com o código do aluno mais o caractere # e o

nome da foto. Montamos o diretório de destino e salvamos a foto no

disco. No botão Procurar, temos o código que localiza um registro e

exibe as informações no formulário:

private void btnProcurar_Click(object sender, EventArgs e)

{

int n = Convert.ToInt32(Interaction.InputBox("Informe o código do

aluno :", "Procurar", "10", 200, 200));

//procurando registros usando o método find

linharegistro = null;

linharegistro = ds.Tables[0].Rows.Find(n);

25/8/2014 Cadastro de alunos com foto em C# com XML (iMasters)

https://www.ibm.com/developerworks/community/blogs/fd26864d-cb41-49cf-b719-d89c6b072893/entry/cadastro_de_alunos_com_foto_em_c_com_xml2?lang… 5/7

if (linharegistro != null)

{ //preenche os controles do formulário

reg = ds.Tables[0].Rows.IndexOf(linharegistro);

txtCodigo.Text = linharegistro[0].ToString();

txtNome.Text = linharegistro[1].ToString();

txtCurso.Text = linharegistro[2].ToString();

txtMensalidade.Text = linharegistro[3].ToString();

picFoto.ImageLocation = fdiretorio + linharegistro[4];

}

else

MessageBox.Show("registro não localizado.", "Aviso",

MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

}

Solicitamos o código do aluno usando o InputBox e novamente usamos

o método Find para localizar o registro. O código do botão Atualizar que

altera os dados do arquivo XML:

private void btnAtualizar_Click(object sender, EventArgs e)

{

//procurando registros usando o método find

DataRow linharegistro = ds.Tables[0].Rows.Find(txtCodigo.Text);

if (linharegistro!= null)

{

reg = ds.Tables[0].Rows.IndexOf(linharegistro);

//atribui os valores dos controles aos campos da tabela

ds.Tables[0].Rows[reg][0] = txtCodigo.Text;

ds.Tables[0].Rows[reg][1] = txtNome.Text;

ds.Tables[0].Rows[reg][2] = txtCurso.Text;

ds.Tables[0].Rows[reg][3] = txtMensalidade.Text;

File.Delete(fdiretorio + linharegistro[4]);

salvaFoto();

ds.Tables[0].Rows[reg][4] = pnome;

//grava no arquivo xml

ds.WriteXml(fcaminho);

MessageBox.Show("registro atualizado", "Aviso",

MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

}

else

MessageBox.Show("Não existe registro de aluno com este

código.", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

}

Localizamos o item usando o método Find e atribuímos os valores

informados nas caixas de texto às linhas da tabela, salvamos a foto e

gravamos as alterações no arquivo XML. A rotina para excluir uma linha

do arquivo é vista no código a seguir:

private void btnDeletar_Click(object sender, EventArgs e)

{

//procurando registros usando o método find

DataRow linharegistro = ds.Tables[0].Rows.Find(txtCodigo.Text);

if (linharegistro!= null)

{

File.Delete(fdiretorio + linharegistro[4]);

ds.Tables[0].Rows.Remove(linharegistro);

ds.WriteXml(ofd1.FileName);

MessageBox.Show("Registro deletado.", "Aviso",

MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

reg = 0;

mostrarDados();

}

else

MessageBox.Show("Não existe registro de aluno com este

código.", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

}

Localizamos o item usando o método Find e usando método Remove

excluímos a linha da tabela. O código de cada um dos botões de

navegação é mostrado a seguir:

private void btnPrimeiro_Click(object sender, EventArgs e)

{

reg = 0;

mostrarDados();

}

private void btnAnterior_Click(object sender, EventArgs e)

{

if (reg > 0)

{

reg--;

25/8/2014 Cadastro de alunos com foto em C# com XML (iMasters)

https://www.ibm.com/developerworks/community/blogs/fd26864d-cb41-49cf-b719-d89c6b072893/entry/cadastro_de_alunos_com_foto_em_c_com_xml2?lang… 6/7

mostrarDados();

}

else

{ MessageBox.Show("Primeiro Registro."); }

}

private void btnProximo_Click(object sender, EventArgs e)

{

if (reg < ds.Tables[0].Rows.Count - 1)

{

reg++;

mostrarDados();

}

else

{ MessageBox.Show("Último Registro."); }

}

private void btnUltimo_Click(object sender, EventArgs e)

{

reg = ds.Tables[0].Rows.Count - 1;

mostrarDados();

}

Verificamos a posição do registro e usamos a rotina mostraDados para

exibir os dados atuais. O código do botão Limpar é dado a seguir:

private void btnLimpar_Click(object sender, EventArgs e)

{

//limpa controles TextBox do formulário e o picturebox

txtCodigo.Text = txtNome.Text = txtCurso.Text = txtMensalidade.Text

= "";

picFoto.Image = null;

}

Também incluímos o código abaixo no evento CellClick do DataGridView.

private void gdvAlunos_CellClick(object sender,

DataGridViewCellEventArgs e)

{

try

{

//obtem o valor da primeira célula do grid que é o código do aluno

int codigo =

Convert.ToInt32(gdvAlunos.CurrentRow.Cells[0].Value);

linharegistro = ds.Tables[0].Rows.Find(codigo);

if (linharegistro != null)

{ //preenche os controles do formulário

reg = ds.Tables[0].Rows.IndexOf(linharegistro);

txtCodigo.Text = linharegistro[0].ToString();

txtNome.Text = linharegistro[1].ToString();

txtCurso.Text = linharegistro[2].ToString();

txtMensalidade.Text = linharegistro[3].ToString();

picFoto.ImageLocation = fdiretorio + linharegistro[4];

}

else

MessageBox.Show("registro não localizado.", "Aviso",

MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

}

catch

{ }

}

Dessa forma, quando uma linha do grid for clicada, obtemos os valores

da linha e exibimos no formulário. Para encerrar, temos o código do botão

que encerra a aplicação:

private void btnSair_Click(object sender, EventArgs e)

{

DialogResult resultado = MessageBox.Show("Deseja Encerrar a

aplicação?",

"Sair", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

if (resultado == DialogResult.Yes)

Application.Exit();

}

Com isso, mostramos que podemos ter informações armazenadas em

arquivos XML e que podemos tratá-las de forma dinâmica e funcional

com os recursos da linguagem C#.

Simples, simples assim. Pegue o projeto completo aqui:

CadastroXML.zip.

Eu sei, é apenas XML, mas eu gosto...

artigo publicado originalmente no iMasters, por José Carlos Macoratti

25/8/2014 Cadastro de alunos com foto em C# com XML (iMasters)

https://www.ibm.com/developerworks/community/blogs/fd26864d-cb41-49cf-b719-d89c6b072893/entry/cadastro_de_alunos_com_foto_em_c_com_xml2?lang… 7/7

About

Help

Contact us

Submit content

Feeds

New sletters

Report abuse

Terms of use

Third party notice

IBM privacy

IBM accessibility

Faculty

Students

Business Partners

Add a Comment More Actions

Comments (0)

There are no comments to display

Previous Entry Main Next Entry

Feed for Blog Entries | Feed for Blog Comments |

Feed for Comments for this Entry

Follow

Like