发表于 2021-1-31 15:29

申请会员ID:foxfoxcatcat

1、申 请 I D :foxfoxcatcat
2、个人邮箱:594624657@qq.com   
3、原创技术文章一、学生信息管理系统      本章使用Python语言开发了一个学生信息管理系统,该系统可以帮助教师快速录入学生的信息,并且对学生的信息进行基本的增、删、改、查操作;还可以根据排序功能,宏观地看到学生成绩从高到低的排列,随时掌握学生近期的学习状态,实时地将学生的信息保存到磁盘文件中。1.1需求分析      为了顺应互联网时代用户的获取数据需求,学生信息管理系统应该具备以下功能:
[*]添加学生及成绩信息;
[*]将学生信息保存到文件中;
[*]修改和删除学生信息;
[*]查询学生信息;
[*]根据学生成绩进行排序;
[*]统计学生的总分。
1.2系统设计1.2.1系统功能结构      学生信息管理系统分为7大功能模块,主要包括录入学生信息模块、查找学生信息模块、删除学生信息模块、修改学生信息模块、学生成绩排名模块、统计学生总人数模块及显示全部学生信息模块。学生信息管理系统的功能结构如图1.1所示。https://img-blog.csdnimg.cn/20200909001352585.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ1Mjg0MQ==,size_16,color_FFFFFF,t_70                                                                            图1.1系统功能结构图1.2.2系统业务流程      在开发学生信息管理系统前,需要先了解系统的业务流程。根据学生信息管理系统的需求分析及功能结构,设计如图1.2所示的系统业务流程。https://img-blog.csdnimg.cn/20200911194815506.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ1Mjg0MQ==,size_16,color_FFFFFF,t_701.3系统开发必备1.3.1系统开发环境本系统的软件开发及运行环境具体如下:
[*]操作系统:Windows7、Windows10;
[*]Python版本:Python 3.7;
[*]开发工具:Python IDLE;
[*]Python内置模块:os、re。
1.3.1文件夹组织结构      学生信息管理系统的文件夹结构比较简单,只包括一个Python文件。在运行程序时,会在项目的根目录下自动创建一个名称为students.txt文件,用于保存学生信息。1.4主函数设计1.4.1功能概述      学生信息管理系统的主函数main(),主要用于实现系统的主界面。在主函数main()中,调用menu()函数生成功能选择菜单,并且应用if语句控制各个子函数的调用,从而实现对学生信息的录入、查询、显示、修改、排序和统计等功能。1.4.2主函数的业务流程      在设计学生信息管理系统的主函数时,先要梳理出它的业务流程和实现技术。根据学生信息管理系统主函数要实现的功能,设计出如图所示的业务流程。https://img-blog.csdnimg.cn/20200911200056809.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ1Mjg0MQ==,size_16,color_FFFFFF,t_701.4.3实现主函数      运行学生信息管理系统,首先将进入主功能菜单的选择界面,在这里列出了程序中的所有功能,用户可以根据需要输入要执行功能对应的数字编号或者按下键盘上的方向键,进入对应的子功能中去。其次在menu()函数中主要使用print()函数自爱控制台输出文字和特殊字符组成的功能菜单。当用户输入功能编号或者选择相应的功能后,程序会根据用户选择的功能编号(如果是通过方向键选择的功能,程序会自动提取出对应的数字)调用不同的函数,具体数字表示的功能如表1.1所示。

编号功能
0退出系统
1录入学生信息,调用insert()函数
2查找学生信息,调用search()函数
3删除学生信息,调用delete()函数
4修改学生信息,调用modify()函数
5对学生成绩排序,调用sort()函数
6统计学生总人数,调用total()函数
7显示所有学生的信息,调用show()函数
                                                                        表1.1菜单中的数字所表示的功能主函数main()的实现代码如下:
[*]

def main():
[*]

    ctrl = True                                       #标记是否退出系统
[*]

    while (ctrl):
[*]

         menu()                                       #显示菜单
[*]

         option = input(“请选择:”)                     #选择菜单项
[*]

         option_str = re.sub("\D","",option)            #提取数字
[*]

         if option_str in ['0','1','2','3','4','5','6','7']:
[*]

             option_int = int(option_str)
[*]

             if option_int == 0:                        #退出系统
[*]

                  print('您已退出学生信息管理系统!')
[*]

                  ctrl = False
[*]

             elif option_int ==1:                     #录入学生成绩信息
[*]

                  insert()
[*]

             elif option_int ==2:                     #查找学生成绩信息
[*]

                  search()
[*]

             elif option_int ==3:                     #删除学生成绩信息
[*]

                  delete()
[*]

             elif option_int ==4:                     #修改学生成绩信息
[*]

                  modify()
[*]

             elif option_int ==5:                     #排序
[*]

                  sort()
[*]

             elif option_int ==6:                     #统计学生总数
[*]

                  total()
[*]

             elif option_int ==7:                     #显示所有学生信息
[*]

                  show()
1.4.4显示主菜单      在主函数main()中,调用menu()函数,用于显示功能菜单。他的具体代码如下:
[*]

def menu():
[*]

#输出菜单
[*]

print("'
[*]


[*]

------------------学生信息管理系统-----------------
[*]

|                                                |
[*]

|====================功能菜单====================|
[*]

|                                                |
[*]

|                                                |
[*]

|   1 录入学生信息                              |
[*]

|   2 查找学生信息                              |
[*]

|   3 删除学生信息                              |
[*]

|   4 修改学生信息                              |
[*]

|   5 排序                                     |
[*]

|   6 统计学生总人数                            |
[*]

|   7 显示所有学生信息                        |
[*]

|   0 退出系统                                  |
[*]

|                                                |
[*]

|                                                |
[*]

|                                                |
[*]

|                                                |
[*]

|                                                |
[*]

|=============================================== |
[*]

|                                                |
[*]

|------------------------------------------------|
[*]


[*]

"')
1.5学生信息维护模块设计1.5.1学生信息维护模块概述      在学生信息管理系统中学生信息维护模块用于维护学生信息。主要包括录入学生信息、修改学生信息和删除学生信息,这些学生信息会保存到磁盘文件。其中,当用户在功能选择界面中输入数字“1”(或者使用方向键选择“1录入学生信息”菜单项),即可进入录入学生信息功能。在这里可以实现批量录入学生信息,并保存到磁盘文件中,运行效果如图所示。      当用户在功能选择界面中输入数字“3”(或者使用方向键选择“3删除学生信息”菜单项),将进入删除学生信息功能界面。在这里可以实现根据学生ID从磁盘文件中删除指定的学生信息,运行效果如图所示。      当用户在功能选择界面中输入数字“4”(或者使用方向键选择“4修改学生信息”菜单项),将进入修改学生信息功能界面。在这里可以实现根据学生ID修改指定的学生信息,运行效果如图所示。1.5.2实现录入学生信息功能1.功能概述      录入学生信息功能主要就是获取用户在控制台上输入的学生信息,并且把它们保存到磁盘文件中,从而达到永久保存的目的。例如,在功能菜单上输入功能编号1,并且按下<Enter>键,系统将分别提示输入学生编号、学生名字、英语成绩、Python成绩和C语言成绩的信息,输入正确的信息后,系统会提示是否继续添加,如图所示。输入“y”,系统将再次提示用户输入学生信息,输入“n”,系统将录入的学生信息保存到文件中。2.业务流程      在实现录入学生信息功能时,先要梳理出它的业务流程和实现技术。录入学生信息的业务流程和实现技术如图所示。https://img-blog.csdnimg.cn/202009112013054.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ1Mjg0MQ==,size_16,color_FFFFFF,t_703.具体实现(1)编写一个向文件中写入指定内容的函数,将其命名为save(),该函数有一个列表类型的参数,用于指定要写入的内容。save()函数的具体代码如下:
[*]

#将学生信息保存到文件
[*]

def save(student)
[*]

    try:
[*]

      student_txt = open(filename,"a")       #以追加模式打开
[*]

    except Exception as e:
[*]

      student_txt = open(filename,"w")       #文件不存在,创建文件并打开
[*]

    for info in student:
[*]

      student_txt.write(str(info)+"\n")      #按行存储,添加换行符
[*]

    student_txt.close()                        #关闭文件

[*]在上面的代码中,将以追加的模式打开一个文件,并且应用try...except语句捕获异常。如果出现异常,则说明没有要打开的文件,这时再以写的模式创建并打开文件,接下来通过for语句将列表中的元素一行一行写入文件中,每行结束添加换行符。
(2)编写主函数的调用的录入学生信息的函数insert()。在该函数中,先定义一个保存学生信息的空列表,然后设置一个while循环,在该循环中通过input()函数要求用户输入学生信息(包括学生ID、名字、英语成绩、Python成绩和C语言成绩)。如果这些内容都符合要求,则将它们保存到字典中,再将该字典添加到列表中并且询问是否继续录入;如果不再录入则结束while循环,并调用save()函数,将录入的学生信息保存到文件中。insert()函数的具体代码如下:
[*]

def insert():
[*]

    stdentList = []                                       #保存学生信息的列表
[*]

    mark = True                                             #是否继续添加
[*]

    while mark:
[*]

          id = input(“请输入ID(如1001):”)
[*]

          if not id:                                        #ID为空,跳出循环
[*]

               break
[*]

          name = input("请输入名字:")
[*]

          if not name:                                    #名字为空,跳出循环
[*]

               break
[*]

          try:
[*]

               english = int(inpu("请输入英语成绩:"))
[*]

               python = int(inpu("请输入Python成绩:"))
[*]

               c = int (inpu("请输入C语言成绩:"))
[*]

          except:
[*]

            print("输入无效,不是整型数值....重新录入信息")
[*]

            continue
[*]

          #将输入的学生信息保存到字典
[*]

          stdent= {"id":id,"name":name,"english":english,"python":python,"c":c}
[*]

          stdentList.append(stdent)                        #将学生字典添加到列表中
[*]

          inputMark = input("是否继续添加?(y/n):")
[*]

          if inputMark == "y":                           #继续添加
[*]

            mark= True
[*]

          else:                                          #不继续添加
[*]

            mark = False
[*]

    save(stdentList)                                       #将学生信息保存到文件
[*]

    print("学生信息录入完毕!!!")

[*]上面的代码中,设置一个标记变量mark,用于控制是否退出循环。
(3)执行录入学生信息后,将在项目的根目录中创建一个名称为students.txt的文件,该文件中保存着学生信息。例如,输入2条信息后,students.txt文件的内容如图所示。1.5.3实现删除学生信息功能1.功能概述      删除学生信息功能主要就是用户在控制台上输入的学生ID,到磁盘文件中找到对应的学生信息,并将其删除。例如,在功能菜单上输入功能编号“3”,并且按下<Enter>键,系统将提示输入要删除学生的编号,输入相应的学生ID后,系统会直接从文件中删除该学生信息,并且提示是否继续删除,如图所示。输入“y”,系统将会再次提示用户输入要删除的学生编号,输入“n”,则退出删除功能。2.业务流程      在实现删除学生信息功能时,先要梳理出它的业务流程和实现技术。根据要实现的功能,设计出如图所示的业务流程和实现技术。https://img-blog.csdnimg.cn/2020091120212516.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ1Mjg0MQ==,size_16,color_FFFFFF,t_703.具体实现      编写主函数中调用的删除学生信息的函数delete()。在该函数中,设置一个while循环,在该循环中,首先通过input()函数要求用户输入要删除学生ID;然后以只读模式打开保存学生信息的文件,并且读取其内容保存到一个列表中;再以写模式打开保存学生信息的文件,并且遍历保存学生信息的列表,将每个元素转换为字典,从而方便根据输入的学生ID判断是否为要删除的信息。如果不是要删除的信息,则将其重新写入到文件中。delete()函数的具体代码如下:
[*]

def delete():
[*]

    mark = True                                       #标记是否循环
[*]

    while mark:
[*]

      studentId = input("请输入要删除的学生ID:")
[*]

      if studentId is not "":                         #判断是否输入要删除的学生
[*]

             if os.path.exists(filename):               #判断文件是否存在
[*]

               with open(filename,'r') as rfile:      #打开文件
[*]

                     student_old = rfile.readlines()    #读取全部内容
[*]

             else:
[*]

               student_old = []
[*]

             ifdel = False                              #标记是否删除
[*]

             if student_old:                            #如果存在学生信息
[*]

               with open(filename,'w')as wfile:       #以写方式打开文件
[*]

                  d = {}               
[*]

                  for list in student_old:
[*]

                        d= dict(eval(list))             #字符串转字典
[*]

                        if d['id'] != studentId:
[*]

                            wfile.write(str(d) + "\n")#将一条学生信息写入文件
[*]

                        else:
[*]

                            ifdel = True                #标记已经删除
[*]

                  if ifdel:
[*]

                        print("ID为%s的学生信息已经被删除..." % studentId)
[*]

                  else:
[*]

                        print("没有找到ID为 %s 的学生信息..." % studentId)
[*]

             else:                                     #不存在学生信息
[*]

               print("无学生信息...")
[*]

               break                                 #退出循环
[*]

             show()                                    #显示全部学生信息
[*]

             inputMark = input("是否继续删除?(y/n):")
[*]

             if inputMark == "y":
[*]

                  mark = True                        #继续删除
[*]

             else:
[*]

               mark = False                        #退出删除学生信息功能

[*]      上面代码中,调用了show()函数显示学生信息,该函数将在1.6.4小节中进行介绍。
1.5.4实现修改学生信息功能1.功能概述      修改学生信息功能主要就是根据用户在控制台上输入的学生ID,从磁盘文件中找到对应的学生信息,再对其进行修改。例如,在功能菜单上输入功能编号“4”,并且按下<Enter>键,系统首先显示全部学生信息列表,再提示输入要修改学生的编号。输入相应的学生ID后,系统会在文件中查找该学信息,如果找到,则提示修改相应的信息,否则不修改。最后提示是否继续修改,如图所示。输入“y”,系统将会再次提示用户输入要修改的学生编号,输入“n”,则退出修改功能。2.业务流程      在实现修改学生信息功能时,先要梳理出它的业务流程和实现技术。如图所示。https://img-blog.csdnimg.cn/20200911203534786.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ1Mjg0MQ==,size_16,color_FFFFFF,t_703.具体实现      编写主函数中调用的修改学生信息的函数modify()。在该函数中,调用show()函数显示全部学生信息,之后再判断保存学生信息的文件是否存在。如果存在,以只读模式打开文件,并且读取全部学生信息保存到列表中,否则返回。接下来提示用户输入要修改的学生ID,并且以只写模式打开文件。打开文件后,遍历保存学生信息的列表,将每个元素转换为字典,再根据输入的学生ID判断是否为要修改的信息。如果是要修改的信息,则提示用户输入新的信息,并保存到文件,否则直接将其写入文件中。modify()函数的具体代码如下:
[*]

def modify():
[*]

    show()                                 #显示全部学生信息
[*]

    if os.path.exists(filename):             #判断文件是否存在
[*]

      with open(filename,'r') as rfile:    #打开文件
[*]

            student_old = rfile.readlines()
[*]

    else:
[*]

      return
[*]

    studentid = input("请输入要修改的学生ID:")
[*]

    with open(filename,"w") as wfile:      #以只写模式打开文件
[*]

      for student in student_old:
[*]

            d = dict(eval(student))          #字符串转字典
[*]

            if d["id"] == studentid:         #是否为要修改的学生
[*]

               print("找到了这名学生,可以修改他的信息!")
[*]

               while True:                  #输入要修改的信息
[*]

                  try:
[*]

                        d["name"] = input("请输入姓名:")
[*]

                        d["english"] = int(input("请输入英语成绩:"))
[*]

                        d["python"] = int(input("请输入Python语言:"))
[*]

                        d["c"] = int(input("请输入C语言:"))
[*]

                  except:
[*]

                        print("您的输入有误,请重新输入。")
[*]

                  else:
[*]

                        break                #跳出循环
[*]

               student = str(d)            #将字典转换为字符串
[*]

               wfile.write(studnet + "\n")   #将修改的信息写入到文件
[*]

               print("修改成功!")
[*]

            else:
[*]

               wfile.write(student)          #将未修改的信息写入到文件
[*]

    mark = input("是否继续修改其他学生信息?(y/n):")
[*]

    if mark == "y":
[*]

      modify()                           #重新执行修改操作
1.6查询/统计模块设计1.6.1查询/统计模块概述      在学生信息管理系统中,查询/统计模块用于查询和统计学生信息。主要包括根据学生编号或姓名查找学生信息、统计学生总人数和显示所有学生信息。在显示获取到的学生信息时,会自动计算总成绩。其中,当用户在功能选择界面中输入数字“2”或者使用方向键选择“2查找学生信息”菜单项,即可进入到查找学生信息功能。在这里可以实现根据学生编号或姓名查找学生信息,运行效果如图所示。      当用户在功能选择界面中输入数字“6”(或者使用方向键选择“6统计学生总人数”菜单项),即可进入到统计学生总人数功能。在这里可以实现统计并显示学生总人数的信息,运行效果如图所示。      当用户在功能选择界面中输入数字“7”(或者使用方向键选择“7显示所有学生信息”菜单项),即可进入到显示所有学生信息功能。在这里可以实现显示全部学生信息(包括学生的总成绩),运行效果如图所示。1.6.2实现查找学生信息功能1.功能概述      查找学生信息功能主要是根据用户在控制台上输入学生ID或者姓名,到磁盘文件中找到对应的学生信息。例如,在功能菜单上输入功能编号“2”,并且按下<Enter>键,系统将要求用户选择是按学生编号查询还是按学生姓名查询,如果用户输入“1”,则要求用户输入学生ID,表示按学生编号查询。接着输入想要查询的学生编号,系统查找该学生信息,如果找到则显示,效果如图所示。否则显示“无数据信息”。最后提示是否继续查找输入“y”,系统将再次提示用户选择查找方式,输入“n”,则退出查找学生信息功能。2.业务流程      在实现查询学生信息功能时,先要梳理出它的业务流程和实现技术。根据要实现的功能,设计出如图所示的业务流程和实现技术。https://img-blog.csdnimg.cn/20200911211046592.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ1Mjg0MQ==,size_16,color_FFFFFF,t_703.具体实现      编写主函数中调用的查找学生信息的函数search(),设置一个循环并在该循环中先判断保存学生信息的文件是否存在,如果不存在则给出提示并返回,否则提示用户选择查询方式;然后根据选择的方式到保存学生信息的文件中查找对应的学生信息,并且调用show_student()函数将查询结果进行显示。search()函数的具体代码如下:
[*]

def search():
[*]

    mark = True
[*]

    student_query = []                              #保存查询结果的学生列表
[*]

    while mark:
[*]

         id = ""
[*]

         name = ""
[*]

         if os.path.exists(filename):               #判断文件是否存在
[*]

             mode = input("按ID查输入1;按姓名查输入2:")
[*]

             if mode == "1":
[*]

                  id = input("请输入学生ID:")       #按学生编号查询
[*]

             elif mode == "2":
[*]

                  name = input("请输入学生姓名:")   #按学生姓名查询
[*]

             else:
[*]

                  print("您的输入有误,请重新输入!")
[*]

                  search()                        #重新查询
[*]

             with open(filename,'r')as file:      #打开文件
[*]

                  student = file.readlines()      #读取全部内容
[*]

                  for list in student:
[*]

                      d = dict(eval(list))          #字符串转字典
[*]

                      if id is not "":            #判断是否按ID查询
[*]

                        if d['id'] == id:
[*]

                              student_query.append(d) #将找到的学生信息保存到列表中
[*]

                      elif name is not "":            #判断是否按姓名查询
[*]

                        if d['name'] == name:
[*]

                              student_query.append(d)
[*]

                  show_student(student_query)         #显示查询结果
[*]

                  student_query.clear()               #清空列表
[*]

                  inputMark = input("是否继续查询?(y/n):")
[*]

                  if inputMark == "y":
[*]

                     mark = True
[*]

                  else:
[*]

                     mark = False
[*]

      else:
[*]

            print("暂未保存数据信息...")
[*]

            return
[*]


      在上面的代码中, 调用了函数show_student(),用于按指定格式显示获取的列表。show_student()函数的具体代码如下:
[*]

#将保存的列表中的学生信息显示出来
[*]

def show_student(studentlist):
[*]

    if not studentlist:
[*]

         print("无数据信息\n")
[*]

         return
[*]

    #定义标题显示格式
[*]

    format_title = "{:^6}{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^10}"
[*]

    print(format_title.format("ID","名字",
[*]

                   "英语成绩","Python成绩","C语言成绩","总成绩"))#按指定格式显示标题
[*]

    #定义具体内容显示格式
[*]

    format_data = "{:^6}{:^12}\t{:^12}\t{:^12}\t{:^12}\t{:^12}"
[*]

    for info in studentList:    #通过for循环将列表中的数据全部显示出来
[*]

      print(format_data.format(info.get("id"),
[*]

            info.get("name"),str(info.get("english")),str(info.get("python")),
[*]

            str(info.get("c")),
[*]

            str(info.get("english")+info.get("python")+
[*]

            info.get("c")).center(12)))
      上面的代码中,使用了字符串的format()方法对其进行格式化。其中再指定字符串的显示格式时,数字表示所占宽度,符号"^"表示居中显示,“\t”表示添加一个制表符。1.6.3 实现统计学生总人数功能1.功能概述      统计学生总人数功能主要是统计学生信息文件中保存的学生信息个数。例如,在功能菜单上选择“6统计学生人数”,并且按下<Enter>键,系统将自动统计处学生总人数并显示。2.业务流程      在实现统计学生总人数功能时,先要梳理出它的业务流程和实现技术,如图所示。https://img-blog.csdnimg.cn/20200911212902125.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ1Mjg0MQ==,size_16,color_FFFFFF,t_703. 具体实现      编写主函数中调用的统计学生总人数的函数show()。在该函数中,添加一个if语句,用于判断保存到学生信息的文件是否存在,如果存在则以只读模式打开该文件,读取该文件的全部内容后保存到一个列表中。然后再遍历该列表,并将其元素转换为字典,再添加到一个新列表中,最后再调用show_student()函数将新列表中的信息显示。show()函数的具体代码如下:
[*]

def show():
[*]

    student_new = []
[*]

    if os.path.exists(filename):               #判断文件是否存在
[*]

       with open(filename,'r') as rfile:         #打开文件
[*]

            student_old = rfile.readlines()      #读取全部内容
[*]

       for list in student_old:
[*]

            studdent_new.append(eval(list))      #将找到的学生信息保存到列表中
[*]

       if student_new:
[*]

            show_student(student_new)
[*]

    else:
[*]

       print("暂存保存数据信息...")
1.6.4实现显示所有学生信息功能1.功能概述      显示所有学生信息功能主要就是将学生信息文件中保存的全部学生信息获取并显示。例如,在功能菜单上选择“7显示所有学生信息”菜单项,并且按下<Enter>键,系统将获取并显示全部学生信息。2.业务流程      在实现显示所有学生信息功能时,先要梳理出它的业务流程和实现技术,如图所示。https://img-blog.csdnimg.cn/20200911213559573.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ1Mjg0MQ==,size_16,color_FFFFFF,t_703. 具体实现      编写主函数中调用的统计学生总人数的函数show()。在该函数中,添加一个if语句,用于判断保存学生信息的文件是否存在,如果存在则以只读模式打开该文件,读取该文件的全部内容后保存到一个列表中。然后再遍历该列表,并将其元素转换为字典,再添加到一个新列表中,最后再调用show_student()函数将新列表中的信息显示。show()函数的具体代码如下:
[*]

def show():
[*]

    student_new = []
[*]

    if os.path.exists(filename):             #判断文件是否存在
[*]

         with open(filename,'r') as rfile:   #打开文件
[*]

             student_old = rfile.readlines() #读取全部内容
[*]

         for list in student_old:
[*]

             student _new.append(eval(list)) #将找到的学生信息保存到列表中
[*]

         if student_new:
[*]

             show_student(student _new)
[*]

   else:
[*]

       print("暂未保存数据信息...")

[*] 上面的代码,调用show_student()函数将学生信息显示到控制台上。show_student()函数已经在1.6.2小节中创建完成。
1.7 1.7.1排序模块概述在学生信息管理系统中,排序模块用于对学生信息按成绩进行排序。主要包括按英语成绩、Python成绩、C语言成绩和总成绩按升序或降序排列。其中,当用户在功能选择界面中输入数字“5”,或者使用方向键选择“5排序”菜单项时,即可进入到排序功能。在这里先录入顺序显示学生信息(不排序),然后要求用户选择排序方式,并根据选择方式进行排序显示。1.7.2实现按学生成绩排序1.功能概述      按学生成绩排序功能主要是对学生信息按英语成绩、Python成绩、C语言成绩或总成绩升序或降序排列。例如,输入功能编号“5”,并且按下<Enter>键,系统将先显示不排序的全部学生信息。然后提示选择按编程语言的排序方式(这里输入“2”),再选择降序排序(输入1),将对学生信息按Python成绩降序排列并显示。2.业务流程      在实现按学生成绩排序功能时,先要梳理出它的业务流程和实现技术,如下图所示。https://img-blog.csdnimg.cn/20200911223435354.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ1Mjg0MQ==,size_16,color_FFFFFF,t_703.具体实现      编写主函数中调用的排序的函数sort()。在该函数中,首先判断保存学生信息的文件是否存在,如果存在,则打开该文件读取全部学生信息,并将每一名学生信息转换为字典保存到一个新的列表中,然后获取用户输入的排序方式,再根据选择结果进行相应的排序,最后调用show_student()函数显示排序结果。sort()函数的具体代码如下:
[*]

def sort():
[*]

    show()
[*]

    if os.path.exists(filename):
[*]

         with open(filename,'r') as file:
[*]

             student_old = file.readlines()
[*]

             student_new = []
[*]

         for list in student_old:
[*]

             d = dict(eval(list))             #字符串转字典
[*]

             student_new.append(d)            #将转换后的字典添加到列表中
[*]

    else:
[*]

      return
[*]

    ascORdesc = input("请选择(0升序;1降序):")
[*]

    if ascORdesc == "0":                      #按升序排序
[*]

         ascORdescBool = False
[*]

    elif ascORdesc == "1":
[*]

         ascORdescBool = True               #按降序排序
[*]

    else:
[*]

         print()
[*]

         sort()
[*]

    mode = input()
[*]

    if mode == "1":                           #按英语成绩排序
[*]

         student_new.sort(key=lambda x: x["english"],reverse=ascORdescBool)
[*]

    elif mode == "2":                         #按Python成绩排序
[*]

         student_new.sort(key=lambda x: x["python"],reverse=ascORdescBool)
[*]

    elif mode == "3":                         #按C语言成绩排序
[*]

         student_new.sort(key=lambda x: x["c"],reverse=ascORdescBool)
[*]

    elif mode == "0":                         #按总成绩排序
[*]

         student_new.sort(key=lambda x: x["english"]+x["python"]+x["c"],reverse=ascORdescBool)
[*]

    else:
[*]

         print(“您的输入有误,请重新输入!”)
[*]

         sort()
[*]

    show_student(student_new)               #显示排序结果
上面的代码中,调用列表的sort()方法实现的排序,在排序时,通过lambda表达式指定的排序规则。例如,第22行代码中的"key=lambda x: x["english"]"表示按字典的english键进行排序;“reverse = ascORdescBool”表示是否为降序排序,标记变量ascORdescBool的值为True,表示降序排序。1.8打包为.exe可执行文件      Python项目完成后,可以将其打包成一个.exe可执行文件,这样就可以在其他计算机上运行该项目了,即时这台计算机上没有安装Python开发环境。      实现打包.exe可执行文件时,需要使用PyInstaller模块,该模块为第三方模块所以需要单独安装。PyInstaller模块支持多种操作系统,如Windows、Linux、Mac OS X等,但是该模块并不支持跨平台操作。例如:在Windows操作系统下打包的.exe可执行文件,该文件就只能在Windows环境下运行。      这里以Windows操作系统为例,介绍PyInstaller模块的安装,安装PyInstaller模块最简单的方法就是在“命令提示符窗口”中输入“pip install pyinstaller”命令进行安装,如图所示。如果是升级或者是更新可以使用“pip install --upgrade pyinstaller”命令。
[*]在Windows操作系统中,使用pip或者easy_install安装PyInstaller模块时,会自动安装PyWin32。
[*]PyInstaller模块安装完成以后,可以在“命令提示符窗口”中输入“pyinstaller--version”命令,通过查询PyInstaller模块版本的方式检测安装是否成功。
PyInstaller模块安装完成以后,就可以打包.py文件为.exe文件了。具体方法如下。(1)通过CMD命令打开“命令提示符”窗口,在当前光标位置输入:pyinstaller+-F+(要打包的.py文件的绝对路径),例如,该文件保存在“”目录中,则可以使用下面的代码对其打包:                     pyinstaller-FE:\tmp\studentsystem\studentsystem.py
[*]在上面的代码中,参数-F表示只生成一个扩展名为.exe的可执行文件。
(2)输入上面的代码并按下<Enter>键,将自动生成.exe可执行文件,具体过程如图所示。(3)在如图所示的位置,找到.exe文件的保存路径,并且在该路径下找到生成.exe可执行文件,双击该文件即可运行本项目。
[*]在介绍的PyInstaller模块打包程序中,不能把项目中应用的图片、文本文件、音频、视频等资源打包到可执行文件中。因此,在打包后还需要把这些资源复制到与可执行文件相同的目录中。
1.9小结      本节主要使用Python语言开发了一个学生信息管理系统,项目的核心是对文件、列表和字典进行操作。其中,对文件进行操作是用来永久保存学生信息;而将学生信息以字典的形式存储到列表中,是为了方便对学生信息的查找、修改和删除。通过本节的学习,读者首先应该熟练并掌握对文件进行创建、打开和修改等操作的方法,其次还应该掌握对字典和列表进行操作的方法,尤其是对列表进行自定义排序规则,这是本项目的难点,需要读者仔细体会并做到融会贯通。

Hmily 发表于 2021-2-1 10:20

这文章是你写的吗?

THEFOOLXX 发表于 2021-2-1 10:38

不明觉厉、

孩子你将来要成为富一代 发表于 2021-5-21 11:02

笑死我了我刚好在看这本书

有辆卡卡 发表于 2021-6-1 09:46

这么厉害的牛啊

ForGot_227 发表于 2021-6-10 17:55

根据图片水印,在找了下,原文地址:
https://blog.csdn.net/weixin_38452841/article/details/108480075?spm=1001.2014.3001.5501

我的盘由我做主 发表于 2021-6-11 14:35

孩子你将来要成为富一代 发表于 2021-5-21 11:02
笑死我了我刚好在看这本书

你这是在自己嘲笑自己吗?

FleTime 发表于 2021-6-11 16:30

我的盘由我做主 发表于 2021-6-11 14:35
你这是在自己嘲笑自己吗?

回帖的和发帖的不是同一个人,这个板块游客也可以回帖的

onedayday-wb 发表于 2021-6-16 13:23

FleTime 发表于 2021-6-11 16:30
回帖的和发帖的不是同一个人,这个板块游客也可以回帖的

现在游客也可以进行发帖、回帖了吗,如果是的话,倘若不加以限制(如灌水、恶意发帖、传播非正能量的话题),会不会增加服务器的压力呢?千方百计的限制我们这些老会员的的权利(头像问题、上传照片问题),对于游客可以操作的这一举措,我觉得有点有悖于论坛想减小服务器的压力,(并无恶意,只是提了一下自己的内心的想法){:1_919:}{:1_919:}

FleTime 发表于 2021-6-16 17:45

onedayday-wb 发表于 2021-6-16 13:23
现在游客也可以进行发帖、回帖了吗,如果是的话,倘若不加以限制(如灌水、恶意发帖、传播非正能量的话题 ...

申请区和招聘求职区,游客一直可以发帖回帖很多年了,从没出过问题,论坛的后台对付各种恶意行为绰绰有余,
缓解服务器压力这块,论坛也对游客做了很多的改进,你不是游客登录感受不出来,你可以试试登出账号再访问论坛体验体验
页: [1] 2
查看完整版本: 申请会员ID:foxfoxcatcat