Código de Python - Instituto de idiomas

Imágen de perfil
Val: 45
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Instituto de idiomasgráfica de visualizaciones


Python

Publicado el 9 de Abril del 2021 por Damian (2 códigos)
1.215 visualizaciones desde el 9 de Abril del 2021
Ejercicio:

Un instituto de idiomas ofrece cursos de inglés, francés y mandarín.
Necesita un programa que le permita al estudiante elegir uno de los 3 cursos
que desee estudiar.

**La aplicación mostrará después de cada registro la cantidad de estudiantes
que tiene cada curso.

Condiciones:  Utilizar clases  La clase creada debe tener atributos
 La clase creada debe tener como mínimo los métodos para ingresar datos,
calcular cuántos estudiantes ingresaron al instituto
e imprimir resultados.

extra: guarda todo lo ingresado en un fichero en el disco para poder volver a
cargarlo la proxima vez

1.0

Publicado el 9 de Abril del 2021gráfica de visualizaciones de la versión: 1.0
1.216 visualizaciones desde el 9 de Abril del 2021
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
class Estudiante():
 
    def __init__(self, nombre_est, apellido_est):
        self.nombre = nombre_est
        self.apellido = apellido_est
 
#  --fin Estudiante
 
 
class CursoIdioma():
 
    def __init__(self):
        self.listaCurso=[]
 
# ingresa un estudiante al curso
    def ingresar(self, nodoEstudiante):
        self.listaCurso.append(nodoEstudiante)
 
# retorna un string con todos los estudiantes en lineas diferentes
    def lista_para_imprimir(self):
        cad = ""
 
        for i in self.listaCurso:
            cad = cad + "Nombre:{} Apellido:{}\n".format(i.nombre, i.apellido)
 
        return cad
 
#  Retorna la cantidad de alumnos en este curso
 
    def calculaCant(self):
        return len(self.listaCurso)
 
#  -fin CursoIdiomas
 
 
class TodosLosCursos():
    def __init__(self):
        self.ingles = CursoIdioma()
        self.frances = CursoIdioma()
        self.mandarin = CursoIdioma()
 
 
def agrega_nuevo_alumno():  # es llamada por el boton "Agregar nuevo"
    obj_curso = curso
 
    nombre = entrada_nomb.get()
    apellido = entrada_apell.get()
    valor_radio = val_radio.get()  # 1 = Ingles  2 = Frances  3 = Mandarin
 
    if nombre == "":
        print(messagebox.showinfo(message="Igrese un nombre",
                                  title="Advertencia"))
    else:
        if apellido == "":
            print(messagebox.showinfo(message="Igrese un apellido",
                                      title="Advertencia"))
        else:
            if valor_radio == 0:
                print(messagebox.showinfo(message="Seleccione un curso",
                                          title="Advertencia"))
            else:
                # agrega el estudiante
                alumno_nuevo = Estudiante(nombre, apellido)
 
                if valor_radio == 1:
                    obj_curso.ingles.ingresar(alumno_nuevo)
 
                    # actualiza la etiqueta de cantidad
                    var_etiq_ing.set(obj_curso.ingles.calculaCant())
                    radio_ingles.deselect()
                else:
                    if valor_radio == 2:
                        obj_curso.frances.ingresar(alumno_nuevo)
                        var_etiq_fran.set(obj_curso.frances.calculaCant())
                        radio_frances.deselect()
                    else:
                        if valor_radio == 3:
                            obj_curso.mandarin.ingresar(alumno_nuevo)
                            var_etiq_mand.set(obj_curso.mandarin.calculaCant())
                            radio_mandarin.deselect()
 
                print(messagebox.showinfo(message="Alumno ingresado",
                                          title="Notificacion"))
                texto_nombre.set("")
                texto_apellido.set("")
                val_radio.set(0)
 
#  --fin agrega_nuevo_alumno
 
 
#  Cuando se apreta el boton "Imprimir"
#  imprime toda la informacion de los cursos con sus alumnos
#  en la caja de texto texto_impresion
 
def imprimir_listado():
    obj_curso = curso
 
    c_i = obj_curso.ingles.calculaCant()
    c_f = obj_curso.frances.calculaCant()
    c_m = obj_curso.mandarin.calculaCant()
 
    txt = "En total hay {} estudiantes ingresados.\n".format(c_i+c_f+c_m)
    #  si hay registros
    if c_i > 0:
        txt = txt + "Al curso de Ingles se anotaron {} alumnos".format(c_i)
        txt = txt + " y son los siguientes:\n"
        txt = txt+obj_curso.ingles.lista_para_imprimir()+"\n"
    if c_f > 0:
        txt = txt+"Al curso de Frances se anotaron {} alumnos".format(c_f)
        txt = txt + " y son los siguientes:\n"
        txt = txt+obj_curso.frances.lista_para_imprimir()+"\n"
    if c_m > 0:
        txt = txt+"Al curso de Mandarin se anotaron {} alumnos".format(c_m)
        txt = txt + " y son los siguientes:\n"
        txt = txt+obj_curso.mandarin.lista_para_imprimir()+"\n"
 
    texto_impresion.delete("1.0", "end")
    texto_impresion.insert(END, txt)
 
    #  imprime en un archivo de texto,
    #  se habre el fichero en modo "append" agregando la fecha y hora
    #  como cabecera para el nuevo registro
    archivo_txt = open(ruta_fichero_texto, 'a')
 
    #  cabecera de cada entrada
    tx = '**************************** \n'
    tx = tx + 'Registro tomado el ' + str(now.date()) + "\n"
    tx = tx + 'a las ' + str(now.time()) + "\n\n" + txt + "\n\n"
 
    archivo_txt.write(tx)
    archivo_txt.close()
    del(archivo_txt)
 
 
#  -imprime_listado
 
 
def habrir_fichero():
    try:
        fichero_binario = open(ruta_fichero_binario, "rb")
 
        msg = "Si ya cargo datos, se sobreescribiran\n ¿Desea continuar?"
        bol = messagebox.askyesno(message=msg, title="Cargar nuevos")
 
        if bol:
 
            obj_curso = load(fichero_binario)
            #  asi puedo modificar la variable global desde la funcion
            global curso
            curso = obj_curso
 
#  actualiza las etiquetas de cantidad
            var_etiq_ing.set(obj_curso.ingles.calculaCant())
            var_etiq_fran.set(obj_curso.frances.calculaCant())
            var_etiq_mand.set(obj_curso.mandarin.calculaCant())
 
            fichero_binario.close()
            del(fichero_binario)
 
            print(messagebox.showinfo(message="Fichero cargado",
                                      title="Notificacion"))
 
    except FileNotFoundError:
        messagebox.showinfo(message="No se ha guardado ningun fichero todavia",
                            title="Alerta")
 
 
#  guarda en archivo binario
def guardar_fichero(obj_curso):
 
    fichero_binario = open(ruta_fichero_binario, "wb")
    dump(obj_curso, fichero_binario)
 
    fichero_binario.close()
    del(fichero_binario)
 
    print(messagebox.showinfo(message="Fichero guardado",
                              title="Notificacion"))
 
 
#  inicializacion de variables
 
root = Tk()
root.title("Alta de alumnos")
root.geometry("510x400")
root.resizable(0, 0)
 
 
texto_nombre = StringVar()
texto_apellido = StringVar()
 
 
curso = TodosLosCursos()
#  curso.ingles, curso.frances, curso.mandarin
 
val_radio= IntVar()
 
var_etiq_ing = StringVar()
var_etiq_fran = StringVar()
var_etiq_mand = StringVar()
 
#  al no especificar una ruta se guarda en el mismo directorio donde esta
#  el codigo si se usa anaconda,
#  usa directorios virtuales C:\VTRoot\HarddiskVolume2\
 
ruta_fichero_binario = "lista_cursos.bin"
ruta_fichero_texto = "lista_cursos.txt"
 
now = datetime.now()
 
# inicializacion de variables----------------
 
 
#  caja de texto donde se guarda lo que se imprimira
 
texto_impresion = scrolledtext.ScrolledText(root, undo=True,
                                            width=60, height=15, wrap='word')
texto_impresion['font'] = ('consolas', '10')
texto_impresion.place(x=40, y=140)
 
 
#  En algun momento tendria q tratar de usar frames para ordenar los objetos
 
etiqueta_nomb = Label(root, text="Nombre:")
etiqueta_nomb.place(x=20, y=20)
 
etiqueta_apell = Label(root, text="Apellido:")
etiqueta_apell.place(x=20, y=40)
 
entrada_nomb = Entry(root, textvariable=texto_nombre)
entrada_nomb.place(x=80, y=20)
entrada_nomb.focus()
 
entrada_apell = Entry(root, textvariable=texto_apellido)
entrada_apell.place(x=80, y=40)
 
#  --
 
boton_agregar = Button(root, text="Agregar nuevo",
                       command=lambda: [agrega_nuevo_alumno()])
boton_agregar.place(x=40, y=60)
 
 
boton_imprimir = Button(root, text="Imprimir",
                        command=lambda: [imprimir_listado()])
boton_imprimir.place(x=40, y=100)
 
 
boton_abrir_fichero = Button(root, text="Abrir un fichero",
                             command=lambda: [habrir_fichero()])
boton_abrir_fichero.place(x=170, y=100)
 
boton_guardar_fichero = Button(root, text="Guardar en un fichero",
                               command=lambda: [guardar_fichero(curso)])
boton_guardar_fichero.place(x=290, y=100)
 
 
#  -----botones para elegir a que carrera se anota
 
radio_ingles = Radiobutton(root, text="Ingles",
                           value=1, variable=val_radio)
radio_ingles.deselect()
radio_ingles.place(x=220, y=20)
 
radio_frances = Radiobutton(root, text="Frances",
                            value=2, variable=val_radio)
radio_frances.deselect()
radio_frances.place(x=220, y=40)
 
radio_mandarin = Radiobutton(root, text="Mandarin",
                             value=3, variable=val_radio)
radio_mandarin.deselect()
radio_mandarin.place(x=220, y=60)
 
 
#  ---etiquetas que guardan la cantidad de alumnos anotados en cada curso
 
etiqueta_cantidad = Label(root, text="Cantidad por curso:")
etiqueta_cantidad.place(x=300, y=0)
 
etiqueta_cantidad_ing = Label(root, textvariable=var_etiq_ing)
var_etiq_ing.set("0")
etiqueta_cantidad_ing.place(x=340, y=20)
 
etiqueta_cantidad_fra = Label(root, textvariable=var_etiq_fran)
var_etiq_fran.set("0")
etiqueta_cantidad_fra.place(x=340, y=40)
 
etiqueta_cantidad_man = Label(root, textvariable=var_etiq_mand)
var_etiq_mand.set("0")
etiqueta_cantidad_man.place(x=340, y=60)
 
 
#  -----
 
root.mainloop()



Comentarios sobre la versión: 1.0 (0)


No hay comentarios
 

Comentar la versión: 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s7000