Upload
truongcong
View
216
Download
0
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)
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> </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
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
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.