张三想要使用Python语言做一个学员管理系统程序,使用面向对象编程思想完成学生信
息管理系统的开发,涉及到的属性有姓名、性别、年龄、手机号、学科A成绩、学科B成绩和总成
绩。张三目前只会添加学生信息和查询某个学生信息,缺少查询全部、保存、删除、修改四个基础
功能,除此之外,张三还有统计总成绩和计算平均分扩展功能。
(1)添加学生信息:
输入要添加的学生的姓名、性别、年龄、手机号、学科A成绩、学科B成绩,临时保存到
列表中。
(2)查询学生信息:
输入的目标学生姓名,如果学生存在,输出该学员所有信息;如果不存在,返回错误。
(3)加载学员信息:
每次进入该系统,自动加载文件保存的数据。
(1)查询所有学生信息
(2)保存学生信息
(3)删除学生信息
(4)修改学生信息
统计每个学生的总成绩,计算学科A和学科B的平均分
创建项⽬⽬录,例如: StudentManagerSystem
程序⽂件如下:
程序⼊⼝⽂件: main.py
学员⽂件: student.py
管理系统⽂件: managerSystemDemo.py
main.py
from managerSystem import * # 导⼊入managerSystem模块if __name__ == '__main__': # 启动学员管理理系统student_manager = StudentManager()student_manager.run()
student.py
class Student(object):def __init__(self, name, gender, tel, age,scores):self.name = nameself.gender = genderself.tel = telself.age = ageself.scores = scoresself.all_score = ""def __str__(self):return f'{self.name}, {self.gender}, {self.tel}, {self.age},{self.scores},{self.all_score}'
managerSystemDemo.py
from student import * # 导⼊入student模块class StudentManager(object):def __init__(self):self.student_list = [] # 建立一个存储数据用的列表def run(self): # 程序入口函数self.load_student() # 加载学员信息while True:self.show_menu() # 显示功能菜单menun_num = int(input("请输入您需要的功能序号:")) # 用户输入功能序号# 根据输入的序号,执行不同的功能if menun_num == 1: # 添加学员self.add_student()self.save_student()elif menun_num == 2: # 查询学员信息self.search_student()elif menun_num == 3: # 显示所有学员信息self.show_student()elif menun_num == 4: # 保存学员信息self.save_student()elif menun_num == 5: # 删除学员self.del_student()self.save_student()elif menun_num == 6: # 修改学员信息self.modify_student()self.save_student()elif menun_num == 7: # 统计成绩self.data_statistic()elif menun_num == 8: # 退出系统break# 定义功能函数def show_menu(self): # 显示功能菜单print("请选择如下功能------------")print("1:添加学员")print("2:查询学员信息")print("3:显示所有学员")print("4:保存学员信息")print("5:信息删除学员")print("6:修改学员信息")print("7:统计成绩")print("8:退出系统")def add_student(self): # 添加学员# 用户输⼊姓名、性别、手机号、年龄name = input("请输入您的姓名")gender = input("请输入您的性别")tel = input("请输入您的手机号")age = input("请输入您的年龄")scores = []score1 = input('请输入学科A成绩:')score2 = input('请输入学科B成绩:')scores.append(score1)scores.append(score2)student = Student(name, gender, tel, age, scores) # 创建学员对象self.student_list.append(student) # 将该学员对象添加到列表print(self.student_list) # 打印信息print(student) # 打印信息def del_student(self): # 删除学员del_name = input('请输⼊要删除的学员姓名:') # 用户输入目标学员姓名# 如果用户输入的目标学员存在则删除,否则提示学员不不存在for i in self.student_list: # 遍历学生信息列表if i.name == del_name: # 查找学生是否存在self.student_list.remove(i) # 删除学生信息breakelse:print("查无此人!")print(self.student_list) # 打印学生列表,验证删除功能def modify_student(self): # 修改学员信息modify_name = input('请输⼊要修改的学员的姓名:') # 用户输入目标学员姓名# 如果用户输入的目标学员存在,则修改信息,否则提示学员不存在for i in self.student_list: # 遍历学生信息列表if i.name == modify_name: # 查找学生是否存在# 更改学员信息i.name = input('请输⼊学员姓名:')i.gender = input('请输⼊学员性别:')i.tel = input('请输⼊学员手机号:')i.age = input('请输入学员年龄:')scores = []score1 = input('请输入学科A成绩:')score2 = input('请输入学科B成绩:')scores.append(score1)scores.append(score2)print(f'姓名:{i.name}, 性别:{i.gender}, 手机号:{i.tel}, 年龄:{i.age}, 成绩A:{i.scores[0]}, 成绩B:{i.scores[0]}') # 打印学生信息,验证是否更改成功breakelse:print('查无此人!')def search_student(self): # 查询学员信息search_name = input('请输⼊要查询的学员的姓名:') # 用户输入目标学员姓名# 如果用户输入的目标学员存在,则打印学员信息,否则提示学员不存在for i in self.student_list: # 遍历学生信息列表if i.name == search_name: # 查找学生是否存在print(f'姓名:{i.name}, 性别:{i.gender}, 手机号:{i.tel}, 年龄:{i.age}, 成绩A:{i.scores[0]}, 成绩B:{i.scores[0]}') # 打印学员信息breakelse:print('查无此⼈!')def show_student(self): # 显示所有学员信息print('姓名\t性别\t\t手机号\t年龄\t\t学科A成绩\t\t学科B成绩') # 打印信息名称for i in self.student_list: # 遍历学生信息列表print(f'{i.name}\t{i.gender}\t\t{i.tel}\t\t{i.age}\t\t{i.scores[0]}\t\t\t{i.scores[0]}') # 打印学员信息def save_student(self): # 保存学员信息f = open('student.data', 'w', encoding='utf-8') # 打开文件new_list = [i.__dict__ for i in self.student_list] # 将学员数据转换成列表字典数据print(new_list) # 打印信息f.write(str(new_list)) # 转换成字符串,存入文档f.close() # 关闭文件def load_student(self): # 加载学员信息# 尝试以"r"模式打开数据文件,文件不存在则提示用户;文件存在(没有异常)则读取数据try:f = open('student.data', 'r', encoding='utf-8')except:f = open('student.data', 'w', encoding='utf-8')else:data = f.read() # 读取数据# 转换数据类型,再转换为字典为对象后存储到学员列表new_list = eval(data)self.student_list = [Student(i['name'], i['gender'], i['tel'], i['age'], i['scores']) for i in new_list]finally:f.close() # 关闭文件def data_statistic(self):scoresA = 0scoresB = 0sum = 0count = 0print('姓名\t\t学科A成绩\t\t学科B成绩\t\t总成绩') # 打印信息名称for i in self.student_list: # 遍历学生信息列表count = count + 1scoresA = scoresA + int(i.scores[0])scoresB = scoresB + int(i.scores[1])sum = int(i.scores[0]) + int(i.scores[1])print(f'{i.name}\t\t{i.scores[0]}\t\t{i.scores[1]}\t\t\t{sum}')print('学科A平均成绩\t\t学科B平均成绩') # 打印信息名称print(f'{scoresA / count}\t\t\t{scoresB / count}')