python简易版学生管理系统

python3.6实现学生信息管理系统

简单版本学生信息管理系统,用python基础语法实现,基于python 3.6

容错率很高的代码,做了很多异常处理功能,出错也不会丢失信息

启动时自动从文件中读取已有学生信息,退出时自动保存

程序分3个模块:

Menu:进行菜单管理

Student_managemant:进行学生信息管理

main:主函数

直接上代码,有注释 

Menu.py

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • # -*- coding: UTF-8 -*-
  • import sys
  • import os
  •  
  • class Menu():
  •  """
  •  菜单管理类
  •  作用:向控制台打印学生信息,从控制台获取输入信息,并进行错误处理
  •  """
  •  
  •  
  •  def welcome(self):
  •  """
  •   欢迎语句
  •  """
  •  print("\n欢迎来到 WilliamCode 学生信息管理系统")
  •  
  •  def top_menu(self):
  •  """
  •   一级菜单,提示使用者输入命令
  •  """
  •  print("""
  • 请选择要进行的操作:
  •  1、添加学生信息
  •  2、删除学生信息
  •  3、查询单个学生信息
  •  4、输出所有学生信息
  •  5、输出所有学生信息,按照成绩由高到低排名
  •  6、保存并退出
  •  #、操作中输入错误时,按Ctrl+C跳转到主菜单
  •  """)
  •  
  •  def top_menu_get_data(self):
  •  """
  •   获取一级菜单使用者输入的命令
  •  """
  •  self.data = int(input())
  •  return [self.data]
  •  
  •  
  •  def sub_menu1(self):
  •  """
  •   打印子菜单1并收集信息
  •   子菜单1用于添加学生信息
  •  """
  •  print("""
  •  正在添加学生信息:
  •  请输入学生姓名:""")
  •  self.name = input().strip()
  •  
  •  print("""
  •  请输入学生年龄:""")
  •  self.age = int(input())
  •  
  •  print("""
  •  请输入学生成绩""")
  •  self.score = int(input())
  •  
  •  return [self.name, self.age, self.score]
  •  
  •  
  •  def sub_menu23_get_name(self):
  •  """
  •   收集子菜单2、3的输入信息
  •   子菜单2、3作用是删除或者查询单个学生信息
  •  """
  •  print("""
  •  请输入学生姓名:""")
  •  self.name = input().strip()
  •  return [self.name]
  •  
  •  
  • if __name__ == '__main__':
  •  
  •  print("Testing Menu Module")
  •  menu = Menu()
  •  print(menu.top_menu())
  •  print(menu.top_menu_get_data())
  •  print(menu.sub_menu1())
  •  print(menu.sub_menu23_get_name())
  • student_managemeng.py

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • # -*- coding: UTF-8 -*-
  • import sys
  • import os
  •  
  • class Student():
  •  """
  •  学生类,用于保存学生信息
  •  只能添加__slots__ = ['name', 'age', 'score']中的三个属性,如需修改,请改变该列表内容
  •  name: 学生姓名
  •  age : 学生年龄
  •  score:学生成绩
  •  """
  •  
  •  
  •  
  •  __slots__ = ['name', 'age', 'score']
  •  def __init__(self, name_str, age_int, score_int):
  •  """
  •   学生类的初始化函数
  •   name_str :学生姓名
  •   age_int :学生年龄
  •   score_int:学生成绩
  •  """
  •  self.name = name_str
  •  self.age = age_int
  •  self.score = score_int
  •  
  •  def __str__(self):
  •  """
  •   Student类转为字符串信息的函数
  •   调试时使用
  •  """
  •  return "%s : %s\n%s : %d\n %s: %d\n" % ("name".center(10),self.name, "age".center(10),self.age, "score".center(10),self.score)
  •  
  •  
  •  
  • class Student_Info():
  •  """
  •  学生信息管理类
  •  用于存储多个学生信息
  •  包含属性:
  •  列表L:元素为Student类的实例
  •  """
  •  
  •  def __enter__(self):
  •  """
  •   错误处理机制的初始化函数
  •   调用with语句时首先调用此函数,然后将返回值返回给as后的变量
  •   功能:
  •   打开存储学生信息的文件,将其信息读入内存中
  •  """
  •  try:
  •   file = open("student_info.txt",'rt')
  •  
  •  except:
  •   print("文件未找到,请联系管理员...")
  •   exit(-1)
  •  self.L = list()
  •  for i in file:
  •   if i == '\n':
  •   break
  •   l = i.split()
  •   s = Student(l[0], int(l[1]), int(l[2]))
  •   self.L.append(s)
  •  print("学生信息读取成功...")
  •  file.close()
  •  return self
  •  
  •  
  •  def __exit__(self, exc_type, exc_value, exc_tb):
  •  """
  •   错误处理机制的资源回收函数
  •   跳出with语句时调用此函数
  •   功能:
  •   发生错误的情况下存储学生信息到文件中,防止信息丢失
  •   关闭文件流文件
  •  """
  •  
  •  file = open("student_info.txt",'wt')
  •  for i in self.L:
  •   s = "%s %d %d\n" % (i.name, i.age, i.score)
  •   file.write(s)
  •  file.close()
  •  
  •  def add_student(self, S):
  •  """
  •   添加学生信息到列表L中
  •  """
  •  if isinstance(S, Student):
  •   self.L.append(S)
  •   return True
  •  return False
  •  
  •  @staticmethod
  •  def print_all(L):
  •  """
  •   类的静态方法
  •   参数为:元素为Student类的列表
  •   功能:按照表格格式打印列表中所有学生信息
  •  """
  •  
  •  if len(L) == 0:
  •   print("数据库中没有学生信息,请先添加学生信息")
  •   return
  •  print("\n|%s|" % ("name".center(15)), end='')
  •  print("%s|" % ("age".center(15)), end = '')
  •  print("%s|" % ("score".center(15)))
  •  for i in L:
  •   print("|%s|" % (i.name.center(15)), end='')
  •   print("%s|" % (str(i.age).center(15)), end = '')
  •   print("%s|" % (str(i.score).center(15)))
  •  
  •  
  •  
  •  def print_sorted(self):
  •  """
  •   将学生信息按成绩排序,并调用静态方法print_all()按照格式打印
  •  """
  •  sorted_list = sorted(self.L, key = key_fun, reverse = True)
  •  self.print_all(sorted_list)
  •  
  •  
  •  
  • def key_fun(s1):
  •  """
  •  Student_Info类中规定排序规则的函数,按照分数排名,所以返回score
  •  """
  •  return s1.score
  • main.py

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • # -*- coding: UTF-8 -*-
  • import sys
  • import os
  • import student_management as sm
  • import menu
  •  
  • #用with语句块进行操作,即使发生错误,也能进行资源释放与数据保存工作
  • #减小程序bug带来的损失
  • with sm.Student_Info() as si:
  •  
  •  #初始化菜单类实例,打印欢迎信息
  •  m = menu.Menu()
  •  m.welcome()
  •  while True:
  •  
  •  #打印1级菜单
  •  m.top_menu()
  •  
  •  #获取用户输入的信息,如果发生错误,则重新打印一级菜单
  •  try:
  •   op_data = m.top_menu_get_data()
  •  except:
  •   print("输入不合法,请重新选择")
  •   continue
  •  
  •  #用户选择添加学生信息
  •  if op_data[0] == 1:
  •  
  •   #获取并添加学生信息
  •   try:
  •   l = m.sub_menu1()
  •   s = sm.Student(l[0], l[1], l[2])
  •   if not si.add_student(s):
  •    print("\n添加失败")
  •   print("\n信息添加成功")
  •  
  •   except:
  •   print("输入数据不合法,请重新选择")
  •  
  •  #用户选择删除学生信息
  •  elif op_data[0] == 2:
  •  
  •   #获取学生姓名并删除学生信息,flag用于判断学生信息是否被删除
  •   #如果没有被删除,说明学生不存在,打印错误信息
  •   name = m.sub_menu23_get_name()[0]
  •   flag = False
  •   
  •   for i in range(len(si.L)):
  •   if si.L[i].name == name:
  •    del si.L[i]
  •    flag = True
  •    break
  •   if flag == False:
  •   print("学生不存在,删除失败")
  •   else:
  •   print("学生信息删除成功")
  •  
  •  #用户选择查询单个学生信息
  •  elif op_data[0] == 3:
  •   #获取学生姓名并查询学生信息,flag用于判断学生信息是否被打印
  •   #如果没有被打印,说明学生不存在,打印错误信息
  •   name = m.sub_menu23_get_name()[0]
  •   flag = False
  •   for i in range(len(si.L)):
  •   if si.L[i].name == name:
  •    print(si.L[i])
  •    flag = True
  •   if flag == False:
  •   print("学生不存在,查询失败")
  •  
  •  #用户选择打印学生信息,直接调用静态函数打印
  •  elif op_data[0] == 4:
  •   si.print_all(si.L)
  •  
  •  #用户选择按照成绩排序打印学生信息,直接调用函数
  •  elif op_data[0] == 5:
  •   si.print_sorted()
  •  
  •  #用户选择退出,直接退出循环,程序下一步将退出with语句块
  •  #退出with语句块后,程序自动调用Student_Info.__exit__()方法,保存学生信息,关闭文件,退出
  •  elif op_data[0] == 6:
  •   break
  • 代码地址为:python学生信息管理系统

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。

    原文链接:https://blog.csdn.net/WilliamCode/article/details/85378895