169 lines
5.4 KiB
Python
169 lines
5.4 KiB
Python
|
"""
|
||
|
Realizar un sistema para una escuela.
|
||
|
|
||
|
- Este sistema permite registrar nuevos alumnos, profesores y cursos.
|
||
|
|
||
|
- Un alumno es asignado a un curso y un curso puede tener asociado más de un profesor.
|
||
|
|
||
|
- Los profesores tienen un horario que indica cuando están en cada curso.
|
||
|
|
||
|
- El horario asociará un curso y un profesor para un día de la semana
|
||
|
(Lunes, Martes, Miércoles, Jueves, Viernes, Sábado, Domingo), una hora desde
|
||
|
y una hora hasta.
|
||
|
|
||
|
- El sistema permitirá exportar los alumnos que pertenecen a un curso,
|
||
|
el horario de cada profesor y el horario del curso.
|
||
|
|
||
|
"""
|
||
|
import csv
|
||
|
import datetime
|
||
|
from sqlalchemy import create_engine, ForeignKey, Column, \
|
||
|
Integer, String, Time, Sequence
|
||
|
from sqlalchemy.ext.declarative import declarative_base
|
||
|
from sqlalchemy.orm import sessionmaker, relationship
|
||
|
|
||
|
Base = declarative_base()
|
||
|
|
||
|
class Alumno(Base):
|
||
|
|
||
|
__tablename__ = 'alumno'
|
||
|
|
||
|
id = Column(Integer, primary_key=True)
|
||
|
nombre = Column(String, nullable=False)
|
||
|
|
||
|
curso_id = Column(Integer, ForeignKey('curso.id'))
|
||
|
curso = relationship('Curso', back_populates='inscrito')
|
||
|
|
||
|
def __repr__(self):
|
||
|
return self.nombre
|
||
|
|
||
|
|
||
|
class Profesor(Base):
|
||
|
|
||
|
__tablename__ = 'profesor'
|
||
|
|
||
|
id = Column(Integer, primary_key=True)
|
||
|
nombre = Column(String, nullable=False)
|
||
|
horario_prof = relationship('Horario', order_by='Horario.hr_ini', back_populates='profesor')
|
||
|
|
||
|
def __repr__(self):
|
||
|
return self.nombre
|
||
|
|
||
|
|
||
|
class Curso(Base):
|
||
|
|
||
|
__tablename__ = 'curso'
|
||
|
|
||
|
id = Column(Integer, primary_key=True)
|
||
|
nombre = Column(String, nullable=False)
|
||
|
inscrito = relationship('Alumno', order_by='Alumno.id', back_populates='curso')
|
||
|
horario_curso = relationship('Horario', order_by='Horario.hr_ini', back_populates='curso')
|
||
|
|
||
|
def __repr__(self):
|
||
|
return self.nombre
|
||
|
|
||
|
|
||
|
class Horario(Base):
|
||
|
|
||
|
__tablename__ = 'horario'
|
||
|
|
||
|
id = Column(Integer, Sequence('horario_id_seq'), primary_key=True)
|
||
|
dia = Column(Integer)
|
||
|
hr_ini = Column(Time)
|
||
|
hr_fin = Column(Time)
|
||
|
curso_id = Column(Integer, ForeignKey('curso.id'))
|
||
|
profesor_id = Column(Integer, ForeignKey('profesor.id'))
|
||
|
|
||
|
curso = relationship('Curso', back_populates='horario_curso')
|
||
|
profesor = relationship('Profesor', back_populates='horario_prof')
|
||
|
|
||
|
|
||
|
class ExportarCSV(object):
|
||
|
|
||
|
def __init__(self, ruta):
|
||
|
self.ruta = ruta
|
||
|
|
||
|
def exprt_horario_prof(self, profesor):
|
||
|
horario = profesor.horario_prof
|
||
|
with open(self.ruta, 'w') as archivo:
|
||
|
writer = csv.writer(archivo)
|
||
|
for horas in horario:
|
||
|
writer.writerow([horas.dia, horas.hr_ini, horas.hr_fin, horas.curso.nombre])
|
||
|
|
||
|
def export_hr_curso(self, curso):
|
||
|
horario = curso.horario_curso
|
||
|
with open(self.ruta, 'w') as archivo:
|
||
|
writer = csv.writer(archivo)
|
||
|
for horas in horario:
|
||
|
writer.writerow([horas.dia, horas.hr_ini, horas.hr_fin, horas.profesor])
|
||
|
|
||
|
def export_alumnos_curso(self, curso):
|
||
|
inscritos = curso.inscrito
|
||
|
with open(self.ruta, 'w') as archivo:
|
||
|
writer = csv.writer(archivo)
|
||
|
for alumno in inscritos:
|
||
|
writer.writerow([str(alumno)])
|
||
|
|
||
|
|
||
|
def main(*args, **kwargs):
|
||
|
|
||
|
engine = create_engine('sqlite:///:memory:')
|
||
|
Base.metadata.create_all(engine)
|
||
|
Session = sessionmaker(bind=engine)
|
||
|
session = Session()
|
||
|
|
||
|
# Creación de profesores
|
||
|
prof1 = Profesor(nombre='Profesor_1')
|
||
|
prof2 = Profesor(nombre='Profesor_2')
|
||
|
prof3 = Profesor(nombre='Profesor_3')
|
||
|
session.add(prof1)
|
||
|
session.add(prof2)
|
||
|
session.add(prof3)
|
||
|
|
||
|
# Creación de Cursos
|
||
|
curso1 = Curso(nombre='Curso_1')
|
||
|
curso2 = Curso(nombre='Curso_2')
|
||
|
curso3 = Curso(nombre='Curso_3')
|
||
|
session.add(curso1)
|
||
|
session.add(curso2)
|
||
|
session.add(curso3)
|
||
|
|
||
|
# Creación de Alumnos
|
||
|
alumno1 = Alumno(nombre='Alumno_1', curso=curso1)
|
||
|
alumno2 = Alumno(nombre='Alumno_2', curso=curso2)
|
||
|
alumno3 = Alumno(nombre='Alumno_3', curso=curso3)
|
||
|
session.add(alumno1)
|
||
|
session.add(alumno2)
|
||
|
session.add(alumno3)
|
||
|
|
||
|
# Creación de objetos Hora
|
||
|
hora1 = datetime.time(9, 0, 0)
|
||
|
hora2 = datetime.time(12, 0, 0)
|
||
|
hora3 = datetime.time(13, 0, 0)
|
||
|
hora4 = datetime.time(15, 0, 0)
|
||
|
|
||
|
# Creación de horas para iniciio y termino de clases
|
||
|
horario1 = Horario(dia=2, hr_ini=hora1, hr_fin=hora2, curso=curso1, profesor=prof1)
|
||
|
horario2 = Horario(dia=3, hr_ini=hora2, hr_fin=hora3, curso=curso2, profesor=prof2)
|
||
|
horario3 = Horario(dia=4, hr_ini=hora2, hr_fin=hora3, curso=curso3, profesor=prof3)
|
||
|
horario4 = Horario(dia=5, hr_ini=hora3, hr_fin=hora4, curso=curso1, profesor=prof3)
|
||
|
session.add(horario1)
|
||
|
session.add(horario2)
|
||
|
session.add(horario3)
|
||
|
session.add(horario4)
|
||
|
session.commit()
|
||
|
|
||
|
# Exportar Datos
|
||
|
ExportarCSV('Horario_Docente_{}'.format(prof1)).exprt_horario_prof(prof1)
|
||
|
ExportarCSV('Horario_Docente_{}'.format(prof2)).exprt_horario_prof(prof2)
|
||
|
ExportarCSV('Horario_Docente_{}'.format(prof3)).exprt_horario_prof(prof3)
|
||
|
ExportarCSV('Horario_Curso_{}'.format(curso1)).export_hr_curso(curso1)
|
||
|
ExportarCSV('Horario_Curso_{}'.format(curso2)).export_hr_curso(curso2)
|
||
|
ExportarCSV('Horario_Curso_{}'.format(curso3)).export_hr_curso(curso3)
|
||
|
ExportarCSV('Alumnos_Inscritos_{}'.format(curso1)).export_alumnos_curso(curso1)
|
||
|
ExportarCSV('Alumnos_Inscritos_{}'.format(curso2)).export_alumnos_curso(curso2)
|
||
|
ExportarCSV('Alumnos_Inscritos_{}'.format(curso3)).export_alumnos_curso(curso3)
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|