学员管理系统

需求:

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

分析:

   利用sqlalchemy模块进行MySQL的数据构建,数据库构建情况(见数据关系表图)
    老师表和班级表多对多,班级表和学生表多对多,班级表和课程表是外键关联,学生表和班级课程表是外键关联
    首先,初始化数据是班级“P1”,课程“python”,老师“alex”;
    进入系统后,采用反射的方式获取到输入的命令,然后执行操作。
    学生的作业上传是上传(修改)学生的随机成绩,并未具体上传文件。

测试环境:在ubuntu16.04下 安装有mysql5.7.21 使用python3.5

文件目录结构

流程图和数据结构

 

代码:

 1 import os,sys
 2 
 3 
 4 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 5 sys.path.append(BASE_DIR)
 6 
 7 
 8 
 9 
10 from conf import setting
11 from modules import models
12 from modules import action
13 
14 if __name__=="__main__":
15     obj = action.Action()
16     obj.func()
start
1 from sqlalchemy import create_engine
2 
3 engine=create_engine("mysql+pymysql://root:alex1234@192.168.189.129/schooldb?charset=utf8")
setting
 1 from sqlalchemy.orm import sessionmaker
 2 from conf import setting
 3 from conf.setting import engine
 4 from .models import Teacher,Class
 5 from .teacher import Teacher_Center
 6 from .student import Student_Center
 7 
 8 
 9 class Action(object):
10 
11     def __init__(self):
12         Session = sessionmaker(bind=engine)
13         self.session = Session()
14         self.initialize_database()
15 
16     def func(self):
17         while True:
18             print("欢迎进入学员管理系统\n"
19                   "1.教师视图\n"
20                   "2.学生视图\n"
21                   "3.退出\n")
22             user_choice = input("输入你的角色:")
23             if user_choice == "1":
24                 Teacher_Center(self.session)
25             elif user_choice == "2":
26                 Student_Center(self.session)
27             elif user_choice =="3":
28                 break
29             else:
30                 print("请输入正确编号")
31 
32     def initialize_database(self):#初始化
33         rest = self.session.query(Teacher).filter(Teacher.tid>0).all()
34         if not rest:
35             class1 = Class(cname="P1",course="Python")
36             teacher1 = Teacher(tname="Alex")
37             teacher1.classes = [class1]
38 
39             self.session.add_all([class1,teacher1])
40             self.session.commit()
action
 1 from sqlalchemy import Integer, ForeignKey, String, Column,Table
 2 from sqlalchemy.ext.declarative import declarative_base
 3 from sqlalchemy.orm import relationship
 4 from conf.setting import engine
 5 
 6 
 7 Base=declarative_base() #创建数据表结构
 8 
 9 #教师与班级的关联表
10 teacher_m2m_class = Table("teacher_m2m_class",Base.metadata,
11                           Column("teacher_id",Integer,ForeignKey("teacher.tid")),
12                           Column("class_id",Integer,ForeignKey("class.cid")),
13                           )
14 
15 #班级与学生关联表
16 class_m2m_student = Table("class_m2m_student",Base.metadata,
17                           Column("class_id",Integer,ForeignKey("class.cid")),
18                           Column("student_id",Integer,ForeignKey("student.sid")),
19                           )
20 class Class_lesson(Base):
21     """班级与课程关联"""
22     __tablename__="class_lesson"
23     id= Column(Integer,primary_key=True)
24     class_id = Column(Integer,ForeignKey("class.cid"))
25     lesson_id = Column(Integer,ForeignKey("lesson.lid"))
26 
27     classes= relationship("Class",backref="class_lesson")
28     lessons= relationship("Lesson",backref="class_lesson")
29 
30     def __repr__(self):
31         return "%s %s"%(self.classes,self.lessons)
32 
33 class Record(Base):
34     """class_lesson表和学生表关联"""
35     __tablename__ = "record"
36     id = Column(Integer, primary_key=True)
37     class_lesson_id = Column(Integer, ForeignKey("class_lesson.id"))
38     sid = Column(Integer,ForeignKey("student.sid"))
39     status= Column(String(32),nullable=False)
40     score = Column(Integer,nullable=True)
41 
42     class_lessons = relationship("Class_lesson",backref="record")
43     students = relationship("Student",backref="record")
44 
45     def __repr__(self):
46         return  "%s,%s,状态:【%s】,成绩:【%s】"%(self.class_lessons,self.students,self.status,self.score)
47 
48 
49 class Teacher(Base):
50     """教师表"""
51     __tablename__="teacher"
52     tid= Column(Integer,primary_key=True)
53     tname= Column(String(32),nullable=False,unique=True)
54 
55     classes= relationship("Class",secondary=teacher_m2m_class,backref="teacher")
56 
57     def __repr__(self):
58         return "教师:【%s】"%self.tname
59 
60 class Class(Base):
61     """班级表"""
62     __tablename__="class"
63     cid=Column(Integer,primary_key=True)
64     cname=Column(String(32),nullable=False,unique=True)
65     course = Column(String(32),nullable=False)
66 
67     students=relationship("Student",secondary=class_m2m_student,backref="classes")
68 
69     def __repr__(self):
70         return "班级:【%s】"%self.cname
71 
72 class Lesson(Base):
73     """课程表"""
74     __tablename__="lesson"
75     lid=Column(Integer,primary_key=True)
76     lname=Column(String(32),nullable=False,unique=True)
77 
78     def __repr__(self):
79         return "课程:【%s】"%self.lname
80 
81 class Student(Base):
82     """学生表"""
83     __tablename__="student"
84     sid=Column(Integer,primary_key=True)
85     sname=Column(String(32),nullable=False,unique=True)
86     qq=Column(Integer(),nullable=False)
87 
88     def __repr__(self):
89         return "学生:【%s】"%self.sname
90 
91 
92 
93 Base.metadata.create_all(engine)
models
  1 from .models import Teacher,Class,Student,Lesson,Class_lesson,Record
  2 import random
  3 from modules import action
  4 
  5 
  6 
  7 class Student_Center(object):
  8     """学生视图"""
  9     def __init__(self,session):
 10         self.session = session
 11         self.authentication()
 12         self.handler()
 13 
 14     def handler(self):
 15         while True:
 16             print("欢迎【%s】进入学员管理系统\n"
 17                   "up_homework 上传作业\n"
 18                   "show_homework 查看作业成绩\n"
 19                   "show_rank 查看班级排名\n"
 20                   "quit 退出\n" % self.student_obj.sname)
 21             user_choice = input("请输入需要操作的命令:")
 22             if hasattr(self,user_choice):
 23                 getattr(self,user_choice)()
 24 
 25     def authentication(self):
 26         """认证学生"""
 27         while True:
 28             student_name = input("请输入学生姓名:").strip()
 29             self.student_obj = self.session.query(Student).filter_by(sname=student_name).first()
 30             if not self.student_obj:
 31                 print("输入错误:请输入有效学生姓名")
 32                 continue
 33             else:
 34                 break
 35 
 36     def up_homework(self):
 37         """作业上传"""
 38         class_name =input("请输入班级名称:")
 39         for class_obj in self.student_obj.classes:
 40             # print(class_obj.cname)
 41             if class_name == class_obj.cname:
 42                 lesson_name = input("请输入添加的上课记录的名称:")
 43                 lesson_obj = self.session.query(Lesson).filter_by(lname=lesson_name).first()
 44                 if lesson_obj:
 45                     class_lesson_obj = self.session.query(Class_lesson).\
 46                         filter(Class_lesson.class_id==class_obj.cid).\
 47                         filter(Class_lesson.lesson_id==lesson_obj.lid).first()
 48                     print(class_lesson_obj)
 49                     if class_lesson_obj:
 50                         record_obj= self.session.query(Record).\
 51                             filter(Record.class_lesson_id==class_lesson_obj.id).\
 52                             filter(Record.sid==self.student_obj.sid).first()
 53                         print(record_obj)
 54                         if record_obj:
 55                             score =random.randint(0,100)
 56                             record_obj.score = score
 57                             self.session.commit()
 58                             print("上传成功")
 59                         else:
 60                             print("系统错误:当前上课记录已经创建")
 61                 else:
 62                     print("系统错误,lesson未创建")
 63 
 64     def show_homework(self):
 65         """查看作业成绩"""
 66         class_name = input("请输入要添加上课记录的班级名:")
 67         class_obj = self.session.query(Class).filter_by(cname=class_name).first()
 68         if class_obj:
 69             lesson_name = input("请输入添加的上课记录的名称:")
 70             lesson_obj = self.session.query(Lesson).filter_by(lname=lesson_name).first()
 71             if lesson_obj:
 72                 self.record_obj=self.session.query(Record).filter_by(sid=self.student_obj.sid).first()
 73                 print(self.record_obj.score)
 74             else:
 75                 print("输入的上课记录不存在")
 76         else:
 77             print("输入的班级名不存在")
 78 
 79     def show_rank(self):
 80         """查看班级课程的排名"""
 81         class_name = input("请输入要添加上课记录的班级名:")
 82         class_obj = self.session.query(Class).filter_by(cname=class_name).first()
 83         if class_obj:
 84             lesson_name = input("请输入添加的上课记录的名称:")
 85             lesson_obj = self.session.query(Lesson).filter_by(lname=lesson_name).first()
 86             if lesson_obj:
 87                 self.class_lesson_obj = self.session.query(Class_lesson).filter_by(lesson_id=lesson_obj.lid).first()
 88                 print(self.class_lesson_obj)
 89                 self.record_obj = self.session.query(Record).filter_by(class_lesson_id=self.class_lesson_obj.id).all()
 90                 self.record_obj2 = self.session.query(Record).filter_by(sid=self.student_obj.sid).first()
 91                 # print(self.record_obj,self.record_obj2)
 92                 self.score_obj=self.session.query(Record).order_by(Record.score.desc())
 93                 # print(self.score_obj.limit(100).all())
 94 
 95                 obj=self.score_obj.limit(100).all().index(self.record_obj2)
 96                 print("你的成绩排名在全班是第%s名"%(obj+1))
 97 
 98     def quit(self):
 99         obj = action.Action()
100         obj.func()
student
  1 from .models import Teacher,Class,Student,Lesson,Class_lesson,Record
  2 from modules import action
  3 
  4 
  5 class Teacher_Center(object):
  6     """教师视图"""
  7     def __init__(self,session):
  8         self.session =session
  9         self.authentication()
 10         self.handler()
 11 
 12     def handler(self):
 13         while True:
 14             print("欢迎【%s】进入教师管理系统\n"
 15                   "add_class 创建班级\n"
 16                   "add_student 添加学生\n" 
 17                   "add_lesson 添加课程\n"
 18                   "add_record 创建上课记录\n"
 19                   "show_class 显示管理的班级\n"
 20                   "modify_score 修改学生成绩\n"
 21                   "quit 退出\n"%self.teacher_obj.tname)
 22             user_func =input("请输入要操作的命令:")
 23             if hasattr(self,user_func):
 24                 getattr(self,user_func)()
 25 
 26     def authentication(self):#认证
 27         while True:
 28             teacher_name = input("请输入教师名称:").strip()
 29             self.teacher_obj =self.session.query(Teacher).filter_by(tname=teacher_name).first()
 30             if not self.teacher_obj:
 31                 print("输入错误:请输入正确的教师名")
 32                 continue
 33             else:
 34                 break
 35 
 36     def add_class(self):
 37         """创建班级"""
 38         class_name = input("请输入创建班级的名称:")
 39         course=input("请输入创建班级的类型:")
 40         class_obj = self.session.query(Class).filter_by(cname=class_name).first()
 41         if not class_obj:
 42             class_new =Class(cname=class_name,course=course)
 43             self.teacher_obj.classes.append(class_new)
 44             self.session.add(class_new)
 45             self.session.commit()
 46             print("班级创建成功")
 47         else:
 48             print("系统错误:班级已经存在")
 49 
 50     def add_student(self):
 51         """添加学生"""
 52         class_name = input("请输入要添加学生的班级名:")
 53         class_obj = self.session.query(Class).filter_by(cname=class_name).first()
 54         if class_obj and class_obj.teacher[0] == self.teacher_obj:
 55             stu_name = input("请输入学生姓名:")
 56             QQ = input("请输入学生的QQ号:")
 57             student_obj =self.session.query(Student).filter_by(sname =stu_name).first()
 58             if not student_obj:
 59                 student_new =Student(sname=stu_name,qq=QQ)
 60                 class_obj.students.append(student_new)
 61                 self.session.add(student_new)
 62                 self.session.commit()
 63                 print("学员添加成功")
 64             else:
 65                 print("系统错误:学员不存在")
 66         else:
 67             print("输入错误:班级不存在")
 68 
 69     def add_lesson(self):
 70         """添加课程"""
 71         class_name = input("请输入要添加lesson的班级名:")
 72         class_obj = self.session.query(Class).filter_by(cname=class_name).first()
 73         if class_obj and class_obj.teacher[0] == self.teacher_obj:
 74             lesson_name =input("请输入添加的lesson名称:")
 75             lesson_obj = self.session.query(Lesson).filter_by(lname=lesson_name).first()
 76             if not lesson_obj:
 77                 print("Lesson不存在")
 78                 lesson_obj = Lesson(lname=lesson_name)
 79                 self.session.add(lesson_obj)
 80                 self.session.commit()
 81 
 82             rest = self.session.query(Class_lesson).\
 83                 filter(Class_lesson.class_id==class_obj.cid).\
 84                 filter(Class_lesson.lesson_id==lesson_obj.lid).first()
 85             if not rest:
 86                 print("class:%s----lesson:%s"%(class_obj.cid,lesson_obj.lid))
 87                 class_lesson_new = Class_lesson(class_id=class_obj.cid,lesson_id=lesson_obj.lid)
 88                 self.session.add(class_lesson_new)
 89                 self.session.commit()
 90         else:
 91             print("输入错误:班级不存在")
 92 
 93     def add_record(self):
 94         """创建上课记录"""
 95         class_name = input("请输入要添加上课记录的班级名:")
 96         class_obj = self.session.query(Class).filter_by(cname=class_name).first()
 97         if class_obj and class_obj.teacher[0] == self.teacher_obj:
 98             lesson_name = input("请输入添加的上课记录的名称:")
 99             lesson_obj = self.session.query(Lesson).filter_by(lname=lesson_name).first()
100 
101             if lesson_obj:
102                 class_lesson_obj= self.session.query(Class_lesson).\
103                     filter(Class_lesson.class_id == class_obj.cid). \
104                     filter(Class_lesson.lesson_id == lesson_obj.lid).first()
105 
106                 if class_lesson_obj:
107                     record_obj=self.session.query(Record).filter_by(class_lesson_id=class_lesson_obj.id).first()
108                     print(record_obj)
109                     if not record_obj:
110                         for student_obj in class_obj.students:
111                             status = input("学生%s的上课情况(YES or NO)"%student_obj.sname)
112                             record_new = Record(class_lesson_id =class_lesson_obj.id,sid=student_obj.sid,status=status)
113                             self.session.add(record_new)
114                             self.session.commit()
115                     else:
116                         print("输入错误:上课记录已存在")
117                 else:
118                     print("输入错误:当前班级的课程未创建")
119             else:
120                 print("输入错误:当前课程未创建")
121         else:
122             print("输入错误:班级不存在")
123 
124     def show_class(self):
125         """查看管理的班级"""
126         print(self.teacher_obj)
127         for class_obj in self.teacher_obj.classes:
128             print("教师:【%s】  班级:【%s】  类型:【%s】"%
129                   (class_obj.teacher[0].tname,class_obj.cname,class_obj.course))
130 
131     def modify_score(self):
132         """修改学生成绩"""
133         class_name = input("请输入要添加上课记录的班级名:")
134         class_obj = self.session.query(Class).filter_by(cname=class_name).first()
135         if class_obj and class_obj.teacher[0] == self.teacher_obj:
136             lesson_name = input("请输入添加的上课记录的名称:")
137             lesson_obj = self.session.query(Lesson).filter_by(lname=lesson_name).first()
138             if lesson_obj:
139                 class_lesson_obj = self.session.query(Class_lesson). \
140                     filter(Class_lesson.class_id == class_obj.cid). \
141                     filter(Class_lesson.lesson_id == lesson_obj.lid).first()
142                 if class_lesson_obj:
143                     while True:
144                         record_objs = self.session.query(Record).filter(Record.class_lesson_id==class_lesson_obj.id).all()
145                         for obj in record_objs:
146                             print(obj)
147                         student_name = input("输入需要修改成绩的学生名:[Q 退出]")
148                         if student_name=="q" or student_name=="Q":break
149                         student_obj=self.session.query(Student).filter_by(sname=student_name).first()
150                         if student_obj:
151                             record_obj = self.session.query(Record).\
152                                 filter(Record.class_lesson_id==class_lesson_obj.id).\
153                                 filter(Record.sid==student_obj.sid).first()
154                             if record_obj:
155                                 score=input("输入修改后的成绩:")
156                                 record_obj.score=score
157                                 self.session.commit()
158                     else:
159                         print("输入错误:上课记录已存在")
160                 else:
161                     print("输入错误:当前班级的课程未创建")
162             else:
163                 print("输入错误:当前课程未创建")
164         else:
165             print("输入错误:班级不存在")
166 
167     def quit(self):
168         obj = action.Action()
169         obj.func()
teacher

 

转载于:https://www.cnblogs.com/garrett0220/articles/8507871.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值