[ Foro de Java ]

Necesito ayuda o guianza con este trabajo, estoy perdido... porfavor

12-Nov-2019 04:34
Lorenzo Dallan
0 Respuestas

Hola buenas, soy nuevo en este foro y creo que lo utilizare para pedir ayuda o consejos con algunos projectos ya que soy algo malo con la programacion y enserio quisera aprender a hacer los programas que me dice el profe.
Tengo un projecto sobre listas doblemente enlazadas, usando nodos y listas creo. El profesor solo nos explico lo de meter a inicio, final, mostrar todo, eliminar tal dato, metodos de ordenamiento, no repetir nombres o datos registrados, y cosas asi diria que basicas pero que no dan para resolver lo que necesito hacer creo. Mi opinion es que el quiere que lo hagamos como podamos investigando y a prueba y error.

El projecto es el siguiente:
[quote]Diseñar una aplicación en Java que permita registrar la información de los pacientes de la “Clínica Municipal de Especialistas”, que solicitan cita médica para ser atendidos. En la clínica solo se atienden por tres tipos de especialidades: Cardiólogo, Otorrino y Gastroenterólogo.

Inicialmente los pacientes llegan a la clínica para reservar la consulta en alguna de las tres especialidades; por políticas de la clínica se atienden un máximo de 5 consultas diarias por especialidad. Se debe registra en una lista doblemente enlazada de servicios la identificación del paciente que será atendido, tipo identificación, nombres, junto con la información de fecha, hora atención, nombre del médico y el tipo de especialista que lo atenderá (Tenga en cuenta que un médico no podrá atender dos citas con la misma fecha y hora).

Se requiere que la aplicación cuente con un menú de opciones para realizar las siguientes opciones:

? Registrar en la lista de servicios la información de cada paciente que será atendido, esto con el objetivo de que el recepcionista tenga un listado en el orden que pasaran los pacientes a la cita. Se recomienda que se manejen los turnos de atención por cada tipo de especialidad.

? Después que un paciente sea atendido por el especialista, se debe retirar la información del paciente de la lista de servicios para que el recepcionista pueda pasar al siguiente paciente registrado.

? Utilizar una lista de datos auxiliar (lista enlazada sencilla), para mantener un registro histórico de todas las citas realizadas.

? Visualizar el orden de atención, para cada una de las especialidades.

? Generar un informe con el número de citas diarias, realizadas para cada especialidad, e indicar de que especialidad se realizaron más citas médicas.

[/quote]

Hasta el momento este fue el codigo que nos proporciono el profesor sobre listas doblemente enlazadas(hay mas codigos como simples, listas normales, vectores y con metodos adentro pero prefiero no poner todo eso porque es como diferente).

[b]Metodo nodo[/b]
[code]public class nodo {
   int idMedio;
   String nomMedio;
   float valor;
   nodo sig, ant;

   public nodo(int idMedio, String nomMedio, float valor) {
       this.idMedio = idMedio;
       this.nomMedio = nomMedio;
       this.valor = valor;
       sig=ant=null;
   }  
   
}[/code]

[b]Metodo lista[/b]
[code]import java.text.DecimalFormat;
import javax.swing.JOptionPane;

public class lista {
   nodo cab;
   
   lista(){
       cab=null;
   }
   
   nodo getBuscar(int id){
       if(cab==null)
           return null;
       else{
           nodo q=cab;
           while(q!=null){
               if(q.idMedio == id)
                   return q;
               else
                   q=q.sig;
           }
           return null;
       }
   }
   
   nodo getCrearNodo(){
       int id;
       nodo b=null;
       do{
           id=Integer.parseInt(JOptionPane.showInputDialog
           ("Entre id del medio: "));
           b=getBuscar(id);
           if(b!=null)
               JOptionPane.showMessageDialog(null,
               "IdMedio ya registrado, intente nuevamente!");
       }while(b!=null);
       String nomM=JOptionPane.showInputDialog("Entre nombre:");
       float costo=Float.parseFloat(JOptionPane.showInputDialog(
       "Entre valor del medio: "));
       nodo q = new nodo(id, nomM, costo);
       return q;
   }
   
   void setAddInicio(){
       nodo info=getCrearNodo();
       if(cab==null){
           cab=info;
           JOptionPane.showMessageDialog(null,
           "Elemento agregado, la lista estaba vacía!");
       }else{
           info.sig = cab;
           cab.ant = info;
           cab = info;
           JOptionPane.showMessageDialog(null, "Agregado al inicio!");
       }
   }
   
   void setAddFin(){
       nodo info=getCrearNodo();
       if(cab==null){
           cab=info;
           JOptionPane.showMessageDialog(null,
           "Elemento agregado, la lista estaba vacía!");
       }else{
           nodo q=cab;
           while(q.sig!=null)
               q=q.sig;
           q.sig=info;
           info.ant=q;
           JOptionPane.showMessageDialog(null, "Agregado al final!");
       }
   }
   
   void setEliminarN(int id){
       if(cab==null)
           JOptionPane.showMessageDialog(null,
           "Lista vacía!, imposible eliminar!");
       else{
           nodo b=getBuscar(id);
           if(b==null)
               JOptionPane.showMessageDialog(null,
               "El idMedio a eliminar no esta registrado!");
           else{
               if((b==cab)&&(cab.sig==null)){
                   cab=null;
                   JOptionPane.showMessageDialog(null,
                   "Eliminado, la lista esta vacía.");
               }
               else if((b==cab)&&(cab.sig!=null)){
                   cab=cab.sig;
                   cab.ant=null;
                   b.sig=null;
                   b=null;
                   JOptionPane.showMessageDialog(null,
                   "Eliminado al inicio!");
               }
               else if(b.sig==null){
                   b.ant.sig=null;
                   b.ant=null;
                   b=null;
                   JOptionPane.showMessageDialog(null,
                   "Eliminado al final de lista.");
               }else{
                   b.ant.sig=b.sig;
                   b.sig.ant=b.ant;
                   b.sig = b.ant = null;
                   b=null;
                   JOptionPane.showMessageDialog(null,
                   "Eliminado en medio de dos nodos.");
               }
           }
       }
   }
   
   String getMostrar(int id){
       String aux="";
       DecimalFormat df = new DecimalFormat("0.00");
       nodo info=getBuscar(id);
       if(info==null)
           aux="La información no existe o lista vacía.";
       else{
           aux="La información del nodo es: \n";
           aux+="IdMedio: "+info.idMedio+"\n";
           aux+="Nombre medio: "+info.nomMedio+"\n";
           aux+="Costo medio: "+df.format(info.valor)+"\n";            
       }
       return aux;
   }
   
   void getMostrarT(){
       if(cab==null)
           JOptionPane.showMessageDialog(null, "Lista vacía!");
       else{
           nodo q=cab;
           String info="";
           while(q!=null){
               info=getMostrar(q.idMedio);
               JOptionPane.showMessageDialog(null, info);
               q=q.sig;
           }
       }
   }
   
   /*Método setAddNext: este método agrega un nuevo nodo después de un
   idMedio dado, si el idMedio no existe no se agrega, puede agregar al final
   o en medio de dos nodos.
   */
   void setAddNext(int id){
       if(cab == null)
           JOptionPane.showMessageDialog(null, "Lista vacía!");
       else{
           nodo p=getBuscar(id);
           nodo info = getCrearNodo();
           //Agregar si solo existe un nodo en la lista.
           if((p==cab)&&(cab.sig==null)){
               p.sig=info;
               info.ant=p;
               JOptionPane.showMessageDialog(null,
               "Nodo agregado después de la cabecera, existen dos elementos!");
           }
           //Agregar si el idMedio esta en la última posición.
           else if(p.sig==null){
               p.sig = info;
               info.ant = p;
               JOptionPane.showMessageDialog(null,
               "Nodo agregado al final de la lista!");
           }
           //Agrega entre dos nodos
           else{
               info.sig = p.sig;
               info.ant = p;
               p.sig.ant = info;
               p.sig = info;
               JOptionPane.showMessageDialog(null,
               "Nodo agregado entre dos nodos!");
           }
       }
   }
   
}[/code]

[b]Metodo probador[/b]
[code]import javax.swing.JOptionPane;

public class probador {
   public static void main(String args[]){
       lista milista=new lista();
       
       int op, id, op2;
       do{
           op=Integer.parseInt(JOptionPane.showInputDialog(
           "Menú Principal \n"+
           "1. Agregar nodo \n"+
           "2. Agregar después \n"+        
           "3. Mostrar lista \n"+
           "4. Eliminar nodo \n"+
           "5. Salir \n"+
           "Entre su opción: ?"
           ));
           switch(op){
               case 1:
                   milista.setAddFin();
               break;
               case 2:
                   id=Integer.parseInt(JOptionPane.showInputDialog(
                   "Entre idMedio donde se agregara en la siguiente posición: "));
                   milista.setAddNext(id);
               break;
               case 3:
                   milista.getMostrarT();
               break;
               case 4:
                   id=Integer.parseInt(JOptionPane.showInputDialog(
                   "Entre idMedio del nodo a eliminar: "));
                   milista.setEliminarN(id);
               break;
               case 5:
                   op2=JOptionPane.showConfirmDialog(null,
                   "Finalizar el programa?");
                   if(op2==0)
                       JOptionPane.showMessageDialog(null, "Adios!!!");
                   else
                       op=6;
               break;
           }
       }while(op!=5);
       System.exit(0);
   }
}
[/code]

Esa es la base que tengo abierta ahora mismo en netbeans y con eso supongo que empezare a ver como hago. El problema es que no se por donde empezar, que metodos debo buscar? Que debo investigar?
Se que primero debo empezar a meter los atributos que pide, voy a empezar con eso. Pero el problema van a hacer los metodos para que el probador funcione como pide el projecto, no se que debo de buscar o investigar para implementarlo en el codigo.

Agradeceria cualquier guianza que me puedan brindar para yo [b]mas o menos entender lo que debo hacer[/b].




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)