当前位置: 无忧屋首页 > 文章中心 > Python >

Python学生信息管理系统源码

来源:网络

发布人:天道酬勤

发布时间:2024-01-29

一个Python学生信息管理系统源码,包括录入学生信息、查找学生信息、删除学生信息、修改学生信息、排序学生信息、统计学生总数和显示所有学生信息等功能,最近帮朋友写的一个项目,有需要的朋友拿走。

开发环境要求本系统的软件开发及运行环境具体如下。操作系统:Windows 10。Python版本:Python 3.7.0。开发工具:Python IDLE。Python内置模块:os、re。

  1. # _*_ coding:utf-8   _*_
  2. import re  # 导入正则表达式模块
  3. import os  # 导入操作系统模块
  4.   
  5. filename = "students.txt"  # 定义保存学生信息的文件名
  6.   
  7.   
  8. def menu():
  9.     # 输出菜单
  10.     print('''
  11.     ╔———————学生信息管理系统————————╗
  12.     │                                              │
  13.     │   =============== 功能菜单 ===============   │
  14.     │                                              │
  15.     │   1 录入学生信息                             │
  16.     │   2 查找学生信息                             │
  17.     │   3 删除学生信息                             │
  18.     │   4 修改学生信息                             │
  19.     │   5 排序                                     │
  20.     │   6 统计学生总人数                           │
  21.     │   7 显示所有学生信息                         │
  22.     │   0 退出系统                                 │
  23.     │  ==========================================  │
  24.     │  说明:通过数字或↑↓方向键选择菜单          │
  25.     ╚———————————————————————╝
  26.     ''')
  27.   
  28.   
  29. def main():
  30.     ctrl = True  # 标记是否退出系统
  31.     while (ctrl):
  32.         menu()  # 显示菜单
  33.         option = input("请选择:")  # 选择菜单项
  34.         option_str = re.sub("D", "", option)  # 提取数字
  35.         if option_str in ['0', '1', '2', '3', '4', '5', '6', '7']:
  36.             option_int = int(option_str)
  37.             if option_int == 0:  # 退出系统
  38.                 print('您已退出学生成绩管理系统!')
  39.                 ctrl = False
  40.             elif option_int == 1:  # 录入学生成绩信息
  41.                 insert()
  42.             elif option_int == 2:  # 查找学生成绩信息
  43.                 search()
  44.             elif option_int == 3:  # 删除学生成绩信息
  45.                 delete()
  46.             elif option_int == 4:  # 修改学生成绩信息
  47.                 modify()
  48.             elif option_int == 5:  # 排序
  49.                 sort()
  50.             elif option_int == 6:  # 统计学生总数
  51.                 total()
  52.             elif option_int == 7:  # 显示所有学生信息
  53.                 show()
  54.   
  55.   
  56. '''1 录入学生信息'''
  57.   
  58.   
  59. def insert():
  60.     stdentList = []        # 保存学生信息的列表
  61.     mark = True  # 是否继续添加
  62.     while mark:
  63.         id = input("请输入ID(如 1001):")
  64.         if not id:  # ID为空,跳出循环
  65.             break
  66.         name = input("请输入名字:")
  67.         if not name:  # 名字为空,跳出循环
  68.             break
  69.         try:
  70.             english = int(input("请输入英语成绩:"))
  71.             python = int(input("请输入Python成绩:"))
  72.             c = int(input("请输入C语言成绩:"))
  73.         except:
  74.             print("输入无效,不是整型数值....重新录入信息")
  75.             continue
  76.         stdent = {"id": id, "name": name, "english": english, "python": python, "c": c}  # 将输入的学生信息保存到字典
  77.         stdentList.append(stdent)  # 将学生字典添加到列表中
  78.         inputMark = input("是否继续添加?(y/n):")
  79.         if inputMark == "y":  # 继续添加
  80.             mark = True
  81.         else:  # 不继续添加
  82.             mark = False
  83.     save(stdentList)  # 将学生信息保存到文件
  84.     print("学生信息录入完毕!!!")
  85.   
  86.   
  87. # 将学生信息保存到文件
  88. def save(student):
  89.     try:
  90.         students_txt = open(filename, "a")  # 以追加模式打开
  91.     except Exception as e:
  92.         students_txt = open(filename, "w")  # 文件不存在,创建文件并打开
  93.     for info in student:
  94.         students_txt.write(str(info) + "n")  # 按行存储,添加换行符
  95.     students_txt.close()  # 关闭文件
  96.   
  97.   
  98. '''2 查找学生成绩信息'''
  99.   
  100.   
  101. def search():
  102.     mark = True
  103.     student_query = []  # 保存查询结果的学生列表
  104.     while mark:
  105.         id = ""
  106.         name = ""
  107.         if os.path.exists(filename):  # 判断文件是否存在
  108.             mode = input("按ID查输入1;按姓名查输入2:")
  109.             if mode == "1":
  110.                 id = input("请输入学生ID:")
  111.             elif mode == "2":
  112.                 name = input("请输入学生姓名:")
  113.             else:
  114.                 print("您的输入有误,请重新输入!")
  115.                 search()  # 重新查询
  116.             with open(filename, 'r') as file:  # 打开文件
  117.                 student = file.readlines()  # 读取全部内容
  118.                 for list in student:
  119.                     d = dict(eval(list))  # 字符串转字典
  120.                     if id is not "":  # 判断是否按ID查
  121.                         if d['id'] == id:
  122.                             student_query.append(d)  # 将找到的学生信息保存到列表中
  123.                     elif name is not "":  # 判断是否按姓名查
  124.                         if d['name'] == name:
  125.                             student_query.append(d)  # 将找到的学生信息保存到列表中
  126.                 show_student(student_query)  # 显示查询结果
  127.                 student_query.clear()  # 清空列表
  128.                 inputMark = input("是否继续查询?(y/n):")
  129.                 if inputMark == "y":
  130.                     mark = True
  131.                 else:
  132.                     mark = False
  133.         else:
  134.             print("暂未保存数据信息...")
  135.             return
  136.   
  137.   
  138. '''3 删除学生成绩信息'''
  139.   
  140.   
  141. def delete():
  142.     mark = True  # 标记是否循环
  143.     while mark:
  144.         studentId = input("请输入要删除的学生ID:")
  145.         if studentId is not "":  # 判断要删除的学生是否存在
  146.             if os.path.exists(filename):  # 判断文件是否存在
  147.                 with open(filename, 'r') as rfile:  # 打开文件
  148.                     student_old = rfile.readlines()  # 读取全部内容
  149.             else:
  150.                 student_old = []
  151.             ifdel = False  # 标记是否删除
  152.             if student_old:  # 如果存在学生信息
  153.                 with open(filename, 'w') as wfile:  # 以写方式打开文件
  154.                     d = {}  # 定义空字典
  155.                     for list in student_old:
  156.                         d = dict(eval(list))  # 字符串转字典
  157.                         if d['id'] != studentId:
  158.                             wfile.write(str(d) + "n")  # 将一条学生信息写入文件
  159.                         else:
  160.                             ifdel = True  # 标记已经删除
  161.                     if ifdel:
  162.                         print("ID为 %s 的学生信息已经被删除..." % studentId)
  163.                     else:
  164.                         print("没有找到ID为 %s 的学生信息..." % studentId)
  165.             else:  # 不存在学生信息
  166.                 print("无学生信息...")
  167.                 break  # 退出循环
  168.             show()  # 显示全部学生信息
  169.             inputMark = input("是否继续删除?(y/n):")
  170.             if inputMark == "y":
  171.                 mark = True  # 继续删除
  172.             else:
  173.                 mark = False  # 退出删除学生信息功能
  174.   
  175.   
  176. '''4 修改学生成绩信息'''
  177.   
  178.   
  179. def modify():
  180.     show()  # 显示全部学生信息
  181.     if os.path.exists(filename):  # 判断文件是否存在
  182.         with open(filename, 'r') as rfile:  # 打开文件
  183.             student_old = rfile.readlines()  # 读取全部内容
  184.     else:
  185.         return
  186.     studentid = input("请输入要修改的学生ID:")
  187.     with open(filename, "w") as wfile:  # 以写模式打开文件
  188.         for student in student_old:
  189.             d = dict(eval(student))  # 字符串转字典
  190.             if d["id"] == studentid:  # 是否为要修改的学生
  191.                 print("找到了这名学生,可以修改他的信息!")
  192.                 while True:  # 输入要修改的信息
  193.                     try:
  194.                         d["name"] = input("请输入姓名:")
  195.                         d["english"] = int(input("请输入英语成绩:"))
  196.                         d["python"] = int(input("请输入Python成绩:"))
  197.                         d["c"] = int(input("请输入C语言成绩:"))
  198.                     except:
  199.                         print("您的输入有误,请重新输入。")
  200.                     else:
  201.                         break  # 跳出循环
  202.                 student = str(d)  # 将字典转换为字符串
  203.                 wfile.write(student + "n")   # 将修改的信息写入到文件
  204.                 print("修改成功!")
  205.             else:
  206.                 wfile.write(student)  # 将未修改的信息写入到文件
  207.     mark = input("是否继续修改其他学生信息?(y/n):")
  208.     if mark == "y":
  209.         modify()  # 重新执行修改操作
  210.   
  211.   
  212. '''5 排序'''
  213.   
  214.   
  215. def sort():
  216.     show()  # 显示全部学生信息
  217.     if os.path.exists(filename):  # 判断文件是否存在
  218.         with open(filename, 'r') as file:  # 打开文件
  219.             student_old = file.readlines()  # 读取全部内容
  220.             student_new = []
  221.         for list in student_old:
  222.             d = dict(eval(list))  # 字符串转字典
  223.             student_new.append(d)  # 将转换后的字典添加到列表中
  224.     else:
  225.         return
  226.     ascORdesc = input("请选择(0升序;1降序):")
  227.     if ascORdesc == "0":  # 按升序排序
  228.         ascORdescBool = False           # 标记变量,为False表示升序排序
  229.     elif ascORdesc == "1":  # 按降序排序
  230.         ascORdescBool = True          # 标记变量,为True表示降序排序
  231.     else:
  232.         print("您的输入有误,请重新输入!")
  233.         sort()  
  234.     mode = input("请选择排序方式(1按英语成绩排序;2按Python成绩排序;3按C语言成绩排序;0按总成绩排序):")
  235.     if mode == "1":  # 按英语成绩排序
  236.         student_new.sort(key=lambda x: x["english"], reverse=ascORdescBool)
  237.     elif mode == "2":  # 按Python成绩排序
  238.         student_new.sort(key=lambda x: x["python"], reverse=ascORdescBool)
  239.     elif mode == "3":  # 按C语言成绩排序
  240.         student_new.sort(key=lambda x: x["c"], reverse=ascORdescBool)
  241.     elif mode == "0":  # 按总成绩排序
  242.         student_new.sort(key=lambda x: x["english"] + x["python"] + x["c"], reverse=ascORdescBool)
  243.     else:
  244.         print("您的输入有误,请重新输入!")
  245.         sort()
  246.     show_student(student_new)  # 显示排序结果
  247.   
  248.   
  249. ''' 6 统计学生总数'''
  250.   
  251.   
  252. def total():
  253.     if os.path.exists(filename):  # 判断文件是否存在
  254.         with open(filename, 'r') as rfile:  # 打开文件
  255.             student_old = rfile.readlines()  # 读取全部内容
  256.             if student_old:
  257.                 print("一共有 %d 名学生!" % len(student_old))
  258.             else:
  259.                 print("还没有录入学生信息!")
  260.     else:
  261.         print("暂未保存数据信息...")
  262.   
  263.   
  264. ''' 7 显示所有学生信息 '''
  265.   
  266.   
  267. def show():
  268.     student_new = []
  269.     if os.path.exists(filename):  # 判断文件是否存在
  270.         with open(filename, 'r') as rfile:  # 打开文件
  271.             student_old = rfile.readlines()  # 读取全部内容
  272.         for list in student_old:
  273.             student_new.append(eval(list))  # 将找到的学生信息保存到列表中
  274.         if student_new:
  275.             show_student(student_new)
  276.     else:
  277.         print("暂未保存数据信息...")
  278.   
  279.   
  280. # 将保存在列表中的学生信息显示出来
  281. def show_student(studentList):
  282.     if not studentList:
  283.         print("(o@.@o) 无数据信息 (o@.@o) n")
  284.         return
  285.     format_title = "{:^6}{:^12}t{:^8}t{:^10}t{:^10}t{:^10}"
  286.     print(format_title.format("ID", "名字", "英语成绩", "Python成绩", "C语言成绩", "总成绩"))
  287.     format_data = "{:^6}{:^12}t{:^12}t{:^12}t{:^12}t{:^12}"
  288.     for info in studentList:
  289.         print(format_data.format(info.get("id"), info.get("name"), str(info.get("english")), str(info.get("python")),
  290.                                  str(info.get("c")),
  291.                                  str(info.get("english") + info.get("python") + info.get("c")).center(12)))
  292.   
  293.   
  294. if __name__ == "__main__":
  295.     main()

免责声明:文中图文均系网友发布,转载来自网络,如有侵权请联系右侧客服QQ删除,无忧屋网友发布此文仅为传递信息,不代表无忧屋平台认同其观点。