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 相关文章推荐
Python中使用MELIAE分析程序内存占用实例
Feb 18 Python
在Python中调用ggplot的三种方法
Apr 08 Python
python 换位密码算法的实例详解
Jul 19 Python
Django中ORM表的创建和增删改查方法示例
Nov 15 Python
解决Mac安装scrapy失败的问题
Jun 13 Python
利用Python将数值型特征进行离散化操作的方法
Nov 06 Python
只需7行Python代码玩转微信自动聊天
Jan 27 Python
Python2.7实现多进程下开发多线程示例
May 31 Python
详解pandas中MultiIndex和对象实际索引不一致问题
Jul 23 Python
详解Pytorch显存动态分配规律探索
Nov 17 Python
通用的Django注册功能模块实现方法
Feb 05 Python
移除Selenium中window.navigator.webdriver值
Jun 10 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
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
php查询whois信息的方法
2015/06/08 PHP
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
JS格式化数字金额用逗号隔开保留两位小数
2013/10/18 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
javascript数组去重方法终极总结
2014/06/05 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
jquery实现简单Tab切换菜单效果
2020/07/17 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
2019/06/17 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
JavaScript实现京东快递单号查询
2020/11/30 Javascript
[04:40]DOTA2-DPC中国联赛1月26日Recap集锦
2021/03/11 DOTA
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
详解Python的三种拷贝方式
2020/02/11 Python
Django-imagekit的使用详解
2020/07/06 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
css3 线性渐变和径向渐变示例附图
2014/04/08 HTML / CSS
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
活动志愿者自荐信
2014/01/27 职场文书
毕业自我评价
2014/02/05 职场文书
餐饮部总监岗位职责范文
2014/02/13 职场文书
医德医风学习心得体会
2016/01/25 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书
CSS3鼠标悬浮过渡缩放效果
2021/04/17 HTML / CSS