-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpractica_47.py
262 lines (214 loc) · 8.73 KB
/
practica_47.py
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
import re
import pickle
# Módulo 1: Gestor de Estudiantes
class Estudiante:
def __init__(self, nombre, email, clave):
global numero_legajo
self.legajo = numero_legajo
numero_legajo += 1
self.email = email
self.clave = clave
self.nombre = nombre
self.meritos = 1000
def ver_informacion(self):
print(f"Información del estudiante:")
print(f"Legajo: {self.legajo}")
print(f"Nombre: {self.nombre}")
print(f"Email: {self.email}")
print(f"Méritos disponibles: {self.meritos}")
def modificar_informacion(self):
print("Modificar información del estudiante:")
print("1. cambiar nombre")
print("2. cambiar contraseña")
print("3. salir")
opcion = input("q desea hacer:")
if opcion == 1:
self.nombre = input("Nuevo nombre: ")
elif opcion == 2:
self.clave = input("Nueva clave: ")
elif opcion == 3:
return
print("Información modificada con éxito.")
def validar_email(email):
patron = r'\b[A-Za-z0-9._%+-]+@frba.utn.edu.ar\b'
return bool(re.match(patron, email))
def registrar_estudiante(estudiantes):
print("Crear nueva cuenta de estudiante:")
nombre = input("Nombre del estudiante: ")
email = input("Ingrese el email del estudiante: ")
clave = input("Ingrese la clave del estudiante: ")
if not validar_email(email):
print("Email no válido.")
return
for estudiante in estudiantes:
if estudiante.email == email:
print("El email ya está registrado.")
return
estudiantes.append(Estudiante(nombre, email, clave))
print("Registro exitoso.")
# Módulo 2: Gestor de Beneficios y Acreditación de Logros
class Beneficio:
def __init__(self, nombre, costo):
self.nombre = nombre
self.costo = costo
def agregar_beneficio(beneficios, nombre, costo):
beneficios.append(Beneficio(nombre, costo))
print("Beneficio agregado exitosamente.")
def listar_beneficios(beneficios):
print("Beneficios disponibles:")
for beneficio in beneficios:
print(f"{beneficio.nombre} - Costo: {beneficio.costo} créditos")
def acreditar_logros(estudiante, puntos):
estudiante.meritos += puntos
print(f"Se acreditaron {puntos} puntos. Méritos disponibles: {estudiante.meritos}")
# Módulo 3: Consumidor de Beneficios
def iniciar_sesion(estudiantes, beneficios):
email = input("Ingrese su email: ")
clave = input("Ingrese su clave: ")
for estudiante in estudiantes:
if estudiante.email == email and estudiante.clave == clave:
print("Inicio de sesión exitoso.")
mostrar_menu_beneficios(estudiante, beneficios)
guardar_registros(estudiantes, beneficios)
return
print("Credenciales incorrectas.")
def mostrar_menu_beneficios(estudiante, beneficios):
while True:
print("\n--- Menú de Beneficios ---")
print("1. Mostrar créditos disponibles")
print("2. Mostrar beneficios disponibles")
print("3. Consumir un beneficio")
print("4. Acreditar logros")
print("5. Ver mi información")
print("6. Modificar mi información")
print("7. Cerrar sesión")
opcion = input("Elija una opción: ")
if opcion == '1':
print(f"Créditos disponibles: {estudiante.meritos}")
elif opcion == '2':
listar_beneficios(beneficios)
elif opcion == '3':
consumir_beneficio(estudiante, beneficios)
elif opcion == '4':
puntos = int(input("Ingrese la cantidad de puntos a acreditar: "))
acreditar_logros(estudiante, puntos)
elif opcion == '5':
estudiante.ver_informacion()
elif opcion == '6':
estudiante.modificar_informacion()
elif opcion == '7':
return
else:
print("Opción no válida. Intente nuevamente.")
def consumir_beneficio(estudiante, beneficios):
nombre_beneficio = input("Ingrese el nombre del beneficio que desea consumir: ")
for beneficio in beneficios:
if beneficio.nombre == nombre_beneficio and beneficio.costo <= estudiante.meritos:
estudiante.meritos -= beneficio.costo
print(f"Beneficio '{nombre_beneficio}' consumido. Créditos restantes: {estudiante.meritos}")
return
print("No se pudo consumir el beneficio.")
# Módulo 4: Administración
class Administrador:
def __init__(self, username, password):
self.username = username
self.password = password
def autenticar_administrador(administradores, username, password):
for admin in administradores:
if admin.username == username and admin.password == password:
return True
return False
def menu_administracion(estudiantes, beneficios):
while True:
print("\n--- Menú de Administración ---")
print("1. Modificar datos de estudiante")
print("2. Agregar beneficio")
print("3. Crear cuenta de estudiante")
print("4. Salir")
opcion = input("Elija una opción: ")
if opcion == '1':
modificar_datos_estudiante(estudiantes)
elif opcion == '2':
nombre = input("Ingrese el nombre del beneficio: ")
costo = int(input("Ingrese el costo del beneficio en créditos: "))
agregar_beneficio(beneficios, nombre, costo)
elif opcion == '3':
crear_cuenta_estudiante(estudiantes)
elif opcion == '4':
return
else:
print("Opción no válida. Intente nuevamente.")
def modificar_datos_estudiante(estudiantes):
email = input("Ingrese el email del estudiante cuyos datos desea modificar: ")
for estudiante in estudiantes:
if estudiante.email == email:
nueva_clave = input("Ingrese la nueva clave para el estudiante: ")
estudiante.clave = nueva_clave
print("Datos del estudiante actualizados.")
return
print("Estudiante no encontrado.")
def ver_informacion_estudiante(estudiantes, email):
for estudiante in estudiantes:
if estudiante.email == email:
estudiante.ver_informacion()
return
# Función para crear una cuenta de estudiante
def crear_cuenta_estudiante(estudiantes):
print("Crear nueva cuenta de estudiante:")
nombre = input("Nombre del estudiante: ")
email = input("Ingrese el email del estudiante: ")
clave = input("Ingrese la clave del estudiante: ")
if not validar_email(email):
print("Email no válido.")
return
for estudiante in estudiantes:
if estudiante.email == email:
print("El email ya está registrado.")
return
estudiantes.append(Estudiante(nombre, email, clave))
print("Registro exitoso.")
def guardar_registros(estudiantes, beneficios):
with open("registros.dat", "wb") as registros_file:
pickle.dump((estudiantes, beneficios), registros_file)
def guardar_logros_y_beneficios(beneficios):
with open("logrosYbeneficios.txt", "w") as logros_file:
logros_file.write("Beneficios disponibles:\n")
for beneficio in beneficios:
logros_file.write(f"{beneficio.nombre} - Costo: {beneficio.costo} créditos\n")
# Define las listas para almacenar estudiantes, beneficios y administradores
estudiantes = []
beneficios = []
administradores = []
# Agrega administradores
administradores.append(Administrador("admin1", "contraseña1"))
administradores.append(Administrador("admin2", "contraseña2"))
# Inicializa el número de legajo
numero_legajo = 1000000
# Ejecuta el programa principal
while True:
print("\n--- Menú Principal ---")
print("1. Iniciar sesión como estudiante")
print("2. Iniciar sesión como administrador")
print("3. Crear cuenta de estudiante")
print("4. Salir")
opcion = input("Elija una opción: ")
if opcion == '1':
iniciar_sesion(estudiantes, beneficios)
elif opcion == '2':
while True:
username = input("Ingrese el nombre de usuario del administrador: ")
password = input("Ingrese la contraseña del administrador: ")
if autenticar_administrador(administradores, username, password):
print("Inicio de sesión de administrador exitoso.")
menu_administracion(estudiantes, beneficios)
break
else:
print("Credenciales de administrador incorrectas. Intente nuevamente.")
elif opcion == '3':
crear_cuenta_estudiante(estudiantes)
elif opcion == '4':
guardar_registros(estudiantes, beneficios)
guardar_logros_y_beneficios(beneficios)
break
else:
print("Opción no válida. Intente nuevamente.")