Python:学生信息管理系统(附下载链接)

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

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

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

 

程序分3个模块:

Menu:进行菜单管理

Student_managemant:进行学生信息管理

main:主函数

直接上代码,有注释

 

Menu.py

# -*- coding: UTF-8 -*-
import sys
import osclass 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 osclass 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_strself.age = age_intself.score = score_intdef __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':breakl = i.split()s = Student(l[0], int(l[1]), int(l[2]))self.L.append(s)print("学生信息读取成功...")file.close()return selfdef __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 Truereturn False@staticmethoddef print_all(L):"""类的静态方法参数为:元素为Student类的列表功能:按照表格格式打印列表中所有学生信息"""if len(L) == 0:print("数据库中没有学生信息,请先添加学生信息")returnprint("\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 = Falsefor i in range(len(si.L)):if si.L[i].name == name:del si.L[i]flag = Truebreakif flag == False:print("学生不存在,删除失败")else:print("学生信息删除成功")#用户选择查询单个学生信息elif op_data[0] == 3:#获取学生姓名并查询学生信息,flag用于判断学生信息是否被打印#如果没有被打印,说明学生不存在,打印错误信息name = m.sub_menu23_get_name()[0]flag = Falsefor i in range(len(si.L)):if si.L[i].name == name:print(si.L[i])flag = Trueif 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

代码已上传至百度网盘,地址为:

链接:https://pan.baidu.com/s/1VYvI24tHC0tst6tjt3wP4w 
提取码:evb2 
 

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部