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列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
Jul 24 Python
python发送邮件实例分享
Jul 28 Python
读取本地json文件,解析json(实例讲解)
Dec 06 Python
Python实现PS图像明亮度调整效果示例
Jan 23 Python
解决Python中pandas读取*.csv文件出现编码问题
Jul 12 Python
python selenium登录豆瓣网过程解析
Aug 10 Python
基于Python快速处理PDF表格数据
Jun 03 Python
python 检测图片是否有马赛克
Dec 01 Python
python 调用Google翻译接口的方法
Dec 09 Python
selenium.webdriver中add_argument方法常用参数表
Apr 08 Python
Python打包exe时各种异常处理方案总结
May 18 Python
Python进程间的通信之语法学习
Apr 11 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对象相关知识总结
2017/04/09 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
javascript函数中的arguments参数
2010/08/01 Javascript
brook javascript框架介绍
2011/10/10 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
JS实现重新加载当前页面
2016/11/29 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
微信小程序实现团购或秒杀批量倒计时
2020/11/01 Javascript
Nodejs处理异常操作示例
2018/12/25 NodeJs
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
Vue数字输入框组件的使用方法
2019/10/19 Javascript
python实现socket客户端和服务端简单示例
2014/02/24 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
Python使用configparser读取ini配置文件
2020/05/25 Python
Python requests模块安装及使用教程图解
2020/06/30 Python
python cookie反爬处理的实现
2020/11/01 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
实习护理工作自我评价
2013/09/25 职场文书
电子商务专业学生的学习自我评价
2013/10/27 职场文书
cf战队收人口号
2014/06/21 职场文书
应届生面试求职信
2014/07/02 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
2014年党总支工作总结
2014/12/18 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
歌舞青春观后感
2015/06/10 职场文书
仓库管理制度范本
2015/08/04 职场文书
党风廉政建设心得体会
2019/05/21 职场文书