# python学生信息管理系统 **Repository Path**: hellloyou/python-student-information-system ## Basic Information - **Project Name**: python学生信息管理系统 - **Description**: No description available - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 1 - **Created**: 2021-09-05 - **Last Updated**: 2024-06-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README python学生信息管理系统 功能有: 学车信息录入,展示,查询,修改,删除,排序, 数据持久化写入文件, 本项目每个方法均有注释 每个文件各司其职,低耦合 开源不易,点个start 目录 [模块说明 ](#_Toc5077 ) [代码: ](#_Toc27683 ) [main.py ](#_Toc14788 ) [# 格式化输出学生数组 ](#_Toc7983 ) [# 添加学生 ](#_Toc20024 ) [# 查找学生 ](#_Toc1199 ) [# 删除学生 ](#_Toc12866 ) [# 编辑学生 ](#_Toc9109 ) [# 排序 ](#_Toc23206 ) [# 统计 ](#_Toc26820 ) [# 展示所有学生信息 ](#_Toc26407 ) [# 退出 ](#_Toc27063 ) [# 菜单功能选择 ](#_Toc16653 ) [# 菜单输出 ](#_Toc21863 ) [student.py ](#_Toc25337 ) [database.py ](#_Toc19794 ) [# 读取student.txt ](#_Toc15432 ) [# 读取添加学生 ](#_Toc28629 ) [# 保存学生数组 ](#_Toc29838 ) [# 读取删除学生 ](#_Toc26166 ) [# 读取编辑学生信息 ](#_Toc14324 ) [# 学号读取查找学生信息 ](#_Toc7180 ) [# 姓名读取查找学生信息 ](#_Toc15229 ) [# 获取全部学生信息 ](#_Toc13038 ) [open_operation.py ](#_Toc24703 ) [运行截图 ](#_Toc7309 ) [菜单 ](#_Toc22738 ) [添加学生 ](#_Toc22179 ) [添加学生-学号重复 ](#_Toc31105 ) [查找学生信息 ](#_Toc24417 ) [学号查询 ](#_Toc6150 ) [姓名查询 ](#_Toc28222 ) [删除学生 ](#_Toc28240 ) [修改学生信息 ](#_Toc7258 ) [排序 ](#_Toc9262 ) [学号升序排序 ](#_Toc16589 ) [英语降序排序 ](#_Toc20687 ) [统计学生信息 ](#_Toc10395 ) [显示所有学生信息 ](#_Toc7538 ) [退出 ](#_Toc20264 ) # **模块说明** main :主程序,即菜单页所展示功能 DataBase :数据持久化工具类,负责读取和写入student.txt Student:学生信息类,使用装饰器实现getter和setter方法,在设置数据时进行类型转化 OpenOperation:自定义上下文管理器 # **代码:** ## **main.py** ***\*import\**** sys ***\*import\**** os ***\*from\**** database ***\*import\**** DataBase ***\*from\**** student ***\*import\**** Student **#** **格式化输出学生数组**** ** ***\*def\**** print_student_info(student_list): ***\*if\**** isinstance(student_list, list): ***\*if\**** len(student_list) == 0: print(***\*'''\*******\* \*******\*=========================\*******\* \**** ***\*没有符合条件的学生信息\*******\* \*******\*=========================\*******\* \**** ***\*'''\****) ***\*else\****: print(***\*"{:<12}\*******\*\t\*******\*{:<12}\*******\*\t\*******\*{:<12}\*******\*\t\*******\*{:<12}\*******\*\t\*******\*{:<12}\*******\*\t\*******\*{:<12}"\****.format( ***\*"学号"\****, ***\*"姓名"\****, ***\*"English成绩"\****, ***\*"python成绩"\****, ***\*"java成绩"\****, ***\*"总成绩"\****)) ***\*for\**** i ***\*in\**** student_list: print(***\*"{:<12}\*******\*\t\*******\*{:<12}\*******\*\t\*******\*{:<12g}\*******\*\t\*******\*{:<12g}\*******\*\t\*******\*{:<12g}\*******\*\t\*******\*{:<12g}"\****.format( i.stuid, i.name, i.english_grade, i.python_grade, i.java_grade, i.total_grade)) ***\*else\****: print(***\*"没有符合条件的学生信息"\****) **# 添加学生**** ** ***\*def\**** add_student(): stuid = input(***\*"请输入学号:"\****) name = input(***\*"请输入姓名:"\****) english_grade = input(***\*"请输入英语成绩:"\****) python_grade = input(***\*"请输入python成绩:"\****) java_grade = input(***\*"请输入java成绩:"\****) ***\*try\****: student = Student(stuid, name, english_grade, python_grade, java_grade) DataBase.add_student_info(student) **# DataBase.add_student_info(student)**** ** ***\*except\**** Exception ***\*as\**** e: print(***\*"输入内容不合法"\****, e) isContinue = input(***\*"是否继续添加学生y/n(其他任意键)"\****) ***\*if\**** isContinue ***\*is\**** ***\*'y'\****: add_student() **# 查找学生** ** *****\*def\**** query_student(): print(***\*'''\*******\* \*******\*=====================================\*******\* \**** ***\*1.学号查询\*******\* \**** ***\*2.姓名查询\*******\* \**** ***\*0.返回菜单(其他任意键)\*******\* \*******\*=====================================\*******\* \**** ***\*'''\****) num = input(***\*"请输入选择::"\****) ***\*if\**** num == ***\*'1'\****: stuid = input(***\*"请输入学号:"\****) student_list = DataBase.query_student_info_by_stuid(stuid) print_student_info(student_list) ***\*elif\**** num == ***\*'2'\****: name = input(***\*"请输入姓名:"\****) student_list = DataBase.query_student_info_by_name(name) print_student_info(student_list) ***\*else\****: ***\*pass\*******\* \**** os.system(***\*"pause"\****) **# 删除学生** ** *****\*def\**** delete_student(): stuid = input(***\*"请输入学号:"\****) student_list = DataBase.query_student_info_by_stuid(stuid) print_student_info(student_list) ***\*if\**** len(student_list) != 0: num = input(***\*"是否删除该学生y/n(其他任意键)"\****) ***\*if\**** num == ***\*'y'\****: DataBase.delete_student_info_by_stuid(stuid) num = input(***\*"是否继续删除学生y/n(其他任意键)"\****) ***\*if\**** num == ***\*'y'\****: delete_student() **# 编辑学生** ** *****\*def\**** edit_student(): stuid = input(***\*"请输入学号:"\****) student_list = DataBase.query_student_info_by_stuid(stuid) print_student_info(student_list) ***\*if\**** len(student_list) != 0: print(***\*'''\*******\* \*******\*=====================================\*******\* \**** ***\*1.修改改学生信息\*******\* \**** ***\*0.退出(其他任意键)\*******\* \*******\*=====================================\*******\* \**** ***\*'''\****) num = input(***\*"请选择功能"\****) ***\*if\**** num == ***\*'1'\****: student = student_list[0] student.name = input(***\*"请输入修改后的姓名:"\****) student.english_grade = input(***\*"请输入修改后的English成绩:"\****) student.python_grade = input(***\*"请输入修改后的python成绩:"\****) student.java_grade = input(***\*"请输入修改后的java成绩:"\****) DataBase.edit_student_info(student) num = input(***\*"是否继续修改学生信息y/n(其他任意键)"\****) ***\*if\**** num == ***\*'y'\****: edit_student() **# 排序** ** *****\*def\**** sort_student(): sortType = ***\*False\*******\* \**** print(***\*'''\*******\* \**** ***\*======================================\*******\* \**** ***\*1.升序\*******\* \**** ***\*2.降序\*******\* \**** ***\*0.返回菜单(其它任意键)\*******\* \**** ***\*======================================\*******\* \**** ***\*'''\****) num = input(***\*"请选择排序方式:"\****) ***\*if\**** num == ***\*'1'\****: sortType = ***\*False\*******\* \**** ***\*elif\**** num == ***\*'2'\****: sortType = ***\*True\*******\* \**** ***\*else\****: ***\*return\*******\* \*******\* \**** print(***\*'''\*******\* \*******\*======================================\*******\* \**** ***\*1.学号排序\*******\* \**** ***\*2.姓名排序\*******\* \**** ***\*3.English成绩排序\*******\* \**** ***\*4.python成绩排序\*******\* \**** ***\*5.java成绩排序\*******\* \**** ***\*6.总成绩排序\*******\* \**** ***\*0.返回菜单(其它任意键)\*******\* \*******\*======================================\*******\* \**** ***\*'''\****) num = input(***\*"请选择功能:"\****) student_list = DataBase.get_student_list() numbers = { ***\*'1'\****: ***\*lambda\**** x: list(x.stuid), ***\*'2'\****: ***\*lambda\**** x: list(x.name), ***\*'3'\****: ***\*lambda\**** x: x.english_grade, ***\*'4'\****: ***\*lambda\**** x: x.python_grade, ***\*'5'\****: ***\*lambda\**** x: x.java_grade, ***\*'6'\****: ***\*lambda\**** x: x.total_grade, } method = numbers.get(num) ***\*if\**** method: student_list.sort(key=method, reverse=sortType) print_student_info(student_list) ***\*else\****: ***\*return\*******\* \*******\* \**** num = input(***\*"继续排序y/n(其它任意键)"\****) ***\*if\**** num == ***\*'y'\****: sort_student() **# 统计** ** *****\*def\**** statistics_student_info(): student_list = DataBase.get_student_list() student_num = len(student_list) registered_num = 0 total_grade = 0.0 average_grade = 0.0 ***\*for\**** item ***\*in\**** student_list: ***\*if\**** item.english_grade < 60 ***\*or\**** item.python_grade < 60 ***\*or\**** item.java_grade < 60: registered_num = registered_num + 1 total_grade = total_grade + item.total_grade average_grade = total_grade / student_num print(***\*'''\*******\* \*******\*=======================================================\*******\* \*******\*学生总人数:{}\*******\* \*******\*挂科人数:{}\*******\* \*******\*平均总成绩:{:.2f}\*******\* \*******\*总成绩:{:g}\*******\* \*******\*=======================================================\*******\* \**** ***\*'''\****.format(student_num, registered_num, average_grade, total_grade)) os.system(***\*'pause'\****) **# 展示所有学生信息** ** *****\*def\**** show_all_student_info(): student_list = DataBase.get_student_list() print_student_info(student_list) os.system(***\*'pause'\****) **#** **退出** ***\*def\**** quit_sys(): num = input(***\*"是否确认退出y/n(其它任意键)"\****) ***\*if\**** num == ***\*'y'\****: print(***\*'''\*******\* \**** ***\*=======================\*******\* \**** ***\*退出成功\*******\* \**** ***\*欢迎下次使用\*******\* \**** ***\*========================\*******\* \**** ***\*'''\****) sys.exit(0) **#** **菜单功能选择** ***\*def\**** input_result(num): numbers = { ***\*'1'\****: add_student, ***\*'2'\****: query_student, ***\*'3'\****: delete_student, ***\*'4'\****: edit_student, ***\*'5'\****: sort_student, ***\*'6'\****: statistics_student_info, ***\*'7'\****: show_all_student_info, ***\*'0'\****: quit_sys } method = numbers.get(num) ***\*if\**** method: method() ***\*else\****: print(***\*"输入不合法"\****) os.system(***\*"cls"\****) **#** **菜单输出** ***\*def\**** menu(): print(***\*'''\*******\* \**** ***\*学生信息管理系统\*******\* \*******\*======================================\*******\* \**** ***\*1.录入学生信息\*******\* \**** ***\*2.查找学生信息\*******\* \**** ***\*3.删除学生信息\*******\* \**** ***\*4.修改学生信息\*******\* \**** ***\*5.排序\*******\* \**** ***\*6.统计学生信息\*******\* \**** ***\*7.显示所有学生信息\*******\* \**** ***\*0.退出\*******\* \*******\*======================================\*******\* \**** ***\*'''\****) num = input(***\*"请选择功能:"\****) input_result(num) ***\*if\**** __name__ == ***\*"__main__"\****: DataBase.init() ***\*while True\****: menu() ## **student.py** ***\*class\**** Student: **# 姓名**** ** @property ***\*def\**** name(self): ***\*return\**** self._name **# 学号**** ** @property ***\*def\**** stuid(self): ***\*return\**** self._stuid **# 英语成绩**** ** @property ***\*def\**** english_grade(self): ***\*return\**** self._english_grade **# python成绩**** ** @property ***\*def\**** python_grade(self): ***\*return\**** self._python_grade **# java成绩**** ** @property ***\*def\**** java_grade(self): ***\*return\**** self._java_grade **# 总成绩成绩**** ** @property ***\*def\**** total_grade(self): ***\*return\**** self.python_grade + self.english_grade + self.java_grade ***\*def\**** __init__(self, stuid, name, english_grade, python_grade, java_grade): self.stuid = stuid self.name = name self.english_grade = english_grade self.python_grade = python_grade self.java_grade = java_grade @stuid.setter ***\*def\**** stuid(self, value): self._stuid = value @name.setter ***\*def\**** name(self, value): self._name = value @english_grade.setter ***\*def\**** english_grade(self, value): self._english_grade = float(value) @python_grade.setter ***\*def\**** python_grade(self, value): self._python_grade = float(value) @java_grade.setter ***\*def\**** java_grade(self, value): self._java_grade = float(value) ## **database.py** ***\*from\**** open_operation ***\*import\**** OpenOperation ***\*from\**** student ***\*import\**** Student ***\*class\**** DataBase: student_list = [] **#** **读取student.txt** @staticmethod ***\*def\**** init(): ***\*with\**** OpenOperation(***\*'student.txt'\****, ***\*'r'\****) ***\*as\**** f: ***\*for\**** line ***\*in\**** f.readlines(): ***\*if\**** line == ***\*''\****: ***\*return\*******\* \**** tmp = line.split(***\*','\****) student = Student(tmp[0], tmp[1], tmp[2], tmp[3], tmp[4]) DataBase.student_list.append(student) **#** **读取添加学生** @staticmethod ***\*def\**** add_student_info(student): ***\*for\**** item ***\*in\**** DataBase.student_list: ***\*if\**** item.stuid == student.stuid: print(***\*'''\*******\* \*******\*=============================\*******\* \**** ***\*添加失败\*******\* \**** ***\*该学号已存在\*******\* \*******\*============================\*******\* \**** ***\*'''\****) ***\*return\*******\* \*******\* \**** ***\*with\**** OpenOperation(***\*'student.txt'\****, ***\*'a'\****) ***\*as\**** f: f.write(***\*"{},{},{},{},{}\*******\*\r\*******\*"\****.format( student.stuid, student.name, student.english_grade, student.python_grade, student.java_grade)) DataBase.student_list.append(student) **#** **保存学生数组** @staticmethod ***\*def\**** save_student_list(): ***\*with\**** OpenOperation(***\*'student.txt'\****, ***\*'w'\****) ***\*as\**** f: ***\*for\**** item ***\*in\**** DataBase.student_list: f.write(***\*"{},{},{},{},{}\*******\*\r\*******\*"\****.format( item.stuid, item.name, item.english_grade, item.python_grade, item.java_grade)) **#** **读取删除学生** @staticmethod ***\*def\**** delete_student_info_by_stuid(stuid): ***\*for\**** item ***\*in\**** DataBase.student_list: ***\*if\**** item.stuid == stuid: DataBase.student_list.remove(item) DataBase.save_student_list() print(***\*"删除成功"\****) ***\*return\*******\* \**** **#** **读取编辑学生信息** ***\* \**** @staticmethod ***\*def\**** edit_student_info(student): ***\*for\**** item ***\*in\**** DataBase.student_list: ***\*if\**** item.stuid == student.stuid: item = student DataBase.save_student_list() print(***\*"修改成功"\****) ***\*return\*******\* \*******\* \**** **#** **学号读取查找学生信息** @staticmethod ***\*def\**** query_student_info_by_stuid(stuid): query_result = [] ***\*for\**** item ***\*in\**** DataBase.student_list: ***\*if\**** item.stuid == stuid: query_result.append(item) ***\*return\**** query_result **#** **姓名读取查找学生信息** @staticmethod ***\*def\**** query_student_info_by_name(name): query_result = [] ***\*for\**** item ***\*in\**** DataBase.student_list: ***\*if\**** item.name == name: query_result.append(item) ***\*return\**** query_result **#** **获取全部学生信息** @staticmethod ***\*def\**** get_student_list(): ***\*return\**** DataBase.student_list ## **open_operation.py** **# 自定义上下文管理器**** *****\*class\**** OpenOperation(object): ***\*def\**** __init__(self, filename, mode): self.filename = filename self.mode = mode ***\*def\**** __enter__(self): self.fileobj = open(self.filename, self.mode) ***\*return\**** self.fileobj ***\*def\**** __exit__(self, exc_type, exc_value, traceback): ​ self.fileobj.close() ​ ***\*if\**** exc_type: ​ print(***\*'文件error'\****) ​ ***\*else\****: ​ ***\*pass\**** # **运行截图** ## **菜单** ![img](file:///C:\Users\ksyyq\AppData\Local\Temp\ksohtml16112\wps6.jpg) ## **添加学生** ![img](file:///C:\Users\ksyyq\AppData\Local\Temp\ksohtml16112\wps7.jpg) ## **添加学生-学号重复** ![img](file:///C:\Users\ksyyq\AppData\Local\Temp\ksohtml16112\wps8.jpg)、 ## **查找学生信息** ![img](file:///C:\Users\ksyyq\AppData\Local\Temp\ksohtml16112\wps9.jpg) ## **学号查询** ![img](file:///C:\Users\ksyyq\AppData\Local\Temp\ksohtml16112\wps10.jpg) ## **姓名查询** ![img](file:///C:\Users\ksyyq\AppData\Local\Temp\ksohtml16112\wps11.jpg) ## **删除学生** ![img](file:///C:\Users\ksyyq\AppData\Local\Temp\ksohtml16112\wps12.jpg) ## **修改学生信息** ![img](file:///C:\Users\ksyyq\AppData\Local\Temp\ksohtml16112\wps13.jpg) ## **排序** ![img](file:///C:\Users\ksyyq\AppData\Local\Temp\ksohtml16112\wps14.jpg) ## **学号升序排序** ![img](file:///C:\Users\ksyyq\AppData\Local\Temp\ksohtml16112\wps15.jpg) ## **英语降序排序** ![img](file:///C:\Users\ksyyq\AppData\Local\Temp\ksohtml16112\wps16.jpg) ## **统计学生信息** ![img](file:///C:\Users\ksyyq\AppData\Local\Temp\ksohtml16112\wps17.jpg) ## **显示所有学生信息** ![img](file:///C:\Users\ksyyq\AppData\Local\Temp\ksohtml16112\wps18.jpg) ## **退出** ![img](file:///C:\Users\ksyyq\AppData\Local\Temp\ksohtml16112\wps19.jpg)