简单版本学生信息管理系统,用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
新闻热点
疑难解答