欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

python第六十八天--第十二周作业

程序员文章站 2022-04-19 10:01:45
...
主题:

需求:

用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下
讲师视图
  管理班级,可创建班级,根据学员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

 

 

先上一个表结构图   

 

python第六十八天--第十二周作业

 

流程美图来一张:

python第六十八天--第十二周作业

 

stude_mag_sys/#程序目录
|- - -__init__.py
|- - -bin/#启动目录
| |- - -__init__.py
|      |- - -admin_start.py#管理员视图启动
python第六十八天--第十二周作业
 1 import os ,sys
 2 from sqlalchemy import create_engine
 3 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
 4 sys.path.append(BASE_DIR)#增加环境变量
 5 from core import admin_class
 6 from core import admin_log
 7 from cfg import config
 8 if __name__ == '__main__':
 9     #                      用户 密码  主机             库
10     #engine = create_engine(config.HOSTS,)#连接
11     #admin_class.Base.metadata.create_all(admin_class.engine)#创建表结构
12     while True:
13         admin=admin_log.Admin_Mag()
14         admin.user_log()
View Code
|      |- - -mag_init.py#系统初始化
python第六十八天--第十二周作业
 1 import os ,sys
 2 from sqlalchemy import create_engine
 3 from sqlalchemy.orm import sessionmaker, relationship
 4 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
 5 sys.path.append(BASE_DIR)#增加环境变量
 6 from core import admin_class
 7 from core import admin_log
 8 from cfg import config
 9 if __name__ == '__main__':
10     #                      用户 密码  主机             库
11     #engine = create_engine(config.HOSTS,)#连接
12 
13     admin_class.Base.metadata.create_all(admin_class.engine)#创建表结构
14     A1 = admin_class.Admin_user(name=config.USER,pwd=config.PWD)#初始化
15     Session_class=sessionmaker(bind=admin_class.engine)#创建与数据库的会话 类
16     Session=Session_class()#生成实例
17     Session.add(A1)
18     Session.commit()
View Code
|      |- - -student.py#学员视图启动
python第六十八天--第十二周作业
1 import os ,sys
2 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
3 sys.path.append(BASE_DIR)#增加环境变量
4 from core.student_class import Stu_Mag
5 from cfg import config
6 if __name__ == '__main__':
7     while True:
8         stu=Stu_Mag()
9         stu.user_log()
View Code
|      |- - -teach_start.py#讲师视图启动
python第六十八天--第十二周作业
1 import os ,sys
2 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
3 sys.path.append(BASE_DIR)#增加环境变量
4 from core.teach_class import Teach_Mag
5 from cfg import config
6 if __name__ == '__main__':
7     while True:
8         teach=Teach_Mag()
9         teach.user_log()
View Code

 

|- - -cfg/#配置目录
| |- - -__init__.py
| |- - -config.py#配置文件
python第六十八天--第十二周作业
 1 import os ,sys
 2 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
 3 sys.path.append(BASE_DIR)#增加环境变量
 4 
 5 BAES='test_student_mag'#库名
 6 HOSTS="mysql+pymysql://root:root@127.0.0.1:3306/"+BAES+"?charset=utf8"#连接
 7 USER='admin'
 8 PWD='admin'
 9 
10 ADMIN_OPEN=[
11     ('创建讲师','add_teach'),
12     ('查看讲师','teach_l'),
13     ('创建班级','add_class'),
14     ('查看班级','class_l'),
15     ('讲师关联班级','assoc'),
16     ('创建学员','add_stu'),
17     ('查看学员','stu_l'),
18     ('班级关联学员','class_student'),
19     ('退出','tech_exit'),
20 ]
21 
22 TEACH_OPEN=[
23     ('查看班级','show_class'),
24     ( '创建新班级','add_class'),
25     ('班级增加学员','add_student'),
26      ('增加新课节','add_lesson'),
27       ('开始上课','add_cla_day'),
28        ('批改成绩','set_results'),
29     ('退出','tech_exit')
30 ]
31 STUED_OPEN=[
32     ('提交作业','up_work'),
33     ( '查看成绩','set_resu'),
34     ('查看班级排行','cla_top'),
35     ('退出','tech_exit')
36 ]
View Code
|- - -core/#主逻辑目录
| |- - -__init__.py
| |- - -admain_class.py#主要逻辑 类
python第六十八天--第十二周作业
 1 #!usr/bin/env python
 2 #-*-coding:utf-8-*-
 3 # Author calmyan 
 4 #python 
 5 #2017/7/7    17:46
 6 #__author__='Administrator'
 7 # 创建表
 8 import os ,sys
 9 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
10 sys.path.append(BASE_DIR)#增加环境变量
11 from sqlalchemy.ext.declarative import declarative_base
12 from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index,Table,DATE
13 from sqlalchemy.orm import sessionmaker, relationship
14 from sqlalchemy import create_engine
15 from sqlalchemy import func #统计
16 from  cfg import config
17 Base = declarative_base()#生成orm 基类
18 
19 #创建班级关联学员表,自动维护
20 class_name_m2m_student = Table('class_name_m2m_student', Base.metadata,
21                         Column('class_name_id',Integer,ForeignKey('class_name.id')),#关联外键,班级id
22                         Column('student_id',Integer,ForeignKey('student.id')),#关联外键,学员id
23                         )
24 #创建班级关联老师表,自动维护
25 teacher_name_m2m_class = Table('teacher_name_m2m_class', Base.metadata,
26                         Column('teacher_id',Integer,ForeignKey('teacher.id')),#关联外键,老师id
27                         Column('class_name_id',Integer,ForeignKey('class_name.id')),#关联外键,班级id
28                         )
29 #班级表
30 class Class_name(Base):#班级表
31     __tablename__ = 'class_name'
32     id = Column(Integer,primary_key=True)
33     name = Column(String(64),unique=True)
34     students = relationship('Student',secondary=class_name_m2m_student,backref='class_name')#关联学员,班级
35     #teachers = relationship('Teacher',secondary=class_name_m2m_teacher,backref='class_name')#关联老师,班级
36     def __repr__(self):
37         return self.name
38 
39 #老师表
40 class Teacher(Base):#老师表
41     __tablename__ = 'teacher'
42     id = Column(Integer, primary_key=True)
43     name = Column(String(32))
44     user = Column(String(32),unique=True)
45     pwd = Column(String(32))
46     class_n = relationship('Class_name',secondary=teacher_name_m2m_class,backref='teach_name')#关联老师,班级
47     def __repr__(self):
48         return self.name
49 
50 #学员表
51 class Student(Base):#学员表
52     __tablename__ = 'student'
53     id = Column(Integer, primary_key=True)
54     name = Column(String(32))
55     pwd = Column(String(64))
56     qq = Column(Integer,nullable=False,unique=True)
57     def __repr__(self):
58         return self.id
59 
60 #进度  课节表
61 class Lesson(Base):
62     __tablename__='lesson'
63     id = Column(Integer, primary_key=True)
64     name=Column(String(32),unique=True)#唯一课节名
65     def __repr__(self):
66         return self.name
67 
68 #课程表
69 class Class_Day(Base):#课程表
70     __tablename__='class_day'
71     id=Column(Integer,primary_key=True)
72     class_id=Column(Integer,ForeignKey("class_name.id"),nullable=False)#外键 班级
73     lesson_id= Column(Integer,ForeignKey("lesson.id"),nullable=False)#课程进度
74     class_n=relationship("Class_name",foreign_keys=[class_id],backref="m_class_day")#自定义关联反查 班级Class_name通过m_class_day 查Class_day
75     lesson_n=relationship("Lesson",foreign_keys=[lesson_id],backref="m_lesson_day")#自定义关联反查 课节Lesson通过m_lesson_day 查Class_day
76     def __repr__(self):
77         return self.id#课程名ID
78 
79 class Student_work(Base):#  作业 上 课记录
80     __tablename__='student_work'
81     id=Column(Integer,primary_key=True)
82     students_id=Column(Integer,ForeignKey("student.id"))#外键 学员ID
83     class_id= Column(Integer,ForeignKey('class_day.id'))#班级课程 日期 ID
84     status= Column(String(32),nullable=False)#作业提交 状态
85     results= Column(String(64))#成绩
86     students_w=relationship("Student",foreign_keys=[students_id],backref="m_study_class")#自定义关联反查 学员类Student通过m_study_class 查student_work
87     stu_class=relationship("Class_Day",foreign_keys=[class_id],backref="class_stu_work")#自定义关联反查 班级Class_name通过m_class_study 查Student_work
88 
89 class Admin_user(Base):
90     __tablename__='admin_user'
91     id=Column(Integer,primary_key=True)
92     name=Column(String(32),nullable=False,unique=True)
93     pwd=Column(String(64),nullable=False)
94 
95 #                      用户 密码  主机             库
96 engine = create_engine(config.HOSTS,)#连接
97 Base.metadata.create_all(engine)#创建表结构
View Code
|      |- - -admin_log.py#管理员逻辑 类
python第六十八天--第十二周作业
  1 #!usr/bin/env python
  2 #-*-coding:utf-8-*-
  3 # Author calmyan 
  4 #python 
  5 #2017/7/9    23:12
  6 #__author__='Administrator'
  7 import os ,sys
  8 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
  9 sys.path.append(BASE_DIR)#增加环境变量
 10 from sqlalchemy.orm import sessionmaker, relationship
 11 from core import admin_class
 12 from cfg import config
 13 #管理登陆
 14 class Admin_Mag(object):
 15     def __init__(self):
 16         self.Session_class=sessionmaker(bind=admin_class.engine)#创建与数据库的会话 类
 17         self.Session=self.Session_class()#生成实例
 18     #开始相关操作
 19     def openatin(self):#开始相关操作
 20         while True:
 21             print('\033[35;1m管理员界面\033[0m'.center(60,'='))
 22             for index,i in enumerate(config.ADMIN_OPEN):
 23                 print(index,':',i[0])
 24             id=input('请选择>>:')
 25             if id.isdigit():
 26                 if int(id)>=len(config.ADMIN_OPEN):continue
 27                 s=config.ADMIN_OPEN[int(id)][1]
 28             else:
 29                 continue
 30             if hasattr(self,s):#是反射否存在
 31                 func=getattr(self,s)#调用
 32                 func()#执行
 33 
 34     #关联讲师班级
 35     def assoc(self):
 36         t_id=self.tech_cher()
 37         cla_id=self.class_cher()
 38         #讲师表对象
 39         t=self.Session.query(admin_class.Teacher).filter(admin_class.Teacher.id==t_id).first()
 40         #获取班级对象
 41         c=self.Session.query(admin_class.Class_name).filter(admin_class.Class_name.id==cla_id).first()
 42         t.class_n.append(c)
 43         self.Session.commit()
 44         print('讲师:',t.name,'班级:',c.name)
 45         print('关联完成!')
 46 
 47     #讲师表对象
 48     def tech_cher(self):
 49         #t=self.Session.query(admin_class.Teacher).all()#讲师表对象
 50         t=self.teach_l()
 51         #for i in t :
 52             #print('编号',i.id,'>>:',i.name)
 53         t_id=input('请按编号选择讲师>>:').strip()
 54         if  t_id.isdigit() :#判断是否是整数
 55             for i in t:#
 56                 if int(t_id)==i.id:
 57                     return int(t_id)#返回班级ID
 58             else:
 59                 pass
 60         else:
 61             print('选择讲师有误!')
 62             return None
 63     #创建班级
 64     def add_class(self):
 65         print('\033[35;1m创建班级界面\033[0m'.center(60,'='))
 66         self.class_l()
 67         attr=input("输入班级名>>:").strip()
 68         self.class_list=self.Session.query(admin_class.Class_name).all()#获取班级名列表
 69         if attr in self.class_list:#如果存在
 70             return print('班级名重复!')
 71         c=admin_class.Class_name(name=attr)#创建新班级
 72         self.add_all(c)
 73 
 74     #查看讲师
 75     def teach_l(self):
 76         t=self.Session.query(admin_class.Teacher).all()
 77         for i in t:
 78             print('编号:',i.id,'讲师姓名:',i.name,'用户名:',i.user,'密码',i.pwd,' 管理班级:',i.class_n)
 79         return t
 80 
 81 
 82     #查看班级
 83     def class_l(self):
 84         c=self.Session.query(admin_class.Class_name).all()#班级对象
 85         print("全部班级信息".center(50,'-'))
 86         for i in c:
 87             print('编号',i.id,'>>:',i.name)
 88         return c
 89 
 90     #查看班级选择
 91     def class_cher(self):#查看班级
 92         c=self.class_l()
 93         class_id=input('请按编号选择班级>>:').strip()
 94         if  class_id.isdigit() :#判断是否是整数
 95             for i in c:#
 96                 if int(class_id)==i.id:
 97                     return int(class_id)#返回班级ID
 98             else:
 99                 pass
100         else:
101             print('选择班级有误!')
102             return None
103     #创建讲师
104     def add_teach(self):#创建讲师
105         while True:
106             name =input('输入讲师姓名>>:').strip()
107             user =input('输入讲师用户名>>:').strip()
108             pwd =input('输入讲师密码>>:').strip()
109             t1 = admin_class.Teacher(name=name,user=user,pwd=pwd)
110             self.add_all(t1)
111             e=input('是否继续 Y/y 继续! 其他返回').upper().strip()
112             if e=='Y':continue
113             break
114     #学员添加
115     def add_stu(self):#学员添加
116         while True:
117             name =input('输入学员姓名>>:').strip()
118             pwd =input('输入学员密码>>:').strip()
119             qq =input('输入学员QQ>>:').strip()
120             if not qq.isdigit():
121                 print('QQ必需是数字')
122                 continue
123             s=admin_class.Student(name=name,pwd=pwd,qq=int(qq))
124             self.add_all(s)
125             e=input('是否继续 Y/y 继续! 其他返回').upper().strip()
126             if e=='Y':continue
127             break
128 
129     #查看学员
130     def stu_l(self):
131         student_l=self.Session.query(admin_class.Student).all()
132         for i in student_l:
133             print('ID:',i.id,'学员姓名:',i.name,'QQ:',i.qq,'培训班级:',i.class_name)
134         return student_l
135 
136     #学员选择
137     def stu_cher(self):
138         student_l=self.stu_l()
139         stu_id=input('请按ID选择学员>>:').strip()
140         if  stu_id.isdigit() :#判断是否是整数
141             for i in student_l:#
142                 if int(stu_id)==i.id:
143                     return int(stu_id)#返回班级ID
144             else:
145                 pass
146         else:
147             print('选择学员有误!')
148             return None
149 
150     #班级关联学员
151     def class_student(self):#班级增加学员
152         print('\033[35;1m班级关联学员界面\033[0m'.center(60,'='))
153         cla_id=self.class_cher()#调用查看班级
154         if not cla_id:return None
155         #获取班级对象
156         c=self.Session.query(admin_class.Class_name).filter(admin_class.Class_name.id==cla_id).first()
157         if not c:return None
158         stu_id=self.stu_cher()
159         #student_qq=input('请输入学生QQ号码>>:').strip()
160         s_qq=self.Session.query(admin_class.Student).filter(admin_class.Student.id==stu_id).first()#学员qq对象
161         if s_qq:#如果有这个qq
162             c.students.append(s_qq)#加入班级
163             self.Session.commit()
164             print('加入班级成功!')
165         else:
166             return print('对应的学员不存在')
167 
168     #增加函数
169     def add_all(self,lists):#增加函数
170         self.Session.add_all([lists])
171         confirm=input('请进行确认: 按\033[31;1mN\033[0m回滚操作,其他键确认!' ).upper().strip()
172         if confirm=="N":
173             self.Session.rollback()#
174             return False
175         try:
176             self.Session.commit()
177             print('操作成功')
178             return
179         except Exception as e:
180             self.Session.rollback()#
181             print('操作失败!,可能该信息已经存在!')
182             print(e)
183             return
184     #退出
185     def tech_exit(self):
186         return  exit()
187 
188      #登陆
189     #登陆
190     def user_log(self):#登陆
191         user_n=input('请输入管理员用户名>>:').strip()
192         aut_obj=self.Session.query(admin_class.Admin_user).filter(admin_class.Admin_user.name==user_n).first()
193         if aut_obj:
194             #print(self.aut_obj_1.pwd)#用户对应密码
195             pwds=input('请输入密码>>:').strip()
196             if pwds == aut_obj.pwd:
197 
198                 self.openatin()
199             else:
200                 print('密码有误')
201                 return
202         else:
203             print('输入的用户名不存')
204             return
View Code
|      |- - -student_class.py#学员逻辑 类
python第六十八天--第十二周作业
  1 #!usr/bin/env python
  2 #-*-coding:utf-8-*-
  3 # Author calmyan 
  4 #python 
  5 #2017/7/8    12:29
  6 #__author__='Administrator'
  7 import os ,sys
  8 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
  9 sys.path.append(BASE_DIR)#增加环境变量
 10 from sqlalchemy.ext.declarative import declarative_base
 11 from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
 12 from sqlalchemy.orm import sessionmaker, relationship
 13 from sqlalchemy import create_engine
 14 from sqlalchemy import func #统计
 15 from  core import admin_class
 16 from  cfg import config
 17 #学员类
 18 class Stu_Mag(object):
 19 
 20     def __init__(self):
 21         self.Session_class=sessionmaker(bind=admin_class.engine)#创建与数据库的会话 类
 22         self.Session=self.Session_class()#生成实例
 23         self.stu_name=''#学员姓名
 24 
 25     #开始相关操作
 26     def openatin(self):#开始相关操作
 27         while True:
 28             print('\033[32;1m学员界面\033[0m'.center(60,'='))
 29             print(('\033[36;1m[%s]\033[0m'%self.stu_name).center(60,'='))
 30 
 31             for index,i in enumerate(config.STUED_OPEN):
 32                 print(index,':',i[0])
 33             id=input('请选择>>:')
 34             if id.isdigit():
 35                 if int(id)>=len(config.STUED_OPEN):continue
 36                 s=config.STUED_OPEN[int(id)][1]
 37             else:
 38                 continue
 39             if hasattr(self,s):#是反射否存在
 40                 func=getattr(self,s)#调用
 41                 func()#执行
 42 
 43     #提交作业
 44     def up_work(self):
 45         class_id=self.class_l()
 46         if not class_id:
 47             return None#班级ID
 48         les_id=self.lessn_obj(class_id)#课节表ID\
 49         if not les_id:return None
 50         cl_dayid=self.class_less(class_id,les_id)#课程表ID
 51         if cl_dayid:
 52             stu_id=self.stu_obj.id#学员ID
 53             stu_work=self.Session.query(admin_class.Student_work).filter_by(students_id=stu_id,class_id=cl_dayid.id).first()
 54             if stu_work:
 55                 if stu_work.status=='yes':
 56                     print('\033[31;1m作业已经提交,不能重复提交!\033[0m')
 57                     return None
 58                 #对应的课程表
 59                 les_n=self.Session.query(admin_class.Class_Day).filter_by(class_id=class_id,lesson_id=les_id).first()
 60                 print('姓名:',self.stu_name,'班级:',les_n.class_n,'课节:',les_n.lesson_n,'作业提交状态:',stu_work.status,'成绩:',stu_work.results)
 61                 chend=input('提交作业>>>: Y/y 确认!').upper().strip()
 62                 if chend=='Y':
 63                     self.Session.query(admin_class.Student_work).filter_by(students_id=stu_id,class_id=cl_dayid.id).update({"status":"yes"})
 64                     print('提交完成!')
 65                     self.Session.commit()
 66                     return
 67                 else:
 68                     return None
 69             else:
 70                 print('\033[31;1m您可能没有上本节课!无法提交\033[0m')
 71                 return None
 72         else:
 73             print('\033[31;1m本节课可能没有开始!\033[0m')
 74             return None
 75 
 76 
 77     #获取课程ID
 78     def class_less(self,cla_id,les_id):
 79         cl_dayid=self.Session.query(admin_class.Class_Day).filter(admin_class.Class_Day.class_id==cla_id).\
 80             filter(admin_class.Class_Day.lesson_id==les_id).first()#获取班级课程表id
 81         if cl_dayid:
 82             return cl_dayid
 83         else:
 84             return None
 85 
 86     #获取课程表 选课节
 87     def lessn_obj(self,cla):
 88         les_l=self.Session.query(admin_class.Class_Day).filter_by(class_id=cla).all()
 89         for i in les_l:
 90             print('编号:',i.lesson_id,'课节:',i.lesson_n)
 91         les_id=input('请按编号选择课节 >>:').strip()
 92         if les_id.isdigit():
 93             for i in les_l:
 94                 if int(les_id)==i.lesson_id:
 95                     return int(les_id)#返回课节ID
 96             else:
 97                 print('选择课节有误!')
 98                 return None
 99         else:
100             print('选择课节有误!')
101             return None
102 
103     #查看班级选择
104     def class_l(self):#查看班级
105         for i in self.stu_obj.class_name:
106             print('编号',i.id,'>>:',i.name)
107         class_id=input('请按编号选择班级>>:').strip()
108         if  class_id.isdigit() :#判断是否是整数
109             for i in self.stu_obj.class_name:#是否在学员的班级中
110                 if int(class_id)==i.id:
111                     return int(class_id)#返回班级ID
112             else:
113                 print('选择班级有误!')
114                 return None
115         else:
116             print('选择班级有误!')
117             return None
118 
119     #查看课节
120     def lesson_l(self):
121         for i in self.les:
122             print('编号',i.id,'>>:',i)
123         les_id=input('请按编号选择课节 >>:').strip()
124         if les_id.isdigit():
125             for i in self.les:
126                 if int(les_id)==i.id:
127                     return int(les_id)#返回课节ID
128             else:
129                 pass
130         else:
131             print('选择课节有误!')
132             return None
133 
134     #查看成绩
135     def set_resu(self):
136         class_id=self.class_l()#班级ID
137         les_l=self.Session.query(admin_class.Class_Day).filter_by(class_id=class_id).all()#本班所有课节
138         stu_id=self.stu_obj.id#学员ID
139         for i in les_l:
140             stu_work=self.Session.query(admin_class.Student_work).filter_by(students_id=stu_id,class_id=i.id).first()#取对应的课节
141             if stu_work:
142                 cla_day=self.Session.query(admin_class.Class_Day).filter_by(id=stu_work.class_id).first()#课程表对象
143                 if cla_day:
144                     print('姓名:',self.stu_name,'班级:',cla_day.class_n,'课节:',cla_day.lesson_n,' 作业提交状态:',stu_work.status,'成绩:',stu_work.results)
145                 else:
146                     pass
147             else:
148                 pass
149 
150     #查看排名
151     def cla_top(self):
152         class_id=self.class_l()#班级ID
153         les_l=self.Session.query(admin_class.Class_Day).filter_by(class_id=class_id).all()#取当前班级的所有课节
154         stu_id_l=self.Session.query(admin_class.Student).all()#取学生id
155         top_list=[]#分数
156         for i in stu_id_l:
157             resut=0
158             for j in les_l:
159                 stu_work=self.Session.query(admin_class.Student_work).filter_by(students_id=i.id,class_id=j.id).first()
160                 if not stu_work:continue
161                 if stu_work.results:
162                     resut+=int(stu_work.results)
163             else:
164                 top_list.append((resut,i.name))
165         print(top_list)
166         self.sort(top_list)
167         for index,i in enumerate(top_list):
168             print('名次',index+1,'总分数--姓名:',i)
169 
170     #排序
171     def sort(self,ls):
172         for i in range(len(ls)-1):
173             for j in range(len(ls)-i-1):
174                 if ls[j]<ls[j+1]:
175                     ls[j],ls[j+1] =ls[j+1],ls[j]
176         return ls
177 
178 
179 
180     #退出
181     def tech_exit(self):
182         return  exit()
183 
184     #登陆
185     def user_log(self):#登陆
186             user_n=input('请输入用户名(qq)>>:').strip()
187             if not user_n.isdigit():return None
188             aut_obj=self.Session.query(admin_class.Student).filter(admin_class.Student.qq==int(user_n)).first()
189             if aut_obj:
190                 #print(self.aut_obj_1.pwd)#用户对应密码
191                 pwds=input('请输入密码>>:').strip()
192                 if pwds == aut_obj.pwd:
193                     self.stu_name=aut_obj.name
194                     self.qq=aut_obj.qq
195                     self.stu_obj = self.Session.query(admin_class.Student).filter(admin_class.Student.qq==self.qq).first()#取当前学员对象实例
196                     self.openatin()
197                 else:
198                     print('密码有误')
199                     return
200             else:
201                 print('输入的用户名不存')
202                 return
203 
204 
205 
206     #stu.up_work()
View Code
|      |- - -teach_class.py#讲师逻辑 类
python第六十八天--第十二周作业
  1 #!usr/bin/env python
  2 #-*-coding:utf-8-*-
  3 # Author calmyan 
  4 #python 
  5 #2017/7/7    17:48
  6 #__author__='Administrator'
  7 
  8 import os ,sys
  9 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量
 10 sys.path.append(BASE_DIR)#增加环境变量
 11 from sqlalchemy.ext.declarative import declarative_base
 12 from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
 13 from sqlalchemy.orm import sessionmaker, relationship
 14 from sqlalchemy import create_engine
 15 from sqlalchemy import func #统计
 16 from  core import admin_class
 17 from  cfg import config
 18 
 19 #讲师类
 20 class Teach_Mag(object):
 21 
 22     def __init__(self):
 23         self.Session_class=sessionmaker(bind=admin_class.engine)#创建与数据库的会话 类
 24         self.Session=self.Session_class()#生成实例
 25         self.teach_name=''
 26 
 27     #开始相关操作
 28     def openatin(self):#开始相关操作
 29         while True:
 30             print('\033[35;1m讲师界面\033[0m'.center(60,'='))
 31             for index,i in enumerate(config.TEACH_OPEN):
 32                 print(index,':',i[0])
 33             id=input('请选择>>:')
 34             if id.isdigit():
 35                 if int(id)>=len(config.TEACH_OPEN):continue
 36                 s=config.TEACH_OPEN[int(id)][1]
 37             else:
 38                 continue
 39             if hasattr(self,s):#是反射否存在
 40                 func=getattr(self,s)#调用
 41                 func()#执行
 42 
 43     #查看班级
 44     def show_class(self):#查看班级
 45         print('\033[32;1m查看班级(可管理)\033[0m'.center(60,'='))
 46         #show_class=self.Session.query(admin_class.Class_name).filter(admin_class.Class_name.teach_name==self.teach_name)
 47         print('\033[31;1m全部班级\033[0m'.center(45,'-'))#所有班级
 48         for i in self.class_list:
 49             print(i)
 50         print('\033[35;1m可管理班级\033[0m'.center(45,'-'))
 51         cla_id=self.class_l()#调用查看班级
 52         class_obj=self.Session.query(admin_class.Class_name).filter(admin_class.Class_name.id==cla_id).first()
 53         if class_obj:#获取班级对象成功 有内容
 54             print(class_obj,class_obj.name,class_obj.id)
 55             self.student_l(class_obj.name)#调用查看学员 得到班级对象
 56             # print('[%s] 班 学员列表'.center(60,'=')%c)
 57             # for i in c.students:
 58             #     print(i.id,'姓名:',i.name,'QQ:',i.qq)
 59             # print('end'.center(60,'='))
 60             return
 61         else:
 62             print('选择有误!')
 63             return
 64 
 65     #查看班级选择
 66     def class_l(self):#查看班级
 67         for i in self.teach_obj.class_n:
 68             print('编号',i.id,'班级:',i.name)
 69         class_id=input('请按编号选择班级>>:').strip()
 70         if  class_id.isdigit() :#判断是否是整数
 71             for i in self.teach_obj.class_n:#是否在讲师的班级中
 72                 if int(class_id)==i.id:
 73                     return int(class_id)#返回班级ID
 74             else:
 75                 print('选择班级有误!')
 76                 return None
 77         else:
 78             print('选择班级有误!')
 79             return None
 80 
 81     #查看班级学员
 82     def student_l(self,class_name):#查看班级学员
 83         stu_l=self.Session.query(admin_class.Class_name).filter(admin_class.Class_name.name==str(class_name)).first()#所选班级对象
 84         print('[%s] 班 学员列表'.center(60,'=')%stu_l)
 85         for i in stu_l.students:
 86             print(i.id,'姓名:',i.name,'QQ:',i.qq)
 87         print('end'.center(60,'='))
 88         return stu_l#返回所选班级对象
 89 
 90     #查看课节
 91     def less_cher(self):
 92         les=self.Session.query(admin_class.Lesson).all()#取课节名列表
 93         for i in les:
 94             print('编号',i.id,'课节名>>:',i)
 95         return les
 96     #查看课节 选择
 97     def lesson_l(self):
 98         les=self.less_cher()#取课节名列表
 99         # for i in les:
100         #     print('编号',i.id,'课节名>>:',i)
101         les_id=input('请按编号选择课节 >>:').strip()
102         if les_id.isdigit():
103             for i in les:
104                 if int(les_id)==i.id:
105                     return int(les_id)#返回课节ID
106             else:
107                 print('选择课节有误!')
108                 return None
109         else:
110             print('选择课节有误!')
111             return None
112 
113     #创建班级
114     def add_class(self):#创建班级
115         print('\033[35;1m创建班级界面\033[0m'.center(60,'='))
116         attr=input("输入班级名>>:").strip()
117         if attr in self.class_list:#如果存在
118             return print('班级名重复!')
119         c=admin_class.Class_name(name=attr)#创建新班级
120         self.teach_obj.class_n.append(c)#关联讲师与班级
121         if self.add_all(c):#进行调用添加
122             self.Session.add_all([c])
123             self.Session.commit()
124         return
125 
126     #班级增加学员
127     def add_student(self):#班级增加学员
128         print('\033[35;1m增加学员界面\033[0m'.center(60,'='))
129         cla_id=self.class_l()#调用查看班级
130         if not cla_id:return None
131         #获取班级对象
132         c=self.Session.query(admin_class.Class_name).filter(admin_class.Class_name.id==cla_id).first()
133         if not c:return None
134         stu_l=self.student_l(c.name)#查看班级学员
135         student_qq=input('请输入学生QQ号码>>:').strip()
136         s_qq=self.Session.query(admin_class.Student).filter(admin_class.Student.qq==int(student_qq)).first()#学员qq对象
137         if s_qq:#如果有这个qq
138             c.students.append(s_qq)#加入班级
139             self.Session.commit()
140             print('加入班级成功!')
141         else:
142             return print('QQ对应的学员不存在')
143 
144     #添加课节
145     def add_lesson(self):#添加课节
146         print('现有课节'.center(40,'='))
147         les=self.less_cher()#取课节名列表
148         day_name=input('输入课节名>>:').strip()
149         d1=admin_class.Lesson(name=day_name)
150         self.add_all(d1)
151 
152     #获取课程ID
153     def class_less(self,cla_id,les_id):
154 
155         cl_dayid=self.Session.query(admin_class.Class_Day).filter(admin_class.Class_Day.class_id==cla_id).\
156             filter(admin_class.Class_Day.lesson_id==les_id).first()#获取班级课程表id
157         if cl_dayid:
158             return cl_dayid
159         else:
160             return None
161 
162     #获取班级对象
163     def class_obj(self,cla_id):
164         clas_obj=self.Session.query(admin_class.Class_name).filter(admin_class.Class_name.id==cla_id).first()#获取班级对象
165         return clas_obj
166 
167     #开始上课
168     def add_cla_day(self):#开始上课
169         print('\033[32;1m班级上课\033[0m'.center(60,'='))
170         cla_id=self.class_l()##获取班级id
171         if not cla_id:return None
172         les_id=self.lesson_l()#获取课节id
173         if not les_id:return None
174         clas_obj=self.class_obj(cla_id)#获取班级对象
175         print(clas_obj,clas_obj.id)#班级名,ID
176         cl_dayid=self.class_less(cla_id,les_id)#获取课程表对象
177         if cl_dayid:#如果课程表存在
178             print('当前班级该节课已经上过!')
179             return
180         clas_day=admin_class.Class_Day(class_id=cla_id,lesson_id=les_id)#创建上课课程记录
181         self.Session.add(clas_day)#添加记录
182         cl_day_id=self.class_less(cla_id,les_id)#获取当前班级课程对象
183         c_obj=self.student_l(cl_day_id.class_n)#获取班级   学员对象
184         for i in c_obj.students:
185             stu_work=admin_class.Student_work(students_id=i.id,class_id=cl_day_id.id,status='not')#创建上课记录
186             self.Session.add(stu_work)#添加记录
187         self.Session.commit()
188         return print('上课记录添加完成')
189 
190     #批改作业
191     def set_results(self):#批改作业
192         print('\033[32;1m批改作业\033[0m'.center(60,'='))
193         cla_id=self.class_l()##获取班级id
194         if not cla_id:return None
195         les_id=self.lesson_l()#获取课节id
196         if not les_id:return None
197         cl_day_id=self.class_less(cla_id,les_id)#获取课程表对象
198         if not cl_day_id:print('本节课未上!');return None
199         #获取当前班级中,
200         stude_day=self.Session.query(admin_class.Student_work).filter(admin_class.Student_work.class_id==cl_day_id.id).all()
201         print('\033[36;1m开始批改作业\033[0m'.center(60,'='))
202         print('\033[31;1m作业未提交则不显示\033[0m')
203         for i in stude_day:
204             if i.status=='yes' and not i.results:
205                 print(i.id,'姓名:',i.students_w.name,'成绩:',i.results)
206                 resu=input('请输入成绩>>:').strip()
207                 if resu.isdigit():
208                     self.Session.query(admin_class.Student_work).filter(admin_class.Student_work.id==i.id).update({"results":resu})
209             elif i.status=='yes' and i.results:
210                 print(i.id,'姓名:',i.students_w.name,'成绩:',i.results)
211                 resu=input('是否修改成绩? N/n 跳过,输入新成绩').upper().strip()
212                 if resu=='N':
213                     continue
214                 if resu.isdigit():
215                     self.Session.query(admin_class.Student_work).filter(admin_class.Student_work.id==i.id).update({"results":resu})
216 
217         else:
218             self.Session.commit()
219             print("已提交的作业全部批改完毕!")
220 
221     #增加函数
222     def add_all(self,lists):#增加函数
223         self.Session.add_all([lists])
224         confirm=input('请进行确认: 按\033[31;1mN\033[0m回滚操作,其他键确认!' ).upper().strip()
225         if confirm=="N":
226             self.Session.rollback()#
227             return False
228         try:
229             self.Session.commit()
230             print('操作成功')
231             return lists
232         except Exception as e:
233             self.Session.rollback()#
234             print('操作失败!,可能该信息已经存在!')
235             return
236 
237     #退出
238     def tech_exit(self):
239         return  exit()
240     #登陆
241     def user_log(self):#登陆
242             user_n=input('请输入用户名>>:').strip()
243             aut_obj=self.Session.query(admin_class.Teacher).filter(admin_class.Teacher.user==user_n).first()
244             if aut_obj:
245                 #print(self.aut_obj_1.pwd)#用户对应密码
246                 pwds=input('请输入密码>>:').strip()
247                 if pwds == aut_obj.pwd:
248                     self.teach_name=aut_obj.name
249                     #print(self.teach_name)#当前讲师姓名
250                     self.teach_obj = self.Session.query(admin_class.Teacher).filter(admin_class.Teacher.name==self.teach_name).first()#取当前讲课对象实例
251                     self.class_list=self.Session.query(admin_class.Class_name).all()#获取班级名列表
252                     #self.les=self.Session.query(admin_class.Lesson).all()#取课节名列表
253                     #print(self.s_name_list[2])
254                     self.openatin()
255                 else:
256                     print('密码有误')
257                     return
258             else:
259                 print('输入的用户名不存')
260                 return
261 
262 #Session.query()
263 while True:
264     teach=Teach_Mag()
265     #teach.add_teach()
266     #teach.add_stu()
267 
268     teach.user_log()
View Code

 



 

以上就是python第六十八天--第十二周作业的详细内容,更多请关注其它相关文章!