python第六十八天--第十二周作业
主题:
需求:
用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下
讲师视图
管理班级,可创建班级,根据学员qq号把学员加入班级
可创建指定班级的上课纪录,注意一节上课纪录对应多条学员的上课纪录, 即每节课都有整班学员上, 为了纪录每位学员的学习成绩,需在创建每节上课纪录是,同时 为这个班的每位学员创建一条上课纪录
为学员批改成绩, 一条一条的手动修改成绩
学员视图
提交作业
查看作业成绩
一个学员可以同时属于多个班级,就像报了Linux的同时也可以报名Python一样, 所以提交作业时需先选择班级,再选择具体上课的节数
附加:学员可以查看自己的班级成绩排名
学员管理系统 实现功能:
1、系统初始化
2、管理员视图
功能:创建讲师、查看讲师、创建班级、查看班级、关联讲师与班级、创建学员、查看学员、班级关联学员
3、讲师视图
功能:管理班级、创建班级(自动与自己关联)、班级增加学员、增加新课节、
指定班级上课,选择上课课节(自动创建课程记录,同时为这个班的每位学员创建一条上课纪录)
批改成绩(先选择一个班级、再选择学员)
4、学员视图
功能:提交作业
查看作业成绩
查看班级中的总成绩排名 stude_mag_sys/#程序目录
|- - -__init__.py
|- - -bin/#启动目录
| |- - -__init__.py
| |- - -admin_start.py#管理员视图启动
| |- - -mag_init.py#系统初始化
| |- - -student.py#学员视图启动
| |- - -teach_start.py#讲师视图启动
|
|- - -cfg/#配置目录
| |- - -__init__.py
| |- - -config.py#配置文件
|
|- - -core/#主逻辑目录
| |- - -__init__.py
| |- - -admain_class.py#主要逻辑 类
| |- - -admin_log.py#管理员逻辑 类
| |- - -student_class.py#学员逻辑 类
| |- - -teach_class.py#讲师逻辑 类
|
|- - -REDMAE
先上一个表结构图
流程美图来一张:
stude_mag_sys/#程序目录
|- - -__init__.py
|- - -bin/#启动目录
| |- - -__init__.py
| |- - -admin_start.py#管理员视图启动
import os ,sys
from sqlalchemy import create_engine
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
sys.path.append(BASE_DIR)#增加环境变量
from core import admin_class
from core import admin_log
from cfg import config
if __name__ == '__main__':
# 用户 密码 主机 库
#engine = create_engine(config.HOSTS,)#连接
#admin_class.Base.metadata.create_all(admin_class.engine)#创建表结构
while True:
admin=admin_log.Admin_Mag()
admin.user_log()
| |- - -mag_init.py#系统初始化
import os ,sys
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, relationship
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
sys.path.append(BASE_DIR)#增加环境变量
from core import admin_class
from core import admin_log
from cfg import config
if __name__ == '__main__':
# 用户 密码 主机 库
#engine = create_engine(config.HOSTS,)#连接 admin_class.Base.metadata.create_all(admin_class.engine)#创建表结构
A1 = admin_class.Admin_user(name=config.USER,pwd=config.PWD)#初始化
Session_class=sessionmaker(bind=admin_class.engine)#创建与数据库的会话 类
Session=Session_class()#生成实例
Session.add(A1)
Session.commit()
| |- - -student.py#学员视图启动
import os ,sys
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
sys.path.append(BASE_DIR)#增加环境变量
from core.student_class import Stu_Mag
from cfg import config
if __name__ == '__main__':
while True:
stu=Stu_Mag()
stu.user_log()
| |- - -teach_start.py#讲师视图启动
import os ,sys
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
sys.path.append(BASE_DIR)#增加环境变量
from core.teach_class import Teach_Mag
from cfg import config
if __name__ == '__main__':
while True:
teach=Teach_Mag()
teach.user_log()
|- - -cfg/#配置目录
| |- - -__init__.py
| |- - -config.py#配置文件
import os ,sys
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
sys.path.append(BASE_DIR)#增加环境变量 BAES='test_student_mag'#库名
HOSTS="mysql+pymysql://root:root@127.0.0.1:3306/"+BAES+"?charset=utf8"#连接
USER='admin'
PWD='admin' ADMIN_OPEN=[
('创建讲师','add_teach'),
('查看讲师','teach_l'),
('创建班级','add_class'),
('查看班级','class_l'),
('讲师关联班级','assoc'),
('创建学员','add_stu'),
('查看学员','stu_l'),
('班级关联学员','class_student'),
('退出','tech_exit'),
] TEACH_OPEN=[
('查看班级','show_class'),
( '创建新班级','add_class'),
('班级增加学员','add_student'),
('增加新课节','add_lesson'),
('开始上课','add_cla_day'),
('批改成绩','set_results'),
('退出','tech_exit')
]
STUED_OPEN=[
('提交作业','up_work'),
( '查看成绩','set_resu'),
('查看班级排行','cla_top'),
('退出','tech_exit')
]
|- - -core/#主逻辑目录
| |- - -__init__.py
| |- - -admain_class.py#主要逻辑 类
#!usr/bin/env python
#-*-coding:utf-8-*-
# Author calmyan
#python
#2017/7/7 17:46
#__author__='Administrator'
# 创建表
import os ,sys
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
sys.path.append(BASE_DIR)#增加环境变量
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index,Table,DATE
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine
from sqlalchemy import func #统计
from cfg import config
Base = declarative_base()#生成orm 基类 #创建班级关联学员表,自动维护
class_name_m2m_student = Table('class_name_m2m_student', Base.metadata,
Column('class_name_id',Integer,ForeignKey('class_name.id')),#关联外键,班级id
Column('student_id',Integer,ForeignKey('student.id')),#关联外键,学员id
)
#创建班级关联老师表,自动维护
teacher_name_m2m_class = Table('teacher_name_m2m_class', Base.metadata,
Column('teacher_id',Integer,ForeignKey('teacher.id')),#关联外键,老师id
Column('class_name_id',Integer,ForeignKey('class_name.id')),#关联外键,班级id
)
#班级表
class Class_name(Base):#班级表
__tablename__ = 'class_name'
id = Column(Integer,primary_key=True)
name = Column(String(64),unique=True)
students = relationship('Student',secondary=class_name_m2m_student,backref='class_name')#关联学员,班级
#teachers = relationship('Teacher',secondary=class_name_m2m_teacher,backref='class_name')#关联老师,班级
def __repr__(self):
return self.name #老师表
class Teacher(Base):#老师表
__tablename__ = 'teacher'
id = Column(Integer, primary_key=True)
name = Column(String(32))
user = Column(String(32),unique=True)
pwd = Column(String(32))
class_n = relationship('Class_name',secondary=teacher_name_m2m_class,backref='teach_name')#关联老师,班级
def __repr__(self):
return self.name #学员表
class Student(Base):#学员表
__tablename__ = 'student'
id = Column(Integer, primary_key=True)
name = Column(String(32))
pwd = Column(String(64))
qq = Column(Integer,nullable=False,unique=True)
def __repr__(self):
return self.id #进度 课节表
class Lesson(Base):
__tablename__='lesson'
id = Column(Integer, primary_key=True)
name=Column(String(32),unique=True)#唯一课节名
def __repr__(self):
return self.name #课程表
class Class_Day(Base):#课程表
__tablename__='class_day'
id=Column(Integer,primary_key=True)
class_id=Column(Integer,ForeignKey("class_name.id"),nullable=False)#外键 班级
lesson_id= Column(Integer,ForeignKey("lesson.id"),nullable=False)#课程进度
class_n=relationship("Class_name",foreign_keys=[class_id],backref="m_class_day")#自定义关联反查 班级Class_name通过m_class_day 查Class_day
lesson_n=relationship("Lesson",foreign_keys=[lesson_id],backref="m_lesson_day")#自定义关联反查 课节Lesson通过m_lesson_day 查Class_day
def __repr__(self):
return self.id#课程名ID class Student_work(Base):# 作业 上 课记录
__tablename__='student_work'
id=Column(Integer,primary_key=True)
students_id=Column(Integer,ForeignKey("student.id"))#外键 学员ID
class_id= Column(Integer,ForeignKey('class_day.id'))#班级课程 日期 ID
status= Column(String(32),nullable=False)#作业提交 状态
results= Column(String(64))#成绩
students_w=relationship("Student",foreign_keys=[students_id],backref="m_study_class")#自定义关联反查 学员类Student通过m_study_class 查student_work
stu_class=relationship("Class_Day",foreign_keys=[class_id],backref="class_stu_work")#自定义关联反查 班级Class_name通过m_class_study 查Student_work class Admin_user(Base):
__tablename__='admin_user'
id=Column(Integer,primary_key=True)
name=Column(String(32),nullable=False,unique=True)
pwd=Column(String(64),nullable=False) # 用户 密码 主机 库
engine = create_engine(config.HOSTS,)#连接
Base.metadata.create_all(engine)#创建表结构
| |- - -admin_log.py#管理员逻辑 类
#!usr/bin/env python
#-*-coding:utf-8-*-
# Author calmyan
#python
#2017/7/9 23:12
#__author__='Administrator'
import os ,sys
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
sys.path.append(BASE_DIR)#增加环境变量
from sqlalchemy.orm import sessionmaker, relationship
from core import admin_class
from cfg import config
#管理登陆
class Admin_Mag(object):
def __init__(self):
self.Session_class=sessionmaker(bind=admin_class.engine)#创建与数据库的会话 类
self.Session=self.Session_class()#生成实例
#开始相关操作
def openatin(self):#开始相关操作
while True:
print('\033[35;1m管理员界面\033[0m'.center(60,'='))
for index,i in enumerate(config.ADMIN_OPEN):
print(index,':',i[0])
id=input('请选择>>:')
if id.isdigit():
if int(id)>=len(config.ADMIN_OPEN):continue
s=config.ADMIN_OPEN[int(id)][1]
else:
continue
if hasattr(self,s):#是反射否存在
func=getattr(self,s)#调用
func()#执行 #关联讲师班级
def assoc(self):
t_id=self.tech_cher()
cla_id=self.class_cher()
#讲师表对象
t=self.Session.query(admin_class.Teacher).filter(admin_class.Teacher.id==t_id).first()
#获取班级对象
c=self.Session.query(admin_class.Class_name).filter(admin_class.Class_name.id==cla_id).first()
t.class_n.append(c)
self.Session.commit()
print('讲师:',t.name,'班级:',c.name)
print('关联完成!') #讲师表对象
def tech_cher(self):
#t=self.Session.query(admin_class.Teacher).all()#讲师表对象
t=self.teach_l()
#for i in t :
#print('编号',i.id,'>>:',i.name)
t_id=input('请按编号选择讲师>>:').strip()
if t_id.isdigit() :#判断是否是整数
for i in t:#
if int(t_id)==i.id:
return int(t_id)#返回班级ID
else:
pass
else:
print('选择讲师有误!')
return None
#创建班级
def add_class(self):
print('\033[35;1m创建班级界面\033[0m'.center(60,'='))
self.class_l()
attr=input("输入班级名>>:").strip()
self.class_list=self.Session.query(admin_class.Class_name).all()#获取班级名列表
if attr in self.class_list:#如果存在
return print('班级名重复!')
c=admin_class.Class_name(name=attr)#创建新班级
self.add_all(c) #查看讲师
def teach_l(self):
t=self.Session.query(admin_class.Teacher).all()
for i in t:
print('编号:',i.id,'讲师姓名:',i.name,'用户名:',i.user,'密码',i.pwd,' 管理班级:',i.class_n)
return t #查看班级
def class_l(self):
c=self.Session.query(admin_class.Class_name).all()#班级对象
print("全部班级信息".center(50,'-'))
for i in c:
print('编号',i.id,'>>:',i.name)
return c #查看班级选择
def class_cher(self):#查看班级
c=self.class_l()
class_id=input('请按编号选择班级>>:').strip()
if class_id.isdigit() :#判断是否是整数
for i in c:#
if int(class_id)==i.id:
return int(class_id)#返回班级ID
else:
pass
else:
print('选择班级有误!')
return None
#创建讲师
def add_teach(self):#创建讲师
while True:
name =input('输入讲师姓名>>:').strip()
user =input('输入讲师用户名>>:').strip()
pwd =input('输入讲师密码>>:').strip()
t1 = admin_class.Teacher(name=name,user=user,pwd=pwd)
self.add_all(t1)
e=input('是否继续 Y/y 继续! 其他返回').upper().strip()
if e=='Y':continue
break
#学员添加
def add_stu(self):#学员添加
while True:
name =input('输入学员姓名>>:').strip()
pwd =input('输入学员密码>>:').strip()
qq =input('输入学员QQ>>:').strip()
if not qq.isdigit():
print('QQ必需是数字')
continue
s=admin_class.Student(name=name,pwd=pwd,qq=int(qq))
self.add_all(s)
e=input('是否继续 Y/y 继续! 其他返回').upper().strip()
if e=='Y':continue
break #查看学员
def stu_l(self):
student_l=self.Session.query(admin_class.Student).all()
for i in student_l:
print('ID:',i.id,'学员姓名:',i.name,'QQ:',i.qq,'培训班级:',i.class_name)
return student_l #学员选择
def stu_cher(self):
student_l=self.stu_l()
stu_id=input('请按ID选择学员>>:').strip()
if stu_id.isdigit() :#判断是否是整数
for i in student_l:#
if int(stu_id)==i.id:
return int(stu_id)#返回班级ID
else:
pass
else:
print('选择学员有误!')
return None #班级关联学员
def class_student(self):#班级增加学员
print('\033[35;1m班级关联学员界面\033[0m'.center(60,'='))
cla_id=self.class_cher()#调用查看班级
if not cla_id:return None
#获取班级对象
c=self.Session.query(admin_class.Class_name).filter(admin_class.Class_name.id==cla_id).first()
if not c:return None
stu_id=self.stu_cher()
#student_qq=input('请输入学生QQ号码>>:').strip()
s_qq=self.Session.query(admin_class.Student).filter(admin_class.Student.id==stu_id).first()#学员qq对象
if s_qq:#如果有这个qq
c.students.append(s_qq)#加入班级
self.Session.commit()
print('加入班级成功!')
else:
return print('对应的学员不存在') #增加函数
def add_all(self,lists):#增加函数
self.Session.add_all([lists])
confirm=input('请进行确认: 按\033[31;1mN\033[0m回滚操作,其他键确认!' ).upper().strip()
if confirm=="N":
self.Session.rollback()#
return False
try:
self.Session.commit()
print('操作成功')
return
except Exception as e:
self.Session.rollback()#
print('操作失败!,可能该信息已经存在!')
print(e)
return
#退出
def tech_exit(self):
return exit() #登陆
#登陆
def user_log(self):#登陆
user_n=input('请输入管理员用户名>>:').strip()
aut_obj=self.Session.query(admin_class.Admin_user).filter(admin_class.Admin_user.name==user_n).first()
if aut_obj:
#print(self.aut_obj_1.pwd)#用户对应密码
pwds=input('请输入密码>>:').strip()
if pwds == aut_obj.pwd: self.openatin()
else:
print('密码有误')
return
else:
print('输入的用户名不存')
return
| |- - -student_class.py#学员逻辑 类
#!usr/bin/env python
#-*-coding:utf-8-*-
# Author calmyan
#python
#2017/7/8 12:29
#__author__='Administrator'
import os ,sys
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
sys.path.append(BASE_DIR)#增加环境变量
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine
from sqlalchemy import func #统计
from core import admin_class
from cfg import config
#学员类
class Stu_Mag(object): def __init__(self):
self.Session_class=sessionmaker(bind=admin_class.engine)#创建与数据库的会话 类
self.Session=self.Session_class()#生成实例
self.stu_name=''#学员姓名 #开始相关操作
def openatin(self):#开始相关操作
while True:
print('\033[32;1m学员界面\033[0m'.center(60,'='))
print(('\033[36;1m[%s]\033[0m'%self.stu_name).center(60,'=')) for index,i in enumerate(config.STUED_OPEN):
print(index,':',i[0])
id=input('请选择>>:')
if id.isdigit():
if int(id)>=len(config.STUED_OPEN):continue
s=config.STUED_OPEN[int(id)][1]
else:
continue
if hasattr(self,s):#是反射否存在
func=getattr(self,s)#调用
func()#执行 #提交作业
def up_work(self):
class_id=self.class_l()
if not class_id:
return None#班级ID
les_id=self.lessn_obj(class_id)#课节表ID\
if not les_id:return None
cl_dayid=self.class_less(class_id,les_id)#课程表ID
if cl_dayid:
stu_id=self.stu_obj.id#学员ID
stu_work=self.Session.query(admin_class.Student_work).filter_by(students_id=stu_id,class_id=cl_dayid.id).first()
if stu_work:
if stu_work.status=='yes':
print('\033[31;1m作业已经提交,不能重复提交!\033[0m')
return None
#对应的课程表
les_n=self.Session.query(admin_class.Class_Day).filter_by(class_id=class_id,lesson_id=les_id).first()
print('姓名:',self.stu_name,'班级:',les_n.class_n,'课节:',les_n.lesson_n,'作业提交状态:',stu_work.status,'成绩:',stu_work.results)
chend=input('提交作业>>>: Y/y 确认!').upper().strip()
if chend=='Y':
self.Session.query(admin_class.Student_work).filter_by(students_id=stu_id,class_id=cl_dayid.id).update({"status":"yes"})
print('提交完成!')
self.Session.commit()
return
else:
return None
else:
print('\033[31;1m您可能没有上本节课!无法提交\033[0m')
return None
else:
print('\033[31;1m本节课可能没有开始!\033[0m')
return None #获取课程ID
def class_less(self,cla_id,les_id):
cl_dayid=self.Session.query(admin_class.Class_Day).filter(admin_class.Class_Day.class_id==cla_id).\
filter(admin_class.Class_Day.lesson_id==les_id).first()#获取班级课程表id
if cl_dayid:
return cl_dayid
else:
return None #获取课程表 选课节
def lessn_obj(self,cla):
les_l=self.Session.query(admin_class.Class_Day).filter_by(class_id=cla).all()
for i in les_l:
print('编号:',i.lesson_id,'课节:',i.lesson_n)
les_id=input('请按编号选择课节 >>:').strip()
if les_id.isdigit():
for i in les_l:
if int(les_id)==i.lesson_id:
return int(les_id)#返回课节ID
else:
print('选择课节有误!')
return None
else:
print('选择课节有误!')
return None #查看班级选择
def class_l(self):#查看班级
for i in self.stu_obj.class_name:
print('编号',i.id,'>>:',i.name)
class_id=input('请按编号选择班级>>:').strip()
if class_id.isdigit() :#判断是否是整数
for i in self.stu_obj.class_name:#是否在学员的班级中
if int(class_id)==i.id:
return int(class_id)#返回班级ID
else:
print('选择班级有误!')
return None
else:
print('选择班级有误!')
return None #查看课节
def lesson_l(self):
for i in self.les:
print('编号',i.id,'>>:',i)
les_id=input('请按编号选择课节 >>:').strip()
if les_id.isdigit():
for i in self.les:
if int(les_id)==i.id:
return int(les_id)#返回课节ID
else:
pass
else:
print('选择课节有误!')
return None #查看成绩
def set_resu(self):
class_id=self.class_l()#班级ID
les_l=self.Session.query(admin_class.Class_Day).filter_by(class_id=class_id).all()#本班所有课节
stu_id=self.stu_obj.id#学员ID
for i in les_l:
stu_work=self.Session.query(admin_class.Student_work).filter_by(students_id=stu_id,class_id=i.id).first()#取对应的课节
if stu_work:
cla_day=self.Session.query(admin_class.Class_Day).filter_by(id=stu_work.class_id).first()#课程表对象
if cla_day:
print('姓名:',self.stu_name,'班级:',cla_day.class_n,'课节:',cla_day.lesson_n,' 作业提交状态:',stu_work.status,'成绩:',stu_work.results)
else:
pass
else:
pass #查看排名
def cla_top(self):
class_id=self.class_l()#班级ID
les_l=self.Session.query(admin_class.Class_Day).filter_by(class_id=class_id).all()#取当前班级的所有课节
stu_id_l=self.Session.query(admin_class.Student).all()#取学生id
top_list=[]#分数
for i in stu_id_l:
resut=0
for j in les_l:
stu_work=self.Session.query(admin_class.Student_work).filter_by(students_id=i.id,class_id=j.id).first()
if not stu_work:continue
if stu_work.results:
resut+=int(stu_work.results)
else:
top_list.append((resut,i.name))
print(top_list)
self.sort(top_list)
for index,i in enumerate(top_list):
print('名次',index+1,'总分数--姓名:',i) #排序
def sort(self,ls):
for i in range(len(ls)-1):
for j in range(len(ls)-i-1):
if ls[j]<ls[j+1]:
ls[j],ls[j+1] =ls[j+1],ls[j]
return ls #退出
def tech_exit(self):
return exit() #登陆
def user_log(self):#登陆
user_n=input('请输入用户名(qq)>>:').strip()
if not user_n.isdigit():return None
aut_obj=self.Session.query(admin_class.Student).filter(admin_class.Student.qq==int(user_n)).first()
if aut_obj:
#print(self.aut_obj_1.pwd)#用户对应密码
pwds=input('请输入密码>>:').strip()
if pwds == aut_obj.pwd:
self.stu_name=aut_obj.name
self.qq=aut_obj.qq
self.stu_obj = self.Session.query(admin_class.Student).filter(admin_class.Student.qq==self.qq).first()#取当前学员对象实例
self.openatin()
else:
print('密码有误')
return
else:
print('输入的用户名不存')
return #stu.up_work()
| |- - -teach_class.py#讲师逻辑 类
#!usr/bin/env python
#-*-coding:utf-8-*-
# Author calmyan
#python
#2017/7/7 17:48
#__author__='Administrator' import os ,sys
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
sys.path.append(BASE_DIR)#增加环境变量
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine
from sqlalchemy import func #统计
from core import admin_class
from cfg import config #讲师类
class Teach_Mag(object): def __init__(self):
self.Session_class=sessionmaker(bind=admin_class.engine)#创建与数据库的会话 类
self.Session=self.Session_class()#生成实例
self.teach_name='' #开始相关操作
def openatin(self):#开始相关操作
while True:
print('\033[35;1m讲师界面\033[0m'.center(60,'='))
for index,i in enumerate(config.TEACH_OPEN):
print(index,':',i[0])
id=input('请选择>>:')
if id.isdigit():
if int(id)>=len(config.TEACH_OPEN):continue
s=config.TEACH_OPEN[int(id)][1]
else:
continue
if hasattr(self,s):#是反射否存在
func=getattr(self,s)#调用
func()#执行 #查看班级
def show_class(self):#查看班级
print('\033[32;1m查看班级(可管理)\033[0m'.center(60,'='))
#show_class=self.Session.query(admin_class.Class_name).filter(admin_class.Class_name.teach_name==self.teach_name)
print('\033[31;1m全部班级\033[0m'.center(45,'-'))#所有班级
for i in self.class_list:
print(i)
print('\033[35;1m可管理班级\033[0m'.center(45,'-'))
cla_id=self.class_l()#调用查看班级
class_obj=self.Session.query(admin_class.Class_name).filter(admin_class.Class_name.id==cla_id).first()
if class_obj:#获取班级对象成功 有内容
print(class_obj,class_obj.name,class_obj.id)
self.student_l(class_obj.name)#调用查看学员 得到班级对象
# print('[%s] 班 学员列表'.center(60,'=')%c)
# for i in c.students:
# print(i.id,'姓名:',i.name,'QQ:',i.qq)
# print('end'.center(60,'='))
return
else:
print('选择有误!')
return #查看班级选择
def class_l(self):#查看班级
for i in self.teach_obj.class_n:
print('编号',i.id,'班级:',i.name)
class_id=input('请按编号选择班级>>:').strip()
if class_id.isdigit() :#判断是否是整数
for i in self.teach_obj.class_n:#是否在讲师的班级中
if int(class_id)==i.id:
return int(class_id)#返回班级ID
else:
print('选择班级有误!')
return None
else:
print('选择班级有误!')
return None #查看班级学员
def student_l(self,class_name):#查看班级学员
stu_l=self.Session.query(admin_class.Class_name).filter(admin_class.Class_name.name==str(class_name)).first()#所选班级对象
print('[%s] 班 学员列表'.center(60,'=')%stu_l)
for i in stu_l.students:
print(i.id,'姓名:',i.name,'QQ:',i.qq)
print('end'.center(60,'='))
return stu_l#返回所选班级对象 #查看课节
def less_cher(self):
les=self.Session.query(admin_class.Lesson).all()#取课节名列表
for i in les:
print('编号',i.id,'课节名>>:',i)
return les
#查看课节 选择
def lesson_l(self):
les=self.less_cher()#取课节名列表
# for i in les:
# print('编号',i.id,'课节名>>:',i)
les_id=input('请按编号选择课节 >>:').strip()
if les_id.isdigit():
for i in les:
if int(les_id)==i.id:
return int(les_id)#返回课节ID
else:
print('选择课节有误!')
return None
else:
print('选择课节有误!')
return None #创建班级
def add_class(self):#创建班级
print('\033[35;1m创建班级界面\033[0m'.center(60,'='))
attr=input("输入班级名>>:").strip()
if attr in self.class_list:#如果存在
return print('班级名重复!')
c=admin_class.Class_name(name=attr)#创建新班级
self.teach_obj.class_n.append(c)#关联讲师与班级
if self.add_all(c):#进行调用添加
self.Session.add_all([c])
self.Session.commit()
return #班级增加学员
def add_student(self):#班级增加学员
print('\033[35;1m增加学员界面\033[0m'.center(60,'='))
cla_id=self.class_l()#调用查看班级
if not cla_id:return None
#获取班级对象
c=self.Session.query(admin_class.Class_name).filter(admin_class.Class_name.id==cla_id).first()
if not c:return None
stu_l=self.student_l(c.name)#查看班级学员
student_qq=input('请输入学生QQ号码>>:').strip()
s_qq=self.Session.query(admin_class.Student).filter(admin_class.Student.qq==int(student_qq)).first()#学员qq对象
if s_qq:#如果有这个qq
c.students.append(s_qq)#加入班级
self.Session.commit()
print('加入班级成功!')
else:
return print('QQ对应的学员不存在') #添加课节
def add_lesson(self):#添加课节
print('现有课节'.center(40,'='))
les=self.less_cher()#取课节名列表
day_name=input('输入课节名>>:').strip()
d1=admin_class.Lesson(name=day_name)
self.add_all(d1) #获取课程ID
def class_less(self,cla_id,les_id): cl_dayid=self.Session.query(admin_class.Class_Day).filter(admin_class.Class_Day.class_id==cla_id).\
filter(admin_class.Class_Day.lesson_id==les_id).first()#获取班级课程表id
if cl_dayid:
return cl_dayid
else:
return None #获取班级对象
def class_obj(self,cla_id):
clas_obj=self.Session.query(admin_class.Class_name).filter(admin_class.Class_name.id==cla_id).first()#获取班级对象
return clas_obj #开始上课
def add_cla_day(self):#开始上课
print('\033[32;1m班级上课\033[0m'.center(60,'='))
cla_id=self.class_l()##获取班级id
if not cla_id:return None
les_id=self.lesson_l()#获取课节id
if not les_id:return None
clas_obj=self.class_obj(cla_id)#获取班级对象
print(clas_obj,clas_obj.id)#班级名,ID
cl_dayid=self.class_less(cla_id,les_id)#获取课程表对象
if cl_dayid:#如果课程表存在
print('当前班级该节课已经上过!')
return
clas_day=admin_class.Class_Day(class_id=cla_id,lesson_id=les_id)#创建上课课程记录
self.Session.add(clas_day)#添加记录
cl_day_id=self.class_less(cla_id,les_id)#获取当前班级课程对象
c_obj=self.student_l(cl_day_id.class_n)#获取班级 学员对象
for i in c_obj.students:
stu_work=admin_class.Student_work(students_id=i.id,class_id=cl_day_id.id,status='not')#创建上课记录
self.Session.add(stu_work)#添加记录
self.Session.commit()
return print('上课记录添加完成') #批改作业
def set_results(self):#批改作业
print('\033[32;1m批改作业\033[0m'.center(60,'='))
cla_id=self.class_l()##获取班级id
if not cla_id:return None
les_id=self.lesson_l()#获取课节id
if not les_id:return None
cl_day_id=self.class_less(cla_id,les_id)#获取课程表对象
if not cl_day_id:print('本节课未上!');return None
#获取当前班级中,
stude_day=self.Session.query(admin_class.Student_work).filter(admin_class.Student_work.class_id==cl_day_id.id).all()
print('\033[36;1m开始批改作业\033[0m'.center(60,'='))
print('\033[31;1m作业未提交则不显示\033[0m')
for i in stude_day:
if i.status=='yes' and not i.results:
print(i.id,'姓名:',i.students_w.name,'成绩:',i.results)
resu=input('请输入成绩>>:').strip()
if resu.isdigit():
self.Session.query(admin_class.Student_work).filter(admin_class.Student_work.id==i.id).update({"results":resu})
elif i.status=='yes' and i.results:
print(i.id,'姓名:',i.students_w.name,'成绩:',i.results)
resu=input('是否修改成绩? N/n 跳过,输入新成绩').upper().strip()
if resu=='N':
continue
if resu.isdigit():
self.Session.query(admin_class.Student_work).filter(admin_class.Student_work.id==i.id).update({"results":resu}) else:
self.Session.commit()
print("已提交的作业全部批改完毕!") #增加函数
def add_all(self,lists):#增加函数
self.Session.add_all([lists])
confirm=input('请进行确认: 按\033[31;1mN\033[0m回滚操作,其他键确认!' ).upper().strip()
if confirm=="N":
self.Session.rollback()#
return False
try:
self.Session.commit()
print('操作成功')
return lists
except Exception as e:
self.Session.rollback()#
print('操作失败!,可能该信息已经存在!')
return #退出
def tech_exit(self):
return exit()
#登陆
def user_log(self):#登陆
user_n=input('请输入用户名>>:').strip()
aut_obj=self.Session.query(admin_class.Teacher).filter(admin_class.Teacher.user==user_n).first()
if aut_obj:
#print(self.aut_obj_1.pwd)#用户对应密码
pwds=input('请输入密码>>:').strip()
if pwds == aut_obj.pwd:
self.teach_name=aut_obj.name
#print(self.teach_name)#当前讲师姓名
self.teach_obj = self.Session.query(admin_class.Teacher).filter(admin_class.Teacher.name==self.teach_name).first()#取当前讲课对象实例
self.class_list=self.Session.query(admin_class.Class_name).all()#获取班级名列表
#self.les=self.Session.query(admin_class.Lesson).all()#取课节名列表
#print(self.s_name_list[2])
self.openatin()
else:
print('密码有误')
return
else:
print('输入的用户名不存')
return #Session.query()
while True:
teach=Teach_Mag()
#teach.add_teach()
#teach.add_stu() teach.user_log()
python第六十八天--第十二周作业的更多相关文章
- 2017-2018-1 《Linux内核原理与设计》第十二周作业
<linux内核原理与设计>第十二周作业 Sql注入基础原理介绍 分组: 和20179215袁琳完成实验 一.实验说明 SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而这 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第十二周作业
<Linux内核原理与分析>第十二周作业 一.本周内容概述: 通过编程理解 Set-UID 的运行机制与安全问题 完成实验楼上的<SET-UID程序漏洞实验> 二.本周学习内容 ...
- 第十二周作业_PSP总结报告
回顾1 (1)回想一下你曾经对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 你认为过去接触到的课程是否符合你对计算机专业的期待,为什么?经过一个学 ...
- 2019春第十二周作业Compile Summarize
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 这里 我在这个课程的目标是 能按自己的想法解出题目 这个作业在那个具体方面帮助我实现目标 能朝着软件工程师方向发展 参考文献与网址 C语言 ...
- C语言第十二周作业
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪 https://edu.cnblogs.com/campus/zswxy/computer-scienceclass3-2018/h ...
- 20169212《Linux内核原理及分析》第十二周作业
格式化字符串漏洞实验 格式化字符串漏洞是由像 printf(user_input) 这样的代码引起的,其中 user_input 是用户输入的数据,具有 Set-UID root 权限的这类程序在运行 ...
- 20169207《Linux内核原理及分析》第十二周作业
本周选做的信息安全实验为Python实现Zip文件的暴力破解 实验预备: 这次实验我们需要用到的库为zipfile.下来我们先来了解一下这个模块. 首先我们的重点是对zip文件的操作,而zipfile ...
- 2017-2018-1 20179202《Linux内核原理与分析》第十二周作业
C语言实现Linux网络嗅探器 一.知识准备 1.一般情况下,网络上所有的机器都可以"听"到通过的流量,但对不属于自己的数据包则不予响应.如果某个工作站的网络接口处于混杂模式,那么 ...
- 20179203 《Linux内核原理与分析》第十二周作业
Return-to-libc 攻击实验 一.实验描述 缓冲区溢出的常用攻击方法是用 shellcode 的地址来覆盖漏洞程序的返回地址,使得漏洞程序去执行存放在栈中 shellcode.为了阻止这种类 ...
随机推荐
- 今天是JVM的生日,来了解下JVM的发展历史吧
1991年4月,由James Gosling主导的团队创造了Oak语言,java的前身,1995年5月23号,Oak语言更名Java,并且提出那句注明的:”write Once,Run Anywher ...
- Tomcat使用IDEA远程Debug调试
Tomcat运行环境:CentOS6.5.Tomcat7.0.IDEA 远程Tomcat设置 1.在tomcat/bin下的catalina.sh上边添加下边的一段设置 CATALINA_OPTS=& ...
- redis-cluster无备节点,安装脚本
#!/bin/bash #安装gcc yum -y install gcc #安装RVM所需的程序包 yum -y install gcc-c++ patch readline readline-de ...
- Kotlin 最佳实践
为什么写此文 Kotlin很烦,Gralde很烦,还都是升级狂,加一块更烦.几个月不接触Kotlin,再次上手时便一片迷茫.所以记录此文,以便再次上手时查阅. 使用Gradle创建Kotlin项目 m ...
- 高可用Hadoop平台-Oozie工作流之Hadoop调度
1.概述 在<高可用Hadoop平台-Oozie工作流>一篇中,给大家分享了如何去单一的集成Oozie这样一个插件.今天为大家介绍如何去使用Oozie创建相关工作流运行与Hadoop上,已 ...
- unity5.5 ugui使用美术字
文件转载自:http://www.jianshu.com/p/a4e6d1ca3ca0 项目需要使用美术字加强战斗效果表现,按以往NGUI的使用经验,这个应该很简单,随便Google一下都有数篇技术博 ...
- python虚拟环境 | virtualenv 的简单使用 (图文)
一.创建virtualenv虚拟环境 mkvirtualenv -p 版本号 虚拟名 mkvirtualenv -p python3 env_1 python3:版本号 env_1: 虚拟环境名称 创 ...
- 120分钟React快速扫盲教程
在教程开端先说些题外话,我喜欢在学习一门新技术或读过一本书后,写一篇教程或总结,既能帮助消化,也能加深印象和发现自己未注意的细节,写的过程其实仍然是一个学习的过程.有个记录的话,在未来需要用到相关知识 ...
- php持续推送信息到客户端的方法
<?php set_time_limit(0); $i=1; while($i++) { echo $i,'<br />'; ob_flush();//冲刷出(送出)输出缓冲区中的内 ...
- Ado.net和EF的区别
ado.net EF作为微软的一个ORM框架,通过实体.关系型数据库表之间的映射,使开发人员可以通过操作表实体而间接的操作数据库,大大的提高了开发效率.这样一来,.net平台下,我们与底层数据库的交互 ...