python3.6实现学生信息管理系统
简单版本学生信息管理系统,用python基础语法实现,基于python3.6
容错率很高的代码,做了很多异常处理功能,出错也不会丢失信息
启动时自动从文件中读取已有学生信息,退出时自动保存
程序分3个模块:
Menu:进行菜单管理
Student_managemant:进行学生信息管理
main:主函数
直接上代码,有注释
Menu.py
#-*-coding:UTF-8-*- importsys importos classMenu(): """ 菜单管理类 作用:向控制台打印学生信息,从控制台获取输入信息,并进行错误处理 """ defwelcome(self): """ 欢迎语句 """ print("\n欢迎来到WilliamCode学生信息管理系统") deftop_menu(self): """ 一级菜单,提示使用者输入命令 """ print(""" 请选择要进行的操作: 1、添加学生信息 2、删除学生信息 3、查询单个学生信息 4、输出所有学生信息 5、输出所有学生信息,按照成绩由高到低排名 6、保存并退出 #、操作中输入错误时,按Ctrl+C跳转到主菜单 """) deftop_menu_get_data(self): """ 获取一级菜单使用者输入的命令 """ self.data=int(input()) return[self.data] defsub_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] defsub_menu23_get_name(self): """ 收集子菜单2、3的输入信息 子菜单2、3作用是删除或者查询单个学生信息 """ print(""" 请输入学生姓名:""") self.name=input().strip() return[self.name] if__name__=='__main__': print("TestingMenuModule") 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-*- importsys importos classStudent(): """ 学生类,用于保存学生信息 只能添加__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) classStudent_Info(): """ 学生信息管理类 用于存储多个学生信息 包含属性: 列表L:元素为Student类的实例 """ def__enter__(self): """ 错误处理机制的初始化函数 调用with语句时首先调用此函数,然后将返回值返回给as后的变量 功能: 打开存储学生信息的文件,将其信息读入内存中 """ try: file=open("student_info.txt",'rt') except: print("文件未找到,请联系管理员...") exit(-1) self.L=list() foriinfile: ifi=='\n': break l=i.split() s=Student(l[0],int(l[1]),int(l[2])) self.L.append(s) print("学生信息读取成功...") file.close() returnself def__exit__(self,exc_type,exc_value,exc_tb): """ 错误处理机制的资源回收函数 跳出with语句时调用此函数 功能: 发生错误的情况下存储学生信息到文件中,防止信息丢失 关闭文件流文件 """ file=open("student_info.txt",'wt') foriinself.L: s="%s%d%d\n"%(i.name,i.age,i.score) file.write(s) file.close() defadd_student(self,S): """ 添加学生信息到列表L中 """ ifisinstance(S,Student): self.L.append(S) returnTrue returnFalse @staticmethod defprint_all(L): """ 类的静态方法 参数为:元素为Student类的列表 功能:按照表格格式打印列表中所有学生信息 """ iflen(L)==0: print("数据库中没有学生信息,请先添加学生信息") return print("\n|%s|"%("name".center(15)),end='') print("%s|"%("age".center(15)),end='') print("%s|"%("score".center(15))) foriinL: print("|%s|"%(i.name.center(15)),end='') print("%s|"%(str(i.age).center(15)),end='') print("%s|"%(str(i.score).center(15))) defprint_sorted(self): """ 将学生信息按成绩排序,并调用静态方法print_all()按照格式打印 """ sorted_list=sorted(self.L,key=key_fun,reverse=True) self.print_all(sorted_list) defkey_fun(s1): """ Student_Info类中规定排序规则的函数,按照分数排名,所以返回score """ returns1.score
main.py
#-*-coding:UTF-8-*- importsys importos importstudent_managementassm importmenu #用with语句块进行操作,即使发生错误,也能进行资源释放与数据保存工作 #减小程序bug带来的损失 withsm.Student_Info()assi: #初始化菜单类实例,打印欢迎信息 m=menu.Menu() m.welcome() whileTrue: #打印1级菜单 m.top_menu() #获取用户输入的信息,如果发生错误,则重新打印一级菜单 try: op_data=m.top_menu_get_data() except: print("输入不合法,请重新选择") continue #用户选择添加学生信息 ifop_data[0]==1: #获取并添加学生信息 try: l=m.sub_menu1() s=sm.Student(l[0],l[1],l[2]) ifnotsi.add_student(s): print("\n添加失败") print("\n信息添加成功") except: print("输入数据不合法,请重新选择") #用户选择删除学生信息 elifop_data[0]==2: #获取学生姓名并删除学生信息,flag用于判断学生信息是否被删除 #如果没有被删除,说明学生不存在,打印错误信息 name=m.sub_menu23_get_name()[0] flag=False foriinrange(len(si.L)): ifsi.L[i].name==name: delsi.L[i] flag=True break ifflag==False: print("学生不存在,删除失败") else: print("学生信息删除成功") #用户选择查询单个学生信息 elifop_data[0]==3: #获取学生姓名并查询学生信息,flag用于判断学生信息是否被打印 #如果没有被打印,说明学生不存在,打印错误信息 name=m.sub_menu23_get_name()[0] flag=False foriinrange(len(si.L)): ifsi.L[i].name==name: print(si.L[i]) flag=True ifflag==False: print("学生不存在,查询失败") #用户选择打印学生信息,直接调用静态函数打印 elifop_data[0]==4: si.print_all(si.L) #用户选择按照成绩排序打印学生信息,直接调用函数 elifop_data[0]==5: si.print_sorted() #用户选择退出,直接退出循环,程序下一步将退出with语句块 #退出with语句块后,程序自动调用Student_Info.__exit__()方法,保存学生信息,关闭文件,退出 elifop_data[0]==6: break
代码地址为:python学生信息管理系统
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。