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


Posted in Python onFebruary 21, 2019

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

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

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

程序分3个模块:

Menu:进行菜单管理

Student_managemant:进行学生信息管理

main:主函数

直接上代码,有注释 

Menu.py

# -*- 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

# -*- 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

# -*- 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学生信息管理系统

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

Python 相关文章推荐
Python yield 使用浅析
May 28 Python
python压缩文件夹内所有文件为zip文件的方法
Jun 20 Python
Python3.6 Schedule模块定时任务(实例讲解)
Nov 09 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
利用python打开摄像头及颜色检测方法
Aug 03 Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
Pycharm+Python+PyQt5使用详解
Sep 25 Python
Python hashlib模块实例使用详解
Dec 24 Python
使用pycharm和pylint检查python代码规范操作
Jun 09 Python
用pandas划分数据集实现训练集和测试集
Jul 20 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 #Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
Feb 21 #Python
python+mysql实现学生信息查询系统
Feb 21 #Python
使用Python+wxpy 找出微信里把你删除的好友实例
Feb 21 #Python
利用Python对文件夹下图片数据进行批量改名的代码实例
Feb 21 #Python
Python 微信之获取好友昵称并制作wordcloud的实例
Feb 21 #Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 #Python
You might like
PHP中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
PHP检测移动设备类mobile detection使用实例
2014/04/14 PHP
php中header设置常见文件类型的content-type
2015/06/23 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
2016/11/22 PHP
jquery 上下滚动广告
2009/06/17 Javascript
javascript计时器事件使用详解
2014/01/07 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
2015/08/24 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
2015/10/16 Javascript
JS表格组件神器bootstrap table详解(强化版)
2016/05/26 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
Vue父组件调用子组件事件方法
2018/02/23 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
python连接mysql并提交mysql事务示例
2014/03/05 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
财务会计应届生求职信
2013/11/24 职场文书
公司营业员的自我评价
2014/03/04 职场文书
马智宇婚礼主持词
2014/03/22 职场文书
2015年元旦文艺汇演主持词
2014/03/26 职场文书
计算机毕业生求职信
2014/06/10 职场文书
森林防火标语
2014/06/23 职场文书
2016学习全国教书育人楷模先进事迹心得体会
2016/01/21 职场文书
SQL IDENTITY_INSERT作用案例详解
2021/08/23 MySQL
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python