Crear programa para llevar el

Nombre del campos Tipo de campo
Carnet Entero
Nombre Cadena (50)
Telefono Cadena (10)
Edad Entero
Fecha inscrito Cadena (10)
Tambien debe llevar control de las clases que tiene , en un registro llamado fecha que contiene la siguiente informacion
Nombre del campos Tipo de campo
Carnet Entero
Nombre_Deporte Cadena (20)
Año Entero
Nivel Entero
Nota_Final Entero
import pickle
class Alumno:
def __init__(self, carnet, nombre, telefono, edad, fecha_inscrito):
self.carnet = carnet
self.nombre = nombre
self.telefono = telefono
self.edad = edad
self.fecha_inscrito = fecha_inscrito
class Ficha:
def __init__(self, carnet, nombre_deporte, año, nivel, nota_final):
self.carnet = carnet
self.nombre_deporte = nombre_deporte
self.año = año
self.nivel = nivel
self.nota_final = nota_final
class AcademiaDeportes:
def __init__(self):
self.alumnos = []
self.fichas = []
def agregar_alumno(self, alumno):
self.alumnos.append(alumno)
def modificar_alumno(self, carnet, nombre=None, telefono=None, edad=None):
for alumno in self.alumnos:
if alumno.carnet == carnet:
if nombre:
alumno.nombre = nombre
if telefono:
alumno.telefono = telefono
if edad:
alumno.edad = edad
return True
return False
def buscar_alumno(self, nombre):
for alumno in self.alumnos:
if alumno.nombre.lower() == nombre.lower():
return alumno
return None
def agregar_inscripcion(self, ficha):
self.fichas.append(ficha)
def reporte_general_alumnos(self):
print("Reporte General de Alumnos:")
for alumno in self.alumnos:
print(f"Carnet: {alumno.carnet}, Nombre: {alumno.nombre}, Teléfono: {alumno.telefono}, Edad: {alumno.edad}, Fecha inscrito: {alumno.fecha_inscrito}")
def reporte_general_fichas(self):
print("Reporte General de Fichas:")
for ficha in self.fichas:
print(f"Carnet: {ficha.carnet}, Nombre Deporte: {ficha.nombre_deporte}, Año: {ficha.año}, Nivel: {ficha.nivel}, Nota final: {ficha.nota_final}")
def reporte_alumnos_por_deporte(self, deporte):
print(f"Reporte de Alumnos por Deporte: {deporte}")
for ficha in self.fichas:
if ficha.nombre_deporte.lower() == deporte.lower():
print(f"Carnet: {ficha.carnet}, Año: {ficha.año}, Nivel: {ficha.nivel}, Nota final: {ficha.nota_final}")
def guardar_a_archivo_binario(self, filename):
with open(filename, 'wb') as file:
pickle.dump(self.alumnos, file)
pickle.dump(self.fichas, file)
def abrir_archivo(self, filename):
with open(filename, 'rb') as file:
self.alumnos = pickle.load(file)
self.fichas = pickle.load(file)
# Función para mostrar el menú
def mostrar_menu():
print("\nMenú:")
print("1. Agregar Alumno")
print("2. Modificar Alumno")
print("3. Buscar Alumno")
print("4. Agregar Inscripción")
print("5. Reportes")
print("6. Guardar a Archivo Binario")
print("7. Abrir Archivo")
print("8. Salir")
# Función principal del programa
def main():
academia = AcademiaDeportes()
while True:
mostrar_menu()
opcion = input("Ingrese el número de opción: ")
if opcion == '1':
carnet = int(input("Ingrese el carnet del alumno: "))
nombre = input("Ingrese el nombre del alumno: ")
telefono = input("Ingrese el teléfono del alumno: ")
edad = int(input("Ingrese la edad del alumno: "))
fecha_inscrito = input("Ingrese la fecha de inscripción (DD/MM/AAAA): ")
alumno = Alumno(carnet, nombre, telefono, edad, fecha_inscrito)
academia.agregar_alumno(alumno)
elif opcion == '2':
carnet = int(input("Ingrese el carnet del alumno a modificar: "))
nombre = input("Ingrese el nuevo nombre (deje vacío si no desea modificar): ")
telefono = input("Ingrese el nuevo teléfono (deje vacío si no desea modificar): ")
edad = input("Ingrese la nueva edad (deje vacío si no desea modificar): ")
if academia.modificar_alumno(carnet, nombre, telefono, edad):
print("Alumno modificado con éxito.")
else:
print("Alumno no encontrado.")
elif opcion == '3':
nombre = input("Ingrese el nombre del alumno a buscar: ")
alumno = academia.buscar_alumno(nombre)
if alumno:
print(f"Alumno encontrado - Carnet: {alumno.carnet}, Nombre: {alumno.nombre}, Teléfono: {alumno.telefono}, Edad: {alumno.edad}, Fecha inscrito: {alumno.fecha_inscrito}")
else:
print("Alumno no encontrado.")
elif opcion == '4':
carnet = int(input("Ingrese el carnet del alumno: "))
nombre_deporte = input("Ingrese el nombre del deporte: ")
año = int(input("Ingrese el año: "))
nivel = int(input("Ingrese el nivel: "))
nota_final = int(input("Ingrese la nota final: "))
ficha = Ficha(carnet, nombre_deporte, año, nivel, nota_final)
academia.agregar_inscripcion(ficha)
elif opcion == '5':
subopcion = input("Seleccione el reporte a mostrar (1. Reporte General de alumnos, 2. Reporte General de fichas, 3. Reporte de Alumnos por deporte): ")
if subopcion == '1':
academia.reporte_general_alumnos()
elif subopcion == '2':
academia.reporte_general_fichas()
elif subopcion == '3':
deporte = input("Ingrese el nombre del deporte: ")
academia.reporte_alumnos_por_deporte(deporte)
else:
print("Opción inválida.")
elif opcion == '6':
filename = input("Ingrese el nombre del archivo para guardar: ")
academia.guardar_a_archivo_binario(filename)
print("Datos guardados correctamente en archivo binario.")
elif opcion == '7':
filename = input("Ingrese el nombre del archivo para abrir: ")
academia.abrir_archivo(filename)
print("Datos cargados correctamente desde archivo binario.")
elif opcion == '8':
print("¡Hasta luego!")
break
else:
print("Opción inválida.")
if __name__ == "__main__":
main()