简单版本学生信息管理系统,用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输出学生信息_python3.6实现学生信息管理系统相关推荐

  1. python输出去空格_Python3基础 print(,end=) 输出内容的末尾加入空格

    ? ???????Python : 3.7.0 ?????????OS : Ubuntu 18.04.1 LTS ????????IDE : PyCharm 2018.2.4 ??????Conda ...

  2. python输出空心长方形_python3打印空心三角*形状

    第一步:打印所有星星 i = 0 while i < 10: j = 1 while j < 20: print("*",end='') j +=1 i +=1 pri ...

  3. python 工资管理软件_Python3实现的简单工资管理系统示例

    本文实例讲述了Python3实现的简单工资管理系统.分享给大家供大家参考,具体如下: 工资管理系统要求: 1. 查询员工工资 2. 修改员工工资 3. 增加新员工记录 4. 退出 执行代码: #!/u ...

  4. python输出学生姓名成绩学号_打印所有学生的姓名,学号,性别,年龄,成绩信息...

    **# 综合训练报告** **姓名:齐佳民 学号:1403050116 专业:安全工程(矿山通风安全) 班级:通风14-1班 指导讲师:邓立军 职称:讲师 2015年05月16日** **目录** 1 ...

  5. python输出学生信息_python实现学生信息系统

    '''一.需求:进入系统显示系统功能界面,功能如下: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.退出功能''' #定义功能界面函数 definfo_pr ...

  6. 编写一段程序录入 N 个学生的信息包括姓名、性别、年龄和成绩;要求:1.按照成绩由小到大的顺序输出,如果成绩相同则按学号由小到大的顺序输出;2.计算 N 个学生成绩的平均值;

    题目和要求: 编写一段程序录入 N 个学生的信息包括姓名.性别.年龄和成绩: 要求:1.按照成绩由小到大的顺序输出,如果成绩相同则按年龄由小到大的顺序 输出: 2.计算 N 个学生成绩的平均值: 注: ...

  7. c语言输出编号姓名成绩,c语言 学生信息包括,学号,姓名,五门功课的成绩.输入输出。总分排序...

    c语言 学生信息包括,学号,姓名,五门功课的成绩.输入输出.总分排序 來源:互聯網  2010-06-16 18:12:05  評論 分類: 電腦/網絡 >> 程序設計 >> ...

  8. 基于python 使用tk模块和mysql实现学生信息管理系统

    学生信息管理系统 好久没有发文啦,经过一段时间的学习,有所收获,写了个小项目,记录一下学习过程.好啦,废话不多说,我们直接说实现,看效果. 首先系统是有三个视图,一个管理员,一个教师,一个学生,运行效 ...

  9. python字典输入学生信息_用Python创建一个学生字典并可以查询其中信息

    展开全部 你可以试试这个---------------------------------------------------------- # -*- coding:UTF-8 -*- studen ...

最新文章

  1. Elasticsearch - 索引管理
  2. Linux 交换空间优化(swap 优化)(积极使用交换空间占比,可能会使程序运行缓慢!)
  3. python里面返回上一步_Python中的这3个骚操作你会吗?
  4. 剑指offer之36-40题解
  5. controller控制器怎么写_I2C控制器编程_框架
  6. QT子线程与主线程的信号槽通信
  7. 前端学习(2848):鼠标点击事件
  8. leetcode206 反转链表
  9. MyBatis Plus 批量数据插入功能,yyds!
  10. 给所有开发人员的 11 条忠告(第 4 条亮了)
  11. android手机慢,Android手机运行慢?!教你一秒“提速”50%
  12. 2021-08-08三大范式与JDBC
  13. 8848Android 版本,【8848钛金手机M5评测】拍照配置保持Android阵容顶配堆积_8848 钛金手机M5_手机评测-中关村在线...
  14. nfine配置oracle,nfine去后门版和数据库说明
  15. SDN技术的发展应用任重而道远
  16. http请求webservice接口
  17. ACL2021_Enhancing Entity Boundary Detection for Better Chinese Named Entity Recognition
  18. Mac电脑如何转化二维码?方法了来了
  19. unity Camera控制(上帝视角)
  20. PS调色精灵ps插件

热门文章

  1. 同城上门家政保洁预约维修服务小程序保姆月嫂派单洗车预约系统小程序
  2. 小作品--linux下设计MATLAB GUI 实现美图秀秀的功能
  3. 对四大杀毒软件的评价(卡巴、麦咖啡、诺顿、nod32)
  4. FITC-PEG-SH,荧光素-聚乙二醇-巯基的用途:用于修饰氨基酸,蛋白质等
  5. 元宇宙:未来我们的每一个日常行为是否都能成为赚钱工具?
  6. 巴菲特致股东的一封信:1994年
  7. 【办公类-】周计划-洗牌提取《集体运动》名称
  8. 绝地求生今日服务器维护,绝地求生5月10日维护公告
  9. 解决系统下以管理员身份运行的程序接收不到拖放文件消息[WM_DROPFILES]问题的方法
  10. 磷酸铁锂电池保护芯片S-8209A系列的应用示例