You are on page 1of 22

Nombre: Omar Yesid Urazan Garca Cd.

: 2012153054
Ejercicio22: Se requiere aplicar una encuesta de mximo 5 preguntas en un tema especfico de
estructura de datos, teniendo en cuenta:
a. nicamente para estudiantes de tecnologa e ingeniera de sistemas.
b. Tanto para estudiantes activos como egresados
c. Mostrar los resultados de la evaluacin de la encuesta con su correspondiente anlisis
estadstico por pregunta de manera descendente y solamente de los estudiantes activo.
d. Mostrar los resultados de la evaluacin de la encuesta con su correspondiente anlisis
estadstico por pregunta de manera ascendente y solamente de estudiantes egresados.
Solucin
Se creara un nodo llamado NODOENCUESTAD con los siguientes atributos:
a. encuesta de tipo String.
b. codigo de tipo String.
c. cantidadS de tipo entero.
d. cantidadN de tipo entero.
e. cantidadSE de tipo entero.
f. cantidadNE de tipo entero.
g. punt de tipo NODOENCUESTAD
h. ant de tipo NODOENCUESTAD
Despus se creara la clase ENCUESTA con los siguientes atributos:
a. nodoEncuesta lista de tipo nodoEncuesta (Este ser el nombre de la variable que
tendr la lista de las preguntas de la encuesta).
b. nodoEncuesta aux de tipo nodoEncuesta.
c. cantidadEncuestados de tipo entero.
d. cantidadEgresados de tipo entero.
e. cantidadEstudiantes de tipo entero.
Dentro de los mtodos que tendr la clase Encuesta son:
a. mostrarListaEncuestas.
b. mostrarResultadosencuesta.
c. diligenciarEncuesta.
d. eliminarEncuesta.
e. contarRegistros.
f. ingresarEncuesta.
g. ubicarseEncola.
h. llenarEncuesta.
Dentro de la funcin ingresarEncuesta lo que se realizara es crear nuevos nodos o registros
que se irn anidados uno detrs del otro como se observa la siguiente grafica:






Quedando as la informacin la lista con las preguntas



Dentro de la funcin eliminarEncuesta lo que se realizara es crear un nodo auxiliar para
permitirla desasociar de la lista y as no permitir los registros siguientes que tenga asociado la
lista que desee eliminar, como se observa la siguiente grafica:














Punt: Es una variable que y tendr almacenado el nodo de
un registro para as formar la lista

Ant: es una variable que contendr anidado el registro
anterior permitiendo as recorrer los registros de derecha a
izquierda
Es la parte donde se guardaran todo lo datos relacionados a
la encuesta (codigo, pregunta, totalSI, totalNO y dems)
Auxiliar que de encargara de tener el registro a eliminar y
as no perder los registros asociados al elemento a
eliminarse
En esta parte lo que se hace es vincula los punteros del
registro anterior y siguiente del elemento a eliminarse y as
mantener la continuidad de la lista






Programacin en java con Netbeans:
1. Creacin de la clase nodoEncuesta y Encuesta dando click derecho sobre el paquete
llamado encuesta (no ENCUESTA) :


En esta parte se procede a desasociar los punteros para
que no comparta ningn vnculo con la lista dejando las
variables punt y ant en NULL y por ltimo se deja la
variable auxiliar que contiene el registro a eliminarse en
NULL para as eliminarlo completamente de la memoria


2. Se codifica la clase nodoEncuesta:

package encuestadoble;
/**
*
* @author OMAR URAZAN
*/
public class NODOENCUESTAD {
NODOENCUESTAD punt;
NODOENCUESTAD ant;
String encuesta;
String codigo;
int cantidadS;
int cantidadN;
int cantidadSE;
int cantidadNE;
public NODOENCUESTAD(String p_encuesta,String p_codigo,int p_cantidadS,int
p_cantidadN, int p_cantidadSE,int p_cantidadNE)
{
this.punt=null;
this.ant=null;
this.encuesta=p_encuesta;
this.codigo=p_codigo;
this.cantidadN=p_cantidadN;
this.cantidadS=p_cantidadS;
this.cantidadN=p_cantidadNE;
this.cantidadS=p_cantidadSE;
}
}

3. Se codifica la clase Encuesta:

package encuestadoble;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.omg.CORBA.SystemException;
/**
*
* @author OMAR URAZAN
*/
public class ENCUESTA {
private NODOENCUESTAD lista;
private NODOENCUESTAD aux;
public int cantidadEncuestados=0;
public int cantidadEgresados=0;
public int cantidadEstudiantes=0;
//Metodo utilizado para ingresar Las preguntas de la encuesta
public void ingresarEncuesta(String p_pregunta,String p_codigo)
{
//condicional que validara el registro maximo de preguntas para la encuesta en
este caso solo
//permitiran nigresar 5 preguntas en la encuesta
if(contarRegistros()<5)
{

if(!buscarCodigo(p_codigo)){
//se encargar de dejar el auxiliar en el ultimo nodo de la lista
ubicarseEncola();
//crear el nuevo registro agregando los datos ingresados por el usuario
NODOENCUESTAD nuevo = new NODOENCUESTAD(p_pregunta,p_codigo, 0,
0,0,0);
//condicin que valida si la lista todava no est creada
if(lista==null)
{
lista=nuevo;
lista.punt=null;
lista.ant=null;
aux=lista;
}
else//si no esta creada el siguiente registro se agregada al final de la lista
{

nuevo.punt=null;
nuevo.ant=aux;//se asigna al apuntador anterior el ultimo nodo de la lista
para que el nuevo quede de ultimo y enlazado a su anterior registro
aux.punt=nuevo;//se asigna al apuntador siguiente el nuevo nodo o
registr y asi sea el ltimo de la lista
aux=nuevo;

}
}else{
System.out.println("Ya existe una pregunta con ese codigo");
}


}else{
System.out.println("Solo puede agregar un maximo de 5 preguntas");
}

}

//Metodo encargado de contar el numero de registros que tiene la lista
public int contarRegistros()
{ NODOENCUESTAD aux2 =lista;
int contados =0;
while(aux2!=null){
contados++;
aux2=aux2.punt;
}
return contados;
}
//Metodo encargado de buscar si existe un registro con ese codigo
public Boolean buscarCodigo(String p_codigo)
{
Boolean encontrado=false;
NODOENCUESTAD aux2 =lista;

while(aux2!=null){
if(aux2.codigo.equals(p_codigo)){//comparacin que busca encontrar el registro
que tenga el dato que se esta buscando
encontrado=true;
break;
}
aux2=aux2.punt;
}
return encontrado;
}
//Metodo encargado de eliminar el registro que se encuentra en la lista
public void eliminarEncuesta(String p_codigo)
{ aux=lista;
NODOENCUESTAD aux2 =null;//variable auxiliar
int registro=0;
if(contarRegistros()>0)//condicin que valida la cantidad de registros para
poderse eliminar
{
try{
while(aux!=null)
{
if(aux.codigo.equals(p_codigo))//condicin que indica si el codigo
registrado se encuentra en la lista para eliminarse
{
if(registro==0)//valida si el registro encontrado es la cabeza de la lista
{
aux2=aux.punt;//se asigna el registro siguiente que tiene el nodo a
eliminarse
lista=null;
lista=aux2;//reasigna la cabeza con el siguiente registro

}
else
{
aux2.punt=aux.punt;//se asigna el registro siguiente que tiene el
nodo a eliminarse
aux2.punt.ant=aux2;//se asigna el registro anterior que tiene el nodo
a eliminarse
aux=null;
aux=aux2;//se asignar el auxiliar el siguiente registro para que
termine de recorrer la lista
}
}
aux2=aux;//en esta parte el aux2 estar en el registro anterior del que
se est recorriendo
aux=aux.punt;//se le asigna el siguiente registro para continuar la
busque del registro a eliminarse
registro++;//contador de registros
}
}
catch(SystemException e){}
}
else{
System.out.println("La lista de preguntas esta vacia");
}

}
//mtodo que se encarga de mostrar las preguntas de la encuesta para que el
estudiante de sistemas lo responda
public void llenarEncuesta(String p_codigo,Boolean p_esEgresado,Boolean
P_respuesta )
{
if (contarRegistros()==0)
{
System.out.println("No hay encuestas para diligenciar");
}else{
aux=lista;//hace que el auxiliar se encuentre en el primer registro y as poder
recorrer toda la lista
while(aux!=null){
if(aux.codigo.equals(p_codigo))//verificar que la el codigo de la pregunta
este en la lista
{
if(p_esEgresado)
{
if(P_respuesta)
{ aux.cantidadSE= aux.cantidadSE+1;}//agrega en numero de veces que
se ha seleccionado esa opcion para esa pregunta por parte del egresado
else
{aux.cantidadNE= aux.cantidadNE+1;}//agrega en numero de veces que
se ha seleccionado esa opcion para esa pregunta por parte del egresado
}
else
{

if(P_respuesta)
{aux.cantidadS= aux.cantidadS+1;}//agrega en numero de veces que se
ha seleccionado esa opcion para esa pregunta por parte del estudiante activo
else
{aux.cantidadN= aux.cantidadN+1;}//agrega en numero de veces que
se ha seleccionado esa opcion para esa pregunta por parte del estudiante activo
}
}
aux=aux.punt;
}
}


}
//Metodo utilizado para mostrar los resultados de la encuesta de acuerdo a cada
pregunta
public void mostrarResultadosencuesta(Boolean p_primero,Boolean p_activo)
{
if(cantidadEncuestados>0){
if(p_primero)//condicin que evala si se van a mostrar a partir del primer
registro de la lista o el ultimo
{
aux=lista;//se ubica en la cabeza de la lista
}
else{
ubicarseEncola();//se ubica en el ultimo registro de la lista
}
System.out.println("*----------------------------");
System.out.println("*total de Encuestados: "+cantidadEncuestados);
if(p_activo)
{
System.out.println("*total de studiantes Activos: "+cantidadEstudiantes);
}else
{
System.out.println("*total de Egresados: "+cantidadEgresados);
}


System.out.println("******************************");
while(aux!=null){
System.out.println("*Cod.Encuesta: "+aux.codigo);
if(p_activo)
{
System.out.println("*Total SI Estudiantes Activos: "+aux.cantidadS);
System.out.println("*Total NO Estudiantes Activos: "+aux.cantidadN);
}else
{
System.out.println("*Total SI Estudiantes Egresados: "+aux.cantidadSE);
System.out.println("*Total NO Estudiantes Egresados: "+aux.cantidadNE);
}
System.out.println("*Total SI:"+(aux.cantidadS+aux.cantidadSE));
System.out.println("*Total NO:"+ (aux.cantidadN+aux.cantidadNE));
//muestra el porcentaje total de los seleccionados por la opcionSI
System.out.println("*Porc
SI:"+((aux.cantidadS+aux.cantidadSE)*100/cantidadEncuestados));
//muestra el porcentaje total de los seleccionados por la opcion NO
System.out.println("*Porc NO:"+
((aux.cantidadN+aux.cantidadNE)*100/cantidadEncuestados));
System.out.println("*----------------------------");
if(p_primero)//condicin que evala si se van a mostrar a partir del primer
registro de la lista o el ultimo
{
aux=aux.punt;//se le asigna el siguiente nodo
}
else{
aux=aux.ant;//se le asigna el anterior nodo
}

}
}
else{
System.out.println("No se ha diligenciado ninguna encuesta.");
}
}
//Metodo utilizado Para mostrar las preguntas que el estudiante va a responder
en la encuesta
public void diligenciarEncuesta(Boolean p_esEgresado)
{
boolean respuesta=false;
int res=0;
NODOENCUESTAD aux2=lista;//variable auxiliar que recorrer la lista para
mostrar al estudiante las preguntas correspondientes
BufferedReader leer = new BufferedReader(new InputStreamReader(
System.in));
System.out.println("|-------------------------------------------|" );
System.out.println("|Escuela Colombiana De Carreras Industriales|" );
System.out.println("|Encuesta para Estudiantes de Ing.Sistemas |" );
System.out.println("|-------------------------------------------|" );
try{
while(aux2!=null)
{
System.out.println("|--------------------------------------------" );
System.out.println("|"+aux2.encuesta+" (1.si/2.No) " );//muestra la pregunta
con las opciones de respuesta SI/NO
res=Integer.parseInt(leer.readLine());
if(res==1)
{
respuesta=true;
}else
{ respuesta=false;}
llenarEncuesta(aux2.codigo, p_esEgresado, respuesta);//Se agregan las
respuesta del estudiante para la pregunta que este actualmente visible al estudiante
aux2=aux2.punt;//sigue con la siguiente pregunta
}

}
catch(IOException e)
{ }
}
//Metodo encargado de mostrar las preguntas que tiene la encuesta
public void mostrarListaEncuestas(Boolean p_primero)
{
if(contarRegistros()==0){
System.out.println("no hay encuestas creadas ");
}else{

if(p_primero)//condicin que evala si se van a mostrar a partir del primer
registro de la lista o el ultimo
{aux=lista;}//se ubica en la cabeza de la lista
else
{ubicarseEncola();}//se ubica en el ultimo registro de la lista

System.out.println("Cod.Encuesta - Pregunta ");
while(aux!=null){
System.out.println(" " + aux.codigo+" "+aux.encuesta);
if(p_primero)//condicin que evala si se van a mostrar a partir del primer
registro de la lista o el ultimo
{aux=aux.punt;}//se le asigna el siguiente nodo
else
{aux=aux.ant;}//se le asigna el anterior nodo
}
}

}
//Metodo encargado de ubicarse en el ltimo registro de la lista
public void ubicarseEncola()
{
Boolean seguir=true;
if(lista==null){
seguir=false;
}
else{
aux=lista;
}

while(seguir)
{
if(aux.punt!=null)
{
aux=aux.punt;
}
else{
seguir=false;
}
}
}
}
4. Se codifica la clase Principal:

package encuestadoble;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
*
* @author OMAR URAZAN
*/
public class Main {
static ENCUESTA obj = new ENCUESTA();//variable que contiene la lista y los
mtodos a utilizarse para la lista
static Boolean Salir=false;//opcion que permite la continuidad el sistema y as
mostrar el menu las veces que el estudiante lo desee
static int opcion=0;//variable que guardara la opcion que escogi el estudiante en
el menu principal
static String pregunta="";//variable que contiene la pregunta que se va a agregar
en la lista
static String codigo="";//variable que contiene el codigo de la pregunta que se va a
agregar
//Metodo encargado de agregar las preguntas
public static void agregarEncuesta(){
BufferedReader leer = new BufferedReader(new InputStreamReader( System.in));
try{
System.out.println("Digite pregunta para la encuesta:");
pregunta=leer.readLine();
System.out.println("Digite codigo:");
codigo=leer.readLine();
obj.ingresarEncuesta(pregunta,codigo);//mtodo asignado en la clase encuesta
para agregar la pregunta para la encuesta
}
catch(IOException e)
{ }
}
//mtodo utilizado para eliminar las preguntas de la encuesta
public static void eliminarEncuesta(){
BufferedReader leer = new BufferedReader(new InputStreamReader( System.in));
try{
System.out.println("Digite codigo de la pregunta a eliminar");
codigo=leer.readLine();//obtiene el codigo para eliminar la pregunta de la
encuesta
obj.eliminarEncuesta(codigo);//Metodo de la clase Encuesta para eliminar la
pregunta de la encuesta
}
catch(IOException e)
{ }
}
public static void diligenciarEncuesta(){
int carrera =0;//variable que obtendr el dato que indique que si el estudiantes
es de la carrera de sistemas
int egresado=0;//variable que obtendr el dato que indique que si el
estudiantes es activo o egresado
Boolean esEgresado=false;
if(obj.contarRegistros()==0)
{
System.out.println("No tiene encuestas para diligenciar");
}else
{
BufferedReader leer = new BufferedReader(new InputStreamReader(
System.in));
try{
System.out.println("Es estudiante de Tecnologia o ingieneria de sistemas
(1.si/2.no).");
carrera = Integer.parseInt( leer.readLine());
if(carrera==1){
obj.cantidadEncuestados+=1;
System.out.println("Es estudiante egresado (1.si/2.no).");
egresado = Integer.parseInt( leer.readLine());
if(egresado==1)
{esEgresado=true;
obj.cantidadEgresados+=1;
}else
{
obj.cantidadEstudiantes+=1;
}
obj.diligenciarEncuesta( esEgresado);//Metodo encargado de visualizar las
preguntas de la encuentra y sus respuestas seleccionadas
}
else{
System.out.println("La encuesta es para estudiantes de Tecnologia o
ingieneria de sistemas.");
}

}
catch(IOException e)
{ }

}


}
//metodo que muestra los resultados de las encuestas estadisticamente
public static void mostrarResultadoEncuesta(Boolean p_primero,Boolean
p_activo)
{
obj.mostrarResultadosencuesta(p_primero,p_activo);
}
//muestra el listado de las preguntasque tiene la encuesta
public static void mostrarlistapreguntas(Boolean p_primero)
{
obj.mostrarListaEncuestas(p_primero);
}
//Metodo que muestra la presentacion del menu para el usuario
public static void menu(){
BufferedReader leer = new BufferedReader(new InputStreamReader(
System.in));
try{
while(!Salir)
{ System.out.println("
***********************************************************************
**");
System.out.println(" **************************Menu
principal*********************************");
System.out.println("
***********************************************************************
**");
System.out.println(" * 1.Ingresa Encuesta *");
System.out.println(" * 2.Eliminar Encuesta *");
System.out.println(" * 3.Ver preguntas Encuesta(primero-ultimo)
*");
System.out.println(" * 4.Ver preguntas Encuesta(ultimo-primero)
*");
System.out.println(" * 5.Diligenciar encuesta *");
System.out.println(" * 6.Mostrar Resultados de encuesta(solamente de
estudiantes activos) *");
System.out.println(" * 7.Mostrar Resultados de encuesta(solamente de
estudiantes egresados)*");
System.out.println(" * 6.Salir *");
System.out.println("
***********************************************************************
**");
System.out.println(" Digite una opcion:");
opcion=Integer.parseInt(leer.readLine());
switch(opcion)
{
case 1:
agregarEncuesta();
break;
case 2:
eliminarEncuesta();
break;
case 3:
mostrarlistapreguntas(true);
break;
case 4:
mostrarlistapreguntas(false);
break;
case 5:
diligenciarEncuesta();
break;
case 6:
mostrarResultadoEncuesta(false,true);
break;
case 7:
mostrarResultadoEncuesta(true,false);
break;
case 8:
Salir=true;
break;
default:
System.out.println("Opcion no valida");
break;


}
}
}
catch(IOException e)
{}
}
public static void main(String[] args) {
menu();//se inicializa el programa llamando al menu
}

}
Vista del programa:
Menu Principal



Opcion1

Opcion2


Opcion3


Opcion4



Opcion5

Opcion6

Opcion7







Prueba De Escritorio

Abreviaturas
NA= No Aplica
INGRESARENCUESTA

Dato Pregunta1 Pregunta2 Pregunta3 Pregunta4 Pregunta5 Pregunta6
Lista==null Si No No No No No
contarRegistros<6 NA Si Si Si Si No
Nuevo Pregunta1 Pregunta2 Pregunta3 Pregunta4 Pregunta5 NA
Nuevo.ant Null Aux Aux Aux Aux NA
Nuevo.sig Null Null Null Null Null NA
Lista Nuevo NA NA NA NA NA
Aux.sig Null Nuevo Nuevo Nuevo Nuevo NA
Aux Lista Nuevo Nuevo Nuevo Nuevo NA



ELIMINARENCUESTA

Eliminar cabeza

Dato a eliminar (DE)=pregunta1

Dato Pregunta1 Pregunta2 Pregunta3 Pregunta4 Pregunta5
contarRegistros>0 Si Si Si Si Si
Aux.codigo==(DE) Si no no no no
Registro=0 Si NA NA NA NA
Aux2 Aux.sig(Pregunta2) NA NA NA NA
Aux2.sig NA NA NA NA NA
Aux2.ant Null NA NA NA NA
Lista Aux2 NA NA NA NA
Aux.sig NA NA NA NA NA
Aux.ant NA NA NA NA NA
Aux Aux2 NA NA NA NA
Registro++ 1

Eliminar medio
Dato a eliminar=pregunta1
Dato Pregunta1 Pregunta2 Pregunta3 Pregunta4 Pregunta5
contarRegistros>0 Si Si Si Si Si
Aux.codigo==(DE) no no si no no
Registro=0 NA NA No NA NA
Aux2 NA NA Aux NA NA
Aux2.sig NA NA Aux.punt(pregunta4) NA NA
Aux2.ant NA NA Aux2 NA NA
Lista NA NA NA NA NA
Aux.sig NA NA NA NA NA
Aux.ant NA NA NA NA NA
Aux NA NA Aux2 NA NA
Registro++ 1 2 3 4 5

Eliminar ultimo
Dato a eliminar=pregunta5

Dato Pregunta1 Pregunta2 Pregunta3 Pregunta4 Pregunta5
contarRegistros>0 Si Si Si Si Si
Aux.codigo==(DE) No no no no si
Registro=0 NA NA NA NA No
Aux2 NA NA NA NA Aux
Aux2.sig NA NA NA NA null
Aux2.ant NA NA NA NA Pregunta3
Lista NA NA NA NA NA
Aux.sig NA NA NA NA NA
Aux.ant NA NA NA NA NA
Aux NA NA NA NA Aux2
Registro++ 1 2 3 4 5


Bibliografa
Dorzdek Adam, 2007, Estructura de Datos y algoritmos en java 2 edicin, Thomson, Mxico

You might also like