Sunteți pe pagina 1din 10

i

Módulo Kardex
Asignatura: Taller de Cómputo Móvil

Docente: Elí Sandoval Martínez

Alumno: Kevin Daniel Antúnez Ortiz


Análisis de Requerimientos.

Clave Requerimiento Descripción


RF01 El sistema deberá permitir al usuario poder
registrar para cada materia la calificacion en un
Registrar Kardex
determinado periodo y curso al que corresponda
(curso normal, curso repite o curso especial).
RF02 El sistema deberá permitir al usuario poder cargar
los datos de las materias que tienen calificacion
Actualizar Kardex en cada uno de sus cursos (curso normal, curso
repite, curso especial) para posteriormente
modificar algun dato.
RF03 El sistema debera permitir al usuario eliminar del
Eliminar Kardex kardex los datos de alguno de sus cursos (curso
normal, curso repite, curso normal).
RF04 El sistema permitirá al usuario poder visualizar a
partir del numero de control del alumno su kardex
Visualizar Kardex
ordenado por los periodos que haya cursado
materias.

Diagrama de Caso de Uso:


Diagrama de Navegación:

Diseño del Software


Estructura de los Datos:

Atributo Tipo Longitud Descripción


ClaveMateria String 7 Este clave permitira identificar la
materia a la que le queramos
asignar la calificacion en los
determinados cursos.

CN, CR, CE String 2 Esta es la clave que permitira


crear una rama en nuestro arbol
de objetos para poder asignarle
un curso normal,repite o especial
a la materia.
Calificacin String 2-3 Este atributo permitira asignar
una calificacion a cualquier curso
ya sea normal, repite o especial.
Ciclo String 5 Este atributo permitira que
guardemos el ciclo en el que el
alumno llevo ese curso.Los
primeros cuatro digitos
corresponderan al año en el que
se llevo el curso y el ultimo digito
si es 1)Ene-Jun 2)Verano
3)Ago-Dic
Evaluacion String 6-13 Este atributo permitira guardar si
se paso el curso en Ordinario,
Regula o ExtraOrdinario.
Fecha String 10 Este atributo permitira guardar la
fecha en el que se hizo registro del
curso.El formato sera dd/mm/yyyy
Grupo String 3 Este atributo guardo el grupo en el
que se llevo el curso.

Ejemplo de la Estructura de los Objetos:


{
"Kardex": {
"ACA0907": {
"CN": {
"calificacion": "NA",
"ciclo": "20191",
"evaluacion": "Ordinario",
"fecha": "08/06/2019",
"grupo": "IS9"
},
"CR": {
"calificacion": "NA",
"ciclo": "20192",
"evaluacion": "Regula",
"fecha": "08/07/2019",
"grupo": "IS1"
},
"CE": {
"calificacion": "80",
"ciclo": "20193",
"evaluacion": "ExtraOrdinario",
"fecha": "10/12/2019",
"grupo": "IS3"
}
}
}
}
Diseño de Interfaces:

Interfaz que permitira que Interfaz que permitira que Interfaz que permitira que el
el usuario a partir del el usuario a partir del usuario pueda modificar los
numero de control cargar numero de control cargar la atributos de cada uno de los
en lai lista las materias que lista con los datos del cursos al igual que eliminar
correspondan al plan de kardex del alumno. esa información.
estudios del alumno,

Implementación

En el metodo CargarLista podemos consultar la base de datos para obtener


todas las materias.

public void cargarLista(){


database.child("materias").addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot:dataSnapshot.getChildren()){
Materia materia= postSnapshot.getValue(Materia.class);
lista_materias.add(materia);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}
En el metodo busarAlumno() lo que hace es con el numero de control que
pongamos en el EditText busquemos en la base de datos el alumno, ya que se
tiene el alumno posteriormente se hace una comparacion entre las materias
que previamente se cargaron con el plan de estudios del alumno.
public void buscarAlumno(){
numeroControl=txtNumeroControl.getText().toString();
//
Toast.makeText(getApplicationContext(),numeroControl,Toast.LENGTH_LONG).show
();

database.child("estudiantes").child(numeroControl).addValueEventListener(new
ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Estudiante estudiante = dataSnapshot.getValue(Estudiante.class);
if(estudiante!=null) {
ArrayList<DetalleKardex> lista_detalle = new ArrayList<>();
for (Materia materia : lista_materias) {
if (materia.getPlan().equals(estudiante.getPlan())) {
lista_detalle.add(new DetalleKardex(materia.getClave(),
materia.getNombre()));
}
}
AdaptadorKardex adaptadorKardex = new
AdaptadorKardex(getApplicationContext(), lista_detalle,numeroControl);

lista_materias_kardex.setAdapter(adaptadorKardex);

}
else{
Toast.makeText(getApplicationContext(),"No existe el numero de
Control",Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}

Registrar Curso:
Para registrar un curso se necesita primero crear un objeto de tipo curso y
despues si es curso normal ocupar la clave CN para que en la base de datos se
genere una rama que guarde los datos y asi mismo con los otros cursos.

agregar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Curso cursoNormal = new
Curso(spinneranio.getSelectedItem().toString(),ciclo.getSelectedItem().toStr
ing(),calificacion.getSelectedItem().toString(),fecha.getText().toString(),g
rupo.getText().toString(),evaluacion.getSelectedItem().toString());

database.child("estudiantes").child(numeroControl).child("Kardex").child(cla
veMateria).child("CN").setValue(cursoNormal)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(getApplicationContext(),"Se guardo la
información del Curso Normal",Toast.LENGTH_LONG).show();
}
});
}
});

Eliminar Curso:
Para eliminar un curso se necesito la clave de la materia y la clave del curso si
es normal se ocupa CN y asi con los demas cursos.

eliminar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

database.child("estudiantes").child(numeroControl).child("Kardex").child(cla
veMateria).child("CN").removeValue().addOnSuccessListener(new
OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(getApplicationContext(),"Se elimino el curso
Normal de la Materia",Toast.LENGTH_LONG).show();
iniciarDatosCursoNormal();
}
});
}
});

Modificar Curso:
Para modificar un curso lo unico que se necesita es primero cargar los datos de
los cursos de la materia y una vez dentro de la interfaz cambiar lo que se
necesite y dar click en guardar.

public void obtenerCursoNormal(){

database.child("estudiantes").child(numeroControl).child("Kardex").child(cla
veMateria).child("CN").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
cursoNormal = dataSnapshot.getValue(Curso.class);
if(cursoNormal!=null){
Log.d("cursoNormal",cursoNormal.toString());
cargarCursoNormal();
}
else{
Log.d("cursoNormal",String.format("La Materia %s-%s No tiene
ningun Curso",claveMateria,nombreMateria));
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}
Visualizar Kardex:
Para visualizar el kardex lo unico que se necesita es realizar un recorrido en la
base de datos a partir del numero de control y despues pasar por la rama
kardex y recorrer todas las materias y cursos para mostrarlos.

btnBuscar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String numC = txtNumC.getText().toString();
final DetalleKardex detalleKardex;

database.child("estudiantes").child(numC).child("Kardex").addValueEventListe
ner(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
lista_detalle.clear();
lista_periodos.clear();
DetalleKardex encabezados = new DetalleKardex();
encabezados.setNombre("Nombre");
encabezados.setClaveMateria("Clave");
encabezados.setCalificacion("Calificación");
encabezados.setEvaluacion("Evaluación");
encabezados.setCiclo("");
lista_detalle.add(encabezados);
for (DataSnapshot materia : dataSnapshot.getChildren()) {
// Log.d("Materia
Nombre",obtenerNombreMateria(materia.getKey()));
for (DataSnapshot curso : materia.getChildren()) {

// Log.d("curso",curso.toString());
Curso curso1 = curso.getValue(Curso.class);
// Log.d("curso1", curso1.toString());
DetalleKardex detalleKardex = new DetalleKardex();
// Log.d("posy",materia.toString());
// Log.d("Materia Key",materia.getKey());
detalleKardex.setClaveMateria(materia.getKey());

detalleKardex.setNombre(obtenerNombreMateria(materia.getKey()));

detalleKardex.setCalificacion(curso1.getCalificacion());
detalleKardex.setCiclo(curso1.getCiclo());
detalleKardex.setEvaluacion(curso1.getEvaluacion());
lista_detalle.add(detalleKardex);
}

}
Collections.sort(lista_detalle, new
Comparator<DetalleKardex>() {
@Override
public int compare(DetalleKardex o1, DetalleKardex o2) {
return o1.getCiclo().compareTo(o2.getCiclo());
}
});

for(DetalleKardex detalleKardex1:lista_detalle){
buscarPeriodo(detalleKardex1.getCiclo());
}
SortedSet<String> llaves = new
TreeSet<>(lista_periodos.keySet());
int cont=0;
int periodo=0;
for(String i:llaves){
Log.d("Map",String.format("C %s
V %s",i,lista_periodos.get(i)));
periodo=cont+lista_periodos.get(i);
for (int x = cont+1; x < periodo; x++) {
Log.d("X",x+"");
if(lista_periodos.get(i)==1){

lista_detalle.get(x).setCiclo(lista_detalle.get(x).getCiclo());
}
else{
lista_detalle.get(x).setCiclo("");
}
}
cont=periodo;
}

AdaptadorVisualizarKardex adaptadorVisualizarKardex = new


AdaptadorVisualizarKardex(getApplicationContext(),lista_detalle);

lista_materias_kardex.setAdapter(adaptadorVisualizarKardex);

}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}
});
}

Pruebas

S-ar putea să vă placă și