侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Python  /  管理员 发布于 7年前   230

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

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

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

程序分3个模块:

Menu:进行菜单管理

Student_managemant:进行学生信息管理

main:主函数

直接上代码,有注释 

Menu.py

# -*- coding: UTF-8 -*-import sysimport 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 sysimport 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 sysimport osimport student_management as smimport 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基于滑动平均思想实现缺失数据填充的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客