1 # Author:ton
2 # -*- coding: utf-8 -*-
3 from core.color import Colors
4 from core import commons
5 from core import auth
6 from core.create_table import Course_m2m_class, User, School, Course, Teacher, Class, Student, Lesson, C2c_m2m_lesson,
7 Study_record, school_m2m_course, school_m2m_teacher, school_m2m_student, student_m2m_class
8 import hashlib
9
10
11 class Center_admin(object):
12 """管理员中心"""
13 def __init__(self, session):
14 self.session = session
15 self.handle()
16
17 @auth.auth(permission=0)
18 def handle(self):
19 while True:
20 class_dic = {
21 '1':Manage_school,
22 '2':Manage_course,
23 '3':Manage_teacher,
24 '4':Manage_class,
25 '5':Manage_student,
26 }
27 print("管理员中心".center(45, '-'))
28 msg = """
29 1.校区管理
30 2.课程管理
31 3.讲师管理
32 4.班级管理
33 5.学员管理
34 6.退出并返回系统主界面
35 """
36 print(Colors(msg))
37 print('当前用户:%s' %self.user.username)
38 print("".center(50, '-'))
39 choice = input(Colors('请输入要执行的指令:', 'cyan')).strip()
40 if choice == '6':break
41 if class_dic.get(choice):
42 class_dic.get(choice)(self.session, self.user)
43 else:
44 print(Colors('无效的指令!', 'red'))
45
46 class Manage_school(object):
47 """校区管理"""
48 def __init__(self, session, user):
49 self.session = session
50 self.user = user
51 self.handle()
52
53 def handle(self):
54 while True:
55 print("校区管理界面".center(45, '-'))
56 msg = """
57 创建校区 create_school
58 查看校区 display_school
59 删除校区 delete_school
60 修改校区 update_school
61 添加/删除课程 add_course/del_course
62 查看各校区已有课程 display_sch_courses
63 添加/删除讲师 add_teacher/del_teacher
64 查看各校区已有讲师 display_sch_teachers
65 查看各校区已有班级 display_sch_classes
66 添加/删除学员 add_student/del_student
67 查看各校区已有学员 display_sch_students
68 返回管理员中心 b
69 """
70 print(Colors(msg))
71 print('当前用户:%s' %self.user.username)
72 print("".center(50, '-'))
73 choice = input(Colors('请输入要执行的指令(b 返回):', 'cyan')).strip()
74 if choice == 'b':break
75 if hasattr(self, choice):
76 getattr(self, choice)()
77 else:
78 print(Colors('无效的指令!', 'red'))
79
80 def create_school(self):
81 while True:
82 add_school_name = input(Colors('请输入要创建的校区名(b 返回):', 'cyan')).strip()
83 if add_school_name == 'b':break
84 if not add_school_name:continue
85 #判断该校区名是否存在
86 sch_obj = self.session.query(School).filter(School.name==add_school_name).first()
87 if sch_obj:
88 print(Colors('该校区名已存在!', 'red'))
89 continue
90 while True:
91 add_school_address = input(Colors('请输入校区地址(b 返回):', 'cyan')).strip()
92 if add_school_address == 'b':break
93 if not add_school_address:continue
94 #更新School表
95 sch_obj = School(name=add_school_name, address=add_school_address)
96 self.session.add_all([sch_obj, ])
97 self.session.commit()
98 print(Colors('创建校区成功!', 'green'))
99 break
100
101 def display_school(self):
102 return commons.display_school(self.session)
103
104 def delete_school(self):
105 while True:
106 #判断School表是否为空
107 if not self.display_school():break
108 del_school_name = input(Colors('请输入要删除的校区名(b 返回):', 'cyan')).strip()
109 if not del_school_name:continue
110 if del_school_name == 'b':break
111 #判断该校区名是否存在
112 sch_obj = self.session.query(School).filter(School.name==del_school_name).first()
113 if not sch_obj:
114 print(Colors('该校区名不存在!', 'red'))
115 continue
116 else:
117 #删除School表记录
118 self.session.delete(sch_obj)
119 self.session.commit()
120 print(Colors('删除校区成功!', 'green'))
121
122 def update_school(self):
123 while True:
124 #判断School表是否为空
125 if not self.display_school():break
126 update_school_name = input(Colors('请输入要修改的校区名(b 返回):', 'cyan')).strip()
127 if not update_school_name:continue
128 if update_school_name == 'b':break
129 #判断该校区名是否存在
130 sch_obj = self.session.query(School).filter(School.name==update_school_name).first()
131 if not sch_obj:
132 print(Colors('该校区名不存在!', 'red'))
133 continue
134 else:
135 #修改School表记录
136 column_school = [{'name':'校区名'}, {'address':'地址'}, ]
137 res = commons.update_table(self.session, column_school, sch_obj)
138 if not res:return
139
140 def add_course(self):
141 """为某校区增设课程"""
142 sch_obj = commons.choice_school(self.session)
143 if not sch_obj:return
144 while True:
145 #查看所有课程并判断Course表是否为空
146 if not commons.display_course(self.session):return
147 #展示该校区已有课程信息
148 commons.display_sch_courses(sch_obj)
149 add_course_name = input(Colors('请输入要增设的课程名(b 返回):', 'cyan')).strip()
150 if not add_course_name:continue
151 if add_course_name == 'b':break
152 #判断该课程名是否存在
153 cou_obj = self.session.query(Course).filter(Course.name==add_course_name).first()
154 if not cou_obj:
155 print(Colors('该课程名不存在!', 'red'))
156 continue
157 #判断该校区是否已经有该课程
158 if cou_obj not in sch_obj.courses:
159 #更新school_m2m_course表
160 sch_obj.courses.append(cou_obj)
161 self.session.commit()
162 print(Colors('增设课程成功!', 'green'))
163 else:
164 print(Colors('该校区已经有该课程!', 'red'))
165
166 def display_sch_courses(self):
167 """查看各校区已有课程"""
168 sch_obj_li = self.session.query(School).all()
169 if sch_obj_li:
170 for sch_obj in sch_obj_li:
171 #展示某校区所有课程信息
172 commons.display_sch_courses(sch_obj)
173 else:
174 print(Colors('现在还没有校区,请先创建校区!', 'red'))
175
176 def del_course(self):
177 sch_obj = commons.choice_school(self.session)
178 if not sch_obj:return
179 while True:
180 #展示该校区已有课程信息
181 res = commons.display_sch_courses(sch_obj)
182 if not res:return
183 del_course_name = input(Colors('请输入要删除的课程名(b 返回):', 'cyan')).strip()
184 if not del_course_name:continue
185 if del_course_name == 'b':break
186 #判断该校区是否存在该课程
187 cou_obj = self.session.query(Course).join(school_m2m_course).join(School).filter(School.name==sch_obj.name).filter(Course.name==del_course_name).first()
188 if not cou_obj:
189 print(Colors('该校区没有该课程!', 'red'))
190 continue
191 else:
192 #删除该校区的该课程
193 sch_obj.courses.remove(cou_obj)
194 self.session.commit()
195 print(Colors('删除课程[%s]成功!'%cou_obj.name, 'green'))
196
197 def add_teacher(self):
198 sch_obj = commons.choice_school(self.session)
199 if not sch_obj:return
200 while True:
201 #查看所有讲师并判断Teacher表是否为空
202 if not commons.display_teacher(self.session):return
203 #展示该校区已有讲师信息
204 commons.display_sch_teachers(sch_obj)
205 add_tea_card_id = input(Colors('请输入要创建的讲师身份证号码(b 返回):', 'cyan')).strip()
206 if not add_tea_card_id:continue
207 if add_tea_card_id == 'b':break
208 #判断该讲师身份证号是否存在
209 tea_obj = self.session.query(Teacher).filter(Teacher.card_id==add_tea_card_id).first()
210 if not tea_obj:
211 print(Colors('该讲师身份证号不存在!', 'red'))
212 continue
213 #判断该校区是否已经有该讲师
214 if tea_obj not in sch_obj.teachers:
215 #更新school_m2m_teacher表
216 sch_obj.teachers.append(tea_obj)
217 self.session.commit()
218 print(Colors('添加讲师成功!', 'green'))
219 else:
220 print(Colors('该校区已经有该讲师!', 'red'))
221
222 def display_sch_teachers(self):
223 """查看各校区已有讲师"""
224 sch_obj_li = self.session.query(School).all()
225 if sch_obj_li:
226 for sch_obj in sch_obj_li:
227 #展示某校区所有讲师信息
228 commons.display_sch_teachers(sch_obj)
229 else:
230 print(Colors('现在还没有校区,请先创建校区!', 'red'))
231
232 def del_teacher(self):
233 sch_obj = commons.choice_school(self.session)
234 if not sch_obj:return
235 while True:
236 #展示该校区已有讲师信息
237 res = commons.display_sch_teachers(sch_obj)
238 if not res:return
239 del_tea_card_id = input(Colors('请输入要删除的讲师身份证号码(b 返回):', 'cyan')).strip()
240 if not del_tea_card_id:continue
241 if del_tea_card_id == 'b':break
242 #判断该校区是否存在该讲师
243 tea_obj = self.session.query(Teacher).join(school_m2m_teacher).join(School).filter(School.name==sch_obj.name).filter(Teacher.card_id==del_tea_card_id).first()
244 if not tea_obj:
245 print(Colors('校区[%s]没有该讲师身份证号码[%s]!'%(sch_obj.name, del_tea_card_id), 'red'))
246 continue
247 else:
248 #删除该校区的该讲师
249 sch_obj.teachers.remove(tea_obj)
250 self.session.commit()
251 print(Colors('删除讲师[%s]成功!'%tea_obj.name, 'green'))
252
253 def display_sch_classes(self):
254 """查看各校区已有班级"""
255 sch_obj_li = self.session.query(School).all()
256 if sch_obj_li:
257 for sch_obj in sch_obj_li:
258 #展示某校区所有班级信息
259 commons.display_sch_classes(sch_obj)
260 else:
261 print(Colors('现在还没有校区,请先创建校区!', 'red'))
262
263 def add_student(self):
264 sch_obj = commons.choice_school(self.session)
265 if not sch_obj:return
266 while True:
267 #查看所有学员并判断Student表是否为空
268 if not commons.display_student(self.session):return
269 #展示该校区已有学员信息
270 commons.display_sch_students(sch_obj)
271 add_stu_qq = input(Colors('请输入要添加的学员QQ(b 返回):', 'cyan')).strip()
272 if not add_stu_qq:continue
273 if add_stu_qq == 'b':break
274 #判断该学员QQ是否存在
275 stu_obj = self.session.query(Student).filter(Student.qq==add_stu_qq).first()
276 if not stu_obj:
277 print(Colors('该学员QQ[%s]不存在!'%add_stu_qq, 'red'))
278 continue
279 #判断该校区是否已经有该学员
280 if stu_obj not in sch_obj.students:
281 #更新school_m2m_student表
282 sch_obj.students.append(stu_obj)
283 self.session.commit()
284 print(Colors('添加学员[%s]成功!'%stu_obj.name, 'green'))
285 else:
286 print(Colors('校区[%s]已经有学员[%s]!'%(sch_obj.name, stu_obj.name), 'red'))
287
288 def display_sch_students(self):
289 """查看各校区已有学员"""
290 sch_obj_li = self.session.query(School).all()
291 if sch_obj_li:
292 for sch_obj in sch_obj_li:
293 #展示某校区所有学员信息
294 commons.display_sch_students(sch_obj)
295 else:
296 print(Colors('现在还没有校区,请先创建校区!', 'red'))
297
298 def del_student(self):
299 sch_obj = commons.choice_school(self.session)
300 if not sch_obj:return
301 while True:
302 #展示该校区已有学员信息
303 res = commons.display_sch_students(sch_obj)
304 if not res:return
305 del_stu_qq = input(Colors('请输入要删除的学员QQ(b 返回):', 'cyan')).strip()
306 if not del_stu_qq:continue
307 if del_stu_qq == 'b':break
308 #判断该校区是否存在该学员
309 stu_obj = self.session.query(Student).join(school_m2m_student).join(School).filter(School.name==sch_obj.name).filter(Student.qq==del_stu_qq).first()
310 if not stu_obj:
311 print(Colors('校区[%s]不存在该学员QQ[%s]!'%(sch_obj.name, del_stu_qq), 'red'))
312 continue
313 else:
314 #删除该校区的该学员
315 sch_obj.students.remove(stu_obj)
316 self.session.commit()
317 print(Colors('删除学员[%s]成功!'%stu_obj.name, 'green'))
318
319 class Manage_course(object):
320 def __init__(self, session, user):
321 self.session = session
322 self.user = user
323 self.handle()
324
325 def handle(self):
326 while True:
327 print("课程管理界面".center(45, '-'))
328 msg = """
329 创建课程 create_course
330 查看课程 display_course
331 删除课程 delete_course
332 修改课程 update_course
333 返回管理员中心 b
334 """
335 print(Colors(msg))
336 print('当前用户:%s' %self.user.username)
337 print("".center(50, '-'))
338 choice = input(Colors('请输入要执行的指令(b 返回):', 'cyan')).strip()
339 if choice == 'b':break
340 if hasattr(self, choice):
341 getattr(self, choice)()
342 else:
343 print(Colors('无效的指令!', 'red'))
344
345 def create_course(self):
346 while True:
347 add_course_name = input(Colors('请输入要创建的课程名(b 返回):', 'cyan')).strip()
348 if add_course_name == 'b':break
349 if not add_course_name:continue
350 cou_obj = self.session.query(Course).filter(Course.name==add_course_name).first()
351 #判断该课程名是否存在
352 if cou_obj:
353 print(Colors('该课程名已存在!', 'red'))
354 continue
355 while True:
356 add_course_price = input(Colors('请输入课程价格(b 返回):', 'cyan')).strip()
357 if add_course_price == 'b':break
358 if not add_course_price:continue
359 if not add_course_price.isdigit():
360 print(Colors('无效的价格,请输入数字!', 'red'))
361 continue
362 #更新Course表
363 cou_obj = Course(name=add_course_name, price=add_course_price)
364 self.session.add_all([cou_obj, ])
365 self.session.commit()
366 print(Colors('创建课程成功!', 'green'))
367 break
368
369 def display_course(self):
370 return commons.display_course(self.session)
371
372 def delete_course(self):
373 while True:
374 #判断Course表是否为空
375 if not self.display_course():break
376 del_course_name = input(Colors('请输入要删除的课程名(b 返回):', 'cyan')).strip()
377 if not del_course_name:continue
378 if del_course_name == 'b':break
379 #判断该课程名是否存在
380 cou_obj = self.session.query(Course).filter(Course.name==del_course_name).first()
381 if not cou_obj:
382 print(Colors('该课程名不存在!', 'red'))
383 continue
384 else:
385 #删除Course表记录
386 self.session.delete(cou_obj)
387 self.session.commit()
388 print(Colors('删除课程成功!', 'green'))
389
390 def update_course(self):
391 while True:
392 #判断Course表是否为空
393 if not self.display_course():break
394 update_course_name = input(Colors('请输入要修改的课程名(b 返回):', 'cyan')).strip()
395 if not update_course_name:continue
396 if update_course_name == 'b':break
397 #判断该课程名是否存在
398 cou_obj = self.session.query(Course).filter(Course.name==update_course_name).first()
399 if not cou_obj:
400 print(Colors('该课程名不存在!', 'red'))
401 continue
402 else:
403 #修改Course表记录
404 column_course = [{'name':'课程名'}, {'price':'价格'}, ]
405 res = commons.update_table(self.session, column_course, cou_obj)
406 if not res:return
407
408 class Manage_teacher(object):
409 def __init__(self, session, user):
410 self.session = session
411 self.user = user
412 self.handle()
413
414 def handle(self):
415 while True:
416 print("讲师管理界面".center(45, '-'))
417 msg = """
418 创建讲师 create_teacher
419 查看讲师 display_teacher
420 删除讲师 delete_teacher
421 修改讲师 update_teacher
422 添加/删除任课的班级课程 add_c2c/del_c2c
423 查看各讲师任课的班级课程 display_tea_c2c
424 返回管理员中心 b
425 """
426 print(Colors(msg))
427 print('当前用户:%s' %self.user.username)
428 print("".center(50, '-'))
429 choice = input(Colors('请输入要执行的指令(b 返回):', 'cyan')).strip()
430 if choice == 'b':break
431 if hasattr(self, choice):
432 getattr(self, choice)()
433 else:
434 print(Colors('无效的指令!', 'red'))
435
436 def create_teacher(self):
437 while True:
438 add_teacher_card_id = input(Colors('请输入要创建的讲师身份证号码(b 返回):', 'cyan')).strip()
439 if add_teacher_card_id == 'b':break
440 if not add_teacher_card_id:continue
441 if not add_teacher_card_id[:-1].isdigit() or not len(add_teacher_card_id) == 18:
442 print(Colors('无效的身份证号码,请输入正确格式身份证号码!', 'red'))
443 continue
444 tea_obj = self.session.query(Teacher).filter(Teacher.card_id==add_teacher_card_id).first()
445 if tea_obj:
446 print(Colors('该身份证号码已存在!', 'red'))
447 continue
448 while True:
449 add_teacher_name = input(Colors('请输入要创建的讲师名(b 返回):', 'cyan')).strip()
450 if add_teacher_name == 'b':break
451 if not add_teacher_name:continue
452 user_obj_id = commons.create_user(self.session, 1)
453 if not user_obj_id:continue
454 #更新teacher表
455 tea_obj = Teacher(name=add_teacher_name, card_id=add_teacher_card_id, user_id=user_obj_id)
456 self.session.add_all([tea_obj, ])
457 self.session.commit()
458 print(Colors('创建讲师成功!', 'green'))
459 break
460
461 def display_teacher(self):
462 return commons.display_teacher(self.session)
463
464 def delete_teacher(self):
465 while True:
466 print("开始删除讲师".center(45, '-'))
467 #判断Teacher表是否为空
468 if not self.display_teacher():break
469 del_tea_card_id = input(Colors('请输入要删除的讲师的身份证号码(b 返回):', 'cyan')).strip()
470 if not del_tea_card_id:continue
471 if del_tea_card_id == 'b':break
472 #判断该讲师身份证号码是否存在
473 tea_obj = self.session.query(Teacher).filter(Teacher.card_id==del_tea_card_id).first()
474 if not tea_obj:
475 print(Colors('该讲师身份证号码不存在!', 'red'))
476 continue
477 else:
478 #删除Teacher表记录
479 self.session.delete(tea_obj)
480 #删除User表
481 self.session.delete(tea_obj.user)
482 self.session.commit()
483 print(Colors('删除讲师成功!同时该讲师账号已被注销!', 'green'))
484
485 def update_teacher(self):
486 while True:
487 #判断Teacher表是否为空
488 if not self.display_teacher():break
489 update_tea_card_id = input(Colors('请输入要修改的讲师的身份证号码(b 返回):', 'cyan')).strip()
490 if not update_tea_card_id:continue
491 if update_tea_card_id == 'b':break
492 #判断该讲师身份证号码是否存在
493 tea_obj = self.session.query(Teacher).filter(Teacher.card_id==update_tea_card_id).first()
494 if not tea_obj:
495 print(Colors('该讲师身份证号码不存在!', 'red'))
496 continue
497 else:
498 #修改Teacher表记录
499 column_teacher = [{'name':'讲师名'}, {'card_id':'身份证号码'},]
500 res = commons.update_table(self.session, column_teacher, tea_obj)
501 if not res:return
502
503 def add_c2c(self):
504 tea_obj = commons.choice_teacher(self.session)
505 if not tea_obj:return
506 while True:
507 #选择该讲师任教的校区
508 if not commons.display_tea_schools(tea_obj):return
509 sch_name = input(Colors('请选择任教的校区名(b 结束操作):', 'cyan')).strip()
510 if sch_name == 'b':return
511 if not sch_name:continue
512 sch_obj = self.session.query(School).join(school_m2m_teacher).join(Teacher).
513 filter(Teacher.name==tea_obj.name).filter(School.name==sch_name).first()
514 if not sch_obj:
515 print(Colors('讲师[%s]没有任教该校区[%s]!'%(tea_obj.name, sch_name), 'red'))
516 continue
517 while True:
518 #判断该校区是否有班级,有则继续选择讲师任课的班级
519 if not commons.display_sch_classes(sch_obj):break
520 commons.display_tea_sch_c2c(tea_obj, sch_obj)
521 cls_name = input(Colors('请输入讲师[%s]任课的班级名(b 返回):'%tea_obj.name, 'cyan')).strip()
522 if cls_name == 'b':break
523 if not cls_name:continue
524 cls_obj = self.session.query(Class).join(School).filter(School.name==sch_name).filter(Class.name==cls_name).first()
525 if not cls_obj:
526 print(Colors('校区[%s]不存在班级[%s]!'%(sch_name, cls_name), 'red'))
527 continue
528 while True:
529 #判断该班级是否有关联课程,有则继续选择讲师任课的课程
530 if not commons.display_cls_courses(cls_obj):break
531 commons.display_tea_cls_courses(self.session, tea_obj, cls_obj)
532 cou_name = input(Colors('请输入讲师[%s]任课的课程名(b 返回):'%tea_obj.name, 'cyan')).strip()
533 if cou_name == 'b':break
534 if not cou_name:continue
535 cou_obj = self.session.query(Course).join(Course_m2m_class).filter(Course_m2m_class.class_id==cls_obj.id).filter(Course.name==cou_name).first()
536 if not cou_obj:
537 print(Colors('班级[%s]没有添加课程[%s]!'%(sch_name, cls_name), 'red'))
538 continue
539 add_c2c_obj = self.session.query(Course_m2m_class).filter(Course_m2m_class.course_id==cou_obj.id).
540 filter(Course_m2m_class.class_id==cls_obj.id).filter(Course_m2m_class.teacher_id.isnot(None)).first()
541 if add_c2c_obj:
542 used_tea_obj = self.session.query(Teacher).join(Course_m2m_class).filter(Course_m2m_class.course_id==cou_obj.id)
543 .filter(Course_m2m_class.class_id==cls_obj.id).first()
544 print(Colors('该班级-课程[%s]已有任课讲师%s!请先删除该班级-课程的任课讲师'%(add_c2c_obj, used_tea_obj.name), 'red'))
545 continue
546 add_c2c_obj = self.session.query(Course_m2m_class).filter(Course_m2m_class.course_id==cou_obj.id).
547 filter(Course_m2m_class.class_id==cls_obj.id).first()
548 #更新course_m2m_class表
549 print(add_c2c_obj)
550 tea_obj.course_m2m_classes.append(add_c2c_obj)
551 self.session.commit()
552 print(Colors('添加任课的班级-课程[%s]成功!'%add_c2c_obj, 'green'))
553
554 def del_c2c(self):
555 while True:
556 tea_obj = commons.choice_teacher(self.session)
557 if not tea_obj:return
558 if not tea_obj.course_m2m_classes:
559 print(Colors('讲师[%s]还没有添加任课的班级-课程'%tea_obj.name, 'red'))
560 continue
561 while True:
562 #选择该讲师任教的校区
563 if not commons.display_tea_schools(tea_obj):return
564 sch_name = input(Colors('请选择任教的校区名(b 结束操作):', 'cyan')).strip()
565 if sch_name == 'b':return
566 if not sch_name:continue
567 sch_obj = self.session.query(School).join(school_m2m_teacher).join(Teacher).
568 filter(Teacher.id==tea_obj.id).filter(School.name==sch_name).first()
569 if not sch_obj:
570 print(Colors('讲师[%s]没有任教该校区[%s]!'%(tea_obj.name, sch_name), 'red'))
571 continue
572 while True:
573 #判断该讲师是否有任课的班级,有则继续选择删除任课的班级
574 if not commons.display_tea_sch_c2c(tea_obj, sch_obj):break
575 cls_name = input(Colors('请输入要删除任课的班级名(b 返回):', 'cyan')).strip()
576 if cls_name == 'b':break
577 if not cls_name:continue
578 while True:
579 cou_name = input(Colors('请输入要删除任课的课程名(b 返回):', 'cyan')).strip()
580 if cou_name == 'b':break
581 if not cou_name:continue
582 c2c_obj = self.session.query(Course_m2m_class).join(Course).join(Class).
583 filter(Class.school_id==sch_obj.id).filter(Class.name==cls_name).filter(Course.name==cou_name).first()
584 if c2c_obj not in tea_obj.course_m2m_classes:
585 print(Colors('讲师[%s]没有任课班级-课程[%s %s]'%(tea_obj.name, cls_name, cou_name), 'red'))
586 continue
587 #更新course_m2m_class表
588 tea_obj.course_m2m_classes.remove(c2c_obj)
589 self.session.commit()
590 print(Colors('删除任课的班级-课程[%s]成功!'%c2c_obj, 'green'))
591
592 def display_tea_c2c(self):
593 """查看各讲师任教的各校区任课的班级课程"""
594 tea_obj_li = self.session.query(Teacher).all()
595 if tea_obj_li:
596 for tea_obj in tea_obj_li:
597 for sch_obj in tea_obj.schools:
598 commons.display_tea_sch_c2c(tea_obj, sch_obj)
599 else:
600 print(Colors('现在还没有讲师,请先创建讲师!', 'red'))
601
602 class Manage_student(object):
603 def __init__(self, session, user):
604 self.session = session
605 self.user = user
606 self.handle()
607
608 def handle(self):
609 while True:
610 print("学员管理界面".center(45, '-'))
611 msg = """
612 创建学员 create_student
613 查看学员 display_student
614 删除学员 delete_student
615 修改学员 update_student
616 返回管理员中心 b
617 """
618 print(Colors(msg))
619 print('当前用户:%s' %self.user.username)
620 print("".center(50, '-'))
621 choice = input(Colors('请输入要执行的指令(b 返回):', 'cyan')).strip()
622 if choice == 'b':break
623 if hasattr(self, choice):
624 getattr(self, choice)()
625 else:
626 print(Colors('无效的指令!', 'red'))
627
628 def create_student(self):
629 while True:
630 add_stu_qq = input(Colors('请输入学生qq(b 返回):', 'cyan')).strip()
631 if add_stu_qq == 'b':return
632 if not add_stu_qq:continue
633 if not add_stu_qq.isdigit() or not len(add_stu_qq) > 3:
634 print(Colors('无效的qq号,请输入正确格式qq号!', 'red'))
635 continue
636 stu_obj = self.session.query(Student).filter(Student.qq==add_stu_qq).first()
637 if stu_obj:
638 print(Colors('该qq号已存在!', 'red'))
639 continue
640 while True:
641 add_stu_name = input(Colors('请输入要创建的学生名(b 返回):', 'cyan')).strip()
642 if add_stu_name == 'b':return
643 if not add_stu_name:continue
644 user_obj_id = commons.create_user(self.session, 2)
645 if not user_obj_id:continue
646 #更新student表
647 stu_obj = Student(name=add_stu_name, qq=add_stu_qq, user_id=user_obj_id)
648 self.session.add_all([stu_obj, ])
649 self.session.commit()
650 print(Colors('创建学生成功!', 'green'))
651 break
652
653 def display_student(self):
654 return commons.display_student(self.session)
655
656 def delete_student(self):
657 while True:
658 #判断Student表是否为空
659 if not self.display_student():break
660 del_stu_qq = input(Colors('请输入要删除的学生的QQ号码(b 返回):', 'cyan')).strip()
661 if not del_stu_qq:continue
662 if del_stu_qq == 'b':break
663 #判断该学生qq号码是否存在
664 stu_obj = self.session.query(Student).filter(Student.qq==del_stu_qq).first()
665 if not stu_obj:
666 print(Colors('该学生qq号码不存在!', 'red'))
667 continue
668 else:
669 #删除Student表记录
670 self.session.delete(stu_obj)
671 #删除User表
672 self.session.delete(stu_obj.user)
673 self.session.commit()
674 print(Colors('删除学生成功!同时该学生账号已被注销!', 'green'))
675
676 def update_student(self):
677 while True:
678 #判断Student表是否为空
679 if not self.display_student():break
680 update_stu_qq = input(Colors('请输入要修改的学生的QQ号码(b 返回):', 'cyan')).strip()
681 if not update_stu_qq:continue
682 if update_stu_qq == 'b':break
683 #判断该学生qq号码是否存在
684 stu_obj = self.session.query(Student).filter(Student.qq==update_stu_qq).first()
685 if not stu_obj:
686 print(Colors('该学生qq号码不存在!', 'red'))
687 continue
688 else:
689 #修改Student表记录
690 column_student = [{'name':'学生名'}, {'qq':'QQ号码'},]
691 res = commons.update_table(self.session, column_student, stu_obj)
692 if not res:return
693
694 class Manage_class(object):
695 def __init__(self, session, user):
696 self.session = session
697 self.user = user
698 self.handle()
699
700 def handle(self):
701 while True:
702 print("课程管理界面".center(45, '-'))
703 msg = """
704 创建班级 create_class
705 查看班级 display_class
706 删除班级 delete_class
707 修改班级 update_class
708 添加/删除课程 add_course/del_course
709 添加/删除学员 add_student/del_student
710 查看各班级的课程 display_cls_course
711 查看各班级的学员 display_cls_student
712 返回管理员中心 b
713 """
714 print(Colors(msg))
715 print('当前用户:%s' %self.user.username)
716 print("".center(50, '-'))
717 choice = input(Colors('请输入要执行的指令(b 返回):', 'cyan')).strip()
718 if choice == 'b':break
719 if hasattr(self, choice):
720 getattr(self, choice)()
721 else:
722 print(Colors('无效的指令!', 'red'))
723
724 def create_class(self):
725 sch_obj = commons.choice_school(self.session)
726 if not sch_obj:return
727 while True:
728 add_class_name = input(Colors('请输入要创建的班级名(b 返回):', 'cyan')).strip()
729 if add_class_name == 'b':return
730 if not add_class_name:continue
731 #判断该校区是否已经存在该班级
732 cls_obj = self.session.query(Class).join(School).filter(School.name==sch_obj.name).filter(Class.name==add_class_name).first()
733 if cls_obj:
734 print(Colors('该校区已有该班级!', 'red'))
735 continue
736 #更新Class表
737 cls_obj = Class(name=add_class_name, school_id=sch_obj.id)
738 self.session.add_all([cls_obj, ])
739 self.session.commit()
740 print(Colors('创建班级成功!', 'green'))
741
742 def display_class(self):
743 return commons.display_class(self.session)
744
745 def delete_class(self):
746 while True:
747 #判断Class表是否为空
748 if not self.display_class():break
749 del_class_name = input(Colors('请输入要删除的班级名(b 返回):', 'cyan')).strip()
750 if del_class_name == 'b':return
751 sch_name = input(Colors('请输入删除的班级所属校区名(b 返回):', 'cyan')).strip()
752 if sch_name == 'b':return
753 #判断该校区是否存在该班级
754 cls_obj = self.session.query(Class).join(School).filter(Class.name==del_class_name).filter(School.name==sch_name).first()
755 if not cls_obj:
756 print(Colors('该校区[%s]下不存在班级[%s]!'%(sch_name, del_class_name), 'red'))
757 continue
758 #删除Class表记录
759 self.session.delete(cls_obj)
760 self.session.commit()
761 print(Colors('删除班级成功!', 'green'))
762
763 def update_class(self):
764 while True:
765 #判断Class表是否为空
766 if not self.display_class():break
767 update_class_name = input(Colors('请输入要修改的班级名(b 返回):', 'cyan')).strip()
768 if update_class_name == 'b':return
769 sch_name = input(Colors('请输入要修改班级所属校区名(b 返回):', 'cyan')).strip()
770 if sch_name == 'b':return
771 #判断该校区是否存在该班级
772 cls_obj = self.session.query(Class).join(School).filter(Class.name==update_class_name).filter(School.name==sch_name).first()
773 if not cls_obj:
774 print(Colors('该校区[%s]下不存在班级[%s]!'%(sch_name, update_class_name), 'red'))
775 continue
776 #修改Class表记录
777 column_class = [{'name':'班级名'},]
778 res = commons.update_table(self.session, column_class, cls_obj)
779 if not res:return
780
781 def add_course(self):
782 """为某班级添加课程"""
783 sch_obj, cls_obj = commons.choice_class(self.session)
784 if not cls_obj:return
785 while True:
786 #展示所选校区所有课程信息,并判断所选校区已有课程是否为空
787 if not commons.display_sch_courses(sch_obj):return
788 #展示该班级已有课程信息
789 commons.display_cls_courses(cls_obj)
790 add_cou_name = input(Colors('请输入要添加的课程名(b 返回):', 'cyan')).strip()
791 if not add_cou_name:continue
792 if add_cou_name == 'b':break
793 #判断所选校区是否存在该课程名
794 cou_obj = self.session.query(Course).join(school_m2m_course).join(School).filter(School.id==sch_obj.id).filter(Course.name==add_cou_name).first()
795 if not cou_obj:
796 print(Colors('所选校区[%s]没有该课程[%s]!'%(sch_obj.name, add_cou_name), 'red'))
797 continue
798 #判断该班级是否已经有该课程
799 if cou_obj not in cls_obj.courses:
800 #更新course_m2m_class表
801 cls_obj.courses.append(cou_obj)
802 self.session.commit()
803 print(Colors('班级[%s]添加课程[%s]成功!'%(cls_obj.name, cou_obj.name), 'green'))
804 else:
805 print(Colors('班级[%s]已经有该课程[%s]!'%(cls_obj.name, cou_obj.name), 'red'))
806
807 def del_course(self):
808 sch_obj, cls_obj = commons.choice_class(self.session)
809 if not cls_obj:return
810 while True:
811 #展示该班级已有课程信息,没有则退出
812 if not commons.display_cls_courses(cls_obj):return
813 del_cou_name = input(Colors('请输入要删除的课程名(b 返回):', 'cyan')).strip()
814 if not del_cou_name:continue
815 if del_cou_name == 'b':break
816 #判断该班级是否存在该课程
817 cou_obj = self.session.query(Course).join(Course_m2m_class).join(Class).filter(Class.name==cls_obj.name).filter(Course.name==del_cou_name).first()
818 if not cou_obj:
819 print(Colors('班级[%s]没有该课程[%s]!'%(cls_obj.name, del_cou_name), 'red'))
820 continue
821 else:
822 #删除该班级的该课程
823 cls_obj.courses.remove(cou_obj)
824 self.session.commit()
825 print(Colors('班级[%s]删除课程[%s]成功!'%(cls_obj.name, cou_obj.name), 'green'))
826
827 def display_cls_course(self):
828 """查看各校区下各班级已有课程"""
829 sch_obj_li = self.session.query(School).all()
830 if sch_obj_li:
831 for sch_obj in sch_obj_li:
832 print('校区[%s]:'%sch_obj.name)
833 if sch_obj.classes:
834 for cls_obj in sch_obj.classes:
835 #展示某班级所有课程信息
836 commons.display_cls_courses(cls_obj)
837 else:
838 print(Colors('现在还没有校区,请先创建校区!', 'red'))
839 else:
840 print(Colors('现在还没有校区,请先创建校区!', 'red'))
841
842 def add_student(self):
843 """为某班级添加学员"""
844 sch_obj, cls_obj = commons.choice_class(self.session)
845 if not cls_obj:return
846 while True:
847 #展示所选校区所有学员信息,并判断所选校区已有学员是否为空
848 if not commons.display_sch_students(sch_obj):return
849 #展示该班级已有学员信息
850 commons.display_cls_students(cls_obj)
851 add_stu_qq = input(Colors('请输入要添加的学员QQ(b 返回):', 'cyan')).strip()
852 if not add_stu_qq:continue
853 if add_stu_qq == 'b':break
854 #判断所选校区是否存在该学员QQ
855 stu_obj = self.session.query(Student).join(school_m2m_student).join(School).filter(School.id==sch_obj.id).filter(Student.qq==add_stu_qq).first()
856 if not stu_obj:
857 print(Colors('所选校区[%s]没有该学员QQ[%s]!'%(sch_obj.name, add_stu_qq), 'red'))
858 continue
859 #判断该班级是否已经有该学员
860 if stu_obj not in cls_obj.students:
861 #更新student_m2m_class表
862 cls_obj.students.append(stu_obj)
863 self.session.commit()
864 print(Colors('班级[%s]添加学员[%s]成功!'%(cls_obj.name, stu_obj.name), 'green'))
865 else:
866 print(Colors('班级[%s]已经有该学员[%s]!'%(cls_obj.name, stu_obj.name), 'red'))
867
868 def del_student(self):
869 sch_obj, cls_obj = commons.choice_class(self.session)
870 if not cls_obj:return
871 while True:
872 #展示该班级已有学员信息,没有则退出
873 if not commons.display_cls_students(cls_obj):return
874 del_stu_qq = input(Colors('请输入要删除的学员QQ(b 返回):', 'cyan')).strip()
875 if not del_stu_qq:continue
876 if del_stu_qq == 'b':break
877 #判断该班级是否存在该学员
878 stu_obj = self.session.query(Student).join(student_m2m_class).filter(student_m2m_class.class_id==cls_obj.id).filter(Student.qq==del_stu_qq).first()
879 if not stu_obj:
880 print(Colors('班级[%s]没有该学员QQ[%s]!'%(cls_obj.name, del_stu_qq), 'red'))
881 continue
882 else:
883 #删除该班级的该学员
884 cls_obj.students.remove(stu_obj)
885 self.session.commit()
886 print(Colors('班级[%s]删除学员[%s]成功!'%(cls_obj.name, stu_obj.name), 'green'))
887
888 def display_cls_student(self):
889 """查看各校区下各班级已有学员"""
890 sch_obj_li = self.session.query(School).all()
891 if sch_obj_li:
892 for sch_obj in sch_obj_li:
893 print('校区[%s]:'%sch_obj.name)
894 if sch_obj.classes:
895 for cls_obj in sch_obj.classes:
896 #展示某班级所有学员信息
897 commons.display_cls_students(cls_obj)
898 else:
899 print(Colors('现在还没有校区,请先创建校区!', 'red'))
900 else:
901 print(Colors('现在还没有校区,请先创建校区!', 'red'))
902
903 def display_course(self):
904 """展示该校区所有课程信息"""
905 if not len(self.school.courses) == 0:
906 print('该校区已有课程信息如下:')
907 column_course = [{'name':'课程名'}, {'price':'价格'}, ]
908 fmt_cou_table = commons.fmt_table(column_course, self.school.courses)
909 print(fmt_cou_table)
910 return True
911 else:
912 print(Colors('该校区还没有课程,请先为该校区增设课程!', 'red'))
913
914 def delete_course(self):
915 while True:
916 #判断该校区的课程是否为空
917 if not self.display_course():break
918 del_course_name = input(Colors('请输入要删除的课程名(b 返回):', 'cyan')).strip()
919 if not del_course_name:continue
920 if del_course_name == 'b':break
921 #判断该校区是否存在该课程
922 cou_obj = self.session.query(Course).join(school_m2m_course).join(School).filter(School.name==self.school.name).filter(Course.name==del_course_name).first()
923 if not cou_obj:
924 print(Colors('该校区没有该课程!', 'red'))
925 continue
926 else:
927 #删除该校区的该课程
928 self.school.courses.remove(cou_obj)
929 self.session.commit()
930 print(Colors('该校区删除课程成功!', 'green'))
931
932 def display_teacher(self):
933 """展示该校区所有讲师信息"""
934 if self.school.teachers:
935 column_teacher = [{'name':'讲师名'}, {'card_id':'身份证号码'}, {'user':'账号信息'}]
936 fmt_tea_table = commons.fmt_table(column_teacher, self.school.teachers)
937 print(Colors('该校区已有讲师信息如下:'))
938 print(fmt_tea_table)
939 return True
940 else:
941 print(Colors('该校区还没有讲师,请先为该校区创建讲师!', 'red'))
942
943 def create_teacher(self):
944 add_teacher_name = None
945 add_teacher_card_id = None
946 add_username = None
947 add_password = None
948 sch_obj = None
949 cou_m2m_cls_li = []
950 while True:
951 add_teacher_name = input(Colors('请输入要创建的讲师名(b 返回):', 'cyan')).strip()
952 if add_teacher_name == 'b':return
953 if not add_teacher_name:continue
954 break
955 while True:
956 add_teacher_card_id = input(Colors('请输入讲师身份证号码(b 返回):', 'cyan')).strip()
957 if add_teacher_card_id == 'b':return
958 if not add_teacher_card_id:continue
959 if not add_teacher_card_id[:-1].isdigit() or not len(add_teacher_card_id) == 18:
960 print(Colors('无效的身份证号码,请输入正确格式身份证号码!', 'red'))
961 continue
962 tea_obj = self.session.query(Teacher).filter(Teacher.card_id==add_teacher_card_id).first()
963 if tea_obj:
964 print(Colors('该身份证号码已存在!', 'red'))
965 continue
966 break
967 while True:
968 add_username = input(Colors('请输入该讲师用于登陆的用户名(b 返回):', 'cyan')).strip()
969 if add_username == 'b':return
970 if not add_username:continue
971 user_obj = self.session.query(User).filter(User.username==add_username).first()
972 if user_obj:
973 print(Colors('该用户名已存在!', 'red'))
974 continue
975 break
976 while True:
977 add_password = input(Colors('请输入该讲师用于登陆的密码(b 返回):', 'cyan')).strip()
978 if add_password == 'b':return
979 if not add_password:continue
980 md5 = hashlib.md5()
981 md5.update(add_password.encode('utf-8'))
982 add_password = md5.hexdigest()
983 break
984 #选择该讲师归属的校区
985 while while_flag:
986 res = self.display_school()
987 if not res:
988 while_flag = False
989 break
990 sch_name = input(Colors('请输入该讲师归属的校区名(b 返回):', 'cyan')).strip()
991 if sch_name == 'b':while_flag = False
992 if not sch_name:continue
993 sch_obj = self.session.query(School).filter(School.name==sch_name).first()
994 if not sch_obj:
995 print(Colors('该校区名不存在!', 'red'))
996 continue
997 break
998 #判断该校区是否有班级,有则继续选择讲师任课的班级
999 if while_flag:
1000 if sch_obj.classes:
1001 choice_cls_obj_li = []
1002 choice_cls_name_li = []
1003 while while_flag:
1004 self.display_class(sch_name=sch_name)
1005 print('已选择班级:%s'%choice_cls_name_li)
1006 cls_name = input(Colors('请输入该讲师任课的班级名(b 返回|end 结束选择班级):', 'cyan')).strip()
1007 if cls_name == 'b':
1008 while_flag = False
1009 break
1010 if cls_name == 'end':break
1011 if not cls_name:continue
1012 cls_obj = self.session.query(Class).join(School).filter(School.name==sch_name).filter(Class.name==cls_name).first()
1013 if not cls_obj:
1014 print(Colors('校区[%s]不存在[%s]该班级!'%(sch_name, cls_name), 'red'))
1015 continue
1016 if cls_obj in choice_cls_obj_li:
1017 print(Colors('已经选择过该班级', 'red'))
1018 continue
1019 #判断该班级是否有关联课程,有则继续选择讲师任课的课程
1020 if cls_obj.courses:
1021 choice_cou_obj_li = []
1022 choice_cou_name_li = []
1023 while while_flag:
1024 print('班级[%s]的所有课程:'%cls_obj.name)
1025 column_course = [{'name':'课程名'},]
1026 fmt_cou_table = commons.fmt_table(column_course, cls_obj.courses)
1027 print(fmt_cou_table)
1028 print('已选择课程:%s'%choice_cou_name_li)
1029 cou_name = input(Colors('请输入该讲师任课的课程名(b 返回|end 结束选择课程):', 'cyan')).strip()
1030 if cou_name == 'b':
1031 while_flag = False
1032 break
1033 if cou_name == 'end':
1034 if len(choice_cou_obj_li) != 0:
1035 for cou_obj in choice_cou_obj_li:
1036 cou_m2m_cls_li.append(self.session.query(Course_m2m_class).filter(Course_m2m_class.course_id==cou_obj.id).filter(Course_m2m_class.class_id==cls_obj.id).first())
1037 choice_cls_obj_li.append(cls_obj)
1038 choice_cls_name_li.append(cls_name)
1039 break
1040 if not cou_name:continue
1041 cou_obj = self.session.query(Course).join(Course_m2m_class).join(Class).filter(Class.name==cls_obj.name).filter(Course.name==cou_name).first()
1042 if not cou_obj:
1043 print(Colors('班级[%s]不存在[%s]该课程!'%(cls_obj.name, cou_name), 'red'))
1044 continue
1045 if cou_obj in choice_cou_obj_li:
1046 print(Colors('已经选择过该课程', 'red'))
1047 continue
1048 choice_cou_obj_li.append(cou_obj)
1049 choice_cou_name_li.append(cou_name)
1050 else:
1051 print(Colors('该班级还没有关联课程!', 'red'))
1052 else:
1053 print(Colors('该校区还没有设立班级,已经跳过为该讲师选择任课班级和课程的步骤!', 'red'))
1054 if while_flag:
1055 #至此,Teacher/course_m2m_class/User/school_m2m_teacher表所有外键关联确认完毕
1056 #更新User表
1057 user_obj = User(username=add_username, password=add_password, permission=1)
1058 self.session.add_all([user_obj, ])
1059 self.session.commit()
1060 #更新teacher表
1061 user_obj = self.session.query(User).filter(User.username==add_username).first()
1062 tea_obj = Teacher(name=add_teacher_name, card_id=add_teacher_card_id, user_id=user_obj.id)
1063 self.session.add_all([tea_obj, ])
1064 #更新school_m2m_teacher表
1065 tea_obj.schools = [sch_obj,]
1066 self.session.commit()
1067 #判断该校区是否有班级且选择的班级是否有课程,没有则不更新Course_m2m_class表
1068 if not len(cou_m2m_cls_li) == 0:
1069 #更新course_m2m_class表
1070 tea_obj.course_m2m_classes = cou_m2m_cls_li
1071 self.session.commit()
1072 print(Colors('创建讲师成功!', 'green'))
1073
1074 def create_student(self):
1075 while_flag = True
1076 add_stu_name = None
1077 add_stu_qq = None
1078 add_username = None
1079 add_password = None
1080 sch_obj = None
1081 cls_obj = None
1082 while while_flag:
1083 add_stu_name = input(Colors('请输入要创建的学生名(b 返回):', 'cyan')).strip()
1084 if add_stu_name == 'b':while_flag = False
1085 if not add_stu_name:continue
1086 break
1087 while while_flag:
1088 add_stu_qq = input(Colors('请输入学生qq(b 返回):', 'cyan')).strip()
1089 if add_stu_qq == 'b':while_flag = False
1090 if not add_stu_qq:continue
1091 if not add_stu_qq.isdigit() or not len(add_stu_qq) > 3:
1092 print(Colors('无效的qq号,请输入正确格式qq号!', 'red'))
1093 continue
1094 stu_obj = self.session.query(Student).filter(Student.qq==add_stu_qq).first()
1095 if stu_obj:
1096 print(Colors('该qq号已存在!', 'red'))
1097 continue
1098 else:
1099 break
1100 while while_flag:
1101 add_username = input(Colors('请输入该学生用于登陆的用户名(b 返回):', 'cyan')).strip()
1102 if add_username == 'b':while_flag = False
1103 if not add_username:continue
1104 #判断该用户名是否存在
1105 user_obj = self.session.query(User).filter(User.username==add_username).first()
1106 if user_obj:
1107 print(Colors('该用户名已存在!', 'red'))
1108 continue
1109 break
1110 while while_flag:
1111 add_password = input(Colors('请输入该学生用于登陆的密码(b 返回):', 'cyan')).strip()
1112 if add_password == 'b':while_flag = False
1113 if not add_password:continue
1114 md5 = hashlib.md5()
1115 md5.update(add_password.encode('utf-8'))
1116 add_password = md5.hexdigest()
1117 break
1118 #选择该学生注册的校区
1119 while while_flag:
1120 res = self.display_school()
1121 if not res:while_flag = False
1122 sch_name = input(Colors('请输入该学生注册的校区名(b 返回):', 'cyan')).strip()
1123 if sch_name == 'b':while_flag = False
1124 if not sch_name:continue
1125 sch_obj = self.session.query(School).filter(School.name==sch_name).first()
1126 if not sch_obj:
1127 print(Colors('该校区名不存在!', 'red'))
1128 continue
1129 break
1130 #判断该校区是否有班级,有则继续选择学生报名的班级,没有则退出
1131 if sch_obj.classes:
1132 while while_flag:
1133 self.display_class(sch_name=sch_name)
1134 cls_name = input(Colors('请输入学生报名的班级名(b 返回):', 'cyan')).strip()
1135 if cls_name == 'b':while_flag = False
1136 if not cls_name:continue
1137 cls_obj = self.session.query(Class).join(School).filter(School.name==sch_name).filter(Class.name==cls_name).first()
1138 if not cls_obj:
1139 print(Colors('校区[%s]不存在[%s]该班级!'%(sch_name, cls_name), 'red'))
1140 continue
1141 break
1142 else:
1143 print(Colors('该校区还没有设立班级,请先为该校区增设班级!', 'red'))
1144 return
1145 #至此,Student/User/school_m2m_student/student_m2m_class表所有外键关联确认完毕
1146 #更新User表
1147 user_obj = User(username=add_username, password=add_password, permission=2)
1148 self.session.add_all([user_obj, ])
1149 self.session.commit()
1150 #更新student表
1151 user_obj = self.session.query(User).filter(User.username==add_username).first()
1152 stu_obj = Student(name=add_stu_name, qq=add_stu_qq, user_id=user_obj.id)
1153 self.session.add_all([stu_obj, ])
1154 #更新school_m2m_student表
1155 stu_obj.schools = [sch_obj,]
1156 self.session.commit()
1157 #判断该校区是否有班级,没有则不更新student_m2m_class表
1158 if cls_obj:
1159 #更新course_m2m_class表
1160 stu_obj.classes = [cls_obj,]
1161 self.session.commit()
1162 print(Colors('创建学生成功!', 'green'))
1163
1164 def create_class(self):
1165 sch_obj = None #要创建班级的校区
1166 add_class_name = None #新增班级名
1167 tea_obj = None #该班级的班主任
1168 choice_cou_obj_li = None #该班级关联的课程列表
1169 while True:
1170 #判断School表是否为空
1171 res = Manage_school(self.session, self.user).display_school()
1172 if not res:break
1173 choice_school_name = input(Colors('请输入要创建班级的校区名(b 返回):', 'cyan')).strip()
1174 if not choice_school_name:continue
1175 if choice_school_name == 'b':return
1176 #判断该校区名是否存在
1177 sch_obj = self.session.query(School).filter(School.name==choice_school_name).first()
1178 if not sch_obj:
1179 print(Colors('该校区名不存在!', 'red'))
1180 continue
1181 break
1182 while True:
1183 add_class_name = input(Colors('请输入要创建的班级名(b 返回):', 'cyan')).strip()
1184 if add_class_name == 'b':return
1185 if not add_class_name:continue
1186 #判断该校区是否已经存在该班级
1187 cls_obj = self.session.query(Class).join(School).filter(School.name==sch_obj.name).filter(Class.name==add_class_name).first()
1188 if cls_obj:
1189 print(Colors('该校区已有该班级!', 'red'))
1190 continue
1191 break
1192 #判断该校区是否存在讲师
1193 if sch_obj.teachers:
1194 while True:
1195 Manage_teacher.display_teacher()
1196 add_class_tea_card_id = input(Colors('请输入该班级的班主任(讲师)身份证号(b 返回):', 'cyan')).strip()
1197 if add_class_tea_card_id == 'b':
1198 while_flag = False
1199 break
1200 if not add_class_tea_card_id:continue
1201 tea_obj = self.session.query(Teacher).join(school_m2m_teacher).join(School).filter(School.name==self.school.name).filter(Teacher.card_id==add_class_tea_card_id).first()
1202 if not tea_obj:
1203 print(Colors('该校区不存在该讲师身份证号!', 'red'))
1204 continue
1205 break
1206 else:
1207 print(Colors('该校区还没有讲师,已经跳过为该班级指定班主任(讲师)的步骤!', 'red'))
1208 if while_flag:
1209 #判断该校区是否存在课程,并为该班级关联课程
1210 if self.school.courses:
1211 choice_cou_obj_li = []
1212 choice_cou_name_li = []
1213 while while_flag:
1214 self.display_course()
1215 print(Colors('该班级已关联课程名:%s'%choice_cou_name_li, 'cyan'))
1216 cou_name = input(Colors('请输入该班级关联的课程名(b 返回|end 结束关联课程):', 'cyan')).strip()
1217 if cou_name == 'b':
1218 while_flag = False
1219 break
1220 if cou_name == 'end':break
1221 if not cou_name:continue
1222 cou_obj = self.session.query(Course).join(school_m2m_course).join(School).filter(School.name==self.school.name).filter(Course.name==cou_name).first()
1223 if not cou_obj:
1224 print(Colors('该校区不存在课程[%s]!'%cou_name, 'red'))
1225 continue
1226 if cou_obj in choice_cou_obj_li:
1227 print(Colors('该班级已关联该课程[%s]'%cou_name, 'red'))
1228 continue
1229 choice_cou_obj_li.append(cou_obj)
1230 choice_cou_name_li.append(cou_name)
1231 else:
1232 print(Colors('该校区还没有增设课程,已经跳过为该班级关联课程的步骤!', 'red'))
1233 if while_flag:
1234 #更新Class表
1235 if tea_obj:
1236 cls_obj = Class(name=add_class_name, school_id=self.school.id, class_teacher_id=tea_obj.id)
1237 else:
1238 cls_obj = Class(name=add_class_name, school_id=self.school.id)
1239 self.session.add_all([cls_obj, ])
1240 self.session.commit()
1241 #更新course_m2m_class表
1242 if choice_cou_obj_li:
1243 cls_obj = self.session.query(Class).join(School).filter(School.name==self.school.name).filter(Class.name==add_class_name).first()
1244 cls_obj.courses = choice_cou_obj_li
1245 self.session.commit()
1246 print(Colors('创建班级成功!', 'green'))