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中matplotlib中文乱码解决办法
May 12 Python
Python回文字符串及回文数字判定功能示例
Mar 20 Python
python保存文件方法小结
Jul 27 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
ubuntu上安装python的实例方法
Sep 30 Python
Python3.7安装keras和TensorFlow的教程图解
Jun 18 Python
django连接mysql数据库及建表操作实例详解
Dec 10 Python
python匿名函数lambda原理及实例解析
Feb 07 Python
tensorflow安装成功import tensorflow 出现问题
Apr 16 Python
浅谈Python中的继承
Jun 19 Python
pycharm配置python 设置pip安装源为豆瓣源
Feb 05 Python
python自动化调用百度api解决验证码
Apr 13 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使用json_encode对变量json编码
2014/04/07 PHP
PHP获取星期几的常用方法小结
2018/12/18 PHP
javascript TextArea动态显示剩余字符
2008/10/22 Javascript
document.documentElement的一些使用技巧
2013/04/18 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
2013/07/08 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
Angular模板表单校验方法详解
2017/08/11 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
python僵尸进程产生的原因
2017/07/21 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
python实现Virginia无密钥解密
2019/03/20 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
木工主管岗位职责
2013/12/08 职场文书
大学生创业计划书
2014/08/14 职场文书
街道务虚会发言材料
2014/10/20 职场文书
关于颐和园的导游词
2015/01/30 职场文书
公司地址变更通知
2015/04/25 职场文书
Go语言入门exec的基本使用
2022/05/20 Golang