当前位置:Gxlcms > Python > python第六十八天--第十二周作业

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

时间:2021-07-01 10:21:17 帮助过:41人阅读

主题:

需求:

用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下
讲师视图
  管理班级,可创建班级,根据学员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#管理员视图启动
 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#系统初始化
 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#学员视图启动
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#讲师视图启动
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#配置文件
 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#主要逻辑 类
 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#管理员逻辑 类
  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,'培训班级:<                    

人气教程排行