python做業學員管理系統(第十二週)

做業需求:python

用戶角色,講師\學員, 用戶登錄後根據角色不一樣,能作的事情不一樣,分別以下mysql

講師視圖linux

  管理班級,可建立班級,根據學員qq號把學員加入班級sql

  可建立指定班級的上課紀錄,注意一節上課紀錄對應多條學員的上課紀錄, 即每節課都有整班學員上, 爲了紀錄每位學員的學習成績,需在建立每節上課紀錄是,同時 爲這個班的每位學員建立一條上課紀錄數據庫

  爲學員批改爲績, 一條一條的手動修改爲績session

學員視圖app

提交做業ide

查看做業成績學習

一個學員能夠同時屬於多個班級,就像報了Linux的同時也能夠報名Python同樣, 因此提交做業時需先選擇班級,再選擇具體上課的節數測試

附加:學員能夠查看本身的班級成績排名

數據庫關聯示意圖:

思路解析:

按照數據庫關聯,操做班級教室分數和上課記錄

講師視圖
1.管理班級,可建立班級
  操做class表,輸入classname後顯示如今有幾個課程幾個課程表,而後讓講師建立TeacheCourse關聯後才能建立班級
2. 根據學員qq號把學員加入班級
  操做StudentTeachClass表,把qq號加入班級ID,而後顯示,課程,課程表,班級,學員,
3. 可建立指定班級的上課紀錄,注意一節上課紀錄對應多條學員的上課紀錄,即每節課都有整班學員上,爲了紀錄每位學員的學習成績,需在建立每節上課紀錄,同時爲這個班的每位學員建立一條上課紀錄
  進入後顯示班級,根據進入時候的班級講師ID,操做teacherclass,操做teacher_course,找到對應的學生查看對應的班級的童鞋,操做RecordStudent
4. 爲學員批改爲績, 一條一條的手動修改爲績
  1. 進入後顯示班級,根據進入時候的班級講師ID,操做teacherclass,操做teacher_course,
  2. 查看StudentHomework,查看學生的做業
  3. 爲學員一條一條修改爲績和建立上課記錄,操做RecordScore
學員視圖
1. 提交做業
  顯示課程,班級,上課節數,提交做業,作成綁定
2. 查看做業成績
  查看RecordScore
3. 一個學員能夠同時屬於多個班級,就像報了Linux的同時也能夠報名Python同樣, 因此提交做業時需先選擇班級,再選擇具體上課的節數
4. 附加:學員能夠查看本身的班級成績排名
  操做recordscore
  排名,讀取出全部的成績和姓名,而後進行排序

Readme:

做者:yaobin 版本: 學員管理系統 示例版本 v0.1 開發環境: python3.6 程序介紹: 講師視圖   管理班級,可建立班級,根據學員qq號把學員加入班級   可建立指定班級的上課紀錄,注意一節上課紀錄對應多條學員的上課紀錄, 即每節課都有整班學員上, 爲了紀錄每位學員的學習成績,需在建立每節上課紀錄是,同時爲這個班的每位學員建立一條上課紀錄   爲學員批改爲績, 一條一條的手動修改爲績 學員視圖 提交做業 查看做業成績 一個學員能夠同時屬於多個班級,就像報了Linux的同時也能夠報名Python同樣, 因此提交做業時需先選擇班級,再選擇具體上課的節數 附加:學員能夠查看本身的班級成績排名 文件目錄結構 ├── bin │   ├── __init__.py │   └── tiny.py # 主程序
├── conf │   ├── action_registers.py # 程序命令交互
│   ├── __init__.py │   └── settings.py # 配置文件
├── log │   └── __init__.py ├── modules │   ├── actions.py # 歡迎頁和程序命令交互
│   ├── db_conn.py  # mysql鏈接交互
│   ├── utils.py  # yaml配置交互
│   └── views.py  # 建立表,表數據建立,查看數據庫數據交互
│   └── db_insert.py  # 插入數據範例
├── Server.zip └── share └── examples ├── new_bindhosts.yml # 主機綁定關係配置文件
        ├── new_groups.yml  # 組建立,組關係綁定配置文件
        ├── new_hosts.yml  # 主機配置文件
        ├── new_remoteusers.yml  # 主機用戶名密碼配置文件
        └── new_user.yml  # 堡壘機用戶配置文件
View Code

使用方法:

python3 bin/manage.py syncdb python3 modules/db_insert.py python3 bin/manage.py teacher python3 bin/manage.py student

核心代碼:

view.py

#!/usr/bin/env python # -*- coding:utf-8 -*- # Time:2017/12/15 21:34
__Author__ = 'Sean Yao'
import sqlalchemy.exc from modules import models from conf import settings from modules.utils import print_err, yaml_parser from modules.db_conn import engine, session import codecs def syncdb(argvs): ''' 建立表結構方法 :param argvs: :return: '''
    print("Syncing DB....") engine = models.create_engine(settings.ConnParams, echo=True) models.Base.metadata.create_all(engine) # 建立全部表結構

def auth_teacher(): ''' 用戶驗證 do the user login authentication :return: ''' count = 0 while count < 3: username = input("\033[32;1mUsername:\033[0m").strip() if len(username) == 0: continue password = input("\033[32;1mPassword:\033[0m").strip() if len(password) == 0: continue user_obj = session.query(models.Teacher).filter(models.Teacher.username == username, models.Teacher.password == password).first() if user_obj: return user_obj else: print("wrong username or password, you have %s more chances." % (3-count-1)) count += 1
    else: print_err("too many attempts.") def auth_student(): ''' 用戶驗證 do the user login authentication :return: ''' count = 0 while count < 3: username = input("\033[32;1mUsername:\033[0m").strip() if len(username) == 0: continue password = input("\033[32;1mPassword:\033[0m").strip() if len(password) == 0: continue user_obj = session.query(models.Student).filter(models.Student.username == username, models.Student.password == password).first() if user_obj: return user_obj else: print("wrong username or password, you have %s more chances." % (3-count-1)) count += 1
    else: print_err("too many attempts.") def list1(dict: dict): ''' 將字典轉化爲列表 ''' keys = dict.keys() vals = dict.values() list = [(key, val) for key, val in zip(keys, vals)] return list def welcome_msg(user): ''' :param user: :return: ''' WELCOME_MSG = '''\033[32;1m ------------- Welcome [%s] login ------------- \033[0m''' % user.username print(WELCOME_MSG) def show_class(user): ''' show教室 :param user: :return: '''
    print('%s 請參照現有課程教室管理' % user.username) data = session.query(models.ClassRoom).filter_by().all() print('全部班級') for index, x in enumerate(data): print(index, x.classname) def show_course(user): ''' 展現課程,課程安排,教室 :param user: :return: '''
    print('你能夠建立班級關係或給學生分配班級') teacher_class_obj = session.query(models.TeacherClass).filter_by(teacher_id=user.id).all() for i in teacher_class_obj: course_teacher_obj = session.query(models.TeacheCourse).filter_by(bind_teacher_class_id=i.id).all() for x in course_teacher_obj: time_course_obj = session.query(models.CourseClassRecord).filter_by(id=x.bind_course_time_id).first() print('課堂ID: %s 課程:%s 課程安排:%s 教室:%s' % (x.id, time_course_obj.course.coursename, time_course_obj.course_time.course_time_name, i.class_room.classname)) def show_student_class(user): print('%s 你所在的班級' % user.username) student_class_obj = session.query(models.StudentTeachClass).filter_by(student_qq=user.qq_number).all() for i in student_class_obj: class_teacher_obj = session.query(models.TeacherClass).filter_by( id=i.teacher_course.bind_teacher_class_id).first() course_obj = session.query(models.CourseClassRecord).filter_by( id=i.teacher_course.bind_course_time_id).first() studentname_obj = session.query(models.Student).filter_by( qq_number=i.student.qq_number).first() print('綁定id:%s 課程:%s 課程時間:%s 講師:%s 教室:%s 學生名:%s 學生qq %s' % ( i.id, course_obj.course.coursename, course_obj.course_time.course_time_name, class_teacher_obj.teacher.username, class_teacher_obj.class_room.classname, studentname_obj.username, studentname_obj.qq_number)) def view_student(): ''' 查看學生 ''' student_obj = session.query(models.Student).filter_by().all() for i in student_obj: # 學生姓名QQ
        print('現有學生:%s 學生QQ:%s' % (i.username, i.qq_number)) print("----------- END -----------") def view_student_class(user): ''' 查看該教室的學生,經過學生和老師id反查 :param user: :return: ''' teacher_class_obj = session.query(models.TeacherClass).filter_by(teacher_id=user.id).all() for i in teacher_class_obj: teachecourse_obj = session.query( models.TeacheCourse).filter_by(bind_teacher_class_id=i.id).all() for y in teachecourse_obj: student_teachclass_obj = session.query(models.StudentTeachClass).filter_by(teacher_course_id=y.id).all() for x in student_teachclass_obj: class_teacher_obj = session.query(models.TeacherClass).filter_by( id=x.teacher_course.bind_teacher_class_id).first() course_obj = session.query(models.CourseClassRecord).filter_by( id=x.teacher_course.bind_course_time_id).first() studentname_obj = session.query(models.Student).filter_by( qq_number=x.student.qq_number).first() print('綁定id:%s 課程:%s 課程時間:%s 講師:%s 教室:%s 學生名:%s 學生qq %s' % ( x.id, course_obj.course.coursename, course_obj.course_time.course_time_name, class_teacher_obj.teacher.username, class_teacher_obj.class_room.classname, studentname_obj.username, studentname_obj.qq_number)) def view_record(user): ''' 查看上課記錄 :param user: :return: ''' record_student = session.query(models.RecordStudent).filter_by().all() for i in record_student: student_teachclass_obj = session.query(models.StudentTeachClass). \ filter_by(id=i.student_teach_class_id).first() class_teacher_obj = session.query(models.TeacherClass).filter_by( id=student_teachclass_obj.teacher_course.bind_teacher_class_id).first() course_obj = session.query(models.CourseClassRecord).filter_by( id=student_teachclass_obj.teacher_course.bind_course_time_id).first() studentname_obj = session.query(models.Student).filter_by( qq_number=student_teachclass_obj.student.qq_number).first() if class_teacher_obj.teacher.username == user.username: print('綁定id:%s 課程:%s 課程時間:%s 講師:%s 教室:%s 學生名:%s 學生qq %s 上課記錄:%s' % ( student_teachclass_obj.id, course_obj.course.coursename, course_obj.course_time.course_time_name, class_teacher_obj.teacher.username, class_teacher_obj.class_room.classname, studentname_obj.username, studentname_obj.qq_number, i.record.record)) def view_homework(user): ''' 查看做業 :param user: :return: ''' record_student = session.query(models.RecordStudent).filter_by().all() for i in record_student: student_teachclass_obj = session.query(models.StudentTeachClass). \ filter_by(id=i.student_teach_class_id).first() class_teacher_obj = session.query(models.TeacherClass).filter_by( id=student_teachclass_obj.teacher_course.bind_teacher_class_id).first() course_obj = session.query(models.CourseClassRecord).filter_by( id=student_teachclass_obj.teacher_course.bind_course_time_id).first() studentname_obj = session.query(models.Student).filter_by( qq_number=student_teachclass_obj.student.qq_number).first() studenthomework_obj = session.query(models.StudentHomework).filter_by( student_teach_class_id=i.student_teach_class_id).first() if studenthomework_obj: if class_teacher_obj.teacher.username == user.username: print('綁定ID %s 課程:%s 課程時間:%s 講師:%s 教室:%s 學生名:%s 學生qq %s 上課記錄:%s 做業:%s' % ( student_teachclass_obj.id, course_obj.course.coursename, course_obj.course_time.course_time_name, class_teacher_obj.teacher.username, class_teacher_obj.class_room.classname, studentname_obj.username, studentname_obj.qq_number, i.record.record, studenthomework_obj.homework.home_work)) def view_score(user): ''' 查看分數 :param user: :return: ''' record_student = session.query(models.RecordStudent).filter_by().all() for i in record_student: student_teachclass_obj = session.query(models.StudentTeachClass). \ filter_by(id=i.student_teach_class_id).first() class_teacher_obj = session.query(models.TeacherClass).filter_by( id=student_teachclass_obj.teacher_course.bind_teacher_class_id).first() course_obj = session.query(models.CourseClassRecord).filter_by( id=student_teachclass_obj.teacher_course.bind_course_time_id).first() studentname_obj = session.query(models.Student).filter_by( qq_number=student_teachclass_obj.student.qq_number).first() studenthomework_obj = session.query(models.StudentHomework).filter_by( student_teach_class_id=i.student_teach_class_id).first() score_obj = session.query(models.RecordScore).filter_by(student_teach_class_id=i.student_teach_class_id).first() if studenthomework_obj: if score_obj: if class_teacher_obj.teacher.username == user.username: if score_obj.student_teacher_class.student.qq_number == studentname_obj.qq_number: print('綁定ID %s 課程:%s 課程時間:%s 講師:%s 教室:%s 學生名:%s 學生qq %s 上課記錄:%s 做業:%s 分數:%s'
                              % (student_teachclass_obj.id, course_obj.course.coursename, course_obj.course_time.course_time_name, class_teacher_obj.teacher.username, class_teacher_obj.class_room.classname, studentname_obj.username, studentname_obj.qq_number, i.record.record, studenthomework_obj.homework.home_work, score_obj.score.score)) def teacher(argvs): ''' 講師視圖 :param argvs: :return: ''' user = auth_teacher() if user: welcome_msg(user) exit_flag = False while not exit_flag: show_class(user) show_course(user) msg = ''' 1) 建立班級 2)添加學員到班級 3)上課記錄 4)批改爲績 5)添加學員 '''
            print(msg) while not exit_flag: user_option = input("[ (q)quit, select num to manage]:").strip() if len(user_option) == 0: continue
                if user_option == 'q': exit_flag = True if user_option == '1': course_name = input('請輸入班級上的課程>>>>: ') if len(course_name) == 0: print('sorry...班級不能爲空') break
                    else: course_time = input('請輸入課程時間安排>>>>:') if len(course_time) == 0: print('sorry...課程時間不能爲空') break
                        else: class_name = input('請輸入班級名稱>>>:') if len(class_name) == 0: print('sorry...班級名稱不能爲空') break
                    # 課程名
                    course_name_obj = session.query(models.Course).filter_by(coursename=course_name).first() # 課程安排
                    course_time_obj = session.query(models.CourseTime).filter_by(course_time_name=course_time).first() # 教室名
                    class_name_obj = session.query(models.ClassRoom).filter_by(classname=class_name).first() # 添加課程
                    if course_name_obj: pass
                    else: course_name_db_obj = models.Course(coursename=course_name) session.add(course_name_db_obj) session.commit() # 添加課程安排
                    if course_time_obj: pass
                    else: course_time_db_obj = models.CourseTime(course_time_name=course_time) session.add(course_time_db_obj) session.commit() if class_name_obj: pass
                    else: class_name_db_obj = models.ClassRoom(classname=class_name) session.add(class_name_db_obj) session.commit() course_name = session.query(models.Course).filter_by(coursename=course_name).first() course_time = session.query(models.CourseTime).filter_by(course_time_name=course_time).first() class_name = session.query(models.ClassRoom).filter_by(classname=class_name).first() # 建立課程課程時間關聯
                    course_class_record_id_obj = session.query(models.CourseClassRecord).filter_by( course_id=course_name.id).filter_by(course_time_id=course_time.id).all() if course_class_record_id_obj: pass
                    else: course_class_record_id_obj = models.CourseClassRecord(course_id=course_name.id, course_time_id=course_time.id) session.add(course_class_record_id_obj) session.commit() # 添加講師教室關聯
                    teacher_class_id_obj = session.query(models.TeacherClass).filter_by( teacher_id=user.id).filter_by(class_room_id=class_name.id).all() if teacher_class_id_obj: pass
                    else: teacher_class_id_obj = models.TeacherClass(teacher_id=user.id, class_room_id=class_name.id) session.add(teacher_class_id_obj) session.commit() # 查老師的對象
                    db_teacher_obj = session.query(models.Teacher).filter_by(id=user.id).first() # 查課程對象
                    db_course_name_obj = session.query(models.Course).filter_by( coursename=course_name.coursename).first() # 查課程安排對象
                    db_course_time_obj = session.query(models.CourseTime). \ filter_by(course_time_name=course_time.course_time_name).first() # 查教室對象
                    db_class_obj = session.query(models.ClassRoom).filter_by(classname=class_name.classname).first() # 教室講師關聯對象
                    db_teacher_class_obj = session.query(models.TeacherClass).filter_by( class_room_id=db_class_obj.id).filter_by(teacher_id=user.id).first() # 課程課程安排關聯對象
                    db_course_class_obj = session.query(models.CourseClassRecord).filter_by( course_id=db_course_name_obj.id).filter_by(course_time_id=db_course_time_obj.id).first() if db_teacher_class_obj and db_course_class_obj: teacher_class = session.query(models.TeacheCourse).filter_by( bind_teacher_class_id=db_teacher_class_obj.id).filter_by( bind_course_time_id=db_course_class_obj.id).all() if teacher_class: print('班級已經關聯了') else: teachecourse = models.TeacheCourse(bind_teacher_class_id=db_teacher_class_obj.id, bind_course_time_id=db_course_class_obj.id) session.add(teachecourse) session.commit() print('班級建立完畢') show_course(user) elif user_option == '2': view_student() view_student_class(user) show_course(user) add_choice = input('[ (y)是,(n)否, select num to manage]:').strip() if add_choice == 'n': break
                    elif add_choice == 'y': teacher_input_qq = input('請輸入學員QQ號>>>: ') teacher_input_courseid = input('請輸入課堂ID>>>:') try: qq = int(teacher_input_qq) courseid = int(teacher_input_courseid) except ValueError: print('qq或課堂ID必須是數字') break student_teachclass_check_obj = session.query( models.StudentTeachClass).filter_by( teacher_course_id=teacher_input_courseid).filter_by(student_qq=teacher_input_qq).all() if student_teachclass_check_obj: print('學生已經在班級裏了....') else: student_obj = session.query(models.Student).filter_by(qq_number=qq).all() if student_obj: for i in student_obj: if teacher_input_qq == str(i.qq_number): student_class_obj = models.StudentTeachClass( teacher_course_id=courseid, student_qq=qq) session.add(student_class_obj) session.commit() view_student_class(user) else: print('沒有這個學生') else: print('no this option') elif user_option == '3': print('\n%s 管理的班級學員\n' % user.username) view_student_class(user) print('\n%s 管理的班級的上課記錄\n' % user.username) view_record(user) record_choice = input('[ (y)是,(n)否, select num to manage]:').strip() if record_choice == 'n': break
                    elif record_choice == 'y': record_id_input = input('請輸入綁定id添加學員上課記錄:') # 插入綁定關係
                        record_input = input('[ 請輸入學員上課記錄(y)yes,(no)否]') try: courseid = int(record_id_input) except ValueError: print('綁定ID必須是數字') break
                        if record_input == 'yes' or 'no': record_in_obj = session.query( models.RecordStudent).filter_by(student_teach_class_id=record_id_input).all() if record_in_obj: print('記錄已經添加...') else: record_in_obj = session.query(models.Record).filter_by(record=record_input).first() student_teachclass_id_obj = models.RecordStudent( student_teach_class_id=record_id_input, record_id=record_in_obj.id) session.add(student_teachclass_id_obj) session.commit() view_record(user) else: print('no this option') elif user_option == '4': print('\n%s 管理的班級的上課記錄\n' % user.username) view_record(user) print('\n已交做業的童鞋\n') view_homework(user) print('\n已批改的成績\n') view_score(user) choice_score_input = input('[ 批改爲績是否繼續(y)是,(n)否, select num to manage]:').strip() if choice_score_input == 'n': break
                    elif choice_score_input == 'y': while not exit_flag: record_id_input = input('請輸入顯示的綁定id添加學員成績:') score_input = input('請輸入分數..') # 插入綁定關係
                            home_work_check = session.query( models.StudentHomework).filter_by(student_teach_class_id=int(record_id_input)).all() if home_work_check: score = int(score_input) if score > 100 or score < 0: print('請輸入100之內的整數') else: score_obj = session.query(models.Score).filter_by(score=score).all() if score_obj: for i in score_obj: score_db_id_obj = session.query( models.Score).filter_by(score=i.score).first() record_score_obj = session.query(models.RecordScore).filter_by( student_teach_class_id=record_id_input).first() if record_score_obj: print('該學員已經有成績了...') break
                                            else: add_score_obj = models.RecordScore( student_teach_class_id=record_id_input, score_id=score_db_id_obj.id) session.add(add_score_obj) session.commit() print('添加成績完成') view_score(user) else: score_db_obj = models.Score(score=score) session.add(score_db_obj) session.commit() score_db_id_obj = session.query(models.Score).filter_by(score=score).first() record_score_obj = session.query(models.RecordScore).filter_by( student_teach_class_id=record_id_input).first() if record_score_obj: print('該學員已經有成績了...') break
                                        else: add_score_obj = models.RecordScore( student_teach_class_id=record_id_input, score_id=score_db_id_obj.id) session.add(add_score_obj) session.commit() print('添加成績完成') view_score(user) else: print('學生尚未交做業,請先聯繫學生交做業') break
                    else: print('no this option') pass
                elif user_option == '5': print('添加學員後請注意給學生分配教室並添加上課記錄,課後請提示學生交做業') student_add_input = input('[ 批改爲績是否繼續(y)是,(n)否, select num to manage]:').strip() student_name_input = input('請輸入學生帳號:') student_password_input = input('請輸入學生密碼:') student_qq_input = input('請輸入學生qq號碼:') try: qq = int(student_qq_input) except ValueError: print('qq必須是數字') break
                    # 聯合查詢
                    student_check = session.query( models.Student).filter_by(qq_number=qq).filter_by(username=student_name_input).all() if student_check: print('學生已經存在') else: # 聯合查詢不能避免qq號或用戶名重複...數據庫中作了qq號和用戶名惟一
                        try: student_obj = models.Student( qq_number=qq, username=student_name_input, password=student_password_input) session.add(student_obj) session.commit() print('添加學生完成,請給學生分配教室並添加上課記錄,課後請提示學生交做業') except sqlalchemy.exc.IntegrityError: print('學生已經存在') elif user_option == 'q': exit_flag = True else: print("no this option..") def student(argvs): ''' 學生視圖 :param argvs: :return: ''' user = auth_student() if user: print('student') welcome_msg(user) exit_flag = False show_student_class(user) msg = ''' 1)選擇課程班級 2) 提交做業 3)查看做業成績 4)查看所屬班級成績排名 '''
        print(msg) while not exit_flag: user_option = input("[ (q)quit, select num to manage]:").strip() if len(user_option) == 0: continue
            if user_option == 'q': exit_flag = True if user_option == '1': print('請聯繫您的講師幫您安排課程和教室') elif user_option == '2': home_work_add_choice = input('[ (y)是,(n)否, select num to manage]:').strip() if home_work_add_choice == 'n': break
                elif home_work_add_choice == 'y': home_work_course_time_input = input('請輸入上課節數/課程時間>>>:') home_work_classroom_input = input('請輸入所在班級/教室>>>: ') home_work_classid_input = input('請輸入對應教室的綁定ID>>>:') student_class_obj = session.query(models.StudentTeachClass).filter_by( id=int(home_work_classid_input)).all() if student_class_obj: for i in student_class_obj: course_obj = session.query(models.CourseClassRecord).filter_by( id=i.teacher_course.bind_course_time_id).first() # 檢查做業
                            student_home_work_id_check = session.query( models.HomeWork).filter_by(home_work=user.username+'_'+course_obj.course_time. course_time_name+'_'+'home_work').all() if student_home_work_id_check: print('已經交做業了,不須要重複提交') else: home_add = input('[ (y)是,(n)否, to add home_work]:').strip() if home_add == 'n': break
                                if home_add == 'y': homework = \ models.HomeWork( home_work=user.username+'_' + course_obj.course_time.course_time_name + '_' +
                                                      'home_work') session.add(homework) session.commit() home_work_id = session.query(models.HomeWork).filter_by( home_work=user.username+'_' + course_obj.course_time.course_time_name+'_' +
                                                      'home_work').first() record_home_work = models.StudentHomework( student_teach_class_id=i.id, homework_id=home_work_id.id) session.add(record_home_work) session.commit() print('做業添加完成,請提醒老師添加上課記錄和批改爲績...') break
                    else: print('沒有這個班級...') elif user_option == '3': print('若是沒有成績的請先交做業而後找講師批改爲績') student_record_id = input('請輸入您的綁定ID,查看做業信息;') record_student = session.query(models.RecordStudent).filter_by().all() for i in record_student: student_teachclass_obj = session.query(models.StudentTeachClass). \ filter_by(id=student_record_id).first() class_teacher_obj = session.query(models.TeacherClass).filter_by( id=student_teachclass_obj.teacher_course.bind_teacher_class_id).first() course_obj = session.query(models.CourseClassRecord).filter_by( id=student_teachclass_obj.teacher_course.bind_course_time_id).first() studentname_obj = session.query(models.Student).filter_by( qq_number=user.qq_number).first() studenthomework_obj = session.query(models.StudentHomework).filter_by( student_teach_class_id=student_record_id).first() score_obj = session.query(models.RecordScore).filter_by( student_teach_class_id=i.student_teach_class_id).first() if studenthomework_obj: if user.username == studentname_obj.username: if score_obj: if score_obj.student_teacher_class.student.qq_number == studentname_obj.qq_number: print('綁定ID %s 課程:%s 課程時間:%s 講師:%s 教室:%s 學生名:%s 學生qq %s 上課記錄:%s 做業:%s 分數:%s'
                                          % (student_teachclass_obj.id, course_obj.course.coursename, course_obj.course_time.course_time_name, class_teacher_obj.teacher.username, class_teacher_obj.class_room.classname, studentname_obj.username, studentname_obj.qq_number, i.record.record, studenthomework_obj.homework.home_work, score_obj.score.score)) elif user_option == '4': print('查看班級排名.請按照所在班級的綁定ID查詢排名') home_work_course_time_input = input('請輸入上課節數/課程時間>>>:') home_work_classroom_input = input('請輸入所在班級/教室>>>: ') record_student = session.query(models.RecordStudent).filter_by().all() tmp_dict = {} for i in record_student: student_teachclass_obj = session.query(models.StudentTeachClass). \ filter_by(id=i.student_teach_class_id).first() class_teacher_obj = session.query(models.TeacherClass).filter_by( id=student_teachclass_obj.teacher_course.bind_teacher_class_id).first() course_obj = session.query(models.CourseClassRecord).filter_by( id=student_teachclass_obj.teacher_course.bind_course_time_id).first() studentname_obj = session.query(models.Student).filter_by( qq_number=student_teachclass_obj.student.qq_number).first() studenthomework_obj = session.query(models.StudentHomework).filter_by( student_teach_class_id=i.student_teach_class_id).first() score_obj = session.query(models.RecordScore).filter_by( student_teach_class_id=i.student_teach_class_id).first() if home_work_course_time_input == course_obj.course_time.course_time_name \ and home_work_classroom_input == class_teacher_obj.class_room.classname: if studenthomework_obj: if score_obj: if score_obj.student_teacher_class.student.qq_number == studentname_obj.qq_number: if score_obj.score.score in tmp_dict.keys(): tmp_dict[score_obj.score.score].append(studentname_obj.username) else: tmp_dict[score_obj.score.score] = [studentname_obj.username] # 分數排序,按道理應該是用group_by 這裏偷個懶
                tmp_list = [] for key in tmp_dict.keys(): tmp_list.append(key) tmp_list.sort(reverse=True) for key in tmp_list: for name in tmp_dict[key]: print(name, key) elif user_option == 'q': exit_flag = True else: print('no this option')
View Code

models.py

#!/usr/bin/env python # -*- coding:utf-8 -*- # Time:2017/12/19 20:36
__Author__ = 'Sean Yao'
import datetime from sqlalchemy import Table, Column, Integer, String, DATE, ForeignKey, Enum, UniqueConstraint, DateTime, Text from sqlalchemy.orm import relationship from sqlalchemy.ext.declarative import declarative_base from sqlalchemy_utils import ChoiceType, PasswordType from sqlalchemy import create_engine Base = declarative_base() class TeacheCourse(Base): ''' 課程/課程表/講師/教室/關聯 '''
    __tablename__ = 'teacher_course'
    __table_args__ = (UniqueConstraint('bind_teacher_class_id', 'bind_course_time_id', name='_class_uc'),) id = Column(Integer, primary_key=True) bind_teacher_class_id = Column('bind_teacher_class_id', Integer, ForeignKey('bind_teacher_class.id')) bind_course_time_id = Column('bind_course_time_id', Integer, ForeignKey('bind_course_time.id')) teacher_class = relationship('TeacherClass', backref='teacher_course') course_class_record = relationship('CourseClassRecord', backref='teacher_course') def __repr__(self): return self.id, self.teacher_class.id, self.bind_course_time_id class RecordScore(Base): ''' 打分/關聯 老師視圖操做 1 66 2 88 '''
    __tablename__ = 'record_score'
    __table_args__ = (UniqueConstraint('student_teach_class_id', 'score_id', name='_record_score_uc'),) id = Column(Integer, primary_key=True) student_teach_class_id = Column( 'student_teach_class_id', Integer, ForeignKey('student_teach_class.id'), unique=True) score_id = Column('score_id', Integer, ForeignKey('score.id')) score = relationship('Score', backref='record_score') student_teacher_class = relationship('StudentTeachClass', backref='record_score') def __repr__(self): return self.id, self.student_teacher_class.teacher_course.id, self.student_teacher_class.student.qq_number, \ self.score.score class RecordStudent(Base): ''' 上課記錄/關聯 老師視圖操做 1 yes 2 no '''
    __tablename__ = 'record_student'
    __table_args__ = (UniqueConstraint('student_teach_class_id', 'record_id', name='_record_class_uc'),) id = Column(Integer, primary_key=True) student_teach_class_id = Column( 'student_teach_class_id', Integer, ForeignKey('student_teach_class.id'), unique=True) record_id = Column('record_id', Integer, ForeignKey('record.id')) record = relationship('Record', backref='record_student') student_teacher_class = relationship('StudentTeachClass', backref='record_student') def __repr__(self): return self.id, self.student_teacher_class.teacher_course.id, self.student_teacher_class.student.qq_number, \ self.record.record class StudentHomework(Base): ''' 課程/課程表/講師/教室/學生/做業/關聯 學生視圖操做 449010391 1 '''
    __tablename__ = 'student_homework'
    __table_args__ = (UniqueConstraint('student_teach_class_id', 'homework_id', name='_record_homework_uc'),) id = Column(Integer, primary_key=True) student_teach_class_id = Column( 'student_teach_class_id', Integer, ForeignKey('student_teach_class.id'), unique=True) homework_id = Column('homework_id', Integer, ForeignKey('homework.id')) homework = relationship('HomeWork', backref='student_homework') student_teacher_class = relationship('StudentTeachClass', backref='student_homework') def __repr__(self): return self.id, self.student_teacher_class.teacher_course.id, self.student_teacher_class.student.qq_number, \ self.homework.home_work class StudentTeachClass(Base): ''' 課程/課程表/講師/教室/學生/關聯 python/python1/alex/python_1 449010391 1 449010391 '''
    __tablename__ = 'student_teach_class'
    __table_args__ = (UniqueConstraint('student_qq', 'teacher_course_id', name='_record_uc'),) id = Column(Integer, primary_key=True) teacher_course_id = Column('teacher_course_id', Integer, ForeignKey('teacher_course.id')) student_qq = Column('student_qq', Integer, ForeignKey('student.qq_number')) teacher_course = relationship("TeacheCourse", backref='student_teach_class') student = relationship('Student', backref='student_teach_class') def __repr__(self): # qq號,講師/教室/課程/課程表
        return self.id, self.student.qq_number, self.teacher_course.bind_teacher_class_id, \ self.teacher_course.bind_course_time_id class Course(Base): ''' 課程表 課程惟一 '''
    __tablename__ = 'course' id = Column(Integer, primary_key=True) coursename = Column(String(64), unique=True, nullable=False) def __repr__(self): return self.id, self.coursename class CourseTime(Base): ''' 課程時間表 課程時間惟一 '''
    __tablename__ = 'course_time' id = Column(Integer, primary_key=True) course_time_name = Column(String(64), unique=True, nullable=False) def __repr__(self): return self.id, self.course_time_name class Teacher(Base): ''' teacher 表 老師名字惟一 '''
    __tablename__ = 'teacher' id = Column(Integer, primary_key=True) username = Column(String(64), unique=True, nullable=False) password = Column(String(128), nullable=False) def __repr__(self): return self.id, self.username, self.password, class ClassRoom(Base): ''' 班級表 班級惟一 '''
    __tablename__ = 'class_room' id = Column(Integer, primary_key=True) classname = Column(String(64), unique=True, nullable=False) def __repr__(self): return self.id, self.classname class Student(Base): ''' student表 用戶名/qq號/惟一 '''
    __tablename__ = 'student' id = Column(Integer, primary_key=True) qq_number = Column(Integer, unique=True, nullable=False) username = Column(String(64), unique=True, nullable=False) password = Column(String(128), nullable=False) def __repr__(self): return self.id, self.qq_number, self.username, self.password class Score(Base): ''' 成績表 成績不惟一可能不一樣的童鞋獲得的分數同樣 '''
    __tablename__ = 'score' id = Column(Integer, primary_key=True) score = Column(Integer, unique=True, nullable=False) def __repr__(self): return self.id, self.score class HomeWork(Base): ''' 做業表 做業惟一對應不一樣的童鞋和課程 '''
    __tablename__ = 'homework' id = Column(Integer, unique=True, primary_key=True) home_work = Column(String(128)) def __repr__(self): return self.id, self.home_work class Record(Base): ''' 上課記錄 惟一隻有yes/no '''
    __tablename__ = 'record' id = Column(Integer, primary_key=True) action_choices = [ (u'yes', u'Yes'), (u'no', u'No'), ] record = Column(ChoiceType(action_choices), unique=True) def __repr__(self): return self.id, self.record class CourseClassRecord(Base): ''' 課程/課程時間/關聯 課程:pyrhon 課程時間:python_day1 課程:linux 課程時間:linux_day1 課程:linux 課程時間:linux_day2 課程和課程時間聯合惟一 '''
    __tablename__ = "bind_course_time"
    # 聯合惟一
    __table_args__ = (UniqueConstraint('course_id', 'course_time_id', name='_course_uc'),) id = Column(Integer, primary_key=True) course_id = Column(Integer, ForeignKey('course.id')) course_time_id = Column(Integer, ForeignKey('course_time.id')) course = relationship('Course', backref='bind_course_time') course_time = relationship('CourseTime', backref='bind_course_time') def __repr__(self): return self.id, self.course.coursename, self.course_time.course_time_name class TeacherClass(Base): ''' 老師/班級/關聯 老師和班級聯合惟一 老師:alex 班級:python_S14 老師:alex 班級:python_S15 '''
    __tablename__ = "bind_teacher_class"
    __table_args__ = (UniqueConstraint('teacher_id', 'class_room_id', name='_class_uc'),) id = Column(Integer, primary_key=True) teacher_id = Column(Integer, ForeignKey('teacher.id')) class_room_id = Column(Integer, ForeignKey('class_room.id')) teacher = relationship('Teacher', backref='bind_teacher_class') class_room = relationship('ClassRoom', backref='bind_teacher_class') def __repr__(self): return self.id, self.teacher.username, self.class_room.classname
View Code

程序測試樣圖:

添加多個學生後,給學生綁定了課堂,並登錄學生交了做業,講師批改做業後學生能夠查看分數排名

相關文章
相關標籤/搜索