问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用python编写的一个学生成绩管理系统

发布网友 发布时间:2022-04-26 00:10

我来回答

3个回答

懂视网 时间:2022-05-02 18:18

需求:

用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下

讲师视图:

  •   管理班级,可创建班级,根据学员qq号把学员加入班级
  •   可创建指定班级的上课纪录,注意一节上课纪录对应多条学员的上课纪录, 即每节课都有整班学员上, 为了纪录每位学员的学习成绩,需在创建每节上课纪录是,同时为这个班的每位学员创建一条上课纪录
  •   为学员批改成绩, 一条一条的手动修改成绩
  • 学员视图:

  • 提交作业
  • 查看作业成绩
  • 一个学员可以同时属于多个班级,就像报了Linux的同时也可以报名Python一样, 所以提交作业时需先选择班级,再选择具体上课的节数
  • 附加:学员可以查看自己的班级成绩排名
  •  

    表结构:

    根据需求先画表结构

    技术分享图片

     

    程序目录结构:

    技术分享图片

     

    表结构实例代码:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 from sqlalchemy import String,Column,Integer,ForeignKey,DATE,Table from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship from conf.settings import engine     ############创建数据表结构######################3 Base = declarative_base()   # 班级与学生的对应关系表 teacher_m2m_class = Table("teacher_m2m_class",Base.metadata,                           Column("teacher_id", Integer, ForeignKey("teacher.teacher_id")),                           Column("class_id", Integer, ForeignKey("class.class_id")),                           )   # 班级与学生的对应关系表 class_m2m_student = Table("class_m2m_student",Base.metadata,                           Column("class_id",Integer,ForeignKey("class.class_id")),                           Column("stu_id", Integer, ForeignKey("student.stu_id")),                           )   class Class_m2m_Lesson(Base):     ‘‘‘班级和课节对应表‘‘‘     __tablename__ = "class_m2m_lesson"     id =  Column(Integer, primary_key=True)     class_id = Column(Integer,ForeignKey("class.class_id"))     lesson_id = Column(Integer, ForeignKey("lesson.lesson_id"))       classes = relationship("Class",backref="class_m2m_lessons")     lessons = relationship("Lesson", backref="class_m2m_lessons")       def __repr__(self):         return "%s %s" % (self.classes,self.lessons)   class Study_record(Base):     "上课记录"     __tablename__ = "study_record"     id = Column(Integer,primary_key=True)     class_m2m_lesson_id = Column(Integer,ForeignKey("class_m2m_lesson.id"))     stu_id = Column(Integer, ForeignKey("student.stu_id"))     status = Column(String(32),nullable=False)     score = Column(Integer,nullable=True)       class_m2m_lessons = relationship("Class_m2m_Lesson",backref="my_study_record")     students = relationship("Student", backref="my_study_record")       def __repr__(self):        return  "33[35;0m%s,%s,状态:【%s】,成绩:【%s】33[0m"%(self.class_m2m_lessons,self.students,self.status,self.score)   class Teacher(Base):     "讲师"     __tablename__ = "teacher"     teacher_id = Column(Integer, primary_key=True)     teacher_name = Column(String(32), nullable=False, unique=True)   #唯一       classes = relationship("Class", secondary=teacher_m2m_class, backref="teachers")       def __repr__(self):         return "讲师:【%s】"%self.teacher_name   class Class(Base):     "班级"     __tablename__ ="class"     class_id = Column(Integer, primary_key=True)     class_name = Column(String(32), nullable=False,unique=True)     course =  Column(String(32), nullable=False)       students = relationship("Student",secondary=class_m2m_student,backref="classes")       def __repr__(self):         return "班级名:【%s】"%self.class_name   class Student(Base):     "学生"     __tablename__ ="student"     stu_id = Column(Integer, primary_key=True)     stu_name = Column(String(32), nullable=False, unique=True)     QQ =  Column(Integer(), nullable=False)       def __repr__(self):         return "学生名:【%s】"%self.stu_name   class Lesson(Base):     "课节"     __tablename__ = "lesson"     lesson_id = Column(Integer, primary_key=True)     lesson_name = Column(String(32), nullable=False, unique=True)       def __repr__(self):         return "节次名:【%s】"%self.lesson_name     Base.metadata.create_all(engine)

     

    创建学习记录以及修改学生成绩:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 def add_studyrecord(self):         ‘‘‘添加学习记录‘‘‘         class_name = input("33[34;0m请输入要添加学习记录的班级名:33[0m")         class_obj = self.session.query(Class).filter_by(class_name=class_name).first()           if class_obj and class_obj.teachers[0== self.teacher_obj:  # 输入的班级名存在且在属于当前老师管理             lesson_name = input("33[34;0m请输入添加学习记录的课节名(lesson):33[0m")             lesson_obj = self.session.query(Lesson).filter_by(lesson_name=lesson_name).first()             if lesson_obj:                                       # 输入的lesson名字存在                 class_m2m_lesson_obj = self.session.query(Class_m2m_Lesson).filter(Class_m2m_Lesson.class_id == class_obj.class_id).                     filter(Class_m2m_Lesson.lesson_id == lesson_obj.lesson_id).first()                 if class_m2m_lesson_obj:                                            # 班级对应的课lesson表数据存在                       study_record_obj = self.session.query(Study_record).filter_by(class_m2m_lesson_id=class_m2m_lesson_obj.id).first()                     if not study_record_obj:                                                    # 上课记录为创建                         for student_obj in class_obj.students:                             status = input("输入学生 %s 的上课状态(yes/no):"%student_obj.stu_name)                             study_record_new = Study_record(class_m2m_lesson_id=class_m2m_lesson_obj.id,                                                             stu_id=student_obj.stu_id,                                                             status=status)                             self.session.add(study_record_new)                             self.session.commit()                     else:                         print("33[31;1m系统错误:当前上课记录已经创建33[0m")                 else:                      print("33[31;1m系统错误:当前班级的lesson课节未创建33[0m")             else:                 print("33[31;1m系统错误:lesson未创建33[0m")         else:             print("33[31;1m输入错误:班级不存在或没有权限管理此班级33[0m")         def modify_scores(self):         ‘‘‘修改成绩‘‘‘         class_name = input("33[34;0m请输入学习记录的班级名:33[0m")         class_obj = self.session.query(Class).filter_by(class_name=class_name).first()           if class_obj and class_obj.teachers[0== self.teacher_obj:  # 输入的班级名存在且在属于当前老师管理             lesson_name = input("33[34;0m请输入学习记录的课节名(lesson):33[0m")             lesson_obj = self.session.query(Lesson).filter_by(lesson_name=lesson_name).first()               if lesson_obj:  # 输入的lesson名字存在                 class_m2m_lesson_obj = self.session.query(Class_m2m_Lesson).filter(                     Class_m2m_Lesson.class_id == class_obj.class_id).                     filter(Class_m2m_Lesson.lesson_id == lesson_obj.lesson_id).first()                   if class_m2m_lesson_obj:  # 班级对应的课lesson表数据存在                     while True:                         study_record_objs = self.session.query(Study_record).filter(                                 Study_record.class_m2m_lesson_id==class_m2m_lesson_obj.id).all()                         for obj in  study_record_objs:                             print(obj)                           student_name = input("33[34;0m输入要修改成绩的学生名:[Q 退出]33[0m")                         if student_name == "q" or student_name == "Q":break                         student_obj = self.session.query(Student).filter_by(stu_name=student_name).first()                         if student_obj:                             study_record_obj = self.session.query(Study_record).filter(                                 Study_record.class_m2m_lesson_id==class_m2m_lesson_obj.id).filter(                                 Study_record.stu_id == student_obj.stu_id).first()                               if study_record_obj:                            # 上课记录存在                                 score = input("33[34;0m输入修改后的成绩33[0m")                                 study_record_obj.score= score                                 self.session.commit()                       else:                         print("33[31;1m系统错误:当前上课记录已经创建33[0m")                 else:                     print("33[31;1m系统错误:当前班级的lesson课节未创建33[0m")             else:                 print("33[31;1m系统错误:lesson未创建33[0m")         else:             print("33[31;1m输入错误:班级不存在或没有权限管理此班级33[0m")

     

    上面的两段代码实现了主要的功能,其他的功能都是套路,都一样。。。。

     

    完整代码地址--》》https://coding.net/u/James_Lian/p/Whaterver/git/tree/master

     

    Python开发【项目】:学员管理系统(mysql)

    标签:tab   ase   back   手动   cond   syn   def   second   自己的   

    热心网友 时间:2022-05-02 15:26

    # -*- coding: cp936 -*-
    class StuInfo:
    def __init__(self):
    self.Stu=[{"Sno":"1","Sname":"姓名","ChineseScore":64,"MathsScore":34,"EnglishScore":94,"ComputerScore":83},
    {"Sno":"2","Sname":"姓名","ChineseScore":44,"MathsScore":24,"EnglishScore":44,"ComputerScore":71},
    {"Sno":"3","Sname":"姓名","ChineseScore":74,"MathsScore":35,"EnglishScore":74,"ComputerScore":93},
    {"Sno":"4","Sname":"姓名","ChineseScore":94,"MathsScore":54,"EnglishScore":24,"ComputerScore":73}]
    self.attribute={"Sno":"学号",
    "Sname":"姓名",
    "ChineseScore":"语文成绩",
    "MathsScore":"数学成绩",
    "EnglishScore":"英语成绩",
    "ComputerScore":"计算机成绩"
    }
    def _add(self):
    '''添加'''
    singleInfo={}
    for i in self.attribute:
    if "Score" in i:
    singleInfo[i]=int(raw_input(self.attribute[i]+"\n"))
    else:
    singleInfo[i]=raw_input(self.attribute[i]+"\n").strip()
    self.Stu.append(singleInfo)
    print "添加成功OK"
    for i in singleInfo:
    print i,"=",singleInfo[i]

    def _del(self):
    """删除学号为Sno的记录"""
    Sno=raw_input("学号:\n")
    self.Stu.remove(self.__getInfo(Sno))
    print "删除成功OK"

    def _update(self):
    """更新数据"""
    Sno=raw_input("学号\n").strip()
    prefix="修改"
    updateOperate={"1":"ChineseScore",
    "2":"MathsScore",
    "3":"EnglishScore",
    "4":"ComputerScore"}
    for i in updateOperate:
    print i,"-->",prefix+self.attribute[updateOperate[i]]
    getOperateNum=raw_input("选择操作:\n")
    if getOperateNum:
    getNewValue=int(raw_input("输入新的值:\n"))
    record=self.__getInfo(Sno)
    record[updateOperate[getOperateNum]]=getNewValue
    print "修改"+record["Sname"]+"的"+str(updateOperate[getOperateNum])+"成绩=",getNewValue,"\n成功OK"

    def _getInfo(self):
    """查询数据"""
    while True:
    print "1->学号查询 2->条件查询 3->退出"
    getNum=raw_input("选择:\n")
    if getNum=="1":
    Sno=raw_input("学号:\n")
    print filter(lambda record:record["Sno"]==Sno,self.Stu)[0]
    elif getNum=="2":
    print "ChineseScore 语文成绩;","MathsScore 数学成绩;","EnglishScore 英语成绩;","ComputerScore 计算机成绩;"
    print "等于 ==,小于 <, 大于 > ,大于等于 >=,小于等于<= ,不等于!="
    print "按如下格式输入查询条件 eg: ChineseScore>=60 "
    expr=raw_input("条件:\n")
    Infos=self.__getInfo(expr=expr)
    if Infos:
    print "共%d记录"%len(Infos)
    for i in Infos:
    print i
    else:
    print "记录为空"
    elif getNum=="3":
    break
    else:
    pass
    def __getInfo(self,Sno=None,expr=""):
    """查询数据
    根据学号 _getInfo("111111")
    根据分数 _getInfo("EnglishSorce>80")"""
    if Sno:
    return filter(lambda record:record["Sno"]==Sno,self.Stu)[0]
    for operate in [">=",">","<=","<","==","!="]:
    if operate in expr:
    gradeName,value=expr.split(operate)
    return filter(lambda record: eval( repr(record[gradeName.strip()])+operate+value.strip()) ,self.Stu)
    return {}

    def _showAll(self):
    """显示所有记录"""
    for i in self.Stu:
    print i

    @staticmethod
    def test():
    """测试"""
    _StuInfo=StuInfo()
    while True:
    print "1->录入数据 2->修改数据 3->删除数据 4->查询数据 5->查看数据 6->退出"
    t=raw_input("选择:\n")
    if t=="1":
    print "录入数据"
    _StuInfo._add()
    elif t=="2":
    print "修改数据"
    _StuInfo._update()
    elif t=="3":
    print "删除数据"
    _StuInfo._del()
    elif t=="4":
    print "查询数据"
    _StuInfo._getInfo()
    elif t=="5":
    print "显示所有记录"
    _StuInfo._showAll()
    elif t=="6":
    break
    else:
    pass
    if __name__=="__main__":
    StuInfo.test()追问能够运行无误吧

    追答

    不会懒到自己测试一下都不愿意吧。我这能运行,不代表你那可以

    热心网友 时间:2022-05-02 16:44

    追问没办法,选修老师要求的,你会吗,要是能运行且达到要求的立马采纳

    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    我今年十四岁手臂骨骼比较小,锻炼可以使我的骨骼粗壮吗,如果不能那还... 全民枪战盒子修改器安卓游戏官方下载 360版本的全民枪战用充值卡充值518元档位时出现提示说充值面额过大,请... ...也还手了,她说手指骨折了,伤鉴还没出来,我该怎么办? ...刚开始是我们两个女人互骂,后来她先动手打我直我青微伤,然后她老公... ...她非说我家的门挡了她过,后来就吵起来还动手了。我觉得她就是没事... 我嫂子和邻居为了点事吵起来对方是男士竟然动手打了打,后来我嫂子和其... 起因小矛盾,然后对方先动手,我爸爸还手和他打,最终我爸爸重伤,对方轻伤... 邻居到我门前和我争吵,是他先动手打我,我还手也打了他,之后他先报警又... 事情是这样我和我们邻居因为着火打起了架。是他们先打的人,拿起铁掀... 请问应该使用什么方法开发学生信息管理系统?为什么? 如果商学院需要开发—套 python返回学生信息方法tostring 怎样用python完成这样一个程序? python学生管理系统 for stu in stu_list: if stu[&#39;name&#39;] == name:这里stu[&#39;name&#39;]==name是字典用法吗? Python设计 将学生学号、姓名信息存入文本文件“student.txt”中? python:设计一个学生信息管理系统.每个学生包括学号,姓名,年龄等信息... python的学生信息管理系统综合练习目的是什么 python学生管理系统修改学生信息利用write方式 利用Python编写程序,在添加学生信息时自动生成5位学生编号。 用python实现学生信息管理系统的实验步骤 用python做学生信息管理系统分工是啥 怎么用python写学生信息管理系统 成龙成名的第一部电影是什么? 成龙一共演过哪些电影(国语) 求周星驰和成龙的最新电影? 谁知道成龙一生拍的80多部所有电影的名字(获得奖项)??? 成龙拍过的电影? 想要笑拳怪招(1979)主演成龙,田俊的电影百度网盘免费链接谁有求分享 成龙拍过哪些电影 跪求香港70年代经典电影!! python程序设计作业球大佬指点迷津? 用Python编写学生成绩分析系统 python学生信息管理查询学生信息 为什么会报错? python:编写程序,使字典储存学生信息,学生信息包括学号和姓名,根据学 ... 用Python编写班级档案管理系统 Java如何实现打印预览 java实现打印功能需要的jar包有哪些? 实现预览需要的功能有哪些? 如何用java中的JPanel或者Jframe中 显示word文档,word文档的格式不变,就是用java做打印预览,预览word 如何打印的PDF文件,而不在java中打印预览 java打印zpl java 做打印能指定哪台打印机打印哪个文件吗 童颜针一瓶可以填多少 到冬天,日常生活,穿衣服多,人的手还是不暖,为何?平常如何做手才有些暖??? 打童颜针多长时间有效果 二套房贷款利率是多少? 首套商贷未还清,购买二套房可以用公积金贷款吗?首付多少?利率大概多少?有谁知道成都的*的吗? 成都公积金二套房利率是多少 现在第一套房贷款还清后,第二套房贷款按什么利率执行? 成都二套房的商业贷款新政利率是多少?二套房的首付应该交几成呢? 每天跑步一小时 半个月可以瘦多少?