Python学生管理系统实战:基于列表与正则表达式的数据校验

方予
方予
发布时间:2026-10-12 | 3人浏览过
原创

本文详细介绍如何使用Python列表存储学生信息,实现添加、删除、查询、修改及显示功能。重点解析利用正则表达式进行学号格式校验,以及通过循环与条件判断实现成绩合法性检查。代码包含完整的交互逻辑与错误处理机制,适合Python初学者理解基础数据结构与流程控制的应用。

系统架构与核心逻辑

该学生管理系统采用Python内置的列表(List)作为数据存储容器,通过字典(Dictionary)记录每个学生的详细信息,包括姓名、学号、各科成绩及自动计算的总分。系统功能模块划分为六大核心操作:添加、删除、查询、修改、全量显示及退出。所有数据在程序运行期间驻留于内存中,未涉及持久化存储。

关键功能实现细节

1. 数据输入与合法性校验

在添加学生信息时,系统对学号和成绩进行了严格的格式验证。学号校验利用正则表达式匹配三位数字格式,并检查是否存在重复学号。成绩输入则通过循环判断是否为数字且范围在0至100之间,确保数据有效性。

2. 增删改查逻辑

  • 添加(Append):构建包含姓名、学号、语文、数学、英语及总分的字典,经校验后追加至全局列表。
  • 删除(Delete):通过学号定位学生对象,提供二次确认机制,防止误删。
  • 查询(Query):遍历列表比对学号,返回匹配的学生详情或提示未找到。
  • 修改(Modify):支持对姓名及单科成绩进行局部更新,并在修改后重新计算总分。

完整代码实现

以下是包含完整交互逻辑、输入校验及功能模块的Python代码。代码保留了原有的参数逻辑与操作顺序,可直接运行测试。

import re
student=[]
 
def appendStudentInfo():
 studentinfo={"Name":"","ID":"","语文":"","数学":"","英语":"","总分":""}
 studentinfo["Name"]=input("请输入学生姓名:")
 idflag=True
 while idflag:
  studentinfo["ID"] = input("请输入学生学号:")
  pattern=re.compile("^\d{3}$")
  if not re.match(pattern,studentinfo["ID"]):
   print("输入错误,请重新输入")
   idflag = True
  if querystudent(studentinfo["ID"])==True:
   print("该学号已经存在请重新输入")
   idflag = True
  if querystudent(studentinfo["ID"])==False and re.match(pattern,studentinfo["ID"]):
   idflag = False
 
 studentinfo["语文"]=input("请输入语文成绩:")
 while not studentinfo["语文"].isdigit() or int(studentinfo["语文"])>100 or int(studentinfo["语文"])<0:
  studentinfo["语文"] = input("输入错误,请重新输入:")
 
 studentinfo["数学"]=input("请输入数学成绩:")
 while not studentinfo["数学"].isdigit() or int(studentinfo["数学"])>100 or int(studentinfo["数学"])<0:
  studentinfo["数学"] = input("输入错误,请重新输入:")
 
 studentinfo["英语"]=input("请输入英语成绩:")
 while not studentinfo["英语"].isdigit() or int(studentinfo["英语"])>100 or int(studentinfo["英语"])<0:
  studentinfo["英语"] = input("输入错误,请重新输入:")
 
 studentinfo["总分"]=int(studentinfo["语文"])+int(studentinfo["英语"])+int(studentinfo["数学"])
 student.append(studentinfo)
 
def delstudent():
 delstudentid = input("请输入要删除的学生学号:")
 flag =False
 for item in student:
  if item["ID"]==delstudentid:
   flag = True
   print("要删除学生的相关信息如下:")
   print(item)
   select=input("是否删除:是(Y)/否(N)")
   if select=="Y" or select=="y":
    student.remove(item)
    print("删除成功")
   elif select =="N" or select=="n":
    print("取消删除")
   else:
    print("输入错误")
 if flag ==False:
  print("未搜索到该学生")
 
def querystudent(querystudentid):
 flag=False
 for item in student:
  if item["ID"]==querystudentid:
   flag=True
 return flag
 
def modifystudentifo():
 delstudentid = input("请输入要修改的学生学号:")
 
 flag=False
 for item in student:
  if item["ID"]==delstudentid:
   print("查询内容如下:")
   print(item)
   flag=True
   while True:
    modifymenu = input("请输入修改选项:1、姓名,2、语文成绩,3、数学成绩,4、英语成绩,5、退出")
    while not modifymenu.isdigit():
     modifymenu = input("输入错误,请重新输入:")
    if int(modifymenu)==1:
     item["Name"] = input("请重新输入学生姓名:")
    elif int(modifymenu)==2:
     item["语文"] = input("请重新输入学生语文成绩:")
    elif int(modifymenu)==3:
     item["数学"] = input("请重新输入学生数学成绩:")
    elif int(modifymenu)==4:
     item["英语"] = input("请重新输入学生英语成绩:")
    elif int(modifymenu) == 5:
     break
    else:
     print("输入序号无效")
   item["总分"] = int(item["语文"])+int(item["英语"])+int(item["数学"])
   print("修改结果如下:")
   print(item)
 
 if flag ==False:
  print("未搜索到该学生")
 
def allinfo():
 for item in student:
  print(item)
 
def iteminfo(querystudentid):
 for item in student:
  if item["ID"]==querystudentid:
   print("查询内容如下:")
   print(item)
 
def studentMenu():
 print("="*30)
 print("学生管理系统")
 print("1、添加学生信息")
 print("2、删除学生信息")
 print("3、查询学生信息")
 print("4、修改学生信息")
 print("5、显示所有学生信息")
 print("6、退出")
 print("="*30)
 
 
if __name__ == '__main__':
 
 while True:
  studentMenu()
  menuindex = input("请输入选项序号:")
  while not menuindex.isdigit():
   menuindex = input("输入错误,请重新输入:")
  if int(menuindex) ==1:
   appendStudentInfo()
  elif int(menuindex) ==2:
   delstudent()
  elif int(menuindex) ==3:
   querystudentid = input("请输入要查询的学生学号:")
   if querystudent(querystudentid) == True:
    iteminfo(querystudentid)
   else:print("未搜索到该学生")
  elif int(menuindex) ==4:
   modifystudentifo()
  elif int(menuindex)== 5:
   allinfo()
  elif int(menuindex) == 6:
   break
  else:
   print("输入序号无效")

总结

通过本案例,我们掌握了利用Python列表和字典管理结构化数据的方法,并学习了正则表达式在输入校验中的应用。系统通过多层循环与条件判断确保了数据的完整性与一致性,为后续引入文件存储或数据库操作奠定了基础。

以上就是Python学生管理系统开发的详细内容,更多关于Python基础教程与数据结构应用资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表