91
UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO Leonardo Pereira Demilis Sistema para aplicação de pesquisas on-line Trabalho de conclusão submetido à Universidade Federal de Santa Catarina como parte dos requisitos para a obtenção do grau de Bacharel em Ciências da Computação. Profa. Lúcia Helena Martins Pacheco Orientadora Florianópolis, Maio de 2005

UNIVERSIDADE FEDERAL DE SANTA CATARINA · Comportamento do Sistema ... contratar os serviços de uma empresa ou mesmo ao ... Deve ser levado em consideração que o respondente gasta

Embed Size (px)

Citation preview

UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA

BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO

Leonardo Pereira Demilis

Sistema para aplicação de pesquisas on-line

Trabalho de conclusão submetido à Universidade Federal de Santa Catarina como parte dos requisitos para a obtenção do grau de Bacharel em Ciências da Computação.

Profa. Lúcia Helena Martins Pacheco Orientadora

Florianópolis, Maio de 2005

2

Sistema para Aplicação de Pesquisas On-line

Leonardo Pereira Demilis

Este Trabalho de conclusão foi aprovado em sua forma final pelo Curso de Ciências da Computação da Universidade Federal de Santa Catarina

___________________________________________ Prof. José Mazzuco Júnior, Dr.

Coordenador do Curso

Banca Examinadora

___________________________________________ Profa. Lúcia Helena Martins Pacheco

Orientadora

___________________________________________ Profa. Maria Marta Leite

___________________________________________ Prof. Emilio Takase

3

" Mais difícil do que ter uma grande idéia é reconhecer uma.

Especialmente se for de outra pessoa!"

(Washington Olivetto)

4

Aos meus pais e família.

5

Agradecimentos

Primeiramente à professora Lúcia Helena Martins Pacheco por aceitar ser

minha orintadora neste trabalho, sempre com muita calma e paciência.

À professora Maria Marta Leite e ao professor Emilio Takase que aceitaram

fazer parte da banca examinadora.

Aos meus amigos que ajudaram, seja na própria confecção do trabalho ou

nas horas de descanso.

À minha família que sempre me apoiou e me incentivou em tudo o que eu

faço.

A minha namorada Marília, que sempre teve paciência comigo nas horas em

que eu não lhe dava a atenção merecida.

E todas as outras pessoas que fizeram parte da minha vida acadêmica.

(Leonardo Pereira Demilis)

6

SUMÁRIO

1. INTRODUÇÃO........................................................................................ 11 1.1. Objetivos .... .......................................................................................... 11 1.2. Objetivos Específicos........................................................................... 12 1.3. Justificativa........................................................................................... 12 1.4. Metodologia .......................................................................................... 12 1.5. Organização do Trabalho ................................................................... 13

2. PESQUISAS E QUESTIONÁRIOS....................................................... 14 2.1. Bases Conceituais e Populacionais ..................................................... 14 2.2. Contexto Social .................................................................................... 15 2.3. Estrutura Lógica e Seqüência............................................................. 15 2.4. Elementos (Questões e Itens) .............................................................. 17

2.4.1. Níveis de Mensuração ou Escala ............................................................19 2.4.2. Diferenças de Instrumento .......................................................................21

3. TECNOLOGIAS UTILIZADAS............................................................ 22 3.1. Java ............ .......................................................................................... 22 3.2. Orientação a Objetos........................................................................... 23 3.3. PHP, HTML e CSS.............................................................................. 26 3.4. Banco de Dados.................................................................................... 27

3.4.1. MySQL ...........................................................................................................28 4. SOLUÇÃO E IMPLEMENTAÇÃO...................................................... 29

4.1. Projeto .................................................................................................. 29 4.1.1. Requisitos .......................................................................................................29

4.2. Comportamento do Sistema ............................................................... 30 4.2.1. Casos de Uso (use cases)............................................................................30 4.2.2. Visão Geral ....................................................................................................33

5. CONSIDERAÇÕES FINAIS.................................................................. 39 5.1. Trabalhos Futuros ............................................................................... 39

7

LISTA DE FIGURAS

Figura 1 - Interface Principal ....................................................................... 34 Figura 2 - Tela para Criação de Novo Questionário.................................. 35 Figura 3 - Adicionar Questão Aberta .......................................................... 36 Figura 4 - Adicionar Questão Fechada........................................................ 37 Figura 5 - Excluir Questão............................................................................ 38

8

LISTA DE SIGLAS

CSS Cascading Style Sheets

HTML HyperText Markup Language

IDE Integrated Development Environment

PHP PHP: Hypertext Processor

SGBD Sistema de Gerenciamento de Banco de Dados

SQL Structured Query Language

9

RESUMO

Pesquisas em forma de questionário são muito importantes e têm inúmeros e

diferentes usos de acordo com o que se deseja avaliar. A maioria desses questionários tem

basicamente o mesmo formato, isto é, segue uma estrutura lógica mas, na maioria das

vezes, devem ser totalmente refeitos para cada caso particular. Sendo assim, seria de grande

utilidade um software que proporcione facilidade para a criação e reutilização dos trabalhos

desenvolvidos nesta área.

Tendo isto em mente, foi desenvolvido este Trabalho de Conclusão de Curso

de Bacharelado em Ciências da Computação na Universidade Federal de Santa Catarina, o

qual tem como objetivo a criação do software mencionado acima.

Este trabalho apresentará alguma fundamentação teórica necessária para o

desenvolvimento e descreverá como foi feita a abordagem do problema bem como a

implementação do sistema.

Palavras chave: questionário, sistema, software.

10

ABSTRACT

Research in questionnaire form is very important and has innumerable and

different uses in accordance with what it is desired to evaluate. The majority of these

questionnaires has format basically the same, that is, it follows a logical structure but, in the

majority them times, must total be remade for each particular case. Being thus, it would be

of great utility a software that provides to easiness for the creation and reuse of the

developed works.

Having this in mind, this Work of Conclusion of Course of Computer

Sciences in the Federal University of Santa Catarina was developed, which has as objective

the creation of softwere mentioned above.

This work will present some necessary theoretical recital for the

development and will describe as the boarding of the problem as well as the

implementation of the system was made.

Keywords: questionnaire, system, software.

11

CAPÍTULO 1

1. INTRODUÇÃO

Uma das maneiras para se compreender o comportamento humano é

perguntando para as pessoas, buscando saber o que elas pensam, fazem ou fizeram. As

pessoas necessitam e utilizam esses dados de base na hora de tomar decisões ou fazer

escolhas, tanto na vida particular quanto na vida profissional. Na hora de se criar produtos,

utilizar produtos, contratar pessoas, contratar os serviços de uma empresa ou mesmo ao

escolher o restaurante onde se vai almoçar, alguns dados são levados em consideração, mas

que dados são esses? Esses dados podem ser opiniões de outras pessoas, experiências

anteriores, estudos sobre o assunto em geral etc.

Pesquisa em forma de questionário é um método muito usado e muito

eficiente para a coleta de dados. Esse tipo de pesquisa é usado, por exemplo, por empresas

que desejam saber a satisfação de seus clientes em relação a algum determinado produto ou

serviço, ou para estudar a aceitação de determinado produto ou serviço pelo mercado ao

qual se pretende atender, dentre muitos outros usos.

A pesquisa por amostragem garante uma grande representatividade e permite

que se façam generalizações para uma população mais ampla [GUN 99].

Com o avanço e a popularização da Internet, criou-se um meio muito

importante e eficiente para a aplicação deste tipo de pesquisa, graças à facilidade e a

velocidade que a Internet proporciona.

1.1. Objetivos

Este trabalho tem como objetivo criar uma ferramenta que auxilie na criação

de mecanismos de pesquisa por meio de questionário, proporcionando maior rapidez e

facilidade tanto na criação quanto na obtenção de resultados. O Sistema deve também

proporcionar ao usuário alguns exemplos e dicas para a construção do questionário.

12

1.2. Objetivos Específicos

Desenvolver uma aplicação que proporcione:

Reusabilidade

documentos já desenvolvidos podem ser reutilizados,

podendo assim ser melhorados, corrigidos, atualizados etc.

Rapidez

o software deve promover facilidades ao usuário proporcionado

assim maior rapidez na criação de questionários.

Facilidade de uso

o software não deve ser de difícil utilização a fim de

proporcionar a rapidez acima mencionada, além de encorajar o seu uso.

1.3. Justificativa

O esforço e o tempo gasto para a criação de uma pesquisa podem ser

diminuídos significativamente se o trabalho for reusado e/ou se componentes que são

usados de forma repetida na maioria dos trabalhos possuírem um modelo o qual pode ser

modificado ou reutilizado.

Adotando-se também um padrão estético que é sempre seguido e aplicado

automaticamente, sem a necessidade de elaboração ou de formatação, o trabalho de criação

de questionários é significativamente facilitado.

Seguindo-se um modelo tem-se a vantagem de não se gastar tempo com

modelagem, endentação e formatação dos questionários deixando a cargo do usuário

somente tarefa de inserir no programa o título, introdução, as questões e as alternativas por

ele elaboradas.

1.4. Metodologia

Este trabalho apresentará a implementação de um sistema para a criação de

questionários. O sistema criado possibilitará além da própria elaboração do questionário a

sua impressão bem como a publicação de arquivos e a criação de banco de dados, para que

o mesmo possa ser aplicado via Internet. Tais arquivos publicados estarão já formatados e

prontos para serem publicados na web.

13

1.5. Organização do Trabalho

No Capítulo 2 deste trabalho será abordada a teoria sobre questionários e

pesquisas, mostrando o que se espera de uma pesquisa e como ela deve ser feita. No

Capítulo 3 serão descritas as ferramentas e tecnologias utilizadas na elaboração deste

trabalho. O Capítulo 4 apresentará as soluções adotadas para a resolução do problema

proposto. O Capítulo 5 apresentará as considerações finais sobre o trabalho bem como os

trabalhos futuros. Ao final deste documento podem ser encontrados no Apêndice e Anexos

os casos de uso (use cases) e o código fonte do software implementado.

14

CAPÍTULO 2

2. PESQUISAS E QUESTIONÁRIOS

Questionário pode ser definido como um conjunto de perguntas sobre um

determinado tópico que não testa a habilidade do respondente, mas mede sua opinião, seus

interesses, aspectos de personalidade e informações biográficas [YAR 86].

O questionário é um instrumento para levantar informações a que se deve

responder sem a interferência do avaliador/pesquisador. Geralmente usa-se o termo

"questionário" para designar qualquer instrumento de coleta de informações. No entanto,

quando este instrumento é preenchido pela população-alvo da avaliação o termo técnico

para designá-lo é "formulário".

Na construção de um questionário podem ser levados em consideração cinco

tópicos específicos, sendo eles: em primeiro as bases conceituais e populacionais, em

segundo o contexto social em que a pesquisa é realizada, em terceiro trata-se da estrutura

lógica do questionário, em quarto os elementos do questionário (questões e itens) em quinto

as diferenças do instrumento conforme a forma da sua aplicação [GUN 99].

2.1. Bases Conceituais e Populacionais

Quando se elabora um questionário deve-se ter sempre em mente os

objetivos da pesquisa, quais conceitos devem ser pesquisados e qual o público-alvo que se

deseja atingir.

O objetivo da pesquisa é que determinará quais conceitos devem ser

estudados. O objetivo do estudo é o que determina as perguntas concretas que serão

apresentadas, ou por assim dizer, os itens. Os itens a serem apresentados podem variar de

acordo com os conceitos que se quer avaliar.

Dependendo do objetivo da pesquisa, e do público-alvo, poderão ser

definidos diferentes tipos de amostra.

15

2.2. Contexto Social

Deve ser levado em consideração que o respondente gasta seu tempo, tem

um esforço mental para completar o questionário, e que a motivação para responder e

fornecer os dados que o pesquisador quer são variáveis.

É uma questão cultural saber até que ponto o respondente aceita ser

questionado, até que ponto ele aceita tornar pública a sua opinião e fornecer respostas

autênticas.

Outro ponto é a imagem do pesquisador, a credibilidade que ele possui e a

relevância para o respondente.

O meio físico onde a pesquisa será aplicada e também a época (período de

festas, férias etc.) também influem no resultado.

2.3. Estrutura Lógica e Seqüência

Um dos principais problemas é motivar o respondente a completar e

devolver o questionário de forma honesta. Segundo [DILL 78] há três coisas que precisam

ser feitas para maximizar a resposta de uma pesquisa: minimize o custo para o respondente,

maximize as recompensas para fazê-lo e estabeleça confiança de que a recompensa será

concedida [DILL 78].

Sendo assim:

Recompensar o respondente:

a) demonstrando consideração;

b) oferecendo apreciação verbal usando uma abordagem consultiva;

c) apoiando seus valores;

d) oferecendo recompensas concretas;

e) tornando o instrumento interessante;

Reduzir o custo de responder:

a) fazendo com que a tarefa pareça breve;

b) reduzindo esforços físico e mental requeridos;

16

c) eliminando a possibilidade de embaraçamento;

d) eliminando qualquer implicação de subordinação;

e) eliminando qualquer custo financeiro imediato;

Estabelecer confiança:

a) oferecendo um sinal de apreciação antecipadamente;

b) identificando-se com uma instituição conhecida e legitimada;

c) aproveitando outros relacionamentos de troca.

O início é onde se conhece o respondente e se estabelece a confiança

necessária.

A primeira coisa a ser feita é estabelecer um contato com o respondente e

assegurar a sua cooperação. Para estabelecer esta confiança é necessário apresentar o tema

e porque esta pesquisa está sendo feita, além de mostrar a importância da mesma para o

próprio respondente.

A boa apresentação do instrumento é essencial, pois será nos momentos

iniciais que o respondente decidirá sobre a sua colaboração ou não. Mesmo que se decida

por colaborar a qualquer momento pode existir uma desistência, logo, é importante que o

interesse seja mantido em todas as etapas da pesquisa, evitando assim uma desistência.

Ao final do questionário deve tornar-se clara a importância da opinião e da

participação do respondente, deixando-o satisfeito por ter sido ouvido.

Proporcionar acesso aos resultados da pesquisa é uma maneira de

recompensar os respondentes, além do mais, tais resultados podem levá-los a uma reflexão

sobre o assunto abordado.

A oferta de recompensas para a participação em pesquisas deve ser vista

com atenção, pois isto pode alterar os resultados da pesquisa. O participante pode se ver

pressionado a não desistir para ter direito a recompensa dando respostas não autênticas, ou

pode também se estabelecer uma dependência no incentivo para a participação.

Uma estrutura bem montada pode reduzir significativamente o esforço

mental do respondente e tornar a tarefa bem menos tediosa, além de assegurar que os

17

objetivos do pesquisador sejam satisfeitos. Deve-se saber por que cada item esta presente

na pesquisa e o que cada resposta representará na continuação da mesma.

Uma maneira de estruturar uma pesquisa é partir de questões mais gerais

para questões mais específicas. Essas perguntas mais gerais serviriam para estabelecer a

confiança desejada com o entrevistado. Com uma certa confiança estabelecida, não se deve

começar com perguntas burocráticas ou constrangedoras, deve-se logo passar para o

assunto de interesse do pesquisador, já que o respondente decidiu participar da pesquisa por

ter se interessado pelo assunto ou por tê-lo achado relevante. Mantida a confiança do

respondente, aí sim podem ser introduzidas perguntas indiretamente relacionadas com o

tema, mas sempre refletindo se esta questão é mesmo necessária. Somente no final do

questionário devem ser encontradas perguntas pessoais e/ou socioeconômicas, mostrando

assim no inicio que não se deseja identificar indivíduos.

Outro principio é que itens sobre o mesmo assunto devem permanecer juntos

e devem conter uma introdução, para que o respondente concentre-se no assunto a ser

respondido.

2.4. Elementos (Questões e Itens)

A base da pesquisa é a pergunta, pela qual se busca obter a informação

desejada, sendo assim, é importante criar boas perguntas.

Para se ter uma boa pergunta, alguns critérios devem ser seguidos: a

pergunta deve ser compreendida perfeitamente; a pergunta deve ser feita corretamente; as

expectativas quanto à resposta adequada devem ser claras ao respondente; o respondente

deve possuir toda a informação necessária para efetuar a resposta, excetuando-se as

ocasiões onde o que se avalia é o conhecimento do respondente; e o respondente deve estar

disposto a responder a questão.

Para garantir tais critérios as questões devem ser específicas, breves, claras e

devem conter um vocabulário apropriado.

Alguns itens necessitam de atenção. Necessita-se de cuidados com a

linguagem e a ambigüidade. A compreensão da população-alvo está diretamente ligada a

18

esses itens. Se o vocabulário do respondente estiver aquém do empregado no questionário,

o mesmo pode não ser compreendido corretamente.

A escolha das palavras usadas pode direcionar a resposta, sendo assim um

cuidado faz-se necessário.

As questões podem ser abertas ou fechadas. Questões fechadas tem a

vantagem de permitir respostas padronizadas que permitem comparação com outras

avaliações. Também permite maior economia de recursos (por facilitar o tratamento e

análise da informação e por exigir menor tempo). Elas são geralmente usadas quando se

conhece a abrangência e os tópicos mais mencionados como resposta. A desvantagem da

questão fechada é que ela permite facilitar a resposta (por esta já ser oferecida) para um

informante que não saberia ou que encontraria maior dificuldade em responder a uma

determinada questão. Quando não se conhece variabilidade das respostas de um

determinado item, faz-se necessário o uso de questões abertas que dão uma maior liberdade

ao respondente [TAN 01].

Realizar testes para ver como as questões estão sendo entendidas pela

população-alvo é um procedimento essencial.

A questão muitas vezes pode causar algum constrangimento ao respondente,

seja esse constrangimento pelo fato do respondente ter que admitir a falta de conhecimento

do assunto abordado ou pelo respondente ser sensível ao assunto, como por exemplo, em

casos de comportamento. É necessário levar em consideração esses aspectos, pois isto pode

causar a desistência do respondente, ou mesmo respostas não verdadeiras pelo fato do

respondente não saber ou não querer responder.

O questionário pode não necessariamente querer medir o conhecimento do

respondente, mas perguntas sobre conhecimento são usadas como um filtro para evitar

perguntas constrangedoras, ao se tratar de um assunto desconhecido do respondente. Para

que o respondente não tente adivinhar a resposta quando ele não souber do que se trata e

não quiser admiti-lo é aconselhável que se faça mais de uma pergunta, assim se reduz a

chance de o respondente acertar o seu palpite.

Perguntas sócio-demográficas como sexo, idade, escolaridade, renda etc.

devem vir somente no final do questionário, e somente se deve perguntar o que realmente

19

vai vir a ser utilizado, sempre lembrando ao respondente que não se tem o intuito de

identificar indivíduos, mas sim a população-alvo.

2.4.1. Níveis de mensuração ou escala

As perguntas são transformadas operacionalmente em variáveis e

indicadores, apresentadas ao respondente em forma de itens. Desta maneira, é perpassando

os itens que se estabelece a relação entre o objetivo de uma pesquisa e os conceitos

pesquisados, enquanto as respostas representam o grau de conceituação que o respondente

tem acerca do assunto sob investigação [GUN 99].

Tipos de mensuração ou escala:

Nominal: são utilizados números ou símbolos para caracterizar cada opção e

diferencia-las.

Exemplo:

Qual o seu Estado Civil?

1- Solteiro (a)

2- Casado (a)

3- Separado (a)

4 -Viúvo (a)

5- Outro

Ordinal: também são utilizados números ou símbolos, mas os mesmos

servem para estabelecer uma relação de ordem, assim pode-se estabelecer uma relação de

quantas vezes cada opção foi citada em primeiro lugar.

Exemplo:

Dentre os esportes abaixo assinale qual a sua primeira opção, a segunda

opção, a terceira opção e a quarta opção:

Número em ordem de preferência

Futebol ____

Basquete ____

20

Vôlei ____

Surf ____

Outros, quais? ________________

Intervalar: além de se estabelecer uma relação de ordem, o intervalo entre

cada alternativa é conhecido e pode ser relacionado e/ou comparado.

Exemplo:

Qual a renda da sua família?

1- Menos de 1 salário mínimo

2- de 1 a 3 salários mínimos

3- mais de 3 a 5 salários mínimos

4- mais de 5 salários mínimos.

Razão: a apresentação dos itens remete a perguntas abertas:

Exemplo:

Você freqüenta alguma academia de musculação?

Sim

Não

Caso sim,

1- Quantas vezes por semana você costuma ir à academia? ____

2- Qual o valor da mensalidade da academia? R$________

Likert: neste caso pede-se que se avalie um determinado fenômeno levando

em conta geralmente uma escala de cinco alternativas. Dependendo da temática, as

alternativas podem seguir dimensões como: aplica-se

não se aplica, bom

ruim ,

concordo discordo, etc.

Exemplo:

Qual a sua avaliação do auditório da universidade?

1-Excelente

2- Adequado

3- Pouco adequado

21

4- Inadequado

5- Ruim

6-Incapaz de responder

2.4.2. Diferenças de Instrumento

A apresentação do instrumento pode influenciar o respondente. A

apresentação é um estimulo para que ser obtenha a resposta desejada para que se possa

fazer uma análise.

Existem várias maneiras de se apresentar um questionário, entrevista

pessoal, questionário auto-aplicado via correio ou em grupo, entrevista pessoal por telefone

e questionário auto-aplicado via e-mail ou Internet, este último que será o enfoque por se

tratar do caso estudado.

Os questionários por e-mail e Internet são mais rápidos e baratos que os

demais tipos de questionário, pois eliminam o gasto com o entrevistador, papel, selos,

ligações telefônicas etc. O problema desse tipo de questionário é que a população-alvo

ainda é restrita, apesar de se encontrar em grande crescimento, pois o acesso a Internet é

ainda apenas disponível para uma pequena parcela da população brasileira.

22

CAPÍTULO 3

3. TECNOLOGIAS UTILIZADAS

3.1. Java

Java é uma linguagem orientada a objetos que foi desenvolvida por uma

pequena equipe liderada por James Gosling na Sun Microsystems [SUN], seu

desenvolvimento teve início em 1991. Inicialmente ela foi projetada para ser utilizada na

programação de aparelhos como celulares e relógios mas, por suas características logo

passou a ser utilizada para as mais diversas finalidades.

Para o desenvolvimento do Sistema para Aplicação de Pesquisas Oline a

linguagem de programação escolhida foi Java, por esta possuir algumas características

desejáveis à esta implementação:

Ser uma linguagem de alta portabilidade, o que proporciona que a

aplicação rode em diferentes sistemas operacionais;

Possuir vasta quantidade de documentação e de desenvolvedores, o

que possibilita uma maior facilidade de esclarecer dúvidas e

participar de discussões via Internet;

Ser uma linguagem orientada a objetos, o que permite uma

implementação mais organizada e conseqüentemente eficiente.

A versão do Java utilizada foi a 1.4.2 a qual pode ser obtida gratuitamente no

site da Sun1.

O ambiente de desenvolvimento utilizado foi o NetBeans IDE 3.6 o qual

oferece ótima funcionalidade e grande facilidade principalmente na parte de criação de

interface gráfica. Esta versão do NetBeans também é encontrada gratuitamente no site da

NetBeans.org2.

1 http://java.sun.com/ 2 http://www.netbeans.org/

23

3.2. Orientação a objetos

A Orientação a Objetos representa um novo paradigma para resolver velhos

problemas. É preciso lembrar que um paradigma descreve um conjunto de regras para

resolver um problema dentro de um contexto com fronteiras bem definidas. Os paradigmas

influenciam a nossa percepção, ajudando a organizar e ordenar a maneira como olhamos o

mundo.

Neste contexto, a orientação a objetos introduz uma abordagem inovadora

baseada em representações de conceitos do mundo real. A partir dessa perspectiva, os

problemas são classificados em função das suas características através do processo de

abstração. Toda classe é uma abstração que descreve um conjunto de comportamentos

(operações) e dados (atributos) comuns no contexto de um problema. Em termos práticos,

isto significa que um objeto representa uma entidade qualquer pertencente ao domínio do

mundo real.

A priori, não existe nenhuma regra formal que determine os requisitos

paraclassificar uma linguagem de programação como Orientada a objetos . Contudo, as

linguagens de programação devem, no mínimo, implementar os quatro princípios essenciais

da orientação a objetos: abstração de dados, encapsulamento, herança e polimorfismo.

A seguir é apresentada uma breve explanação de cada um dos quatro

princípios essenciais da orientação a objetos.

Abstração de dados: O princípio da abstração está fundamentado na

maneira como o ser humano é capaz de lidar com problemas excessivamente complexos.

Neste caso, os problemas são decompostos em problemas menores, ignorando-se os

detalhes considerados irrelevantes no contexto do problema a ser resolvido. O propósito da

abstração de dados é obter um modelo mais simples do que a entidade real. Para medida de

ilustração, utilizaremos o exemplo do software desenvolvido onde é necessário a criação de

uma classe para representar uma questão. Como resultado, obtemos um modelo com os

dados e operações pertinentes ao contexto do software criado, o qual é escrito em Java da

seguinte forma:

public class Questao implements Serializable {

int nlinhas;

24

char tipo; int escala; char letraOuNumero; char radioboxPos; String enunciado; LinkedList alternativas;

public Questao(){ alternativas = new LinkedList();

} public int NumAlternativas(){ return alternativas.size(); } public void setEnunciado(String enun){ enunciado = enun; } public String getEnunciado(){ return enunciado; } public void adicionaAlternativa(int indice,String alt){ alternativas.add(indice,alt); } public void adicionaAlternativa(String alt){ alternativas.add(alt); } public void removeAlternativa(int indice){ alternativas.remove(indice); } public void setEscala(int esc){ escala = esc; } public int getEscala(){ return escala; } public void setCaracteres(int carac){ escala = carac; } public int getNLinhas(){ return nlinhas; } public void setTipo(char tip){ tipo = tip; }

25

public char getTipo(){ return tipo; } public void setListaDeAlternativas(LinkedList alt){ alternativas = alt; }

}

Encapsulamento: O encapsulamento, também conhecido como Ocultação

de informação , é um mecanismo que determina o grau de visibilidade dos dados

(operações e atributos) de um objeto em relação aos outros. Do ponto de vista prático, o

encapsulamento promove a independência entre os aspectos internos e as interfaces

externas de um objeto, assegurando a integridade dos dados contra interferências externas.

Durante o processo de abstração, você deverá determinar quais operações e atributos serão

ocultos ou acessíveis em relação aos outros objetos. Segue abaixo um trecho de código em

Java que serve de exemplo:

.

.

. public static void main(String args[]) {

new AdicionaQuestao(new javax.swing.JFrame(), true).show(); }

// Variables declaration - do not modify private javax.swing.JButton adicionaQuestaoButton; private javax.swing.JSpinner altNumSpinner; private javax.swing.JTextField altNumTextField;

.

.

.

Herança: Como o nome indica, o princípio da herança, promove a

transmissão de similaridades entre Classes. A herança é, sem dúvida, a característica mais

importante do paradigma de orientação a objetos, fornecendo um mecanismo simples para a

criação de novas Classes a partir de outras Classes já existentes.

Além disso, a herança implica na organização das Classes de forma

hierárquica, baseando-se no nível de especialização entre as Classes. Por esta razão, a

herança introduz a reutilização sistemática de código durante as fases de desenvolvimento e

manutenção de um software.

26

Outra forma de promover a herança é feita através da herança visual. Esta

abordagem é feita por meio da criação de um formulário agregando diversos

comportamentos pré-concebidos, como por exemplo, um formulário de cadastro.

Desta forma, todas as operações inerentes ao acesso ao banco de dados e

controle de transações, além de detalhes específicos de interface, são reunidos num único

formulário (SuperClasse) a fim de viabilizar a promoção da herança. Em contraste direto,

todo formulário que herdar as características dessa SuperClasse será chamado de

SubClasse.

Polimorfismo: É o princípio pelo qual duas ou mais classes derivadas de

uma mesma superclasse podem invocar métodos que têm a mesma identificação

(assinatura) mas comportamentos distintos, especializados para cada classe derivada,

usando para tanto uma referência a um objeto do tipo da superclasse. A decisão sobre qual

o método que deve ser selecionado, de acordo com o tipo da classe derivada, é tomada em

tempo de execução, através do mecanismo de ligação tardia.

No caso de polimorfismo, é necessário que os métodos tenham exatamente a

mesma identificação, sendo utilizado o mecanismo de redefinição de métodos.

Muito embora a orientação a objetos não seja uma tecnologia

necessariamente nova, ainda existe uma quantidade enorme de programadores e analistas

que desconhecem a sua abordagem ou implementação. Em ambos os casos, é

absolutamente essencial que esses profissionais procurem aprender e aplicar essa tecnologia

para estabelecer uma linguagem comum de conceitos e manter um conjunto integrado e

coerente de Classes para introduzir a reutilização sistemática no processo de

desenvolvimento de software. O completo entendimento da importância da orientação a

objetos na atual conjuntura é um ponto fundamental para o sucesso de qualquer projeto cujo

objetivo seja a construção de software de qualidade.

3.3. PHP, HTML e CSS

Para a parte de publicação dos questionários foi utilizada a linguagem PHP.

PHP, segundo o seu site oficial3, é um acrônimo recursivo para "PHP: Hypertext

3 http://www.php.net/

27

Preprocessor". Esta é uma linguagem de Script Open Source de uso geral, muito utilizada

especialmente para desenvolvimento web, e que pode ser embutida em meio ao código

HTML.

Uma característica muito importante do PHP é seu suporte à banco de dados,

ele interage de forma muito poderosa com diferentes tipos de banco de dados disponíveis

atualmente.

Para a formatação do documento PHP é gerado um arquivo CSS (Cascading

Style Sheets) que se trata de um padrão de formatação para páginas web que vai além das

limitações impostas pelo HTML.

3.4. Banco de Dados

Sistemas de banco de dados foram desenvolvidos para tratar algumas

dificuldades de sistemas de processamento de arquivos suportados por sistemas

operacionais convencionais, como arquivos de texto, por exemplo [SIL 99].

Exemplos de tais dificuldades podem ser:

Inconsistência e redundância de dados

Dificuldade no acesso aos dados

Isolamento de dados múltiplos arquivos e formatos

Problemas de integridade

Para resolver estes problemas é necessário que se utilize de sistemas de

gerenciamento de banco de dados, ou SGBDs, que nada mais são do que um conjunto de

dados associados a um conjunto de programas e ferramentas para acesso a estes dados. Eles

são projetados para gerenciar de forma conveniente e eficiente grandes volumes de dados,

possibilitando a estruturação das informações a serem armazenadas, assim como sua

segurança.

Os SGBDs respeitam um modelo de três níveis:

Nível físico: descreve como um registro (ex.: cliente) é armazenado.

type cliente = Record

nome_cliente : string;

seguro_social : string;

28

rua_cliente : string;

cidade_cliente : string

end;

Nível lógico: descreve os dados armazenados no banco de dados,

bem como os relacionamentos entre os mesmos.

Nível de visões: programas de aplicação escondem detalhes dos

dados. Visões também podem esconder informações (ex.: um

atributo com informação sobre salários) com o propósito de

segurança.

3.4.1. MySQL

O banco de dados escolhido para o desenvolvimento deste trabalho foi o

MySQL, pois é um gerenciador de banco de dados poderoso, estável, extremamente

eficiente, com milhares de instalações no mundo inteiro.

O MySQL é um banco de dados escrito em linguagem C, desenvolvido na Finlândia

e na Suécia. MySQL é um sistema de gerenciamento de banco de dados relacional, de código-fonte

aberto, que trabalha com a linguagem SQL, é do tipo cliente servidor e é largamente utilizado em

aplicações Internet. Banco de dados relacional é um banco que é composto de tabelas que se

relacionam entre si. Esses relacionamentos são baseados em um valor-chave, e este é único em cada

tabela. O SQL(Structured Query Language) é uma linguagem de programação que é utilizada para

realizar tarefas dentro de um banco. O banco cliente servidor tem função de aguardar e servir as

requisições de leitura e escrita vindas dos clientes.

Algumas vantagens do MySQL:

Robusto para qualquer número de usuários;

Baixo custo de aquisição;

Aceita comandos SQL;

É cliente-servidor;

Administração relativamente simples.

29

CAPÍTULO 4

4. SOLUÇÃO E IMPLEMENTAÇÃO

A partir dos conceitos de pesquisas e questionários acima apresentados

decidiu-se pela criação de uma aplicação na qual é possível criar ou editar questionários

inserindo novas questões, removendo ou editando-as. Este questionário criado poderá ser

salvo para posterior edição, impresso ou publicado para uso on-line.

4.1. Projeto

Através da análise dos requisitos do sistema pode-se fazer uma prévia do que

viria compor o programa. Na seção que se segue será apresentado em detalhes o sistema

propriamente dito bem como as suas funcionalidades.

4.1.1. Requisitos

O sistema deve consistir em um software que permita ao usuário a

elaboração de novos questionários, criando novos documentos, podendo salvá-los e

também abrir arquivos previamente salvos. Com o questionário já criado o software deve

permitir a publicação de arquivos para a aplicação da pesquisa on-line e também permitir a

impressão do mesmo. Para que o sistema tenha as características desejadas deve preencher

alguns requisitos:

Visualizador de conteúdo: deve permitir ao usuário uma visualização

amigável do conteúdo do questionário que está sendo criado ou

editado.

Tela para criação de novo questionário: deve permitir ao usuário

inserir o título e a introdução do questionário a ser criado.

30

Tela para adição de questão: deve permitir ao usuário preenchimento

de campos específicos e a escolha de opções para a inserção de

questões e alternativas.

Tela para edição de questão: deve permitir ao usuário editar as

questões já criadas.

Tela de remoção: deve permitir ao usuário a remoção de questões

criadas.

4.2. Comportamento do sistema

Para definir o comportamento do sistema em algumas situações específicas

do funcionamento foram criados alguns casos de usos (Use Cases) que podem ser vistos

detalhadamente a seguir.

4.2.1. Casos de uso (use cases)

Use case: Abrir documento

1. O usuário seleciona a opção Abrir no menu.

2. O programa apresenta uma janela de seleção de arquivos para que o

usuário escolha o arquivo desejado.

3. Ao selecionar o arquivo desejado e abri-lo, o programa lê seu

conteúdo e o exibe no visualizador de conteúdo.

Use case: Criar novo questionário

1. O usuário seleciona a opção Novo no menu

2. O programa apresenta uma janela para o usuário inserir o título e o

enunciado do questionário.

3. Ao clicar no botão OK o título e o enunciado é armazenado e

atualizado no visualizador ed conteúdo.

Use case: Salvar documento

31

Pré-condições: Use case: Abrir documento ou Use case: Criar novo

questionário

1. O usuário seleciona a opção Salvar no menu.

2. O programa verifica o estado atual do questionário a e salva seu

conteúdo em disco.

a. Caso o documento nunca tenha sido salvo o programa exibe

uma janela para que o usuário escolha o nome e o destino

onde o arquivo será gravado.

b. Caso o programa já tenha sido salvo ele salva em cima do

arquivo antigo.

Use case: Adicionar questão aberta

Pré-condições: Use case: Abrir documento ou Use case: Criar novo

questionário

1. O usuário seleciona a opção Adicionar questão no menu.

2. O programa apresenta uma janela onde existem opções de

configuração e elaboração da questão.

3. O usuário tem a opção de escolha da numeração da questão.

4. O usuário insere o enunciado da questão.

5. O usuário seleciona a aba destina da à questão aberta.

a. Na aba da questão aberta o usuário insere um numero inteiro

que indicará o numero de linhas que será deixado para

resposta.

6. O usuário clica no botão Adicionar e a questão é armazenada e o

visualizador de conteúdo é atualizado.

Use case: Adicionar questão aberta

Pré-condições: Use case: Abrir documento ou Use case: Criar novo

questionário

1. O usuário seleciona a opção Adicionar questão no menu.

32

2. O programa apresenta uma janela onde existem opções de

configuração e elaboração da questão.

3. O usuário tem a opção de escolha da numeração da questão.

4. O usuário insere o enunciado da questão.

5. O usuário seleciona a aba destina da à questão fechada.

a. Na aba da questão fechada o usuário escolhe o tipo de escala

que deseja utilizar.

b. O usuário insere um numero inteiro que indicará o numero de

alternativas.

c. Em campo definido o usuário insere o valor da alternativa.

i. Com a ajuda de um SpinButton o usuário pode

navegar entre as alternativas.

ii. O usuário clica no botão Adicionar Alternativa e a

alternativa é armazenada e o campo avança para a

próxima alternativa. Este procedimento deve ser

repetido até todas as alternativas serem preenchidas.

6. O usuário clica no botão Adicionar e a questão é armazenada e o

visualizador de conteúdo é atualizado.

Use case: Remover questão

Pré-condições: Use case: Adicionar questão aberta ou Use case: Adicionar

questão fechada, e número de questões < 0.

1. O usuário seleciona a opção Remover questão no menu.

2. O programa apresenta uma janela onde existe a opção de escolha da

numeração, e de acordo com a numeração escolhida a respectiva

questão é mostrada.

3. O usuário clica em Remove e a questão é removida e o

visualizador de conteúdo é atualizado.

Use Case: Imprimir

33

Pré-condição: Use case: Salvar documento

1. O usuário seleciona a opção Imprimir no menu.

2. O sistema gera uma versão impressa do questionário.

Use Case: Publicar

Pré-Condição: Use case: Salvar documento

1. O usuário seleciona a opção Publicar no menu.

2. O programa gera no mesmo diretório onde o arquivo está salvo os

arquivos.

a. Um arquivo nome_do_arquivo.php já formatado com o

questionário em versão PHP.

b. Um arquivo estilo.css que é um padrão de formatação para

arquivos web.

c. Gera o banco de dados em que é armazenado o resultado da

pesquisa.

Tendo em vista esses casos de usos abordaremos agora como o sistema deve

se portar de modo geral.

4.2.2. Visão Geral

Neste tópico será apresentado uma visão geral sobre o funcionamento do

sistema por meio das interfaces, com o intuito de promover um maior entendimento e

familiarização do sistema.

O Sistema consiste em uma interface com um visualizador de conteúdo em

seu plano principal, e menus e botões de ação em sua parte superior. A aparência é muito

parecida com um editor de texto convencional.

No visualizador de conteúdo o questionário será apresentado ao usuário de

forma amigável, já possuindo uma formatação. Cada alteração que for feita no questionário

será automaticamente atualizada no visualizador de conteúdo, para que assim o usuário

possa conferir as alterações feitas. O usuário não poderá editar diretamente o visualizador

34

de conteúdo, as modificações deverão ser feitas através de interfaces que são acessadas por

meio dos botões ou menus.

Figura 1 - Interface Principal

Acessando a tela para criação de novo questionário por meio do botão ou

menu especifico o usuário será capaz de inserir um título para a sua pesquisa e também uma

introdução a ela. Essas ações são atualizadas no visualizador de conteúdo.

35

Figura 2 - Tela para criação de novo questionário

Criado um novo questionário é habilitada a opção de adicionar uma nova

questão. Adicionando uma nova questão o usuário terá a opção de escolher entre questão

aberta ou questão fechada (o programa dará uma breve explicação sobre os dois tipos de

questão). O usuário deverá inserir o enunciado da questão e também poderá escolher qual

será o número da questão, a fim de ordená-las. Se o usuário não alterar a numeração o

programa auto-incrementará a numeração colocando a questão no final do questionário.

Poderão ser feitas alterações posteriormente.

Escolhendo o tipo de questão aberta o programa vai permitir que o usuário

insira o enunciado da questão e informe qual o espaço será deixado para a resposta.

36

Figura 3 - Adicionar questão aberta

Se for escolhida a forma de questão fechada o usuário além de inserir o

enunciado da questão, também terá que definir o tipo de escala que será utilizada (nominal,

ordinal, intervalar, razão, Likert ou bipolar). Cada opção apresentará uma breve explicação

sobre sua funcionalidade. Em um campo definido o usuário deverá inserir as alternativas.

Nominal, Intervalar e Razão - Permitirá ao usuário escolher o número de

alternativas de que se constituirá a questão e inserir as alternativas.

Ordinal - Permitirá ao usuário que seja escolhido o número de alternativas.

A diferença do anterior todas as alternativas serão assinaladas e cada alternativa assinalada

recebe um valor e é bloqueada.

Likert - Permitirá ao usuário que seja escolhido o número de alternativas e,

além disso, apresentará alguns exemplos de resposta comumente utilizados, os quais o

usuário pode utilizar ou modificar a seu gosto.

37

Figura 4 - Adicionar questão fechada

Mesmo após a questão ter sido adicionada ao questionário e o visualizador

de conteúdo ter sido atualizado, o usuário pode fazer exclusões de questões e alterações,

como por exemplo, na numeração, no número de alternativas, nas alternativas e na escala

utilizada. Na tela de exclusão o usuário terá a visualização separada de cada questão, a fim

de se ter certeza da questão que está sendo excluída.

38

Figura 5 - Excluir questão

O questionário, depois de criado ou mesmo não finalizado, pode ser salvo

guardando assim o trabalho realizado. Este trabalho salvo, pode ser reaberto a fim de se

fazer alterações, atualizações , novas publicações, impressões, etc.

Após o arquivo salvo, o questionário pode ser impresso e também publicado

para aplicação on-line. Quando utilizada a função de publicação, o software cria no mesmo

diretório onde o arquivo foi salvo, um arquivo com o mesmo nome, mas, com extensão

diferente (_nome_do_arquivo.php). Este arquivo é uma página PHP contendo um

questionário já estilizado pronto para publicação na web. Também é criado um arquivo

estilo.css, que é um arquivo para formatação de paginas, utilizado na formatação do

questionário acima citado. Também é criado o banco de dados que armazenará as respostas

do questionário publicado na web.

39

CAPÍTULO 5

5. CONSIDERAÇÕES FINAIS

O objetivo principal deste trabalho foi atingido, pois o sistema projetado foi

implementado e suas funcionalidades proporcionam uma maior facilidade e rapidez na

criação de pesquisas. Sistema executa automaticamente algumas tarefas que seriam

repetidamente executadas pelo usuário, tornando o trabalho significativamente facilitado.

Proporciona a reutilização do esforço de criação já feito pelo usuário, já que proporciona

que usuário salve seu trabalho e o reuse ou modifique depois.

O sistema apresenta-se de uma forma bem amigável com algumas funções

para o auxilio a sua utilização e alguma ajuda teórica.

O sistema pode ser facilmente utilizado para a criação de qualquer tipo de

questionário, seja ele para ser aplicado via Internet o mesmo na forma impressa. Deste

modo pode ser utilizado para ciação de pesquisas de opinião, comportamento, pesquisa

sócio-economicas ou também na criação de avaliações utilisando a funcionalidade da

impressão.

Utilizando a função salvar, o trabalho pode ser facilmente salvo para ser

reutilisado, modificado ou atualizado. Para tais modificações basta utilizar as funções de

adição, remoção e/ou edição de questão.

Com o software criado até mesmo uma pessoa sem conhecimentos em

criação de páginas para Internet pode criar a sua pesquisa on-line pronta para ser publicada,

incluindo banco de dados para armazenamento dos resultados. Para isto, basta somente

utilizar as funcionalidades existentes no programa, as quais são de fácil entendimento e

manipulação.

5.1. Trabalhos Futuros

Como trabalhos futuros podem ser levados em consideração alguns tópicos

não abordados neste trabalho:

40

O sistema poderia permitir ao usuário uma maior flexibilidade na

etapa da publicação, já que um padrão é pré-definido pelo sistema e

não permite sua alteração. Para tanto o sistema poderia incorporar

algum tipo de editor, para que o usuário possa editar o HTML em

que o PHP está embutido ou também incluir uma interface de

formatação com campos pré-definidos para que usuários sem

experiência possam fazer também modificações.

41

BIBLIOGRAFIA

[YAR 86] Yaremko, R. K., Harari, H., Harrison, R. C., & Lynn, E. (1986). Handbook

of research and quantitative methods in psychology. Hillsdale, NJ:

Lawrence Erlbaum.

[GUN 99] Günther, H. (1999). Como Elaborar um Questionário. Instituto de Psicologia,

UnBBrasília DF 1999.

[TAN 01] Tanaka, Oswaldo Y.; Melo, Cristina. Avaliação de Programas de Saúde do

Adolescente- um modo de fazer. São Paulo : Edusp, 2001.

[OLI 01] Oliveira, Lima A. Pesquisas são Pesquisas

http://www.portaldomarketing.com.br, 2001 acessado em 03/12/2004

[SIL 99] SILBERSCHATZ, A.; KORTH, H.; SUDARSH. Sistema de Banco de Dados. Makron Books, São Paulo, 1999.

[DILL 78] Dillman, D. A. (1978). Mail and telephone surveys: The total design

method. New York: Wiley.

[SUN] SUN, JavaTM 2 Platform, Enterprise Edition (J2EE) Overview

http://java.sun.com, acessado em 22/04/05

42

APÊNDICE 1

src/AdicionaQuestao.java

1 package src; 2 3 /* 4 * AdicionaQuestao.java 5 * 6 * Created on 3 de Março de 2005, 15:21 7 */ 8 9 /** 10 * 11 * @author administrador

12 */ 13 import javax.swing.JOptionPane; 14 import javax.swing.SpinnerNumberModel; 15 import javax.swing.SpinnerModel; 16 import java.util.LinkedList; 17 18 public class AdicionaQuestao extends javax.swing.JDialog { 19 LinkedList alt; 20 21 /** Creates new form AdicionaQuestao */ 22 public AdicionaQuestao(java.awt.Frame parent, boolean modal) { 23 super(parent, modal); 24 initComponents(); 25 alt = new LinkedList(); 26 regula(); 27 } 28 29 /** This method is called from within the constructor to 30 * initialize the form. 31 * WARNING: Do NOT modify this code. The content of this method is 32 * always regenerated by the Form Editor. 33 */ 34 private void initComponents() { 35 buttonGroup1 = new javax.swing.ButtonGroup(); 36 jPanel3 = new javax.swing.JPanel(); 37 enunTextField = new javax.swing.JTextField(); 38 jLabel1 = new javax.swing.JLabel(); 39 jLabel4 = new javax.swing.JLabel(); 40 questNumComboBox = new javax.swing.JComboBox(); 41 jLabel6 = new javax.swing.JLabel(); 42 adicionaQuestaoButton = new javax.swing.JButton(); 43 cancelButton = new javax.swing.JButton(); 44 jButton5 = new javax.swing.JButton(); 45 jTabbedPane1 = new javax.swing.JTabbedPane(); 46 jPanel1 = new javax.swing.JPanel(); 47 jLabel3 = new javax.swing.JLabel();

43

48 jLabel2 = new javax.swing.JLabel(); 49 caracTextField = new javax.swing.JTextField(); 50 jPanel2 = new javax.swing.JPanel(); 51 jLabel5 = new javax.swing.JLabel(); 52 escalaComboBox = new javax.swing.JComboBox(); 53 jButton3 = new javax.swing.JButton(); 54 jLabel7 = new javax.swing.JLabel(); 55 altNumTextField = new javax.swing.JTextField(); 56 jLabel8 = new javax.swing.JLabel(); 57 altTextPane = new javax.swing.JTextPane(); 58 altNumSpinner = new javax.swing.JSpinner(); 59 jButton4 = new javax.swing.JButton(); 60 61 getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); 62 63 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

64 setTitle("Adicionar Quest\u00e3o");

65 setFont(new java.awt.Font("Arial", 0, 12)); 66 setResizable(false); 67 jPanel3.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); 68 69 jPanel3.setBorder(new javax.swing.border.EtchedBorder()); 70 enunTextField.addActionListener(new java.awt.event.ActionListener() { 71 public void actionPerformed(java.awt.event.ActionEvent evt) { 72 enunTextFieldActionPerformed(evt); 73 } 74 }); 75 76 jPanel3.add(enunTextField, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 70, 610, 20));

77 78 jLabel1.setText("Enunciado da quest\u00e3o:");

79 jPanel3.add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 50, -1, -1)); 80 81 jLabel4.setText("Quest\u00e3o n\u00famero:"); 82 jPanel3.add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 10, -1, -1)); 83 84 jPanel3.add(questNumComboBox, new org.netbeans.lib.awtextra.AbsoluteConstraints(130, 10, 60, -1)); 85 86 jLabel6.setText("Selecione o tipo da quest\u00e3o:"); 87 jPanel3.add(jLabel6, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 110, -1, -1)); 88 89 adicionaQuestaoButton.setText("Adiciona"); 90 adicionaQuestaoButton.addActionListener(new java.awt.event.ActionListener() {

44

91 public void actionPerformed(java.awt.event.ActionEvent evt) { 92 adicionaQuestaoButtonActionPerformed(evt); 93 } 94 }); 95 96 jPanel3.add(adicionaQuestaoButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(440, 400, -1, -1)); 97 98 cancelButton.setText("Cancela"); 99 cancelButton.addActionListener(new java.awt.event.ActionListener() { 100 public void actionPerformed(java.awt.event.ActionEvent evt) { 101 cancelButtonActionPerformed(evt); 102 } 103 }); 104 105 jPanel3.add(cancelButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(540, 400, -1, -1)); 106 107 jButton5.setFont(new java.awt.Font("Comic Sans MS", 1, 14)); 108 jButton5.setForeground(new java.awt.Color(204, 0, 0)); 109 jButton5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/interrogacao.gif"))); 110 jButton5.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(1, 1, 1, 1))); 111 jButton5.setFocusable(false); 112 jButton5.setMaximumSize(new java.awt.Dimension(25, 25)); 113 jButton5.setMinimumSize(new java.awt.Dimension(25, 25)); 114 jButton5.setPreferredSize(new java.awt.Dimension(25, 25)); 115 jPanel3.add(jButton5, new org.netbeans.lib.awtextra.AbsoluteConstraints(180, 104, 30, 25)); 116 117 jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); 118 119 jPanel1.setBorder(new javax.swing.border.EtchedBorder()); 120 jLabel3.setText("linhas"); 121 jPanel1.add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(90, 54, -1, -1)); 122 123 jLabel2.setText("Espa\u00e7o para resposta:"); 124 jPanel1.add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 24, -1, -1)); 125 126 caracTextField.addActionListener(new java.awt.event.ActionListener() { 127 public void actionPerformed(java.awt.event.ActionEvent evt) { 128 caracTextFieldActionPerformed(evt); 129 } 130 });

45

131 caracTextField.addKeyListener(new java.awt.event.KeyAdapter() { 132 public void keyTyped(java.awt.event.KeyEvent evt) { 133 caracTextFieldKeyTyped(evt); 134 } 135 }); 136 137 jPanel1.add(caracTextField, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 50, 60, -1)); 138 139 jTabbedPane1.addTab("Quest\u00e3o Aberta", jPanel1); 140 141 jPanel2.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); 142 143 jPanel2.setBorder(new javax.swing.border.EtchedBorder()); 144 jPanel2.setOpaque(false); 145 jLabel5.setText("Tipo de Escala:"); 146 jPanel2.add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 24, -1, -1)); 147 148 escalaComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Nominal", "Ordinal", "Intervalar", "Likert", "Razão" })); 149 escalaComboBox.setName(""); 150 escalaComboBox.setOpaque(false); 151 escalaComboBox.addItemListener(new java.awt.event.ItemListener() { 152 public void itemStateChanged(java.awt.event.ItemEvent evt) { 153 escalaComboBoxItemStateChanged(evt); 154 } 155 }); 156 157 jPanel2.add(escalaComboBox, new org.netbeans.lib.awtextra.AbsoluteConstraints(170, 20, 100, -1)); 158 159 jButton3.setFont(new java.awt.Font("Comic Sans MS", 1, 14)); 160 jButton3.setForeground(new java.awt.Color(204, 0, 0)); 161 jButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/interrogacao.gif"))); 162 jButton3.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(1, 1, 1, 1))); 163 jButton3.setFocusable(false); 164 jButton3.setMaximumSize(new java.awt.Dimension(25, 25)); 165 jButton3.setMinimumSize(new java.awt.Dimension(25, 25)); 166 jButton3.setPreferredSize(new java.awt.Dimension(25, 25)); 167 jPanel2.add(jButton3, new org.netbeans.lib.awtextra.AbsoluteConstraints(280, 20, 30, 25)); 168 169 jLabel7.setText("N\u00famero de alternativas:"); 170 jPanel2.add(jLabel7, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 64, -1, -1)); 171 172 altNumTextField.setText("1");

46

173 altNumTextField.addFocusListener(new java.awt.event.FocusAdapter() { 174 public void focusLost(java.awt.event.FocusEvent evt) { 175 altNumTextFieldFocusLost(evt); 176 } 177 }); 178 179 jPanel2.add(altNumTextField, new org.netbeans.lib.awtextra.AbsoluteConstraints(170, 60, 30, -1)); 180 181 jLabel8.setText("Escolha o n\u00famero da alternativa e em seguida digite-a no quadro abaixo:"); 182 jLabel8.setOpaque(true); 183 jPanel2.add(jLabel8, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 100, -1, -1)); 184 185 altTextPane.setBorder(new javax.swing.border.EtchedBorder()); 186 jPanel2.add(altTextPane, new org.netbeans.lib.awtextra.AbsoluteConstraints(80, 120, 510, 60)); 187 188 SpinnerModel model = new SpinnerNumberModel(1, //initial value 189 1, //min 190 (Integer.parseInt(altNumTextField.getText())), //max 191 1); //step 192 193 altNumSpinner.setModel(model); 194 altNumSpinner.addChangeListener(new javax.swing.event.ChangeListener() { 195 public void stateChanged(javax.swing.event.ChangeEvent evt) { 196 altNumSpinnerStateChanged(evt); 197 } 198 }); 199 200 jPanel2.add(altNumSpinner, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 130, 40, -1)); 201 202 jButton4.setText("Adiciona Alternativa"); 203 jButton4.addActionListener(new java.awt.event.ActionListener() { 204 public void actionPerformed(java.awt.event.ActionEvent evt) { 205 jButton4ActionPerformed(evt); 206 } 207 }); 208 209 jPanel2.add(jButton4, new org.netbeans.lib.awtextra.AbsoluteConstraints(450, 190, -1, -1)); 210 211 jTabbedPane1.addTab("Quest\u00e3o Fechada", jPanel2); 212 213 jPanel3.add(jTabbedPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 140, 610, 250)); 214

47

215 getContentPane().add(jPanel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 640, 440)); 216 217 pack(); 218 } 219 220 private void caracTextFieldKeyTyped(java.awt.event.KeyEvent evt) { 221 222 } 223 224 private void altNumSpinnerStateChanged(javax.swing.event.ChangeEvent evt) { 225 mostraAlternativa(); 226 } 227 228 private void altNumTextFieldFocusLost(java.awt.event.FocusEvent evt) { 229 int aux = (Integer.parseInt(altNumTextField.getText())); 230 SpinnerModel model = new SpinnerNumberModel(1, //initial value 231 1, //min 232 aux, //max 233 1); //step 234 235 altNumSpinner.setModel(model); 236 int aux1 = alt.size(); 237 if(aux1 < (aux)){ 238 for (int i = (aux1); i < aux; i++){ 239 alt.add(""); 240 } 241 } 242 243 if(aux1 > (aux)){ 244 for (int i = (aux1); i > aux ; i--){ 245 alt.removeLast(); 246 } 247 } 248 } 249 private void regula(){ 250 251 int aux = ((InterfaceUsuario)this.getParent()).getQuestionario().questoes.size(); 252 //System.out.println(aux+1); 253 String[] str = new String[aux+1]; 254 255 for (int i = 0; i < (aux + 1);i++){ 256 str[i] = "" + (i+1); 257 } 258 questNumComboBox.setModel(new javax.swing.DefaultComboBoxModel(str)); 259 questNumComboBox.setSelectedIndex(aux); 260 alt.add(""); 261 262 } 263

48

264 private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { 265 String alt1 = altTextPane.getText().trim(); 266 if(alt1.equals("")) { 267 String msg = "A alternativa não pode ficar em branco!\n"; 268 JOptionPane.showMessageDialog(this, 269 msg, 270 "Erro", 271 JOptionPane.ERROR_MESSAGE); 272 return; 273 } 274 int aux = (Integer.parseInt(altNumSpinner.getValue().toString())); 275 alt.add(aux-1,altTextPane.getText()); 276 if (alt.size()>1){ 277 alt.remove(aux); 278 } 279 if (aux < Integer.parseInt(altNumTextField.getText())){ 280 altNumSpinner.setValue(altNumSpinner.getNextValue()); 281 } 282 283 } 284 285 public void mostraAlternativa(){ 286 int aux = Integer.parseInt(altNumSpinner.getValue().toString()); 287 altTextPane.setText(((String)alt.get(aux-1))); 288 289 } 290 291 private void adicionaQuestaoButtonActionPerformed(java.awt.event.ActionEvent evt) { 292 String enun = enunTextField.getText().trim(); 293 if(enun.equals("")) { 294 String msg = "Você deve especificar o enunciado da questão!\n"; 295 JOptionPane.showMessageDialog(this, 296 msg, 297 "Erro", 298 JOptionPane.ERROR_MESSAGE); 299 return; 300 } 301 Questao questao = new Questao(); 302 switch(jTabbedPane1.getSelectedIndex()){ 303 case 0: 304 String carac = caracTextField.getText().trim(); 305 if(carac.equals("")) { 306 String msg = "Você deve especificar o número de caracteres que serão deixados para o espaço de resposta!\n"; 307 JOptionPane.showMessageDialog(this, 308 msg, 309 "Erro", 310 JOptionPane.ERROR_MESSAGE); 311 return; 312 }

49

313 questao.setTipo("a"); 314 questao.setEnunciado(enunTextField.getText()); 315 questao.setCaracteres(Integer.parseInt(caracTextField.getText())); 316 ((InterfaceUsuario)this.getParent()).adicionaQuestao(questao, questNumComboBox.getSelectedIndex()); 317 break; 318 case 1: 319 String altNum = altNumTextField.getText().trim(); 320 if(altNum.equals("")) { 321 String msg = "Você deve especificar o número de alternativas!\n"; 322 JOptionPane.showMessageDialog(this, 323 msg, 324 "Erro", 325 JOptionPane.ERROR_MESSAGE); 326 return; 327 } 328 329 if(alt.contains("")) { 330 String msg = "Você não pode deixar alternativas em branco!\n"; 331 JOptionPane.showMessageDialog(this, 332 msg, 333 "Erro", 334 JOptionPane.ERROR_MESSAGE); 335 return; 336 } 337 questao.setListaDeAlternativas(alt); 338 339 questao.setTipo("f"); 340 questao.setEnunciado(enunTextField.getText()); 341 questao.setEscala(escalaComboBox.getSelectedIndex()); 342 ((InterfaceUsuario)this.getParent()).adicionaQuestao(questao, questNumComboBox.getSelectedIndex()); 343 break; 344 345 default: 346 System.out.println("NO TAB"); 347 } 348 setVisible(false); 349 this.dispose(); 350 } 351 352 private void caracTextFieldActionPerformed(java.awt.event.ActionEvent evt) { 353 // TODO add your handling code here: 354 } 355 356 private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) { 357 this.dispose(); 358 }

50

359 360 private void enunTextFieldActionPerformed(java.awt.event.ActionEvent evt) { 361 362 } 363 364 private void escalaComboBoxItemStateChanged(java.awt.event.ItemEvent evt) { 365 // TODO add your handling code here: 366 } 367 368 369 /** 370 * @param args the command line arguments 371 */ 372 public static void main(String args[]) { 373 new AdicionaQuestao(new javax.swing.JFrame(), true).show(); 374 } 375 376 // Variables declaration - do not modify 377 private javax.swing.JButton adicionaQuestaoButton; 378 private javax.swing.JSpinner altNumSpinner; 379 private javax.swing.JTextField altNumTextField; 380 private javax.swing.JTextPane altTextPane; 381 private javax.swing.ButtonGroup buttonGroup1; 382 private javax.swing.JButton cancelButton; 383 private javax.swing.JTextField caracTextField; 384 private javax.swing.JTextField enunTextField; 385 private javax.swing.JComboBox escalaComboBox; 386 private javax.swing.JButton jButton3; 387 private javax.swing.JButton jButton4; 388 private javax.swing.JButton jButton5; 389 private javax.swing.JLabel jLabel1; 390 private javax.swing.JLabel jLabel2; 391 private javax.swing.JLabel jLabel3; 392 private javax.swing.JLabel jLabel4; 393 private javax.swing.JLabel jLabel5; 394 private javax.swing.JLabel jLabel6; 395 private javax.swing.JLabel jLabel7; 396 private javax.swing.JLabel jLabel8; 397 private javax.swing.JPanel jPanel1; 398 private javax.swing.JPanel jPanel2; 399 private javax.swing.JPanel jPanel3; 400 private javax.swing.JTabbedPane jTabbedPane1; 401 private javax.swing.JComboBox questNumComboBox; 402 // End of variables declaration 403 404 } 405

src/editarQuestao.java

1 /*

51

2 * editarQuestao.java 3 * 4 * Created on 5 de Abril de 2005, 22:07 5 */ 6 7 package src; 8 9 /** 10 * 11 * @author Leonardo 12 */ 13 public class editarQuestao extends javax.swing.JDialog { 14 15 /** Creates new form editarQuestao */ 16 public editarQuestao(java.awt.Frame parent, boolean modal) { 17 super(parent, modal); 18 initComponents(); 19 } 20 21 /** This method is called from within the constructor to 22 * initialize the form. 23 * WARNING: Do NOT modify this code. The content of this method is 24 * always regenerated by the Form Editor. 25 */ 26 private void initComponents() { 27 28 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 29 pack(); 30 } 31 32 /** 33 * @param args the command line arguments 34 */ 35 public static void main(String args[]) { 36 new editarQuestao(new javax.swing.JFrame(), true).show(); 37 } 38 39 // Variables declaration - do not modify 40 // End of variables declaration 41 42 } 43

src/ExampleFileFilter.java

1 /* 2 * ExampleFileFilter.java 3 * 4 * Created on 11 de Abril de 2005, 00:06 5 */ 6 7 package src; 8

52

9 /** 10 * 11 * @author Leonardo 12 */ 13 import java.io.File; 14 import java.util.Enumeration; 15 import java.util.Hashtable; 16 import javax.swing.filechooser.FileFilter; 17 18 public class ExampleFileFilter extends FileFilter { 19 20 public ExampleFileFilter() { 21 filters = null; 22 description = null; 23 fullDescription = null; 24 useExtensionsInDescription = true; 25 filters = new Hashtable(); 26 } 27 28 public ExampleFileFilter(String s) { 29 this(s, null); 30 } 31 32 public ExampleFileFilter(String s, String s1) { 33 this(); 34 if(s != null) 35 addExtension(s); 36 if(s1 != null) 37 setDescription(s1); 38 } 39 40 public ExampleFileFilter(String as[]) { 41 this(as, null); 42 } 43 44 public ExampleFileFilter(String as[], String s) { 45 this(); 46 for(int i = 0; i < as.length; i++) 47 addExtension(as[i]); 48 49 if(s != null) 50 setDescription(s); 51 } 52 public boolean accept(File file) { 53 if(file != null) { 54 if(file.isDirectory()) 55 return true; 56 String s = getExtension(file); 57 if(s != null && filters.get(getExtension(file)) != null) 58 return true; 59 } 60 return false; 61 } 62

53

63 public String getExtension(File file) { 64 if(file != null) { 65 String s = file.getName(); 66 int i = s.lastIndexOf("."); 67 if(i > 0 && i < s.length() - 1) 68 return s.substring(i + 1).toLowerCase(); 69 } 70 return null; 71 } 72 73 public void addExtension(String s) { 74 if(filters == null) 75 filters = new Hashtable(5); 76 filters.put(s.toLowerCase(), this); 77 fullDescription = null; 78 } 79 80 public String getDescription() { 81 if(fullDescription == null) 82 if(description == null || isExtensionListInDescription()) { 83 fullDescription = description != null ? description + " (" : "("; 84 Enumeration enumeration = filters.keys(); 85 if(enumeration != null) 86 for(fullDescription += "." + (String)enumeration.nextElement(); enumeration.hasMoreElements(); fullDescription += ", ." + (String)enumeration.nextElement()); 87 fullDescription += ")"; 88 } else { 89 fullDescription = description; 90 } 91 return fullDescription; 92 } 93 94 public void setDescription(String s) { 95 description = s; 96 fullDescription = null; 97 } 98 99 public void setExtensionListInDescription(boolean flag) { 100 useExtensionsInDescription = flag; 101 fullDescription = null; 102 } 103 104 public boolean isExtensionListInDescription() { 105 return useExtensionsInDescription; 106 } 107 108 private static String TYPE_UNKNOWN = "Type Unknown"; 109 private static String HIDDEN_FILE = "Hidden File"; 110 private Hashtable filters; 111 private String description; 112 private String fullDescription; 113 private boolean useExtensionsInDescription;

54

114 115 } 116

src/InterfaceUsuario.java

1 /* 2 * InterfaceUsuario.java 3 * 4 * Created on 1 de Março de 2005, 19:09 5 */ 6 7 package src; 8 9 /** 10 * 11 * @author administrador

12 */ 13 import java.awt.*; 14 import javax.swing.JFileChooser; 15 import javax.swing.filechooser.FileFilter; 16 import java.io.*; 17 import javax.swing.JOptionPane; 18 19 20 public class InterfaceUsuario extends javax.swing.JFrame { 21 private Questionario questionario; 22 /** Creates new form InterfaceUsuario */

23 public InterfaceUsuario() { 24 Questionario questionario = new Questionario(); 25 WD wd = new WD(); 26 initComponents(); 27 ajusta(); 28 } 29 30 /** This method is called from within the constructor to 31 * initialize the form. 32 * WARNING: Do NOT modify this code. The content of this method is 33 * always regenerated by the Form Editor. 34 */ 35 private void initComponents() { 36 jPanel1 = new javax.swing.JPanel(); 37 jScrollPane1 = new javax.swing.JScrollPane(); 38 jPanel2 = new javax.swing.JPanel(); 39 jTextPane1 = new javax.swing.JTextPane(); 40 jToolBar1 = new javax.swing.JToolBar(); 41 novoButton = new javax.swing.JButton(); 42 abrirButton = new javax.swing.JButton(); 43 salvarButton = new javax.swing.JButton(); 44 imprimirButton = new javax.swing.JButton(); 45 publicarButton = new javax.swing.JButton(); 46 jToolBar3 = new javax.swing.JToolBar(); 47 adicionaQuestaoButton = new javax.swing.JButton();

55

48 removeQuestaoButton = new javax.swing.JButton(); 49 jButton1 = new javax.swing.JButton(); 50 jMenuBar1 = new javax.swing.JMenuBar(); 51 arquivoMenu = new javax.swing.JMenu(); 52 novoMenuItem = new javax.swing.JMenuItem(); 53 abrirMenuItem = new javax.swing.JMenuItem(); 54 jSeparator1 = new javax.swing.JSeparator(); 55 salvarMenuItem = new javax.swing.JMenuItem(); 56 salvarComoMenuItem = new javax.swing.JMenuItem(); 57 jSeparator2 = new javax.swing.JSeparator(); 58 imprimirMenuItem = new javax.swing.JMenuItem(); 59 publicarMenuItem = new javax.swing.JMenuItem(); 60 jSeparator3 = new javax.swing.JSeparator(); 61 sairMenuItem = new javax.swing.JMenuItem(); 62 projetoMenu = new javax.swing.JMenu(); 63 adicionaQuestaoMenuItem = new javax.swing.JMenuItem(); 64 removeQuestaoMenuItem = new javax.swing.JMenuItem(); 65 alteraQuestaoMenuItem = new javax.swing.JMenuItem(); 66 jMenu1 = new javax.swing.JMenu(); 67 jMenuItem7 = new javax.swing.JMenuItem();

68 69 setTitle("Sistema para Aplica\u00e7\u00e3o de Pesquisas Online");

70 setName("UInter"); 71 addWindowListener(new java.awt.event.WindowAdapter() { 72 public void windowClosing(java.awt.event.WindowEvent evt) { 73 exitForm(evt); 74 } 75 }); 76 77 jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.X_AXIS)); 78 79 jPanel1.setBorder(new javax.swing.border.EtchedBorder()); 80 jPanel1.setToolTipText(""); 81 jScrollPane1.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 82 jScrollPane1.setPreferredSize(new java.awt.Dimension(620, 520)); 83 jPanel2.setBackground(java.awt.Color.gray); 84 jTextPane1.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.RAISED, java.awt.Color.lightGray, null, java.awt.Color.black, java.awt.Color.black)); 85 jTextPane1.setEditable(false); 86 jTextPane1.setDisabledTextColor(new java.awt.Color(255, 255, 255)); 87 jTextPane1.setMaximumSize(new java.awt.Dimension(700, 800)); 88 jTextPane1.setPreferredSize(new java.awt.Dimension(700, 800)); 89 jPanel2.add(jTextPane1); 90 91 jScrollPane1.setViewportView(jPanel2);

56

92 93 jPanel1.add(jScrollPane1); 94 95 getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); 96 97 jToolBar1.setMaximumSize(new java.awt.Dimension(17, 20)); 98 jToolBar1.setMinimumSize(new java.awt.Dimension(17, 20)); 99 jToolBar1.setPreferredSize(new java.awt.Dimension(17, 25)); 100 novoButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/New16.gif"))); 101 novoButton.setToolTipText("Novo"); 102 novoButton.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(1, 1, 1, 1))); 103 novoButton.setFocusable(false); 104 novoButton.setMaximumSize(new java.awt.Dimension(25, 25)); 105 novoButton.setMinimumSize(new java.awt.Dimension(25, 25)); 106 novoButton.setPreferredSize(new java.awt.Dimension(25, 25)); 107 novoButton.addActionListener(new java.awt.event.ActionListener() { 108 public void actionPerformed(java.awt.event.ActionEvent evt) { 109 novoButtonActionPerformed(evt); 110 } 111 }); 112 113 jToolBar1.add(novoButton); 114 115 abrirButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Open16.gif"))); 116 abrirButton.setToolTipText("Abrir"); 117 abrirButton.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(3, 3, 3, 3))); 118 abrirButton.setFocusable(false); 119 abrirButton.setMaximumSize(new java.awt.Dimension(25, 25)); 120 abrirButton.setMinimumSize(new java.awt.Dimension(25, 25)); 121 abrirButton.setPreferredSize(new java.awt.Dimension(25, 25)); 122 abrirButton.addActionListener(new java.awt.event.ActionListener() { 123 public void actionPerformed(java.awt.event.ActionEvent evt) { 124 abrirButtonActionPerformed(evt); 125 } 126 }); 127 128 jToolBar1.add(abrirButton); 129 130 salvarButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Save16.gif"))); 131 salvarButton.setToolTipText("Salvar"); 132 salvarButton.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(3, 3, 3, 3))); 133 salvarButton.setFocusable(false); 134 salvarButton.setMaximumSize(new java.awt.Dimension(25, 25)); 135 salvarButton.setMinimumSize(new java.awt.Dimension(25, 25));

57

136 salvarButton.setPreferredSize(new java.awt.Dimension(25, 25)); 137 salvarButton.setEnabled(false); 138 salvarButton.addActionListener(new java.awt.event.ActionListener() { 139 public void actionPerformed(java.awt.event.ActionEvent evt) { 140 salvarButtonActionPerformed(evt); 141 } 142 }); 143 144 jToolBar1.add(salvarButton); 145 146 imprimirButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Print16.gif"))); 147 imprimirButton.setToolTipText("Imprimir"); 148 imprimirButton.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(3, 3, 3, 3))); 149 imprimirButton.setFocusable(false); 150 imprimirButton.setMaximumSize(new java.awt.Dimension(25, 25)); 151 imprimirButton.setMinimumSize(new java.awt.Dimension(25, 25)); 152 imprimirButton.setPreferredSize(new java.awt.Dimension(25, 25)); 153 imprimirButton.setEnabled(false); 154 jToolBar1.add(imprimirButton); 155 156 publicarButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/publicar.gif"))); 157 publicarButton.setToolTipText("Publicar"); 158 publicarButton.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(3, 3, 3, 3))); 159 publicarButton.setFocusable(false); 160 publicarButton.setEnabled(false); 161 publicarButton.addActionListener(new java.awt.event.ActionListener() { 162 public void actionPerformed(java.awt.event.ActionEvent evt) { 163 publicarButtonActionPerformed(evt); 164 } 165 }); 166 167 jToolBar1.add(publicarButton); 168 169 jToolBar3.setPreferredSize(new java.awt.Dimension(100, 25)); 170 adicionaQuestaoButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Add16.gif"))); 171 adicionaQuestaoButton.setToolTipText("Adicionar quest\u00e3o"); 172 adicionaQuestaoButton.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(3, 3, 3, 3))); 173 adicionaQuestaoButton.setFocusable(false); 174 adicionaQuestaoButton.setMaximumSize(new java.awt.Dimension(25, 25));

58

175 adicionaQuestaoButton.setMinimumSize(new java.awt.Dimension(25, 25)); 176 adicionaQuestaoButton.setPreferredSize(new java.awt.Dimension(25, 25)); 177 adicionaQuestaoButton.setEnabled(false); 178 adicionaQuestaoButton.addActionListener(new java.awt.event.ActionListener() { 179 public void actionPerformed(java.awt.event.ActionEvent evt) { 180 adicionaQuestaoButtonActionPerformed(evt); 181 } 182 }); 183 184 jToolBar3.add(adicionaQuestaoButton); 185 186 removeQuestaoButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Delete16.gif"))); 187 removeQuestaoButton.setToolTipText("Remover quest\u00e3o"); 188 removeQuestaoButton.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(3, 3, 3, 3))); 189 removeQuestaoButton.setFocusable(false); 190 removeQuestaoButton.setMaximumSize(new java.awt.Dimension(25, 25)); 191 removeQuestaoButton.setMinimumSize(new java.awt.Dimension(25, 25)); 192 removeQuestaoButton.setPreferredSize(new java.awt.Dimension(25, 25)); 193 removeQuestaoButton.setEnabled(false); 194 removeQuestaoButton.addActionListener(new java.awt.event.ActionListener() { 195 public void actionPerformed(java.awt.event.ActionEvent evt) { 196 removeQuestaoButtonActionPerformed(evt); 197 } 198 }); 199 200 jToolBar3.add(removeQuestaoButton); 201 202 jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Edit16.gif"))); 203 jButton1.setToolTipText("Editar quest\u00e3o"); 204 jButton1.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(3, 3, 3, 3))); 205 jButton1.setFocusable(false); 206 jButton1.setMaximumSize(new java.awt.Dimension(25, 25)); 207 jButton1.setMinimumSize(new java.awt.Dimension(25, 25)); 208 jButton1.setPreferredSize(new java.awt.Dimension(25, 25)); 209 jButton1.setEnabled(false); 210 jToolBar3.add(jButton1); 211 212 jToolBar1.add(jToolBar3); 213 214 getContentPane().add(jToolBar1, java.awt.BorderLayout.NORTH); 215 216 arquivoMenu.setText("Arquivo");

59

217 arquivoMenu.addActionListener(new java.awt.event.ActionListener() { 218 public void actionPerformed(java.awt.event.ActionEvent evt) { 219 arquivoMenuActionPerformed(evt); 220 } 221 }); 222 223 novoMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/New16.gif"))); 224 novoMenuItem.setText("Novo"); 225 novoMenuItem.addActionListener(new java.awt.event.ActionListener() { 226 public void actionPerformed(java.awt.event.ActionEvent evt) { 227 novoMenuItemActionPerformed(evt); 228 } 229 }); 230 231 arquivoMenu.add(novoMenuItem); 232 233 abrirMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Open16.gif"))); 234 abrirMenuItem.setLabel("Abrir"); 235 abrirMenuItem.addActionListener(new java.awt.event.ActionListener() { 236 public void actionPerformed(java.awt.event.ActionEvent evt) { 237 abrirMenuItemActionPerformed(evt); 238 } 239 }); 240 241 arquivoMenu.add(abrirMenuItem); 242 243 arquivoMenu.add(jSeparator1); 244 245 salvarMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Save16.gif"))); 246 salvarMenuItem.setLabel("Salvar"); 247 salvarMenuItem.setEnabled(false); 248 salvarMenuItem.addActionListener(new java.awt.event.ActionListener() { 249 public void actionPerformed(java.awt.event.ActionEvent evt) { 250 salvarMenuItemActionPerformed(evt); 251 } 252 }); 253 254 arquivoMenu.add(salvarMenuItem); 255 256 salvarComoMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/SaveAs16.gif"))); 257 salvarComoMenuItem.setLabel("Salvar como..."); 258 salvarComoMenuItem.setEnabled(false); 259 salvarComoMenuItem.addActionListener(new java.awt.event.ActionListener() {

60

260 public void actionPerformed(java.awt.event.ActionEvent evt) { 261 salvarComoMenuItemActionPerformed(evt); 262 } 263 }); 264 265 arquivoMenu.add(salvarComoMenuItem); 266 267 arquivoMenu.add(jSeparator2); 268 269 imprimirMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Print16.gif"))); 270 imprimirMenuItem.setText("Imprimir"); 271 imprimirMenuItem.setEnabled(false); 272 arquivoMenu.add(imprimirMenuItem); 273 274 publicarMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/publicar.gif"))); 275 publicarMenuItem.setLabel("Publicar"); 276 publicarMenuItem.setEnabled(false); 277 arquivoMenu.add(publicarMenuItem); 278 279 arquivoMenu.add(jSeparator3); 280 281 sairMenuItem.setLabel("Sair"); 282 sairMenuItem.addActionListener(new java.awt.event.ActionListener() { 283 public void actionPerformed(java.awt.event.ActionEvent evt) { 284 sairMenuItemActionPerformed(evt); 285 } 286 }); 287 288 arquivoMenu.add(sairMenuItem); 289 290 jMenuBar1.add(arquivoMenu); 291 292 projetoMenu.setLabel("Projeto"); 293 projetoMenu.addActionListener(new java.awt.event.ActionListener() { 294 public void actionPerformed(java.awt.event.ActionEvent evt) { 295 projetoMenuActionPerformed(evt); 296 } 297 }); 298 299 adicionaQuestaoMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Add16.gif"))); 300 adicionaQuestaoMenuItem.setText("Adicionar quest\u00e3o"); 301 adicionaQuestaoMenuItem.setEnabled(false); 302 adicionaQuestaoMenuItem.addActionListener(new java.awt.event.ActionListener() { 303 public void actionPerformed(java.awt.event.ActionEvent evt) { 304 adicionaQuestaoMenuItemActionPerformed(evt); 305 }

61

306 }); 307 308 projetoMenu.add(adicionaQuestaoMenuItem); 309 310 removeQuestaoMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Delete16.gif"))); 311 removeQuestaoMenuItem.setLabel("Remover quest\u00e3o"); 312 removeQuestaoMenuItem.setEnabled(false); 313 removeQuestaoMenuItem.addActionListener(new java.awt.event.ActionListener() { 314 public void actionPerformed(java.awt.event.ActionEvent evt) { 315 removeQuestaoMenuItemActionPerformed(evt); 316 } 317 }); 318 319 projetoMenu.add(removeQuestaoMenuItem); 320 321 alteraQuestaoMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Edit16.gif"))); 322 alteraQuestaoMenuItem.setText("Alterar quest\u00e3o"); 323 alteraQuestaoMenuItem.setEnabled(false); 324 projetoMenu.add(alteraQuestaoMenuItem); 325 326 jMenuBar1.add(projetoMenu); 327 328 jMenu1.setLabel("Ajuda"); 329 jMenuItem7.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/interrogacao.gif"))); 330 jMenuItem7.setLabel("Sobre"); 331 jMenuItem7.addActionListener(new java.awt.event.ActionListener() { 332 public void actionPerformed(java.awt.event.ActionEvent evt) { 333 jMenuItem7ActionPerformed(evt); 334 } 335 }); 336 337 jMenu1.add(jMenuItem7); 338 339 jMenuBar1.add(jMenu1); 340 341 setJMenuBar(jMenuBar1); 342 343 pack(); 344 } 345 346 private void salvarComoMenuItemActionPerformed(java.awt.event.ActionEvent evt) { 347 saveAs(); 348 } 349 350 private void publicarButtonActionPerformed(java.awt.event.ActionEvent evt) { 351 publicar();

62

352 } 353 354 private void removeQuestaoButtonActionPerformed(java.awt.event.ActionEvent evt) { 355 new RemoveQuestao(this,true).show(); 356 } 357 358 private void adicionaQuestaoButtonActionPerformed(java.awt.event.ActionEvent evt) { 359 new AdicionaQuestao(this,true).show(); 360 } 361 362 private void salvarButtonActionPerformed(java.awt.event.ActionEvent evt) { 363 if(questionario.salvo){ 364 System.out.println("1"); 365 save(); 366 }else{ 367 System.out.println("2"); 368 saveAs(); 369 } 370 371 } 372 373 private void abrirButtonActionPerformed(java.awt.event.ActionEvent evt) { 374 abrir(); 375 } 376 377 private void novoButtonActionPerformed(java.awt.event.ActionEvent evt) { 378 new NovoQuestionario(this, true).show(); 379 } 380 381 private void jMenuItem7ActionPerformed(java.awt.event.ActionEvent evt) { 382 new Sobre(this,true).show(); 383 } 384 385 private void abrirMenuItemActionPerformed(java.awt.event.ActionEvent evt) { 386 abrir(); 387 } 388 389 private void salvarMenuItemActionPerformed(java.awt.event.ActionEvent evt) { 390 if(questionario.salvo){ 391 save(); 392 }else{ 393 saveAs(); 394 } 395 396 } 397

63

398 private void sairMenuItemActionPerformed(java.awt.event.ActionEvent evt) { 399 System.exit(0); 400 } 401 402 private void removeQuestaoMenuItemActionPerformed(java.awt.event.ActionEvent evt) { 403 new RemoveQuestao(this,true).show(); 404 } 405 406 private void novoMenuItemActionPerformed(java.awt.event.ActionEvent evt) { 407 new NovoQuestionario(this, true).show(); 408 } 409 410 private void projetoMenuActionPerformed(java.awt.event.ActionEvent evt) { 411 // TODO add your handling code here: 412 } 413 414 private void adicionaQuestaoMenuItemActionPerformed(java.awt.event.ActionEvent evt) { 415 new AdicionaQuestao(this,true).show(); 416 } 417 418 private void arquivoMenuActionPerformed(java.awt.event.ActionEvent evt) { 419 // TODO add your handling code here: 420 } 421 422 /** Exit the Application */ 423 private void exitForm(java.awt.event.WindowEvent evt) { 424 System.exit(0); 425 426 } 427 428 public void saveAs(){ 429 430 JFileChooser chooser = new JFileChooser(); 431 ExampleFileFilter filter = new ExampleFileFilter(); 432 filter.addExtension("spo"); 433 chooser.setFileFilter(filter); 434 int returnVal = chooser.showSaveDialog(this); 435 if(returnVal == JFileChooser.APPROVE_OPTION) { 436 questionario.setPublish_File(chooser.getSelectedFile()); 437 try { 438 File pf = questionario.getPublish_File(); 439 questionario.setSalvo(true); 440 if(pf.getName().substring(pf.getName().length()-4).equalsIgnoreCase(".spo")){ 441 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(pf)); 442 Object obj = (Object)questionario; 443 oos.writeObject(obj); 444 oos.close();

64

445 446 }else{ 447 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(pf + ".spo")); 448 Object obj = (Object)questionario; 449 oos.writeObject(obj); 450 oos.close(); 451 452 } 453 454 salvarButton.setEnabled(false); 455 salvarMenuItem.setEnabled(false); 456 } catch (Exception e) { 457 //questionario.setSalvo(false); 458 e.printStackTrace(); 459 JOptionPane.showMessageDialog(this, "Não foi possível salvar o arquivo!", "Error", JOptionPane.ERROR_MESSAGE); 460 } 461 } 462 } 463 464 public String adicionalinha(int nLinhas){ 465 String aux = ""; 466 for (int i = 1; i < (nLinhas+1);i++){ 467 aux = aux + "<hr><br>"; 468 } 469 return aux; 470 } 471 472 public void save(){ 473 try { 474 questionario.setSalvo(true); 475 File publish_file = questionario.getPublish_File(); 476 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(questionario.getPublish_File())); 477 Object obj = (Object)questionario; 478 oos.writeObject(obj); 479 oos.close(); 480 salvarButton.setEnabled(false); 481 salvarMenuItem.setEnabled(false); 482 } catch (Exception e) { 483 //questionario.setSalvo(false); 484 e.printStackTrace(); 485 JOptionPane.showMessageDialog(this, "Não foi possível salvar o arquivo!", "Error", JOptionPane.ERROR_MESSAGE); 486 } 487 488 } 489 490 491 public void abrir(){ 492 JFileChooser chooser = new JFileChooser(); 493 ExampleFileFilter filter = new ExampleFileFilter(); 494 filter.addExtension("spo"); 495 chooser.setFileFilter(filter);

65

496 int returnVal = chooser.showOpenDialog(this); 497 if(returnVal == JFileChooser.APPROVE_OPTION) { 498 File open_file = chooser.getSelectedFile(); 499 try { 500 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(open_file)); 501 questionario = (Questionario)ois.readObject(); 502 questionario.setPublish_File(open_file); 503 this.atualizaQuestionario(questionario); 504 ois.close(); 505 } catch (Exception e) { 506 JOptionPane.showMessageDialog(this, "" + 507 "Não foi possível carregar o arquivo!", "Error", JOptionPane.ERROR_MESSAGE); 508 } 509 } 510 } 511 public void ajusta(){ 512 setExtendedState(MAXIMIZED_BOTH); 513 } 514 515 public void atualizaQuestionario(Questionario quest){ 516 adicionaQuestaoMenuItem.setEnabled(true); 517 adicionaQuestaoButton.setEnabled(true); 518 publicarButton.setEnabled(true); 519 publicarMenuItem.setEnabled(true); 520 imprimirButton.setEnabled(true); 521 imprimirMenuItem.setEnabled(true); 522 salvarButton.setEnabled(true); 523 salvarMenuItem.setEnabled(true); 524 salvarComoMenuItem.setEnabled(true); 525 questionario = quest; 526 questionario.setSalvo(false); 527 jTextPane1.setContentType("text/html"); 528 jTextPane1.setText("<html><h2><center>" + questionario.getTitulo() + "</center></h2>" + 529 "<h3>" + questionario.getIntroducao() + "</h3>"); 530 } 531 public void adicionaQuestao(Questao questao,int pos){ 532 adicionaQuestaoMenuItem.setEnabled(true); 533 adicionaQuestaoButton.setEnabled(true); 534 questionario.adicionaQuestao(pos, questao); 535 removeQuestaoMenuItem.setEnabled(true); 536 removeQuestaoButton.setEnabled(true); 537 atualizaQuestoes(); 538 } 539 540 public void removeQuestao(int pos){ 541 questionario.removeQuestao(pos); 542 if(questionario.questoes.size() == 0){ 543 removeQuestaoMenuItem.setEnabled(false); 544 removeQuestaoButton.setEnabled(false); 545 } 546 atualizaQuestoes();

66

547 } 548 549 public void atualizaQuestoes(){ 550 salvarButton.setEnabled(true); 551 salvarMenuItem.setEnabled(true); 552 questionario.setSalvo(false); 553 int aux = questionario.questoes.size(); 554 String str = "<html>"; 555 for(int i = 0; i < aux; i++ ){ 556 Questao q = (Questao)questionario.questoes.get(i); 557 str = str + ("<br><b>Questão " + (i+1) + ": </b>" + q.enunciado)+ "<br>"; 558 int aux1 = q.alternativas.size(); 559 for (int k = 0; k < aux1;k++){ 560 str = str + (((char)(97+k)) + ") " + (String)q.alternativas.get(k)) + "<br>"; 561 } 562 } 563 564 jTextPane1.setContentType("text/html"); 565 jTextPane1.setText("<html><h2><center>" + questionario.getTitulo() + "</center></h2>" + 566 "<h3>" + questionario.getIntroducao() + "</h3>" + str); 567 568 569 } 570 571 572 573 public String publicacao(){ 574 int aux = questionario.questoes.size(); 575 String str = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"+ 576 "<HTML><HEAD><TITLE>"+questionario.getTitulo()+"</TITLE>"+ 577 "<META http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\"><LINK "+ 578 "href=\"estilo.css\" type=text/css rel=stylesheet>"+ 579 "<META content=\"MSHTML 6.00.2900.2604\" name=GENERATOR></HEAD>"+ 580 "<BODY>"; 581 String titulo = "<TABLE width=\"90%\" align=center border=0>"+ 582 "<TBODY>"+ 583 "<TR>"+ 584 "<TD align=middle>"+ 585 "<H1 class=TituloPagina>"+questionario.getTitulo()+"</H1></TD></TR></TBODY></TABLE>"+ 586 "<TABLE width=\"90%\" align=center border=0>"+ 587 "<TBODY>"+ 588 "<TR>"+ 589 "<TD>&nbsp;</TD></TR></TBODY></TABLE>"; 590 String intro = "<TABLE width=\"90%\" align=center border=0>"+ 591 "<TBODY>"+ 592 "<TR>"+ 593 "<TD vAlign=top height=350>"+

67

594 595 "<P class=TextoBase>"+questionario.getIntroducao()+"</P>"; 596 597 String questoes = ""; 598 599 for(int i = 0; i < aux; i++ ){ 600 Questao q = (Questao)questionario.questoes.get(i); 601 questoes = questoes + ("<P class=TextoBase>Questão " + (i+1) + ": "+q.getEnunciado()+"<BR>"); 602 int aux1 = q.alternativas.size(); 603 for (int k = 0; k < aux1;k++){ 604 questoes = questoes + "<INPUT type=radio value=alt_" + ((char)(97+k)) + " name=questao_"+(i+1)+" >" +" " +(((char)(97+k)) + ") " + (String)q.alternativas.get(k)) + "<BR>"; 605 } 606 questoes = questoes + "</P>"; 607 } 608 609 String submit = "<TABLE width=\"50%\" align=center border=0>"+ 610 "<TBODY>"+ 611 "<TR align=right>"+ 612 "<TD><INPUT type=submit value=Enviar></TD>"+ 613 "<TD align=left><INPUT id=Apagar2 type=reset value=Apagar name=Apagar></TD></TR></TBODY></TABLE>"; 614 615 616 return (str + titulo + intro + questoes + submit +"</body></html>"); 617 618 619 } 620 621 public void publicar(){ 622 if(questionario.salvo){ 623 try { 624 File publish_file = questionario.getPublish_File(); 625 FileOutputStream estilo = new FileOutputStream(publish_file.getPath().substring(0,((publish_file.getPath().length())- (publish_file.getName().length())))+"estilo.css"); 626 PrintStream fileEstilo = new PrintStream(estilo); 627 if(publish_file.getName().substring(publish_file.getName().length()-4).equalsIgnoreCase(".spo")){ 628 FileOutputStream saida = new FileOutputStream(publish_file.getPath().substring(0,publish_file.getPath().length()-4)+".html"); 629 PrintStream fileSaida = new PrintStream(saida); 630 fileEstilo.print(estilo()); 631 fileSaida.print(publicacao()); 632 633 }else{ 634 FileOutputStream saida = new FileOutputStream(publish_file+".html"); 635 PrintStream fileSaida = new PrintStream(saida);

68

636 fileEstilo.print(estilo()); 637 fileSaida.print(publicacao()); 638 639 } 640 641 642 } 643 catch (Exception e) { 644 e.printStackTrace(); 645 } 646 }else{ 647 JOptionPane.showMessageDialog(this, "O arquivo precisa ser salvo!", "Error", JOptionPane.ERROR_MESSAGE); 648 } 649 } 650 651 652 public Questionario getQuestionario(){ 653 return questionario; 654 } 655 /** 656 * @param args the command line arguments 657 */ 658 public static void main(String args[]) { 659 new InterfaceUsuario().show(); 660 } 661 662 // Variables declaration - do not modify 663 private javax.swing.JButton abrirButton; 664 private javax.swing.JMenuItem abrirMenuItem; 665 private javax.swing.JButton adicionaQuestaoButton; 666 private javax.swing.JMenuItem adicionaQuestaoMenuItem; 667 private javax.swing.JMenuItem alteraQuestaoMenuItem; 668 private javax.swing.JMenu arquivoMenu; 669 private javax.swing.JButton imprimirButton; 670 private javax.swing.JMenuItem imprimirMenuItem; 671 private javax.swing.JButton jButton1; 672 private javax.swing.JMenu jMenu1; 673 private javax.swing.JMenuBar jMenuBar1; 674 private javax.swing.JMenuItem jMenuItem7; 675 private javax.swing.JPanel jPanel1; 676 private javax.swing.JPanel jPanel2; 677 private javax.swing.JScrollPane jScrollPane1; 678 private javax.swing.JSeparator jSeparator1; 679 private javax.swing.JSeparator jSeparator2; 680 private javax.swing.JSeparator jSeparator3; 681 private javax.swing.JTextPane jTextPane1; 682 private javax.swing.JToolBar jToolBar1; 683 private javax.swing.JToolBar jToolBar3; 684 private javax.swing.JButton novoButton; 685 private javax.swing.JMenuItem novoMenuItem; 686 private javax.swing.JMenu projetoMenu; 687 private javax.swing.JButton publicarButton; 688 private javax.swing.JMenuItem publicarMenuItem;

69

689 private javax.swing.JButton removeQuestaoButton; 690 private javax.swing.JMenuItem removeQuestaoMenuItem; 691 private javax.swing.JMenuItem sairMenuItem; 692 private javax.swing.JButton salvarButton; 693 private javax.swing.JMenuItem salvarComoMenuItem; 694 private javax.swing.JMenuItem salvarMenuItem; 695 // End of variables declaration 696 697 } 698

src/NovoQuestionario.java

1 /* 2 * NovoQuestionario.java 3 * 4 * Created on 7 de Março de 2005, 22:17 5 */ 6 7 package src; 8 9 /** 10 * 11 * @author administrador

12 */ 13 import javax.swing.JOptionPane; 14 public class NovoQuestionario extends javax.swing.JDialog { 15 16 /** Creates new form NovoQuestionario */ 17 public NovoQuestionario(java.awt.Frame parent, boolean modal) { 18 19 super(parent, modal); 20 initComponents(); 21 } 22 23 /** This method is called from within the constructor to 24 * initialize the form. 25 * WARNING: Do NOT modify this code. The content of this method is 26 * always regenerated by the Form Editor. 27 */ 28 private void initComponents() { 29 jPanel1 = new javax.swing.JPanel(); 30 jPanel2 = new javax.swing.JPanel(); 31 jLabel1 = new javax.swing.JLabel(); 32 tituloTextField = new javax.swing.JTextField(); 33 jPanel3 = new javax.swing.JPanel(); 34 jLabel2 = new javax.swing.JLabel(); 35 jScrollPane1 = new javax.swing.JScrollPane(); 36 introducaoTextPane = new javax.swing.JTextPane();

37 jPanel4 = new javax.swing.JPanel(); 38 OKButton = new javax.swing.JButton(); 39 CancelButton = new javax.swing.JButton(); 40

70

41 getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); 42 43 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

44 setTitle("Novo Question\u00e1rio");

45 setResizable(false);

46 jPanel1.setBorder(new javax.swing.border.EtchedBorder()); 47 jPanel1.setPreferredSize(new java.awt.Dimension(1290, 84)); 48 jPanel1.setRequestFocusEnabled(false); 49 jPanel2.setLayout(new java.awt.GridBagLayout()); 50 51 jPanel2.setPreferredSize(new java.awt.Dimension(380, 30)); 52 jLabel1.setText("T\u00edtulo: "); 53 jPanel2.add(jLabel1, new java.awt.GridBagConstraints());

54 55 tituloTextField.setToolTipText("Digite aqui o t\u00edtulo da sua pesquisa.");

56 tituloTextField.setPreferredSize(new java.awt.Dimension(300, 21)); 57 tituloTextField.addActionListener(new java.awt.event.ActionListener() { 58 public void actionPerformed(java.awt.event.ActionEvent evt) { 59 tituloTextFieldActionPerformed(evt); 60 } 61 }); 62 63 jPanel2.add(tituloTextField, new java.awt.GridBagConstraints()); 64 65 jPanel1.add(jPanel2); 66 67 jPanel3.setPreferredSize(new java.awt.Dimension(380, 180));

68 jLabel2.setText("Introdu\u00e7\u00e3o:"); 69 jPanel3.add(jLabel2);

70 71 jScrollPane1.setPreferredSize(new java.awt.Dimension(364, 150));

72 introducaoTextPane.setToolTipText("Digite aqui uma introdu\u00e7\u00e3o \u00e0 sua pesquisa.");

73 jScrollPane1.setViewportView(introducaoTextPane); 74 75 jPanel3.add(jScrollPane1); 76 77 jPanel1.add(jPanel3); 78 79 OKButton.setLabel("OK"); 80 OKButton.addActionListener(new java.awt.event.ActionListener() { 81 public void actionPerformed(java.awt.event.ActionEvent evt) { 82 OKButtonActionPerformed(evt); 83 } 84 });

71

85 86 jPanel4.add(OKButton); 87 88 CancelButton.setLabel("Cancel"); 89 CancelButton.addActionListener(new java.awt.event.ActionListener() { 90 public void actionPerformed(java.awt.event.ActionEvent evt) { 91 CancelButtonActionPerformed(evt); 92 } 93 }); 94 95 jPanel4.add(CancelButton); 96 97 jPanel1.add(jPanel4); 98 99 getContentPane().add(jPanel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 400, 270)); 100 101 pack(); 102 } 103 104 private void OKButtonActionPerformed(java.awt.event.ActionEvent evt) { 105 String tit = tituloTextField.getText().trim(); 106 if(tit.equals("")) { 107 String msg = "Você deve especificar o título do questionário!\n"; 108 JOptionPane.showMessageDialog(this, 109 msg, 110 "Erro", 111 JOptionPane.ERROR_MESSAGE); 112 return; 113 } 114 115 String intro = introducaoTextPane.getText().trim(); 116 if(intro.equals("")) { 117 String msg = "Você deve escrever uma introdução para o seu questionário!\n"; 118 JOptionPane.showMessageDialog(this, 119 msg, 120 "Erro", 121 JOptionPane.ERROR_MESSAGE); 122 return; 123 } 124 Questionario questionario = new Questionario(); 125 questionario.setTitulo(tituloTextField.getText()); 126 questionario.setIntroducao(introducaoTextPane.getText()); 127 ((InterfaceUsuario)this.getParent()).atualizaQuestionario(questionario); 128 129 this.dispose(); 130 131 } 132

72

133 private void CancelButtonActionPerformed(java.awt.event.ActionEvent evt) { 134 this.dispose(); 135 } 136 137 private void tituloTextFieldActionPerformed(java.awt.event.ActionEvent evt) { 138 // TODO add your handling code here: 139 } 140 141 /** 142 * @param args the command line arguments 143 */ 144 public static void main(String args[]) { 145 new NovoQuestionario(new javax.swing.JFrame(), true).show(); 146 } 147 148 // Variables declaration - do not modify 149 private javax.swing.JButton CancelButton; 150 private javax.swing.JButton OKButton; 151 private javax.swing.JTextPane introducaoTextPane; 152 private javax.swing.JLabel jLabel1; 153 private javax.swing.JLabel jLabel2; 154 private javax.swing.JPanel jPanel1; 155 private javax.swing.JPanel jPanel2; 156 private javax.swing.JPanel jPanel3; 157 private javax.swing.JPanel jPanel4; 158 private javax.swing.JScrollPane jScrollPane1; 159 private javax.swing.JTextField tituloTextField; 160 // End of variables declaration 161 162 } 163 164

src/Questao.java

1 /* 2 * Questao.java 3 * 4 * Created on 13 de Março de 2005, 12:11 5 */ 6 7 package src; 8 9 /** 10 * 11 * @author administrador 12 */ 13 import java.util.LinkedList; 14 import java.io.Serializable; 15 16 public class Questao implements Serializable {

73

17 18 int nlinhas; 19 char tipo; 20 int escala; 21 char letraOuNumero; 22 char radioboxPos; 23 String enunciado; 24 LinkedList alternativas; 25 26 public Questao(){ 27 alternativas = new LinkedList(); 28 } 29 30 public int NumAlternativas(){ 31 return alternativas.size(); 32 } 33 34 public void setEnunciado(String enun){ 35 enunciado = enun; 36 } 37 38 public String getEnunciado(){ 39 return enunciado; 40 } 41 42 public void adicionaAlternativa(int indice,String alt){ 43 alternativas.add(indice,alt); 44 } 45 46 public void adicionaAlternativa(String alt){ 47 alternativas.add(alt); 48 } 49 public void removeAlternativa(int indice){ 50 alternativas.remove(indice); 51 } 52 53 public void setEscala(int esc){ 54 escala = esc; 55 56 } 57 58 public int getEscala(){ 59 return escala; 60 } 61 62 public void setCaracteres(int carac){ 63 escala = carac; 64 65 } 66 67 public int getNLinhas(){ 68 return nlinhas; 69 } 70 71 public void setTipo(char tip){

74

72 tipo = tip; 73 74 } 75 76 public char getTipo(){ 77 return tipo; 78 } 79 80 public void setListaDeAlternativas(LinkedList alt){ 81 alternativas = alt; 82 } 83 } 84

src/Questionario.java

1 /* 2 * Questionario.java 3 * 4 * Created on 13 de Março de 2005, 12:05 5 */ 6 7 package src; 8 9 /** 10 * 11 * @author administrador 12 */ 13 import java.util.LinkedList; 14 import java.io.Serializable; 15 import java.io.File; 16 17 public class Questionario implements Serializable{ 18 19 String titulo; 20 String introducao; 21 LinkedList questoes; 22 File publish_file; 23 boolean salvo; 24 25 public Questionario(){ 26 salvo = false; 27 questoes = new LinkedList(); 28 titulo = ""; 29 introducao = ""; 30 publish_file = null; 31 } 32 33 public void adicionaQuestao(int indice,Questao questao){ 34 questoes.add(indice, questao); 35 } 36 37 public void adicionaQuestao(Questao questao){ 38 questoes.add(questao);

75

39 } 40 41 public String removeQuestao(int indice){ 42 String aux = questoes.get(indice).toString(); 43 questoes.remove(indice); 44 return aux; 45 } 46 47 public void setTitulo(String tit){ 48 titulo = tit; 49 } 50 51 public void setSalvo(boolean save){ 52 salvo = save; 53 } 54 55 public String getTitulo(){ 56 return titulo; 57 } 58 59 public void setPublish_File(File pf){ 60 publish_file = pf; 61 } 62 63 public File getPublish_File(){ 64 return publish_file; 65 } 66 67 68 public void setIntroducao(String intro){ 69 introducao = intro; 70 } 71 72 public String getIntroducao(){ 73 return introducao; 74 } 75 76 public int numQuestoes(){ 77 return questoes.size(); 78 } 79 80 public void imprimeQuestionario(){ 81 int aux = questoes.size(); 82 System.out.println(titulo); 83 System.out.println(introducao); 84 for(int i = 0; i < aux; i++ ){ 85 Questao q = (Questao)questoes.get(i); 86 System.out.println(""); 87 System.out.println("Questão " + (i+1) + ": " + q.enunciado); 88 int aux1 = q.alternativas.size(); 89 for (int k = 0; k < aux1;k++){ 90 System.out.println(((char)(65+k)) + ") " + (String)q.alternativas.get(k)); 91 }

76

92 } 93 } 94 } 95

src/RemoveQuestao.java

1 /* 2 * RemoveQuestao.java 3 * 4 * Created on 20 de Março de 2005, 18:30 5 */ 6 7 package src; 8 9 /** 10 * 11 * @author administrador

12 */ 13 public class RemoveQuestao extends javax.swing.JDialog { 14 15 /** Creates new form RemoveQuestao */ 16 public RemoveQuestao(java.awt.Frame parent, boolean modal) { 17 super(parent, modal); 18 initComponents(); 19 regula(); 20 } 21 22 /** This method is called from within the constructor to 23 * initialize the form. 24 * WARNING: Do NOT modify this code. The content of this method is 25 * always regenerated by the Form Editor. 26 */ 27 private void initComponents() { 28 jPanel1 = new javax.swing.JPanel(); 29 jPanel3 = new javax.swing.JPanel(); 30 questaoTextPane = new javax.swing.JTextPane(); 31 jPanel4 = new javax.swing.JPanel(); 32 removeButton = new javax.swing.JButton(); 33 cancelButton = new javax.swing.JButton(); 34 jLabel1 = new javax.swing.JLabel(); 35 questNumComboBox = new javax.swing.JComboBox(); 36 jLabel2 = new javax.swing.JLabel(); 37 38 getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); 39 40 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 41 setTitle("Remover Quest\u00e3o"); 42 setResizable(false); 43 jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); 44

77

45 jPanel1.setBorder(new javax.swing.border.EtchedBorder()); 46 jPanel3.setLayout(new java.awt.BorderLayout()); 47 48 questaoTextPane.setBorder(new javax.swing.border.EtchedBorder()); 49 questaoTextPane.setEditable(false); 50 questaoTextPane.setMaximumSize(new java.awt.Dimension(390, 230)); 51 questaoTextPane.setPreferredSize(new java.awt.Dimension(390, 230)); 52 jPanel3.add(questaoTextPane, java.awt.BorderLayout.SOUTH); 53 54 jPanel1.add(jPanel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 70, -1, -1)); 55 56 removeButton.setText("Remove"); 57 removeButton.addActionListener(new java.awt.event.ActionListener() { 58 public void actionPerformed(java.awt.event.ActionEvent evt) { 59 removeButtonActionPerformed(evt); 60 } 61 }); 62 63 jPanel4.add(removeButton); 64 65 cancelButton.setText("Cancel"); 66 cancelButton.addActionListener(new java.awt.event.ActionListener() { 67 public void actionPerformed(java.awt.event.ActionEvent evt) { 68 cancelButtonActionPerformed(evt); 69 } 70 });

71 72 jPanel4.add(cancelButton); 73 74 jPanel1.add(jPanel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(130, 310, -1, -1)); 75 76 jLabel1.setText("Quest\u00e3o n\u00famero:"); 77 jPanel1.add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 20, -1, -1)); 78 79 questNumComboBox.setPreferredSize(new java.awt.Dimension(66, 21)); 80 questNumComboBox.addItemListener(new java.awt.event.ItemListener() { 81 public void itemStateChanged(java.awt.event.ItemEvent evt) { 82 questNumComboBoxItemStateChanged(evt); 83 } 84 }); 85 86 jPanel1.add(questNumComboBox, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 20, -1, -1));

78

87

88 jLabel2.setText("Quest\u00e3o:");

89 jPanel1.add(jLabel2, new

org.netbeans.lib.awtextra.AbsoluteConstraints(10, 50, -1, -1)); 90 91 getContentPane().add(jPanel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 410, 350)); 92 93 pack(); 94 } 95 96 private void questNumComboBoxItemStateChanged(java.awt.event.ItemEvent evt) { 97 int aux = questNumComboBox.getSelectedIndex();

98 mostraQuestao(aux); 99 } 100 101 public void mostraQuestao(int questnum){ 102 questaoTextPane.setContentType("text/html"); 103 String str = "<html>"; 104 Questionario quest = ((InterfaceUsuario)this.getParent()).getQuestionario(); 105 Questao q = (Questao)quest.questoes.get(questnum); 106 str = str + ("<b>Questão " + (questnum+1) + ": </b>" + q.enunciado)+ "<br>"; 107 int aux1 = q.alternativas.size(); 108 for (int k = 0; k < aux1;k++){ 109 str = str + (((char)(65+k)) + ") " + (String)q.alternativas.get(k)) + "<br>"; 110 } 111 questaoTextPane.setText(str); 112 } 113 114 private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) { 115 this.dispose(); 116 } 117 118 private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) { 119 ((InterfaceUsuario)this.getParent()).removeQuestao(questNumComboBox.getSelectedIndex()); 120 setVisible(false); 121 this.dispose(); 122 } 123 124 private void regula(){ 125 126 int aux = ((InterfaceUsuario)this.getParent()).getQuestionario().questoes.size(); 127 128 String[] str = new String[aux]; 129 130 for (int i = 0; i < (aux);i++){

79

131 str[i] = "" + (i+1); 132 } 133 questNumComboBox.setModel(new javax.swing.DefaultComboBoxModel(str)); 134 questNumComboBox.setSelectedIndex(0); 135 mostraQuestao(0); 136 } 137 /** 138 * @param args the command line arguments 139 */ 140 public static void main(String args[]) { 141 new RemoveQuestao(new javax.swing.JFrame(), true).show(); 142 } 143 144 // Variables declaration - do not modify 145 private javax.swing.JButton cancelButton; 146 private javax.swing.JLabel jLabel1; 147 private javax.swing.JLabel jLabel2; 148 private javax.swing.JPanel jPanel1; 149 private javax.swing.JPanel jPanel3; 150 private javax.swing.JPanel jPanel4; 151 private javax.swing.JComboBox questNumComboBox; 152 private javax.swing.JTextPane questaoTextPane; 153 private javax.swing.JButton removeButton; 154 // End of variables declaration 155 156 } 157

src/WebDesing.java

1 /* 2 * webd.java 3 * 4 * Created on 2 de Maio de 2005, 19:35 5 */ 6 7 package src; 8 9 /** 10 * 11 * @author Leonardo 12 */ 13 public class WebDesing { 14 15 /** Creates a new instance of webd */ 16 String estilo; 17 public WebDesing() { 18 estilo = ""; 19 } 20 21 public String getEstilo(){ 22 return estilo; 23 }

80

24 25 public void setEstilo(){ 26 estilo = ("BODY {"+ 27 "SCROLLBAR-FACE-COLOR: #efc080; SCROLLBAR-ARROW-COLOR: #330099; SCROLLBAR-TRACK-COLOR: #eeeeee; FONT-FAMILY: Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #ffffff; text-color: #000000"+ 28 "}"+ 29 "A:link {"+ 30 "COLOR: #0000ff; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: underline"+ 31 "}"+ 32 "A:visited {"+ 33 "COLOR: #ff0000; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: underline"+ 34 "}"+ 35 "A:hover {"+ 36 "COLOR: #aa0000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-DECORATION: underline"+ 37 "}"+ 38 "A:active {"+ 39 "COLOR: #cc0000; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: underline"+ 40 "}"+ 41 "TD {"+ 42 "FONT-FAMILY: Arial, Helvetica, sans-serif"+ 43 "}"+ 44 "TH {"+ 45 "FONT-FAMILY: Arial, Helvetica, sans-serif"+ 46 "}"+ 47 ".TituloPagina {"+ 48 "BACKGROUND-POSITION: center 50%; FONT-WEIGHT: bold; FONT-SIZE: 40px; COLOR: #3366ff; FONT-FAMILY: Arial, Helvetica, sans-serif"+ 49 "}"+ 50 ".TextoBase {"+ 51 "FONT-WEIGHT: normal; FONT-SIZE: 20px; COLOR: #000000; FONT-FAMILY: Arial, Helvetica, sans-serif"+ 52 "}"+ 53 ".TextoAzulASP {"+ 54 "FONT-SIZE: 20px; COLOR: #003399; FONT-FAMILY: Arial, Helvetica, sans-serif"+ 55 "}"+ 56 ".ComentarioFinalArtigos {"+ 57 "FONT-WEIGHT: normal; FONT-SIZE: 20px; COLOR: #003399; FONT-FAMILY: Arial, Helvetica, sans-serif"+ 58 "}"+ 59 ".SubTitulosEmArtigos {"+ 60 "FONT-WEIGHT: bold; FONT-SIZE: 30px; COLOR: #000000; FONT-FAMILY: Arial, Helvetica, sans-serif"+ 61 "}"+ 62 ".CreditosBoletimShotokaiAlmada {"+ 63 "FONT-WEIGHT: normal; FONT-SIZE: 15px; COLOR: #000000; FONT-FAMILY: Arial, Helvetica, sans-serif"+ 64 "}"); 65 } 66 67 }

81

Artigo

SISTEMA PARA APLICAÇÃO DE PESQUISAS ONLINE Leonardo Pereira Demilis

INE - Departamento de Informática e Estatística Universidade Federal de Santa Catarina (UFSC), Brasil

[email protected]

Resumo

Pesquisas em forma de questionário são muito importantes e têm inúmeros e

diferentes usos de acordo com o que se deseja avaliar. A maioria desses questionários tem

basicamente o mesmo formato, isto é, segue uma estrutura lógica, mas na maioria das vezes

devem ser totalmente refeitos para cada caso particular.

Palavras chave: questionário, pesquisas

Abstract

Research in questionnaire form is very important and has innumerable and

different uses in accordance with what it is desired to evaluate. The majority of these

questionnaires has format basically the same, that is, it follows a logical structure, but in the

majority them times must total be remade for each particular case.

Keywords: questionnaire, research

6. INTRODUÇÃO

Uma das maneiras para se

compreender o comportamento humano é

perguntando para as pessoas, buscando

saber o que elas pensam, fazem ou

fizeram. As pessoas necessitam e utilizam

esses dados de base na hora de tomar

decisões ou fazer escolhas.

Pesquisa em forma de questionário é

um método muito usado e muito eficiente

para a coleta de dados. Esse tipo de

pesquisa é usado, por exemplo, por

empresas que desejam saber a satisfação

de seus clientes em relação a algum

determinado produto ou serviço, ou para

estudar a aceitação de determinado

produto ou serviço pelo mercado ao qual

se pretende atender, dentre muitos outros

usos.

7. PESQUISAS E QUESTIONÁRIOS

82

O questionário é um instrumento para

levantar informações a que se deve

responder sem a interferência do

avaliador/pesquisador. Geralmente usa-se

o termo "questionário" para designar

qualquer instrumento de coleta de

informações. No entanto, quando este

instrumento é preenchido pela população-

alvo da avaliação o termo técnico para

designá-lo é "formulário".

Na construção de um questionário

podem ser levados em consideração cinco

tópicos específicos, sendo eles: em

primeiro as bases conceituais e

populacionais, em segundo o contexto

social em que a pesquisa é realizada, em

terceiro trata-se da estrutura lógica do

questionário, em quarto os elementos do

questionário (questões e itens) em quinto

as diferenças do instrumento conforme a

forma da sua aplicação [GUN 99].

7.1. BASES CONCEITUAIS E POPULACIONAIS

Quando se elabora um questionário

deve-se ter sempre em mente os objetivos

da pesquisa, quais conceitos devem ser

pesquisados e qual o público-alvo que se

deseja atingir.

O objetivo da pesquisa é que

determinará quais conceitos devem ser

estudados. O objetivo do estudo é o que

determina as perguntas concretas que

serão apresentadas, ou por assim dizer, os

itens. Os itens a serem apresentados

podem variar de acordo com os conceitos

que se quer avaliar.

Dependendo do objetivo da pesquisa,

e do público-alvo, poderão ser definidos

diferentes tipos de amostra.

7.2. Contexto Social

Deve ser levado em consideração que

o respondente gasta seu tempo, tem um

esforço mental para completar o

questionário, e que a motivação para

responder e fornecer os dados que o

pesquisador quer são variáveis.

É uma questão cultural saber até que

ponto o respondente aceita ser

questionado, até que ponto ele aceita

tornar pública a sua opinião e fornecer

respostas autênticas.

Outro ponto é a imagem do

pesquisador, a credibilidade que ele

possui e a relevância para o respondente.

O meio físico onde a pesquisa será

aplicada e também a época (período de

festas, férias etc.) também influem no

resultado.

83

7.3. Estrutura Lógica e Seqüência

Um dos principais problemas é

motivar o respondente a completar e

devolver o questionário de forma honesta.

Segundo [DILL 78] há três coisas que

precisam ser feitas para maximizar a

resposta de uma pesquisa: minimize o

custo para o respondente, maximize as

recompensas para fazê-lo e estabeleça

confiança de que a recompensa será

concedida [DILL 78].

Sendo assim: Recompensar o

respondente; Reduzir o custo de

responder; Estabelecer confiança; O

início é onde se conhece o respondente e

se estabelece a confiança necessária.

7.4. Elementos (Questões e Itens)

A base da pesquisa é a pergunta, pela

qual se busca obter a informação

desejada, sendo assim, é importante criar

boas perguntas.

Para se ter uma boa pergunta, alguns

critérios devem ser seguidos: a pergunta

deve ser compreendida perfeitamente; a

pergunta deve ser feita corretamente; as

expectativas quanto à resposta adequada

devem ser claras ao respondente; o

respondente deve possuir toda a

informação necessária para efetuar a

resposta, excetuando-se as ocasiões onde

o que se avalia é o conhecimento do

respondente; e o respondente deve estar

disposto a responder a questão.

Para garantir tais critérios as questões

devem ser específicas, breves, claras e

devem conter um vocabulário apropriado.

A escolha das palavras usadas pode

direcionar a resposta, sendo assim um

cuidado faz-se necessário.

As questões podem ser abertas ou

fechadas. Questões fechadas tem a

vantagem de permitir respostas

padronizadas que permitem comparação

com outras avaliações. Também permite

maior economia de recursos (por facilitar

o tratamento e análise da informação e

por exigir menor tempo). Elas são

geralmente usadas quando se conhece a

abrangência e os tópicos mais

mencionados como resposta. A

desvantagem da questão fechada é que ela

permite facilitar a resposta (por esta já ser

oferecida) para um informante que não

saberia ou que encontraria maior

dificuldade em responder a uma

determinada questão. Quando não se

conhece variabilidade das respostas de

um determinado item, faz-se necessário o

uso de questões abertas que dão uma

84

maior liberdade ao respondente [TAN

01].

O questionário pode não

necessariamente querer medir o

conhecimento do respondente, mas

perguntas sobre conhecimento são usadas

como um filtro para evitar perguntas

constrangedoras, ao se tratar de um

assunto desconhecido do respondente.

Para que o respondente não tente

adivinhar a resposta quando ele não

souber do que se trata e não quiser

admiti-lo é aconselhável que se faça mais

de uma pergunta, assim se reduz a chance

de o respondente acertar o seu palpite.

Perguntas sócio-demográficas como

sexo, idade, escolaridade, renda etc.

devem vir somente no final do

questionário, e somente se deve perguntar

o que realmente vai vir a ser utilizado,

sempre lembrando ao respondente que

não se tem o intuito de identificar

indivíduos, mas sim a população-alvo.

7.4.1. Níveis de mensuração ou escala

As perguntas são transformadas

operacionalmente em variáveis e

indicadores, apresentadas ao respondente

em forma de itens. Desta maneira, é

perpassando os itens que se estabelece a

relação entre o objetivo de uma pesquisa

e os conceitos pesquisados, enquanto as

respostas representam o grau de

conceituação que o respondente tem

acerca do assunto sob investigação [GUN

99].

Tipos de mensuração ou escala:

Nominal: são utilizados números

ou símbolos para caracterizar cada opção

e diferencia-las.

Ordinal: também são utilizados

números ou símbolos, mas os mesmos

servem para estabelecer uma relação de

ordem, assim pode-se estabelecer uma

relação de quantas vezes cada opção foi

citada em primeiro lugar.

Exemplo:

Intervalar: além de se estabelecer

uma relação de ordem, o intervalo entre

cada alternativa é conhecido e pode ser

relacionado e/ou comparado.

Razão: a apresentação dos itens

remete a perguntas abertas:

Likert: neste caso pede-se que se

avalie um determinado fenômeno levando

em conta geralmente uma escala de cinco

alternativas. Dependendo da temática, as

alternativas podem seguir dimensões

como: aplica-se

não se aplica, bom

ruim , concordo discordo, etc.

85

7.4.2. Diferenças de

Instrumento

Existem várias maneiras de se

apresentar um questionário, entrevista

pessoal, questionário auto-aplicado via

correio ou em grupo, entrevista pessoal

por telefone e questionário auto-aplicado

via e-mail ou Internet, este último que

será o enfoque por se tratar do caso

estudado.

Os questionários por e-mail e

Internet são mais rápidos e baratos que os

demais tipos de questionário, pois

eliminam o gasto com o entrevistador,

papel, selos, ligações telefônicas etc. O

problema desse tipo de questionário é que

a população-alvo ainda é restrita, apesar

de se encontrar em grande crescimento,

pois o acesso a Internet é ainda apenas

disponível para uma pequena parcela da

população brasileira.

8. SOLUÇÃO E IMPLEMENTAÇÃO

8.1. Projeto

Através da análise dos requisitos do

sistema pode-se fazer uma prévia do que

viria compor o programa. Na seção que se

segue será apresentado em detalhes o

sistema propriamente dito bem como as

suas funcionalidades.

8.1.1. Requisitos

O sistema deve consistir em um

software que permita ao usuário a

elaboração de novos questionários,

criando novos documentos, podendo

salvá-los e também abrir arquivos

previamente salvos. Com o questionário

já criado o software deve permitir a

publicação de arquivos para a aplicação

da pesquisa on-line e também permitir a

impressão do mesmo. Para que o sistema

tenha as características desejadas deve

preencher alguns requisitos:

Visualizador de conteúdo: deve

permitir ao usuário uma visualização

amigável do conteúdo do questionário

que está sendo criado ou editado.

Tela para criação de novo

questionário: deve permitir ao usuário

inserir o título e a introdução do

questionário a ser criado.

Tela para adição de questão: deve

permitir ao usuário preenchimento de

campos específicos e a escolha de opções

para a inserção de questões e alternativas.

Tela para edição de questão: deve

permitir ao usuário editar as questões já

criadas.

86

Tela de remoção: deve

permitir ao usuário a remoção de questões

criadas.

8.2. Comportamento do sistema

8.2.1. Visão Geral

Neste tópico será

apresentado uma visão geral sobre o

funcionamento do sistema por meio das

interfaces, com o intuito de promover um

maior entendimento e familiarização do

sistema.

O Sistema consiste em

uma interface com um visualizador de

conteúdo em seu plano principal, e menus

e botões de ação em sua parte superior. A

aparência é muito parecida com um editor

de texto convencional.

No visualizador de

conteúdo o questionário será apresentado

ao usuário de forma amigável, já

possuindo uma formatação. Cada

alteração que for feita no questionário

será automaticamente atualizada no

visualizador de conteúdo, para que assim

o usuário possa conferir as alterações

feitas. O usuário não poderá editar

diretamente o visualizador de conteúdo,

as modificações deverão ser feitas através

de interfaces que são acessadas por meio

dos botões ou menus.

Acessando a tela para criação de

novo questionário por meio do botão ou

menu especifico o usuário será capaz de

inserir um título para a sua pesquisa e

também uma introdução a ela. Essas

ações são atualizadas no visualizador de

conteúdo.

Criado um novo questionário é

habilitada a opção de adicionar uma nova

questão. Adicionando uma nova questão

o usuário terá a opção de escolher entre

questão aberta ou questão fechada (o

programa dará uma breve explicação

sobre os dois tipos de questão). O usuário

deverá inserir o enunciado da questão e

também poderá escolher qual será o

número da questão, a fim de ordená-las.

Se o usuário não alterar a numeração o

programa auto-incrementará a numeração

colocando a questão no final do

questionário. Poderão ser feitas alterações

posteriormente.

Escolhendo o tipo de questão

aberta o programa vai permitir que o

usuário insira o enunciado da questão e

informe qual o espaço será deixado para a

resposta.

Se for escolhida a forma de

questão fechada o usuário além de inserir

87

o enunciado da questão, também terá que

definir o tipo de escala que será utilizada

(nominal, ordinal, intervalar, razão, Likert

ou bipolar). Cada opção apresentará uma

breve explicação sobre sua

funcionalidade. Em um campo definido o

usuário deverá inserir as alternativas.

Mesmo após a questão ter sido

adicionada ao questionário e o

visualizador de conteúdo ter sido

atualizado, o usuário pode fazer exclusões

de questões e alterações, como por

exemplo, na numeração, no número de

alternativas, nas alternativas e na escala

utilizada. Na tela de exclusão o usuário

terá a visualização separada de cada

questão, a fim de se ter certeza da questão

que está sendo excluída.

O questionário, depois de criado

ou mesmo não finalizado, pode ser salvo

guardando assim o trabalho realizado.

Este trabalho salvo, pode ser reaberto a

fim de se fazer alterações, atualizações ,

novas publicações, impressões, etc.

Após o arquivo salvo, o

questionário pode ser impresso e também

publicado para aplicação on-line. Quando

utilizada a função de publicação, o

software cria no mesmo diretório onde o

arquivo foi salvo, um arquivo com o

mesmo nome, mas, com extensão

diferente (_nome_do_arquivo.php). Este

arquivo é uma página PHP contendo um

questionário já estilizado pronto para

publicação na web. Também é criado um

arquivo estilo.css, que é um arquivo para

formatação de paginas, utilizado na

formatação do questionário acima citado.

Também é criado o banco de dados que

armazenará as respostas do questionário

publicado na web.

9. CONSIDERAÇÕES FINAIS

O objetivo principal deste trabalho foi

atingido, pois o sistema projetado foi

implementado e suas funcionalidades

proporcionam uma maior facilidade e

rapidez na criação de pesquisas. Sistema

executa automaticamente algumas tarefas

que seriam repetidamente executadas pelo

usuário, tornando o trabalho

significativamente facilitado. Proporciona

a reutilização do esforço de criação já

feito pelo usuário, já que proporciona que

usuário salve seu trabalho e o reuse ou

modifique depois.

O sistema apresenta-se de uma forma

bem amigável com algumas funções para

o auxilio a sua utilização e alguma ajuda

teórica.

88

O sistema pode ser facilmente

utilizado para a criação de qualquer tipo

de questionário, seja ele para ser aplicado

via Internet o mesmo na forma impressa.

Deste modo pode ser utilizado para

ciação de pesquisas de opinião,

comportamento, pesquisa sócio-

economicas ou também na criação de

avaliações utilisando a funcionalidade da

impressão.

Utilizando a função salvar, o trabalho

pode ser facilmente salvo para ser

reutilisado, modificado ou atualizado.

Para tais modificações basta utilizar as

funções de adição, remoção e/ou edição

de questão.

Com o software criado até

mesmo uma pessoa sem conhecimentos

em criação de páginas para Internet pode

criar a sua pesquisa on-line pronta para

ser publicada, incluindo banco de dados

para armazenamento dos resultados. Para

isto, basta somente utilizar as

funcionalidades existentes no programa,

as quais são de fácil entendimento e

manipulação.

BIBLIOGRAFIA

[YAR 86] Yaremko,

R. K., Harari, H., Harrison, R. C., &

Lynn, E. (1986). Handbook of research

and quantitative methods in

psychology. Hillsdale, NJ: Lawrence

Erlbaum.

[GUN 99] Günther, H.

(1999). Como Elaborar um Questionário.

Instituto de Psicologia, UnBBrasília

DF

1999.

[TAN 01] Tanaka,

Oswaldo Y.; Melo, Cristina. Avaliação

de Programas de Saúde do

Adolescente- um modo de fazer. São

Paulo : Edusp, 2001.

[OLI 01] Oliveira,

Lima A. Pesquisas são Pesquisas

http://www.portaldomarketing.com.br,

2001 acessado em 03/12/2004

[SIL 99] SILBERSCHATZ, A.; KORTH, H.; SUDARSH. Sistema de Banco de Dados. Makron Books, São Paulo, 1999.

[DILL 78] Dillman, D.

A. (1978). Mail and telephone surveys:

The total design method. New York:

Wiley.

[SUN] SUN,

JavaTM 2 Platform, Enterprise Edition

89

(J2EE) Overview http://java.sun.com,

acessado em 22/04/05

This document was created with Win2PDF available at http://www.daneprairie.com.The unregistered version of Win2PDF is for evaluation or non-commercial use only.