python实现简易学生信息管理系统


Posted in Python onApril 05, 2020

本文实例为大家分享了python实现学生信息管理系统的具体代码,供大家参考,具体内容如下

简易学生信息管理系统主要功能有

1 录入学生信息
2 查找学生信息
3 删除学生信息
4 修改学生信息
5 排序
6 统计学生总人数
7 显示所有学生信息
0 退出系统

系统运行效果

python实现简易学生信息管理系统

主菜单的代码方法:

# Author: dry
# 开发时间:2019/9/11
# 开发工具:PyCharm
import re # 导入正则表达式模块
import os # 导入操作系统模块
filename = "student.txt" # 学生信息保存文件
def menu():
 # 输出菜单
 print('''
 ---------------学生信息管理系统------------
 ==================功能菜单================
   1 录入学生信息
   2 查找学生信息
   3 删除学生信息
   4 修改学生信息
   5 排序
   6 统计学生总人数
   7 显示所有学生信息
   0 退出系统
 ======================================= 
   说明:通过数字选择菜单
 =======================================
 ''')

系统主方法:

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()

录入学生信息方法:

'''录入学生信息'''
def insert():
 studentList = [] # 保存学生信息的列表
 mark = True # 是否继续添加
 while mark:
 id = input("请输入学生ID(如1001):")
 if not id:
  break
 name = input("请输入名字:")
 if not name:
  break
 try:
  english = int(input("请输入英语成绩:"))
  python = int(input("请输入python成绩:"))
  c = int(input("请输入C语言成绩:"))
 except:
  print("输入无效,不是整型数值,请重新输入信息")
  continue
  # 将输入的学生信息保存到字典
 student = {"id": id, "name": name, "english": english, "python": python, "c": c}
 studentList.append(student) # 将学生字典添加到列表中
 inputList = input("是否继续添加?(y/n):")
 if inputList == 'y': # 继续添加
  mark = True
 else:
  mark = False
 save(studentList) # 将学生信息保存到文件
 print("学生信息录入完毕!!!")

保存学生信息方法:

'''将学生信息保存到文件'''
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() # 关闭文件

查询学生信息方法:

'''查询学生信息'''
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 "":
   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

显示学生信息方法

'''将保存在列表中的学生信息显示出来'''
def show_student(studentList):
 if not studentList:
 print("无效的数据")
 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{:^10}\t{:^10}\t{:^10}\t{:10}"
 for info in studentList:
 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)))

删除学生信息方法:

'''删除学生信息'''
def delete():
 mark = True # 标记是否循环
 while mark:
 studentId = input("请输入要删除的学生ID:")
 if studentId is not "": # 判断要删除的学生ID是否存在
  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 # 退出删除学生信息操作

修改学生信息方法:

'''修改学生信息'''
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(student + "\n") # 将修改信息写入到文件
  print("修改成功")
  else:
  wfile.write(student) # 将未修改的信息写入文件
 mark = input("是否继续修改其他学生信息?(y/n):")
 if mark == "y":
 modify()

学生信息排序方法:

'''排序'''
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 # 标记变量,为False时表示升序,为True时表示降序
 elif ascORdesc == "1":
 ascORdescBool = True
 else:
 print("您输入的信息有误,请重新输入!")
 sort()
 mode = input("请选择排序方式(1按英语成绩排序;2按python成绩排序;3按C语言成绩排序;0按总成绩排序):")
 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) # 显示排序结果

统计学生总数方法:

'''统计学生总数'''
def total():
 if os.path.exists(filename):
 with open(filename, 'r') as rfile:
  student_old = rfile.readlines()
  if student_old:
  print("一共有%d名学生!" % len(student_old))
  else:
  print("还没有录入学生信息")
 else:
 print("暂未保存数据信息")

显示所有学生信息方法:

'''显示所有学生信息'''
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("暂未保存数据信息")

开始函数:

if __name__ == '__main__':
 main()

完整代码如下:

# Author: dry
# 开发时间:2019/9/11
# 开发工具:PyCharm
import re # 导入正则表达式模块
import os # 导入操作系统模块

filename = "student.txt" # 学生信息保存文件


def menu():
 # 输出菜单
 print('''
 ---------------学生信息管理系统------------
 ==================功能菜单================
   1 录入学生信息
   2 查找学生信息
   3 删除学生信息
   4 修改学生信息
   5 排序
   6 统计学生总人数
   7 显示所有学生信息
   0 退出系统
 ======================================= 
   说明:通过数字选择菜单
 =======================================
 ''')


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()


'''录入学生信息'''


def insert():
 studentList = [] # 保存学生信息的列表
 mark = True # 是否继续添加
 while mark:
 id = input("请输入学生ID(如1001):")
 if not id:
  break
 name = input("请输入名字:")
 if not name:
  break
 try:
  english = int(input("请输入英语成绩:"))
  python = int(input("请输入python成绩:"))
  c = int(input("请输入C语言成绩:"))
 except:
  print("输入无效,不是整形数值,请重新输入信息")
  continue
  # 将输入的学生信息保存到字典
 student = {"id": id, "name": name, "english": english, "python": python, "c": c}
 studentList.append(student) # 将学生字典添加到列表中
 inputList = input("是否继续添加?(y/n):")
 if inputList == 'y': # 继续添加
  mark = True
 else:
  mark = False
 save(studentList) # 将学生信息保存到文件
 print("学生信息录入完毕!!!")


'''将学生信息保存到文件'''


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() # 关闭文件


'''查询学生信息'''


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 "":
   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


'''将保存在列表中的学生信息显示出来'''


def show_student(studentList):
 if not studentList:
 print("无效的数据")
 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{:^10}\t{:^10}\t{:^10}\t{:10}"
 for info in studentList:
 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)))


'''删除学生信息'''


def delete():
 mark = True # 标记是否循环
 while mark:
 studentId = input("请输入要删除的学生ID:")
 if studentId is not "": # 判断要删除的学生ID是否存在
  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 # 退出删除学生信息操作


'''修改学生信息'''


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(student + "\n") # 将修改信息写入到文件
  print("修改成功")
  else:
  wfile.write(student) # 将未修改的信息写入文件
 mark = input("是否继续修改其他学生信息?(y/n):")
 if mark == "y":
 modify()


'''排序'''


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 # 标记变量,为False时表示升序,为True时表示降序
 elif ascORdesc == "1":
 ascORdescBool = True
 else:
 print("您输入的信息有误,请重新输入!")
 sort()
 mode = input("请选择排序方式(1按英语成绩排序;2按python成绩排序;3按C语言成绩排序;0按总成绩排序):")
 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) # 显示排序结果


'''统计学生总数'''


def total():
 if os.path.exists(filename):
 with open(filename, 'r') as rfile:
  student_old = rfile.readlines()
  if student_old:
  print("一共有%d名学生!" % len(student_old))
  else:
  print("还没有录入学生信息")
 else:
 print("暂未保存数据信息")


'''显示所有学生信息'''


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("暂未保存数据信息")


if __name__ == '__main__':
 main()

关于管理系统的更多内容请点击《管理系统专题》进行学习

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
浅谈机器学习需要的了解的十大算法
Dec 15 Python
python使用Apriori算法进行关联性解析
Dec 21 Python
python中计算一个列表中连续相同的元素个数方法
Jun 29 Python
浅析Python 读取图像文件的性能对比
Mar 07 Python
python如何爬取网站数据并进行数据可视化
Jul 08 Python
8种用Python实现线性回归的方法对比详解
Jul 10 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
Aug 05 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
Sep 23 Python
python OpenCV GrabCut使用实例解析
Nov 11 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
Python数据正态性检验实现过程
Apr 18 Python
vue.js刷新当前页面的实例讲解
Dec 29 Python
Python字符串大小写转换拼接删除空白
Sep 19 #Python
python BlockingScheduler定时任务及其他方式的实现
Sep 19 #Python
python实现简单成绩录入系统
Sep 19 #Python
淘宝秒杀python脚本 扫码登录版
Sep 19 #Python
基于python的selenium两种文件上传操作实现详解
Sep 19 #Python
Python分割训练集和测试集的方法示例
Sep 19 #Python
python Dijkstra算法实现最短路径问题的方法
Sep 19 #Python
You might like
sphinx增量索引的一个问题
2011/06/14 PHP
完美解决thinkphp唯一索引重复时出错的问题
2017/03/31 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
IE8 中使用加速器(Activities)
2010/05/14 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
javascript实现数独解法
2015/03/14 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
详解JS面向对象编程
2016/01/24 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
jQuery超简单遮罩层实现方法示例
2018/09/06 jQuery
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
2020/08/05 Javascript
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python实现发送email的几种常用方法
2014/08/18 Python
python 重定向获取真实url的方法
2018/05/11 Python
python数据预处理之数据标准化的几种处理方式
2019/07/17 Python
python通过链接抓取网站详解
2019/11/20 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
Ejb技术面试题
2015/04/29 面试题
日语专业毕业生自荐信
2013/11/11 职场文书
致跳高运动员加油稿
2014/02/12 职场文书
党的群众路线教育实践活动心得体会
2014/03/03 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
浅谈Go语言多态的实现与interface使用
2021/06/16 Golang
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis
Python开发简易五子棋小游戏
2022/05/02 Python