Hola.
¿El código es tuyo o copiado? Tiene errores y algunas "malas costumbres", como poner los nombres de los atributos comenzando con mayúscula. En Java, la "buena costumbre" es escribirlos en minúsculas.
A ver, tenemos una clase Persona.
Con su constructor y métodos get/set. Además queremos un método que nos retorne de una sola vez todos los datos para mostrarlos en pantalla o donde sea.
Para esto, lo apropiados es sobreescribir el método toString(), donde construiremos un único String con toda la información de los atributos (o los que creamos importantes) y retornarlo.
En este ejemplo lo construyo usando String.format(), pero el String se puede construir como se quiera.
public class Persona {
protected String nombre;
protected int edad;
protected char sexo;
protected String curp;
protected String domicilio;
public Persona(String nombre, int edad, char sexo, String curp, String domicilio) {
this.nombre = nombre;
this.edad = edad;
this.sexo = sexo;
this.curp = curp;
this.domicilio = domicilio;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
public char getSexo() {
return sexo;
}
public void setSexo(char sexo) {
this.sexo = sexo;
}
public String getCURP() {
return curp;
}
public void setCURP(String curp) {
this.curp = curp;
}
public String getDomicilio() {
return domicilio;
}
public void setDomicilio(String domicilio) {
this.domicilio = domicilio;
}
@Override
public String toString() {
return String.format("Nombre: %s, Edad: %d, Sexo: %s\nCURP: %s, Domicilio: %s", nombre, edad, sexo,
curp, domicilio);
}
}
De esta clase, tienen que heredar Alumno y Docente.
La clase Alumno tiene un atributo llamado status cuyo valor no debe ser proporcionado por el usuario, si no que se calcula según el valor de su nota promedio.
Para hacer este cálculo usamos un método privado llamado calcularEstatus(), al cuál debemos invocar siempre que se modifique la nota promedio.
Por tanto, lo vamos a invocar en el constructor y también dentro del método setPromedio()
Esta clase también tiene un método toString(), lo que hace es coger el método toString que retorna su super clase (Persona) y añadirle los valores del alumno, para construir un único String con todos los datos.
public class Alumno extends Persona {
private int numControl;
private String carrera;
private int semestre;
private char grupo;
private float promedio;
private String status;
public Alumno(String nombre, int edad, char sexo, String curp, String domicilio, int numControl, String carrera,
int semestre, char grupo, float promedio) {
super(nombre, edad, sexo, curp, domicilio);
this.numControl = numControl;
this.carrera = carrera;
this.semestre = semestre;
this.grupo = grupo;
this.promedio = promedio;
calcularEstatus();
}
private void calcularEstatus(){
if (promedio>60){
if (promedio>85)
status="Excelente";
else
status="Regular";
}
else
status="Irregular";
}
public int getNumControl() {
return numControl;
}
public void setNumControl(int numControl) {
this.numControl = numControl;
}
public String getCarrera() {
return carrera;
}
public void setCarrera(String carrera) {
this.carrera = carrera;
}
public int getSemestre() {
return semestre;
}
public void setSemestre(int semestre) {
this.semestre = semestre;
}
public char getGrupo() {
return grupo;
}
public void setGrupo(char grupo) {
this.grupo = grupo;
}
public float getPromedio() {
return promedio;
}
public void setPromedio(float promedio) {
this.promedio = promedio;
calcularEstatus();
}
public String getStatus() {
return status;
}
@Override
public String toString() {
return String.format("%s\nNº Control: %d, Carrera: %s, Semestre: %d\nGrupo: %s, Promedio: %.2f, Status: %s",
super.toString(), numControl, carrera, semestre, grupo, promedio, status);
}
}
Con la clase Docente, ocurre algo similar. Tiene un atributo llamado sueldoBase cuyo valor no lo decide el usuario, si no que se autocalcula según las horas que trabaja.
Así que de nuevo usaremos un método privado para este cálculo, al que llamaremos al construir el objeto y cada vez que se cambie el valor de las horas en el método setHoras()
public class Docente extends Persona {
private String idEmpleado;
private String academia;
private int horas;
private float sueldoBase;
private char nivel;
public Docente(String nombre, int edad, char sexo, String curp, String domicilio, String idEmpleado,
String academia, int horas, char nivel) {
super(nombre, edad, sexo, curp, domicilio);
this.idEmpleado = idEmpleado;
this.academia = academia;
this.horas = horas;
this.nivel = nivel;
calcularSueldo();
}
private void calcularSueldo() {
sueldoBase=(float) (horas*33*.85*8*15);
}
public String getIdEmpleado() {
return idEmpleado;
}
public void setIdEmpleado(String idEmpleado) {
this.idEmpleado = idEmpleado;
}
public String getAcademia() {
return academia;
}
public void setAcademia(String academia) {
this.academia = academia;
}
public int getHoras() {
return horas;
}
public void setHoras(int horas) {
this.horas = horas;
calcularSueldo();
}
public float getSueldoBase() {
return sueldoBase;
}
public char getNivel() {
return nivel;
}
public void setNivel(char nivel) {
this.nivel = nivel;
}
@Override
public String toString() {
return String.format("%s\nID Emp.: %s, Academia: %s, Horas: %d\nSueldo: %.2f, Nivel: %s",
super.toString(), idEmpleado, academia, horas, sueldoBase, nivel);
}
}
Vale, tendríamos modeladas las entidades principales que actúan en este programa.
Ahora necesitamos una forma de gestionarlas, es decir, registrarlas en algún tipo de colección y que luego se pueda consultar.
En el código que has puesto, parece que se intenta usar un arreglo primitivo, pero con error en su sintaxis.
De todos modos, no es el tipo de colección ideal porque hay que establecerle un tamaño fijo que luego no puede aumentarse.
Es mejor usar un ArrayList, que tiene un tamaño dinámico y puede crecer según se van añadiendo objetos.
De hecho, usaremos dos, uno para Alumnos y otro para Docentes.
Habrá que escribir código para todo lo relativo a la gestión de estos datos y también código para escribir un menú en pantalla, capturar opción escogida, etc...
Se puede hacer todo junto en una sola clase.
O bien, separarlo en dos. Una clase exclusivamente para gestionar los dos ArrayList y la otra exclusivamente para encargarse del menú principal.
Yo prefiero esta última opción y esta podría ser la clase "gestora" de datos:
import java.util.ArrayList;
import javax.swing.JOptionPane;
public class GestionDatos {
private ArrayList<Alumno> alumnos = new ArrayList<Alumno>();
private ArrayList<Docente> docentes = new ArrayList<Docente>();
public void registrarAlumno() {
String nombre = JOptionPane.showInputDialog("Nombre:");
int edad = Integer.parseInt(JOptionPane.showInputDialog("Edad:"));
char sexo = JOptionPane.showInputDialog("Sexo: ").charAt(0);
String curp = JOptionPane.showInputDialog("CURP:");
String domicilio = JOptionPane.showInputDialog("Domicilio:");
int nControl = Integer.parseInt(JOptionPane.showInputDialog("Nº Control:"));
String carrera = JOptionPane.showInputDialog("Carrera:");
int semestre = Integer.parseInt(JOptionPane.showInputDialog("Semestre:"));
char grupo = JOptionPane.showInputDialog("Grupo:").charAt(0);
float promedio = Float.parseFloat(JOptionPane.showInputDialog("Promedio:"));
alumnos.add(new Alumno(nombre, edad, sexo, curp, domicilio, nControl, carrera, semestre, grupo, promedio));
JOptionPane.showMessageDialog(null, "Nuevo Alumno registrado");
}
public void listarAlumnos() {
if (alumnos.isEmpty())
JOptionPane.showMessageDialog(null, "No hay Alumnos registrados");
else {
for (int i = 0; i < alumnos.size(); i++)
JOptionPane.showMessageDialog(null, alumnos.get(i),
String.format("Alumno %d/%d", (i+1), alumnos.size()), 1);
}
}
}
¡¡NO ESTÁ TERMINADA!!
Solo he puesto lo necesario para registrar Alumnos y también poder listar los que ya están registrados.
Luego intenta por tu parte, añadir dos métodos más registrar y listar Docentes. Casi es copiar lo que yo he puesto.
Veamos ahora la clase principal, usaremos un menú hecho con JOptionPane, tal y como se hace en el código que tú has puesto antes.
Su principal atributo, será un objeto de la clase "gestora" de datos
De momento, solo ofrecemos 5 opciones: registrar alumno, listarlos, registrar docentes, listarlos y TERMINAR.
Con un switch analizamos que ha pedido el usuario, y según su opción, llamamos al método adecuado de la clase "gestora".
Creo que es sencillo de entender el código.
public class Principal {
private static GestionDatos gestor = new GestionDatos();
private static final String MENU = "[1] -- Registrar Alumno\n[2] -- Registrar Docente"
+ "\n[3] -- Listar Alumnos\n[4] -- Listar Docentes\n[0] -- TERMINAR PROGRAMA";
public static void main(String[] args) {
String opcion = "";
do {
opcion = JOptionPane.showInputDialog(MENU);
switch(opcion) {
case "0":
JOptionPane.showMessageDialog(null, "FIN DE PROGRAMA");
break;
case "1":
gestor.registrarAlumno();
break;
case "2":
//gestor.registrarDocente();
break;
case "3":
gestor.listarAlumnos();
break;
case "4":
//gestor.listarDocentes();
break;
default:
JOptionPane.showMessageDialog(null, "Opcion equivocada");
}
}while(!opcion.equals("0"));
}
}
Pues como dije, intenta completar lo necesario para poder gestionar los Docentes.
Y cuando lo tengas, tú mismo intenta añadir más opciones, como modificar la nota promedio de un Alumno, o las horas que trabaja un Docente..., lo que se te ocurra.
Cuando te atasques, o si hay cosas que no te han quedado claras, vuelve a preguntar por aquí.
Un saludo.