草庐IT

Python:学习成绩管理系统

自由学者× 2023-12-30 原文

目录

前言

一、需求分析

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:学习成绩管理系统的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  4. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  5. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  6. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  7. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  8. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  9. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  10. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

随机推荐