Python:学习成绩管理系统

Posted 自由学者×

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:学习成绩管理系统相关的知识,希望对你有一定的参考价值。

目录

前言

一、需求分析

1、概念设计

2、流程图设计

3、主界面设计

二、功能实现

1、主函数定义

2、录入学生信息

(1)功能实现

(2)输出界面

​3、删除学生信息

(1)功能实现

(2)输出界面

4、修改学生信息

(1)功能实现

(2)输出界面

5、查找学生信息

(1)功能实现

(2)输出界面 

6、排序

(1)功能实现

(2)输出界面

7、统计学生总人数

(1)功能实现

(2)输出界面

8、显示所有学生信息

(1)功能实现

(2)输出界面

三、项目打包 

四、总结


前言

对于此系统我所使用的是window11系统,所用python解释器版本:python3.8,建议在pycharm进行

编写.基于对Python基础知识的掌握,对学生成绩管理系统进行全方位刨析,一步一步讲解,希望对

有需要的人有所帮助。

一、需求分析

1、概念设计

        针对学生们对自己成绩的查询便捷性,自主编写了一套简易的班级学习成绩管理系统。其中学生成绩管理系统主要包括录入学生信息、查找学生信息、删除学生信息、修改学生信息、排序学生信息、统计学生总数、显示学生信息,这几项功能。其中录入学生的信息包括学号、姓名、C语言程序设计成绩、Python成绩、Java成绩、绩点;查询学生信息分为按学号和按姓名查找两种;删除学生信息是输入学号进行查找,查找到学生信息之后,对学生信息进行删除;修改学生信息是输入学号后,查询到学生信息之后,对学生信息进行修改;排序学生信息的排序方式可选择升序和降序,可选择按C语言程序设计成绩、Python成绩、Java成绩、绩点进行排序;统计学生总数 就是输出信息管理系统中有几个学生的信息。学生成绩管理系统,说难也难,说简单也简单,对于初学者的我们也算一项不小的挑战了,对于这个系统,它的功能等等很多,所以我们需要有一个大概的思路,来让我们更好的完成它。

2、流程分析

编号功能
0退出系统
1录入学生信息insert()
2查找学生信息search()
3删除学生信息delete()
4修改学生信息modity()
5排序sort()
6统计学生总人数total()
7显示所有学生信息show()

3、主界面设计

大致样式如图所示:

 代码:

import os
def main ():
    while True:
        menu()                                         //调用菜单函数
        choice=int(input('请选择:'))
        if choice in [0,1,2,3,4,5,6,7]:
            if choice==0:
                answer = input ('请确定要退出系统?y/n:')
                if answer == 'y' or answer == 'Y':
                    print ('谢谢你的使用')
                    break
                else:
                    continue
            elif choice==1:
                insert()
            elif choice==2:
                search ()
            elif choice==3:
                delete()
            elif choice==4:
                modify()
            elif choice==5:
                sort()
            elif choice==6:
                total()
            elif choice==7:
                show()
        else:
            print('请正确输入数字!')
def menu():
    print ('=========================学生成绩管理系统=========================')
    print ('----------------------------功能模块----------------------------')
    print ('\\t\\t\\t\\t\\t\\t1.录入学生信息')
    print ('\\t\\t\\t\\t\\t\\t2.查找学生信息')
    print ('\\t\\t\\t\\t\\t\\t3.删除学生信息')
    print ('\\t\\t\\t\\t\\t\\t4.修改学生信息')
    print ('\\t\\t\\t\\t\\t\\t5.排序')
    print ('\\t\\t\\t\\t\\t\\t6.统计学生总人数')
    print ('\\t\\t\\t\\t\\t\\t7.显示所有学生信息')
    print ('\\t\\t\\t\\t\\t\\t0.退出系统')
    print ('-------------------------------------------------------------')

if __name__ == '__main__':                //程序开始运行
    main()

二、功能实现

1、主函数定义

用户根据输入功能模块对应的数字编号进行操作,功能使用完成后再次返回主页面。用户如果输入数字0后,根据提示输入y则退出系统,否则继续返回主界面

def main ():
    while True:
        menu()
        choice=int(input('请选择:'))
        if choice in [0,1,2,3,4,5,6,7]:
            if choice==0:
                answer = input ('请确定要退出系统?y/n:')
                if answer == 'y' or answer == 'Y':
                    print ('谢谢你的使用')
                    break
                else:
                    continue
            elif choice==1:
                insert()
            elif choice==2:
                search ()
            elif choice==3:
                delete()
            elif choice==4:
                modify()
            elif choice==5:
                sort()
            elif choice==6:
                total()
            elif choice==7:
                show()
        else:
            print('请正确输入数字!')

2、录入学生信息

录入学生信息函数代码部分,在这个函数中实现的功能是录入学生信息,包括学号、姓名、C语言成绩、Python成绩、Java成绩,并将其写入文件中,每一行为一个学生的信息存储。

(1)功能实现

def insert():                  //插入学生信息功能
    stu_lst = []
    while True:
        no=int(input('请输入学号(例如1001):'))
        if not no:
            break
        name=input('请输入姓名:')
        if not name:
            break
        try:
            c = int (input ('请输入C语言成绩:'))
            python = int (input ('请输入Python的成绩:'))
            java = int (input ('请输入Java的成绩:'))
        except:
            print('输入无效,请重新输入!')
            continue
        student='id':no,'name':name,'C语言':c,'Python':python,'Java':java
        stu_lst.append(student)
        save (stu_lst)
        print ('信息录入成功!')
        stu_lst.clear()
        choice=input('是否继续?y/n:')
        if choice=='y' or choice=='Y':
            continue
        else:
            break

def save(lst):                      //存储列表数据
    try:
        stu_txt=open(filename,'a',encoding='utf-8')
    except:
        stu_txt=open(filename,'w',encoding='utf-8')
    for item in lst:
        stu_txt.write(str(item)+'\\n')
    stu_txt.close()

(2)输出界面

3、删除学生信息

删除学生信息函数代码部分,此函数主要功能是执行删除操作,输入学号进行查找,查找到学生信息之后,对学生信息进行删除。

(1)功能实现

def delete():                            //删除学生信息功能
    while True:
        student_id=int(input('请输入学生的id:'))
        if student_id:
            if os.path.exists(filename):
                with open(filename,'r',encoding='utf-8') as file:
                    student_old = file.readlines()
            else:
                student_old=[]
            flag=False
            if student_old:
                with open(filename,'w',encoding='utf-8') as files:
                    for item in student_old:
                        d = dict (eval (item))
                        if d['id']!=student_id:
                            files.write(str(d)+'\\n')
                        else:
                            flag=True
                    if flag:
                        print (f'学号为student_id的学生信息已删除!')
                    else:
                        print (f'没有找到id为student_id的学生信息')
            else:
                print('无学生记录')
                break
            show()
            choice = input ('是否继续?y/n:')
            if choice == 'y':
                continue
            else:
                break
def show():                                   //显示文本中的数据
    student_lst=[]
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as file:
            student=file.readlines()
            for item in student:
                student_lst.append(eval(item))
            if student_lst:
                show_student(student_lst)
    else:
        print('暂未保存学生数据!')

(2)输出界面

4、修改学生信息

修改学生信息函数代码部分,此函数的主要功能是对学生信息进行修改,当输入学号后,查询到学生信息之后,对学生各科成绩进行修改。

(1)功能实现

def modify():                
    show()
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as file:
            student_lst=file.readlines()
    else:
        return
    student_id=int(input('请输入学生id:'))
    with open(filename,'w',encoding='utf-8') as file1:
        for item in student_lst:
            d = dict (eval (item))
            if d ['id'] == student_id:
                print(f'已经找到id为student_id的学生')
                while True:
                    try:
                        d ['name'] = input ('请输入学生姓名:')
                        d ['C语言'] = int (input ('请输入C语言成绩:'))
                        d ['Python'] = int (input ('请输入Python的成绩:'))
                        d ['Java'] = int (input ('请输入Java的成绩:'))
                    except:
                        print('输入的信息有误,重新输入!!')
                    else:
                        break
                file1.write(str(d)+'\\n')
                print('修改信息成功!!!!!!!')
            else:
                file1.write(str(d)+'\\n')
        switch = input ('是否要修改信息?y/n:')
        if switch == 'y':
            modify()

(2)输出界面

 

5、查找学生信息

查询学生信息函数代码部分,此函数主要功能是查询时分为按学号和按姓名查询两种,若查无此人则输出“l列表中无此学生信息”。

(1)功能实现

def search():                  //定义查找学生信息函数
    search_qurry=[]
    while True:
        id=''
        name=''
        if os.path.exists(filename):
            choice = int (input ('Id查询请按1,名字查询请按2:'))
            if choice == 1:
                id=int(input('请输入学生id:'))
            elif choice==2:
                name=input('请输入学生姓名:')
            else:
                print('输入有误,重新输入!')
                search()
            with open(filename,'r',encoding='utf-8') as file:
                student_lst=file.readlines()
                for item in student_lst:
                    d = dict (eval (item))
                    if id!='':
                        if d['id']==id:
                            search_qurry.append(d)
                    elif name!='':
                        if d['name']==name:
                            search_qurry.append(d)
            show_student(search_qurry)
            search_qurry.clear()
        a=input('是否继续查找?y/n:')
        if a=='y':
            continue
        else:
            break

def show_student(lst):                        //显示学生成绩列表
    if len(lst)==0:
        print('列表中无此学生的信息')
        return
    student_title=':^6\\t:^12\\t:^8\\t:^10\\t:^10\\t:^8'
    print(student_title.format('ID','姓名','C语言成绩','Python成绩','Java成绩','绩点'))
    student_data=':^6\\t:^12\\t:^8\\t:^8\\t:^8\\t:^8'
    for item in lst:
        print(student_data.format(item.get('id'),item.get('name'),item.get('C语言'),item.get('Python'),item.get('Java'),round((int(item.get('C语言'))+int(item.get('Python'))+int(item.get('Java'))-180)/30,2)))
    print ('\\n')

(2)输出界面

6、排序

排序学生信息函数功能是对学生信息进行排序,排序方式可选择升序和降序,排序条件可选择按英C语言、Python、Java成绩以及三门成绩折算的绩点进行排序。

(1)功能实现

def sort():
   show()
   if os.path.exists(filename):
       with open(filename,'r',encoding='utf-8')as file:
           student_lst=file.readlines()
       student_new=[]
       for item in student_lst:
           d=dict(eval(item))
           student_new.append(d)
   else:
       return
   switch=input('排序方式(0.升序,1.降序)')
   if switch=='0':
       switch_bool=False
   elif switch=='1':
       switch_bool=True
   else:
       print('输入错误!')
       sort()
   choice=input('请选择排序方式(1.C语言成绩,2.Python成绩,3.Java成绩,4.绩点)')
   if choice=='1':
       student_new.sort(key=lambda x:int(x['C语言']),reverse=switch_bool)
   elif choice=='2':
       student_new.sort (key=lambda x: int (x ['Python']), reverse=switch_bool)
   elif choice=='3':
       student_new.sort (key=lambda x: int (x ['Java']), reverse=switch_bool)
   elif choice=='4':
       student_new.sort (key=lambda x: round((int (x ['C语言'])+int (x ['Python'])+int (x ['Java'])),2), reverse=switch_bool)
   else:
       print('选择错误!重新输入')
       sort()
   show_student(student_new)

(2)输出界面

7、统计学生总人数

统计学生总数函数代码部分,此函数主要是输出信息管理系统存储数据文本文件中有几个学生的信息。

(1)功能实现

def total():
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as file:
            students=file.readlines()
            if students:
                print('系统内有个学生'.format(len(students)))
            else:
                print('系统内无学生记录!')
    else:
        print('暂未保存学生信息!')

(2)输出界面

8、显示所有学生信息

显示学生信息函数代码部分,此函数是将文件存储的学生信息全部显示出来(学号、姓名、C语言成绩、Python成绩、Java成绩、绩点)

(1)功能实现

def show_student(lst):
    if len(lst)==0:
        print('列表中无此学生的信息')
        return
    student_title=':^6\\t:^12\\t:^8\\t:^10\\t:^10\\t:^8'
    print(student_title.format('ID','姓名','C语言成绩','Python成绩','Java成绩','绩点'))
    student_data=':^6\\t:^12\\t:^8\\t:^8\\t:^8\\t:^8'
    for item in lst:
        print(student_data.format(item.get('id'),item.get('name'), item.get('C语言'),item.get('Python'),item.get('Java'),round((int(item.get('C语言'))+int(item.get('Python'))+int(item.get('Java'))-180)/30,2)))
    print ('\\n')

(2)输出界面

三、项目打包 

项目打包:
安装第三方模块:1,按win+R,输入cmd,打开cmd命令界面,

                                  在线安装模式:pip install Pyinstaller

                              2,执行打包操作      

pyinstaller -F E:\\PyhonProject\\Chap1\\system.py

四、总结

如果有特殊要求,代码复制后可自行更改。相信看完后对Python的知识有更进一步的认识,希望对初学者和小白有一定的基础。谢谢!

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

需求:

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

讲师视图:

  •   管理班级,可创建班级,根据学员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:学习成绩管理系统的主要内容,如果未能解决你的问题,请参考以下文章

python Django成绩管理系统(课设毕设学习源码下载)

Python:学习成绩管理系统

python爬虫获取强智科技教务系统学科成绩(模拟登录+成绩获取)

python超详细实现完整学生成绩管理系统

python学习之第十四天补充

小白Python学习成绩雷达图