博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学员管理系统(mysql)
阅读量:6307 次
发布时间:2019-06-22

本文共 7746 字,大约阅读时间需要 25 分钟。

主题:学员管理系统

需求:

用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下

讲师视图:

  •   管理班级,可创建班级,根据学员qq号把学员加入班级
  •   可创建指定班级的上课纪录,注意一节上课纪录对应多条学员的上课纪录, 即每节课都有整班学员上, 为了纪录每位学员的学习成绩,需在创建每节上课纪录是,同时为这个班的每位学员创建一条上课纪录
  •   为学员批改成绩, 一条一条的手动修改成绩

学员视图:

  • 提交作业
  • 查看作业成绩
  • 一个学员可以同时属于多个班级,就像报了Linux的同时也可以报名Python一样, 所以提交作业时需先选择班级,再选择具体上课的节数
  • 附加:学员可以查看自己的班级成绩排名

表结构:

根据需求先画表结构

 

程序目录结构:

 

表结构实例代码:

 

from sqlalchemy import String,Column,Integer,ForeignKey,DATE,Tablefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import relationshipfrom conf.settings import engine  ############创建数据表结构######################3Base = declarative_base() # 班级与学生的对应关系表teacher_m2m_class = Table("teacher_m2m_class",Base.metadata,                          Column("teacher_id", Integer, ForeignKey("teacher.teacher_id")),                          Column("class_id", Integer, ForeignKey("class.class_id")),                          ) # 班级与学生的对应关系表class_m2m_student = Table("class_m2m_student",Base.metadata,                          Column("class_id",Integer,ForeignKey("class.class_id")),                          Column("stu_id", Integer, ForeignKey("student.stu_id")),                          ) class Class_m2m_Lesson(Base):    '''班级和课节对应表'''    __tablename__ = "class_m2m_lesson"    id =  Column(Integer, primary_key=True)    class_id = Column(Integer,ForeignKey("class.class_id"))    lesson_id = Column(Integer, ForeignKey("lesson.lesson_id"))     classes = relationship("Class",backref="class_m2m_lessons")    lessons = relationship("Lesson", backref="class_m2m_lessons")     def __repr__(self):        return "%s %s" % (self.classes,self.lessons) class Study_record(Base):    "上课记录"    __tablename__ = "study_record"    id = Column(Integer,primary_key=True)    class_m2m_lesson_id = Column(Integer,ForeignKey("class_m2m_lesson.id"))    stu_id = Column(Integer, ForeignKey("student.stu_id"))    status = Column(String(32),nullable=False)    score = Column(Integer,nullable=True)     class_m2m_lessons = relationship("Class_m2m_Lesson",backref="my_study_record")    students = relationship("Student", backref="my_study_record")     def __repr__(self):       return  "\033[35;0m%s,%s,状态:【%s】,成绩:【%s】\33[0m"%(self.class_m2m_lessons,self.students,self.status,self.score) class Teacher(Base):    "讲师"    __tablename__ = "teacher"    teacher_id = Column(Integer, primary_key=True)    teacher_name = Column(String(32), nullable=False, unique=True)   #唯一     classes = relationship("Class", secondary=teacher_m2m_class, backref="teachers")     def __repr__(self):        return "讲师:【%s】"%self.teacher_name class Class(Base):    "班级"    __tablename__ ="class"    class_id = Column(Integer, primary_key=True)    class_name = Column(String(32), nullable=False,unique=True)    course =  Column(String(32), nullable=False)     students = relationship("Student",secondary=class_m2m_student,backref="classes")     def __repr__(self):        return "班级名:【%s】"%self.class_name class Student(Base):    "学生"    __tablename__ ="student"    stu_id = Column(Integer, primary_key=True)    stu_name = Column(String(32), nullable=False, unique=True)    QQ =  Column(Integer(), nullable=False)     def __repr__(self):        return "学生名:【%s】"%self.stu_name class Lesson(Base):    "课节"    __tablename__ = "lesson"    lesson_id = Column(Integer, primary_key=True)    lesson_name = Column(String(32), nullable=False, unique=True)     def __repr__(self):        return "节次名:【%s】"%self.lesson_name  Base.metadata.create_all(engine)
创建表结构
def add_studyrecord(self):        '''添加学习记录'''        class_name = input("\033[34;0m请输入要添加学习记录的班级名:\033[0m")        class_obj = self.session.query(Class).filter_by(class_name=class_name).first()         if class_obj and class_obj.teachers[0] == self.teacher_obj:  # 输入的班级名存在且在属于当前老师管理            lesson_name = input("\033[34;0m请输入添加学习记录的课节名(lesson):\033[0m")            lesson_obj = self.session.query(Lesson).filter_by(lesson_name=lesson_name).first()            if lesson_obj:                                       # 输入的lesson名字存在                class_m2m_lesson_obj = self.session.query(Class_m2m_Lesson).filter(Class_m2m_Lesson.class_id == class_obj.class_id). \                    filter(Class_m2m_Lesson.lesson_id == lesson_obj.lesson_id).first()                if class_m2m_lesson_obj:                                            # 班级对应的课lesson表数据存在                     study_record_obj = self.session.query(Study_record).filter_by(class_m2m_lesson_id=class_m2m_lesson_obj.id).first()                    if not study_record_obj:                                                    # 上课记录为创建                        for student_obj in class_obj.students:                            status = input("输入学生 %s 的上课状态(yes/no):"%student_obj.stu_name)                            study_record_new = Study_record(class_m2m_lesson_id=class_m2m_lesson_obj.id,                                                            stu_id=student_obj.stu_id,                                                            status=status)                            self.session.add(study_record_new)                            self.session.commit()                    else:                        print("\33[31;1m系统错误:当前上课记录已经创建\33[0m")                else:                     print("\33[31;1m系统错误:当前班级的lesson课节未创建\33[0m")            else:                print("\33[31;1m系统错误:lesson未创建\33[0m")        else:            print("\33[31;1m输入错误:班级不存在或没有权限管理此班级\33[0m")      def modify_scores(self):        '''修改成绩'''        class_name = input("\033[34;0m请输入学习记录的班级名:\033[0m")        class_obj = self.session.query(Class).filter_by(class_name=class_name).first()         if class_obj and class_obj.teachers[0] == self.teacher_obj:  # 输入的班级名存在且在属于当前老师管理            lesson_name = input("\033[34;0m请输入学习记录的课节名(lesson):\033[0m")            lesson_obj = self.session.query(Lesson).filter_by(lesson_name=lesson_name).first()             if lesson_obj:  # 输入的lesson名字存在                class_m2m_lesson_obj = self.session.query(Class_m2m_Lesson).filter(                    Class_m2m_Lesson.class_id == class_obj.class_id). \                    filter(Class_m2m_Lesson.lesson_id == lesson_obj.lesson_id).first()                 if class_m2m_lesson_obj:  # 班级对应的课lesson表数据存在                    while True:                        study_record_objs = self.session.query(Study_record).filter(                                Study_record.class_m2m_lesson_id==class_m2m_lesson_obj.id).all()                        for obj in  study_record_objs:                            print(obj)                         student_name = input("\033[34;0m输入要修改成绩的学生名:[Q 退出]\33[0m")                        if student_name == "q" or student_name == "Q":break                        student_obj = self.session.query(Student).filter_by(stu_name=student_name).first()                        if student_obj:                            study_record_obj = self.session.query(Study_record).filter(                                Study_record.class_m2m_lesson_id==class_m2m_lesson_obj.id).filter(                                Study_record.stu_id == student_obj.stu_id).first()                             if study_record_obj:                            # 上课记录存在                                score = input("\033[34;0m输入修改后的成绩\33[0m")                                study_record_obj.score= score                                self.session.commit()                     else:                        print("\33[31;1m系统错误:当前上课记录已经创建\33[0m")                else:                    print("\33[31;1m系统错误:当前班级的lesson课节未创建\33[0m")            else:                print("\33[31;1m系统错误:lesson未创建\33[0m")        else:            print("\33[31;1m输入错误:班级不存在或没有权限管理此班级\33[0m")
创建学习记录以及修改学生成绩

上面的两段代码实现了主要的功能,其他的功能都是套路,都一样。。。。

转载于:https://www.cnblogs.com/lin333/p/9830375.html

你可能感兴趣的文章
有关滚动与位置
查看>>
Box2D自定义重力
查看>>
chpasswd
查看>>
mysqldump --single-transaction 和--lock-tables参数详解
查看>>
android 数据库_sql语句总结
查看>>
python购物车
查看>>
解决python2和python3的pip冲突
查看>>
面试/编程
查看>>
linux每日命令(16):head命令
查看>>
公司内部分享【富有成效的每日站会】总结
查看>>
打造一个上传图片到图床利器的插件(Mac版 开源)
查看>>
iOS横竖屏
查看>>
thinkphp判断更新是否成功
查看>>
Do While ... Loop 与 Do Until ... Loop 的区别
查看>>
【Linux】查询某个字符串出现次数
查看>>
高效使用jquery之一:请使用'On'函数
查看>>
冲刺第一周第三天
查看>>
ERP环境检测工具设计与实现 Environment Detection
查看>>
不要在构造中做太多事情,不然有时候会出现有意思的代码~
查看>>
IIS 发布网站遇到的问题
查看>>