Python开发程序:学员管理系统(mysql)
主题:学员管理系统
需求:
用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下
讲师视图:
- 管理班级,可创建班级,根据学员qq号把学员加入班级
- 可创建指定班级的上课纪录,注意一节上课纪录对应多条学员的上课纪录, 即每节课都有整班学员上, 为了纪录每位学员的学习成绩,需在创建每节上课纪录是,同时为这个班的每位学员创建一条上课纪录
- 为学员批改成绩, 一条一条的手动修改成绩
学员视图:
- 提交作业
- 查看作业成绩
- 一个学员可以同时属于多个班级,就像报了Linux的同时也可以报名Python一样, 所以提交作业时需先选择班级,再选择具体上课的节数
- 附加:学员可以查看自己的班级成绩排名
表结构:
根据需求先画表结构

程序目录结构:

表结构实例代码:
from sqlalchemy import String,Column,Integer,ForeignKey,DATE,Table
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from conf.settings import engine ############创建数据表结构######################3
Base = 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://coding.net/u/James_Lian/p/Whaterver/git/tree/master
Python开发程序:学员管理系统(mysql)的更多相关文章
- python开发的学生管理系统
python开发的学生管理系统(基础版) #定义一个函数,显示可以使用的功能列表给用户 def showInfo(): print("-"*30) print(" 学生管 ...
- python项目开发:学员管理系统
学员管理系统 #需求: 1.用户角色:讲师/学员,登陆后根据角色不同能做的事情不同 2.讲师视图 - 管理班级,可创建班级,根据学员qq号把学员加入班级 - 可创建指定班级的上课纪录,注意一节上课纪录 ...
- Python开发程序:选课系统-改良版
程序名称: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...
- 吴裕雄--天生自然PythonDjangoWeb企业开发:学员管理系统- 前台
开发首页 做一个简单的用户提交申请的表单页面. 首先在student/views.py文件中编写下面的代码: # -*- coding: utf-8 -*- from __future__ impor ...
- 吴裕雄--天生自然PythonDjangoWeb企业开发:学员管理系统后台
需求 提供一个学员管理系统,一个前台页面,展示现有学员,并供新学员提交申请,一个后台,能够处理申请. pip install django==1.11.2 创建项目 使用控制台进入到一个目录下,具体是 ...
- Python开发程序:生产环境下实时统计网站访问日志信息
日志实时分析系统 生产环境下有需求:要每搁五分钟统计下这段时间内的网站访问量.UV.独立IP等信息,用直观的数据表格表现出来 环境描述: 网站为Nginx服务,系统每日凌晨会对日志进行分割,拷贝到其他 ...
- Python开发程序:选课系统
本节作业: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...
- Python开发程序:FTP程序
作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp se ...
- (转)Python开发程序:支持多用户在线的FTP程序
原文链接:http://www.itnose.net/detail/6642756.html 作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ...
随机推荐
- Android -- Activity,Fragment lifecycle
Activity Lifecyce Fragment Lifecycle: 程序运行: 09-16 13:59:22.883 19022-19022/com.example.android.archi ...
- EXT.NET 使用总结(1)
前言 从系统改版到现在,将近半年的时间,原本陌生的Ext.NET的UI框架,也慢慢的熟悉了.总的来说,这个UI框架还是很优秀的,但是也没有100%完美的产品(老系统使用easy ui其实也挺好的).趁 ...
- Python学习笔记(四)——编码和字符串
一.编码 1.编码类别: (1)ASCII码:127个字母被编码到计算机里,也就是大小写英文字母.数字和一些符号 (2)GB2312码:中国制定的用于加入中文汉字的编码 (3)Unicode:防止由于 ...
- How to print 如何输出 int64_t,uint64_t的值 in C
For int64_t type: int64_t t; printf("%"PRId64"\n", t); for uint64_t type: uint64 ...
- Wpf/Wp/Silverlight-Chart图表控件:柱状图、饼状图等使用汇总
链接:http://www.cnblogs.com/jimson/archive/2010/06/21/Wpfchat.html http://www.cnblogs.com/mgen/p/32361 ...
- 1.2 Quartz 2D 内存管理
本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书” 通过 Product -> Analyze 来进行静态分析 可以使用Quar ...
- to_string()的应用
作用是将数字转化为字符串 #include<iostream> #include<cmath> #include<algorithm> #include<cs ...
- 规约模式Specification的学习
最近一直在看DDD开发 规约似乎用得很普遍. 但是还是理解不了.所以记录下学习的进度.- 规约(Specification)模式 目的:查询语句和查询条件的分离 写了一个关于规约的模拟小程序 cla ...
- BZOJ1493 [NOI2007]项链工厂
未完待续... 终于改对了 热泪盈眶.jpg 错误原因:pushdown的时候没有判断是否有左右儿子,也没当x=0 return,于是出现一些奇怪的错误 #include<bits/stdc++ ...
- About_PHP_文件的上传
在form表单中,我们上传文件用的是:<input type="file" name="fileUpload" />,当然,光是这样是不行的. 我们 ...