Consejos-Desarrollo de un proyecto

Hola a toda la comunidad Java México soy José Manuel y en esta ocasión les pido ayuda para un proyecto que estoy apunto de realizar por parte de la escuela pero, no crean que estoy aqui para pedirles me lo hagan, les agradecería y me dieran algunos consejos de por donde "atacar" el problema y cual seria la mejor forma de hacerlo y con esto me refiero a que procedimientos realizar para sacarle provecho al máximo de lo que apenas conozco sobre java. Bueno la "movida" esta así:
Debo elaborar un programa para una "empresa" de polizas de seguros para automoviles en el que debo calcular las primas de los asegurados y para formalizar un seguro la empresa necesita los datos comunes de los clientes(nombre, edad, modelo de auto, conductor habitual, etc). Además de que debo crear un menu donde me muestre las diferentes opciones de la empresa, seria algo como esto:

Seguros de Automóviles
1.-Nuevo cliente
2.-Ver estado de un cliente
3.-Ver estado de la empresa
4.-Salir

Este pequeño menú debe estar en modo gráfico y la segunda y tercera opción deben de mandarme una impresión de los estados de el cliente y la empresa respectivamente, por supuesto la primera opción es la de agregar un cliente nuevo y debe de mandarme otro menú donde se muestren las diferentes pólizas que maneje la empresa para poder asignarle un tipo de seguro al nuevo cliente.
Mi idea principal era manejar el modo gráfico con la librería de   usando los pequeños dialogos de entrada/salida y el ir agregando clientes con arreglos(aunque estos no los maneje muy bien que digamos) pero aun tengo la duda de si es que puedo ir relacionando el arreglo y el cliente con todo y sus datos y el tipo de seguro que tiene y eso no me tiene muy tranquilo. Bueno señores les agradecería sus consejos y ayuda que puedan darme, adiós y saludos desde México.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de fcodiaz

analiza tu problema antes q nada

esto no te pidieron que lo guardaras en una DB... en lugar de arreglos ve los ArrayList, es una clase que implementa Listas enlazadas, es mucho mas eficiente que manejar arreglos, ya que con esta Clase puedes almacenar los objetos que quieras n, sin tener que conocer tu limite, cosa que pasa con los array ya que tienes que definir el tamaño antes de poder usarlo. en cuanto al proyecto como se crea el calculo de las polizas? ¿en que pantalla?,

primero analiza que objetos necesitas crear, que items juegan en tu aplicación para que incies a ver que Clases necesita para la parte grafica es una buena idea que en una libreta dibujes tus pantallas, y veas hagas un ejercicio de como se iría manejando la información atra vez de las pantallas, que sean puros JOPtionPanel input dialog se me hace medio chafa :P.. mejor crea un form ya luego te asesoramos como mandarlos llamar al frente de tu aplicación

Imagen de Jose Manuel

Entiendo

Hola fcodiaz gracias por responder, con respecto a lo que mencionas no me pidieron que fuera en una Base de datos y eso que yo insistí en que si se necesitaba, te diré que jamas he usado los ArrayList sin embargo aprendo rápido y con lo de las pólizas olvide mencionar que los precios son fijadas por la empresa, y no creerás pero ya hice algo parecido a lo que me comentas, lo he plasmado en unas hojas y luego he tratado de hacerlo en el código sin embargo mi nivel actual me da la espalda y no logro avanzar y eh aquí cuando maldigo a mi querido profesor de programación. Te menciono que tampoco se como usar los form lamentablemente de nuevo mi nivel rechaza esas opciones pero, de nuevo te digo que aprendo rapido asi es que en estos momentos me pongo a buscar como realizar y usar esas opciones. Y lo se los InputDialog se ven bien "changas" pero no me se otra forma.
Con lo de los "items" hasta estos momentos sigo tratando de hacer el programa y veo y veo diferentes códigos de cosas similares pero me estanco en varias cosas, pero mi idea era crear varios métodos que realizaran las distintas funciones necesarias y así fuera mejor digerir el problema pero no he podido lograrlo.
Por ahora buscare como hacer lo que me dijiste y te aviso luego, de nuevo gracias por responder y te espero aquí. Saludos.

Vaya, al menos parece que

Vaya, al menos parece que alguien tiene interés en aprender. Espero que no suceda como con las últimas dos personas que no dijeron ni pío.

En fin, soy optimista ( o necio ) y aquí te va mi ayuda.

Lee primero esto ( te toma 15 minutos )

Básicamente es seguir estos pasos para aterrizar tus ideas en código.

1.- Entiende el problema
2.- Identifica variables y reglas
3.- Haz el algoritmo
4.- Codifica

Para un proyecto del tamaño que mencionas es un tanto difícil hacerlo todo de un jalón, así que lo mejor sería en trozos que puedas manejar y aplicar estos 4 pasos varias veces.

La forma en la que te ofrezco ayudarte es guiándote sobre lo que tienes que hacer y si al siguiente día posteas tu código ( o al menos explicas lo que ya tienes ) podemos seguir.

Paso 1
Ok empecemos por el problema: Debo elaborar un programa para una "empresa" de ....

Primero entiende lo que tienes que hacer, visualizalo y/o piensa en términos funcionales ( o sea no en código, ni en Java ni nada, sino así nomás platicadito ) qué es lo que tiene que hacer, como como te lo imaginas.

Cuando sepas exactamente que es lo que se necesita ve a la segunda parte. Puede ser que no puedas visualizar todo en tu mente de un jalón. El enfoque del paso 1 es que entiendas que es lo que se necesita.

Paso 2

De la descripción del problema identifica variables y reglas, también sirve pensar en "sujetos" y "verbos"

A ver el párrafo dice:

Debo elaborar un programa para una "empresa" de polizas de seguros para automoviles en el que debo calcular las primas de los asegurados y para formalizar un seguro la empresa necesita los datos comunes de los clientes(nombre, edad, modelo de auto, conductor habitual, etc)

Podemos sacar como variables:
- empresa
- seguros
- primas
- asegurados ( o clientes )

Y ya! Esos parecen ser las variables de este problema ( también se les llama actores )

Las reglas o funciones o "cosas" que tiene que hacer tu programa con esas variables son:

- Capturar datos del cliente
- Capturar datos de la empresa
- Calcular la prima
- Mostrar información de los clientes
- Mostrar información de la empresa

Nota No dice aquí como calcular la prima, o que es una prima, o cuales son las reglas. Supongo que las podrás preguntar a tu maestro. Recuerda en este momento estamos sacando variables y reglas, hay que tener toda esta información antes de pasar al siguiente.

Si no está toda la información puedes seguir con el paso 3 con lo que tienes, pero haz una nota Preguntar reglas para calcular prima etc. Y en la siguiente fase puedes incluirlo.

Paso 3

Para hacer el algoritmo tienes que escribir los pasos que necesitas para realizar alguna de tus funciones.

Como tienes muchas te voy a ayudar con la primera: Capturar datos del cliente

Aquí el enfoque no es si es perfecto o si compila ni nada, el enfoque es poder escribir qué pasos tienes que ejecutar terminar la tarea.

Tomando en cuenta la descripción que pusiste voy a modelar la clase   lo voy a hacer así:

 

Este es mi pseudo-codigo para la clase cliente. Estuvo muy fácil no? Básicamente puse todos los atributos que le pertenecen sacados de la descripción del problema.

Luego voy a capturar la pantalla, los pasos a seguir son:
 

Son muchos pasos, refinando mi pseudo-codigo y poniéndolo en algo como un lenguaje de programación tengo:

 

En fin, se ve algo "jalado" por que lo puse en ingles, pero la idea es listar todo lo que tengo que hacer para que mi programa funcione.

Obviamente quedan huecos, que se van a llenar con Java, pero teniendo esto, ya sabemos exactamente que es lo que hay que programar.

El siguiente paso y ultimo antes de irme a dormir, es

Paso 4

Hacer el código.

Voy a poner lo mismo que puse en el pseudo-codigo en Java, no me voy a meter ahora mismo con cuestiones de captura de datos por que toma mucho tiempo, pero voy a delinear y dejar algo que funcione, el objetivo es que pueda tener algo "tangible" con que experimentar y después irlo puliendo.

 
//Listo, salvo por el metodo ese "toString()" es casi identico a mi pseudo-codigo.
// Ahora a capturar los datos.
//
// 

Listo versión 0.00.01 terminada.

Estoy seguro que en este momento estarás pensando Pero si todo eso ya lo sabía!!! Pues sí, pero como no pude leer tu mente, lo escribí de todas formas. Si ya lo sabias, entonces ya estarás listo para el siguiente paso, si no lo sabias, pues ahora tienes un punto de partida.

Lo siguiente que hay que hacer es repetir esto para todas las demás entidades.

Resumen

- De la descripción del problema ( paso 1 ) sacamos lo que nos interesa como variables/actores/reglas en este caso el  .
- Luego en el paso 2 y 3 definimos como íbamos a cumplir una parte de esa funcion ( capturar los datos del usuario )
- En el paso 4 transformamos eso en código que compila.

¿Está muy simple? Si, así tiene que ser.
¿Que no se ve como una aplicación super pulida? Pues no... no se puede hacer todo eso en 25 minutos.

Lo importante aquí es tener algo con que empezar, que es lo que pediste.

Siguientes pasos

Hacer lo mismo para el resto de las entidades!!!!!

Hay que repetir estos pasos hasta obtener un programa base que tenga todas las pantallas, toda la información y todo lo que el programa comprende. Esta versión puede entonces ser modificada para que quede bien.

Si vuelves con todo el código de todas las demás entidades, podemos seguir con el siguiente paso, que es mejorar todos esos métodos vacíos y ponerle algo más sustancial para que funcione correctamente.

Si no te vuelvo a ver, al menos habré tenido un buen ejercicio de taquigrafía.

Nota final

El código que escribí no sigue ni las mejores prácticas, ni tiene todas las recomendaciones para escribir código ni nada( por ejemplo no tiene modificadores de acceso   etc.. Es simplemente traducción de mi pseudo-código a Java.

La idea no es hacer código perfecto al principio, sino tener algo que pulir.

Lo siguiente es añadir modificadores de acceso, usar bien los formularios, crear relaciones entre las entidades, limpiar el código etc. etc. etc.

Aquí está un screenshot del código que postee para que se vea que sí corre :)

Importante!
Mucho del código para escribir la interfaz gráfica es muy específico y no hay de otra más que conocer la biblioteca ( Swing ) Hay que leer forzosamente esto:

Imagen de Jose Manuel

Hola y gracias

Hola, OscarRiz gracias por apoyarme, te quiero decir que ya he leido algo sobre la libreria que mencionas pero, aun asi tengo varias dudas sobre la manera de hacer el programa, por ejemplo: quieres darme a entender que debo de crear una clase para cada funcion del programa y creo que asi es puesto que ya has creado la clase clientes, ahora yo debo de hacer la mia y elaborar las siguientes funciones(clases) que son:
-Capturar datos de la empresa
-Calcular la prima
-Mostrar informacion de los clientes
-Mostrar informacion de la empresa
Todo esto supongo y debe de ir en el mismo archivo, el problema que tengo es que no se como hacerlo y es que aunque me hayas dado el ejemplo, no se como capturar los datos de los clientes y la empresa y guardarlos, no usando los forms, y ese es mi gran dilema en estos momentos y es que yo por ahora soy muy inexperto, creo que debí haber mencionado las cosas que se manejar para que asi con eso pudieran ayudarme de mejor manera, bueno pese a eso te menciono que quedo atascado en el principio del código:
 
Y bueno OscarRiz ese es mi problema lamento no haber podido usar adecuadamente tus consejos pero no tengo el nivel necesario aun, nuevamente gracias y si estas dispuesto a seguir ayudando a este su amigo el novatillo aqui andaré.
Por cierto parece ser que usas GNU/Linux, jeje que bueno. Saludos.

Para mí vas,

Para mí vas, bien.

[...]quieres darme a entender que debo de crear una clase para cada funcion del programa[..]
-Capturar datos de la empresa
-Calcular la prima
-Mostrar informacion de los clientes
-Mostrar informacion de la empresa

Exaaaacto, esa es una manera, a mi entender es la más fácil y sencilla.

...Todo esto supongo y debe de ir en el mismo archivo

Como sea más fácil, si lo quieres hacer en un solo archivo es válido, si quieres hacer muchos también. Solito te vas a ir dando cuenta cuando es mejor uno que otro ( y no quiero escribir acá un montón de cosas sobre las diferencias , asi que cualquiera sirve).

...el problema que tengo es que no se como hacerlo y es que aunque me hayas dado el ejemplo, no se como capturar los datos de los clientes y la empresa y guardarlos, no usando los forms, y ese es mi gran dilema

Y ese ha sido un problema por el que hemos pasado todos ( bueno algunos nacieron sabiendo programar, pero la mayoría de nosotros no )

Para resolver este problema te recomiendo que separes los dominios. Es decir, tienes varias cosas que hacer.

- Tener una estructura logica de como va a fluir la aplicación ( algo que en papel y lapiz funcione )
- Saber como guardar los datos internamente y que esa estructura lógica funcione en código
- Saber como presentar estos datos y esa lógica con pantallas y formularios.

Cuando empiezas no es posible hacer las tres cosas al mismo tiempo. Así que debes de ir haciéndolas una por una. Si intentas hacer las tres a la vez, te va a pasar justo lo que te está pasando ahora, que no sabes como seguir. Si no sabes como hacer una pantalla esto te impide hacer la logica que hay detrás de la pantalla y esto te impide pensar en el flujo.

Entonces de nuevo.

- Primero saca en papel y lápiz como va a ir tu flujo ( por lo que veo en tu código vas bien, tienes noción )

- Luego haz que funcione sin pantallas

- Finalmente ponle pantallas, campanitas y silbatos.

Entonces siguiente paso.

Haz lo mismo para todas las entidades y funciones SIN PREOCUPARTE DE LA INTERFAZ GRAFICA

Puedes como yo hice, dejar los datos hardcodeados mientras tienes como capturarlos, también fijate que puse metodos que me regresan cosas:

como en:  

Ese metodo después puede ser reemplazado por algo más complejo.

Imaginate que vas a construir una casa ( bueno es una analogía que odio, pero servirá ) , primero tienes que tener los planos ( algoritmo, lapiz, papel, dibujos etc. ) luego hacer la estructura ( en nuestro caso, donde van a estar los datos ) y luego construirle la fachada ( GUI )

Acerca de tu código, se ve bien, te pongo acá algunas mejoras. Revisa las diferencias ( no cambie nada de funcionalidad )

 

Finalmente y para desatorarte, simula que ya hiciste la pantalla y que ya te regresa los datos:
 

Y haces el código mínimo necesario para que compile:

 

Con esto tu primera parte ya funciona ( aunque no haya pantalla del cliente )

Lo siguiente que te debe de preocupar es,

- como vas a meter más datos?
- Que va a pasar con ese arreglo?
- Por que los arreglos no crecen? etc.
- Que otra estructura de datos puedo usar en vez de arreglos ( tip: ListlistaCliente = new ArrayList();

EN fin muchas cosas.

Entonces, haz el código para el resto de tus funciones haz algo similar, lo revisamos y lo ensamblamos. Mientras le pregunto a google cual es la forma más sencilla de hacer una pantalla de captura. ( Estás usando algun IDE? Netbeans, Eclipse, Idea u otro? )

Ehh tambien uso OSX:

Por cierto preguntandole a

Por cierto preguntandole a Google salio esto:

Dice como hacer pantallas para captura de datos usando Netbeans, está un poco largo, pero supongo que es la forma más directa.

Imagen de Jose Manuel

Hola de nuevo, OscarRyz,

Hola de nuevo, OscarRyz, gracias por seguir apoyándome, haré lo que me aconsejas, los datos se los daré por mi propia cuenta por ahora, dejare aun lado por el momento a la interfaz gráfica y me concentrare en hacer el programa funcional y por lo menos el ir agregando mas clientes y el ver su estado.

Acerca del código, gracias con eso puedo seguir armando el programa, y sobre los cambios del mismo que sepas que no tengo muy bien practicado acerca de la legibilidad
del código para hacer de el mas fácil de depurar, mantener, reparar y terminan siendo un enredadero pero te prometo que la próxima vez seré mas aseado con el código.
Y sobre lo de los ArrayList, como le había prometido al compañero fcodiaz he estado haciendo unos programas de prueba para controlarlos y entenderlos.
El IDE que uso es NetBeans 6.7.1
Ya me emocione, estoy aprendiendo mas cosas de las que pensaba y aprendería, por cierto tengo 18 años jeje . Los espero aqui, saludos.

List y ArrayList

La legibilidad es buena, de hecho no tomes mis cambios como crítica, o que yo pensara que estaba mal. Es más bien mi forma de ayudarte.

Sobre los arraylist acá te va algo sencillo.

En Java los arreglos son de longitud fija. Es decir, una vez que los creaste no puedes cambiar su tamaño.

 

Entonces para almacenar datos cuyo número está indeterminado ( del 1 al N ) un array da mucha lata, por que para hacerlo crecer hay que copiar los datos que tiene:

 

Muy engorroso hacer crecer un arreglo no?

Para facilitar esto Java tiene una estructura de datos llamada   y entre sus implementaciones está   ( que es una lista que usa un arreglo )

En fin, los detalles de ¿ qué es un List y un ArrayList? por ahora nos lo saltamos. Simplemente el ejemplo va a ser como usarlos para no usar arrays:

 

Y eso es todo, así puedes sustituir los arrays por listas.

Acerca de la declaración.

List es una interfaz y ArrayList una clase ( no importa ahora cual es la diferencia ) El caso es que no son estructuras de datos "preconstruidas" ( built-in ) en el lenguaje, como los arreglos.

Para usarlos tienes que importarlos ( como viene en el ejemplo ) y para usarlos tienes que decirle que tipo de dato vas a "almacenar"

Entonces si para un int el arreglo es:   para una list es:   Es decir el tipo de dato va entre  .

Si vas a usar   tu declaración sería:

 

Esto en Java se llama "generics" y ahora mismo no vienen al caso.

Como ves, usar una lista en vez de un arreglo tiene de ventaja que no tienes que hacerlos crecer manualmente, si necesitan más espacio, solitos crecen.

Espero que esto te ayude y nos vemos mañana para seguir con tu programa.

Imagen de Jose Manuel

Hola gente, sabes OscarRyz

Hola gente, sabes OscarRyz no he podido usar los ArrayList por que por la ventaja que me diste no es muy importante ahora(al menos eso creo), por otra parte no había podido empezar a darle al código por que me han traído como el "chico de los mandados", pero ya estoy puesto y listo y hoy mismo realice un pequeño avance, mira les muestro el código:
 
Bueno se que el avance no es mucho pero al menos ya se como ir guardando los datos del cliente, el problema ahora es que en la búsqueda no me muestra la pantalla con el nombre del cliente y no hay errores de compilación y la verdad no se donde estoy regándola, por que en ves de mostrar la pantalla me regresa al menú principal.
Les pido por favor me echen la mano con esto y es que el problema de nuevo es mi falta de experiencia y la falta de conocimiento. Otra cosa que no se como hacer que funcione es el ciclo for para el ingreso de nuevos clientes y es que la variable "e" no aumenta. Por lo mientras seguiré googleando para ver si encuentro algo que me ayude con esto. Saludos.

Antes que nada dejame reconocerte el esfuerzo.

Creo que cualquier cosa que yo te hubiera podido decir te habría confundido más, ahora veo que vas encontrando tu propio camino y eso es muchisisimo más valioso a que alguién te dé el programa hecho.

Por desgracia el tiempo para que yo te pueda ayudar es limitado.

Si tienes un inglés suficiente, puedes pedir ayuda en donde hay un montón de programadores dispuestos a ayudarte si logras formular una pregunta lo suficientemente "entendible" Pero, solo es en inglés ( en incluso te ayudan en preguntas muy básicas , por ejemplo este usuario Se la ha pasado haciendo preguntas muchisimo más ... mensas de lo que generalmente se soporta en un foro de estos y aun así le siguen respondiendo :)

Si no se puede, tendremos que ir avanzando a este paso, un tanto lento.

Weno. Después de la felicitación al código!.

Ya necesitarás el ArrayList, pero como dices ahora mismo no hace falta.

Vamos a tus preguntas concretas ( que son muchísimo más fácil de responder )

1.- Para que se muestre el nombre del cliente la búsqueda que estás haciendo es:

 

La cual hace sentido.

Peeero, resulta que lo que estás metiendo ahí es el nombre del cliente, y lo quieres encontrar por número, entonces estás metiendo peras y quieres sacar manzanas.

La solución es, usar ese número como indice para encontrar el cliente así:

 

Es decir, quitando el   y accediendo directamente por el número que nos dicen.

Ya que estamos ahí querras mostrar el resto de los datos.

 

Y finalmente hacer algunas validaciones ( por ejemplo si el índice está fuera de rango o si no hay datos ahi) :

 

2.- La variable e si aumenta, pero estás rompiendo el ciclo con la instrucción   ( cerca de la line 35 )

 

Hay que poner el break afuera

 

Sin embargo si se lo quitas te va pedir que llenes 10 cliente.. si eso es lo que quieres, basta que muevas el "break"

Y eso es todo.

Vas muy bien!!

oops era José Manuel en vez

oops era José Manuel en vez de Juan Manuel. Sorry

Imagen de Jose Manuel

Ya no se como agradecértelo

Hola OscarRyz, amigo, gracias por tanto apoyo brindado la verdad ya no se ni como darte las gracias. Ahora con la forma que me has dado para ir mostrando el cliente supongo y puedo ir haciendo lo demás del código, te comento que el ciclo for para ir agregando los clientes no lo pensaba hacer tal como esta, mi idea era que se almacenara un solo cliente y luego me regresara al menú principal por eso había usado el "break" en esa parte pero no resulto, aun así ya veré como lo resuelvo. Mientras me pongo a desarrollar las demás opciones del menú. Cuando estén listas te las mostrare =)
Por lo del tiempo no te preocupes con lo que haces ya es mas que suficiente. Saludos.

No'mbre no hay nada que

No'mbre no hay nada que agradecer.

Pues siguele y a ver si este fin de semana se me ocurre algo muy fácil para sustituir esos JOptionPane con algo más bonito.

Sigue adelante y si tienes más preguntas, ya sabes, postea tu código y te ayudo.

Por cierto si quieres capturar solamente un Cliente lo que tienes que hacer es buscar el siguiente espacio libre:

 

Después de este codigo la variable i es el indice donde hay un espacio para meter otro cliente.

Chau!