2010-10-25 11 views
5

Tengo que crear un sistema de votación para la escuela con java, el sistema se usará para votar por las películas. Tendrá todos los usuarios y películas configurados previamente por alguien.Java Voting System

Es una aplicación de consola y se ejecutará en varias computadoras. Algunas de las preguntas que tengo de este son:

  1. Mi maestro quiere que usemos un archivo de texto para mantener todos los datos será esto un problema? ¿Sería mejor cambiar a una base de datos como MySQL y por qué?

  2. Cuando el usuario escribe su información de inicio de sesión, ¿debe el programa (a) buscar las credenciales de la persona en el archivo de texto y luego volver a crear el objeto para la persona o (b) debe volver a crear todo de los usuarios, simplemente verifique con la lista de arreglos para el usuario y verifique la contraseña?

O para # 2 ¿Habría una mejor manera de hacerlo?

Respuesta

2

Dado que es una tarea/proyecto escolar, debe seguir las instrucciones del maestro & especificaciones (para obtener mejores notas). Si este era su propio proyecto, mi sugerencia sería evitar el archivo de texto como base de datos por completo.

En el escenario del mundo real,

  • Si desea almacenar las contraseñas en una base de datos, sugiero hash de la contraseña con un buen algoritmos hash como SHA-512 (parte de la familia SHA-2). Además, si decidió no convertirlo en una aplicación web, enviaría datos confidenciales a/desde su aplicación/servidor en un protocolo seguro como HTTPS.
+0

gracias por la respuesta, pero el cambio a una base de datos no será un gran problema, mi profesor es muy abierto con esta tarea. – SR4801

+0

Luego, por supuesto, vaya a la opción de base de datos. –

+0

Estoy de acuerdo con la solución de base de datos, sin embargo, ahora nos estamos adentrando en el mundo de las transferencias de red. Porque debe ser una base de datos central a la que todos los clientes se conectan e ingresan datos. – Woot4Moo

0

Sugiero usar XStream que es una manera muy rápida y fácil de conservar sus datos en el disco. XStream simplemente convierte sus POJOs a XML y permite ordenar/desasignar. La ventaja de XStream es que sus datos seguirán siendo legibles para los humanos, lo que puede ser útil cuando esté aprendiendo a programar y realizar la depuración.

Necesita tener grandes cantidades de datos antes de que esto se convierta en un cuello de botella de rendimiento y dado que es tarea, dudo que tenga tanto. No sé cuánta programación conoces, pero agregar una base de datos relacional adecuada agrega MUCHA complejidad a tu sistema. Mi consejo es que hagas un paso a la vez aquí. Un montón de tiempo para las bases de datos :)

+0

gracias por la respuesta, definitivamente usaré XStream – SR4801

+0

Es realmente genial para proyectos pequeños :) – willcodejavaforfood

0
  1. Una base de datos normalmente tendrá funcionalidad incorporada para mantener la integridad de los datos en un escenario multiusuario. Considere en su aplicación lo que sucederá con el archivo de texto si dos usuarios votan exactamente al mismo tiempo desde dos computadoras diferentes. A menos que tenga un único proceso de "servidor" que maneje las actualizaciones de archivos de texto, necesitará coordinar de algún modo entre los dos usuarios para asegurarse de que el archivo de texto nunca se corrompe y que ambos votos sean contados. Se puede hacer (tal vez mediante el uso de un archivo "de bloqueo") e incluso podría valer la pena dada la complejidad adicional que requiere la introducción de una base de datos.

  2. No está muy claro lo que está preguntando, pero si puede "escanear/buscar" el archivo de texto para el usuario (nombre) que le interesa, entonces eso parecería ser más eficiente a primera vista que construyendo cada objeto de usuario solo para verificar si hay una contraseña que coincida.

+0

gracias por la respuesta, especialmente por la # 2 con la que estaba un poco confundido en términos de eficiencia – SR4801

1

Para # 2. Si solo necesita saber acerca de un usuario a la vez, no sería beneficioso cargar todos los usuarios en la memoria. Mi enfoque para algo como esto sería analizar el nombre de usuario, encontrarlo en el archivo y luego verificar si la contraseña analizada coincide con la contraseña registrada para ese usuario. Si lo hace, crea el objeto. Debería comprobar y detectar errores en cada etapa (por ejemplo, nombre de usuario inapropiado proporcionado, usuario inexistente, etc.)

Almacenar y transmitir contraseñas de texto plano siempre es una mala idea. Puede que no sea un requisito para esta tarea, pero considere las contraseñas hashing antes de guardarlas. Luego, en lugar de buscar el texto de contraseña proporcionado, ciérrelo y compárelo con el hash guardado.