赞
踩
student.py文件,用于学生属性类的定义,包的声明
- import time
-
- class Student:
- def __init__(self, id, name, gender, english, python):
- self.id = id
- self.name = name
- self.gender = gender
- self.english = english
- self.python = python
- self.total = english + python
-
- def __str__(self):
- return f'{self.id},{self.name},{self.gender},{self.english},{self.python},{self.total}'
main.py文件,用于函数的执行
- from managerSystem import *
-
- if __name__ == "__main__":
- student_manager = StudentManager()
- student_manager.run()
managerSystem.py,用于各种函数的实现,有成绩不能大于100以及学号不能相同的限制,对多为学生姓名相同的情况做了处理
- from student import *
-
-
- class StudentManager:
- def __init__(self):
- self.student_list = []
-
- def run(self):
- # 加载学生信息
- self.load_student()
-
- while True:
- # 打印菜单
- self.show_menu()
-
- try:
- choice = int(input("请选择:"))
- except ValueError:
- print("输入无效,请输入整数类型")
- else:
- if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
- if choice == 0:
- answer = input("您确定要退出系统吗(输入y结束):")
- if answer == "y":
- print("谢谢使用!!!")
- break
- else:
- continue
- elif choice == 1:
- self.add_student()
- elif choice == 2:
- self.del_student()
- elif choice == 3:
- self.modify_student()
- elif choice == 4:
- self.search_student()
- elif choice == 5:
- self.sort_student()
- elif choice == 6:
- self.total_student()
- time.sleep(0.2)
- elif choice == 7:
- self.show_student()
- input("请输入任意键继续...")
- else:
- print("输入错误,请重新输入")
-
- def add_student(self):
- global id,name,gender,english,python
-
- while True:
- # 输入学号
- while True:
- id = input("请输入ID:")
- if not id:
- print("输入错误,请重新输入")
- continue
-
- # 不能有相同学号的学生
- for i in self.student_list:
- if i.id == id:
- print("学号与其他学生重复,请重新输入")
- break
- else:
- break
-
- # 输入姓名
- while True:
- name = input("请输入姓名:")
- if not name:
- print("输入错误,请重新输入")
- continue
- else:
- break
-
- # 输入性别
- while True:
- gender = input("请输入性别:")
- if not gender:
- print("输入无效,请重新输入")
- continue
- else:
- break
-
- # 输入英语成绩
- while True:
- try:
- english = int(input("请输入英语成绩:"))
- if english > 100:
- print("请输入100以下的英语成绩")
- continue
- else:
- break
- except ValueError:
- print("输入错误,请输入整数类型")
- continue
-
- # 输入python成绩
- while True:
- try:
- python = int(input("请输入python成绩:"))
- if python > 100:
- print("请输入100以下的python成绩")
- continue
- else:
- break
- except ValueError:
- print("输入错误,请输入整数类型")
- continue
-
- # 创建学生对象
- student = Student(id, name, gender, english, python)
-
- # 将学生保存到列表中
- self.student_list.append(student)
-
- # 保存到文件
- self.save_student()
-
- print("保存成功")
- answer = input("是否继续输入(输入y继续):")
- if answer == 'y':
- continue
- else:
- break
-
- def del_student(self):
- # 用于存储多个学生的列表
- student_list = []
-
- # 与用户输入的姓名相同的学生个数
- count = 0
-
- # 用户选择删除的第choise个学生
- choise = 0
-
- # 没有任何学生的处理方法
- if len(self.student_list) == 0:
- print("无任何学生信息")
- else:
- # 用户输入需要删除学生的姓名
- while True:
- del_name = input("请输入要删除的学生姓名:")
- if del_name:
- # 寻找是否有该学生
- for i in self.student_list:
- if i.name == del_name:
- student_list.append(i)
- count += 1
-
- # 找不到该学生
- if count == 0:
- print("查无此人!")
- break
-
- # 与用户输入的姓名相同的学生大于等于一位时
- elif count > 1:
- print("学号\t\t姓名\t\t性别\t\t英语成绩\t\tpython成绩\t\t总成绩")
- for i in student_list:
- print(f"{i.id}\t\t{i.name}\t\t{i.gender}\t\t{i.english}\t\t{i.python}\t\t{i.total}")
- while True:
- try:
- choise = int(input("请选择需要删除的学生为第几位学生:"))
- except ValueError:
- print("输入错误,请输入整数类型")
- continue
- else:
- if count >= choise > 0:
- break
- else:
- print("输入错误,请重新输入")
- continue
- elif count == 1:
- pass
- # 删除该学生
- self.student_list.remove(student_list[choise - 1])
-
- # 保存到文件
- self.save_student()
-
- print("删除成功")
- break
- else:
- print("输入错误,请重新输入")
- continue
-
- def modify_student(self):
- global name,id,gender,english,python
-
- # 用于存储多个学生的列表
- student_list = []
-
- # 与用户输入的姓名相同的学生个数
- count = 0
-
- # 用户选择删除的第choise个学生
- choise = 0
-
- # 没有任何学生的处理方法
- if len(self.student_list) == 0:
- print("无任何学生信息")
- else:
- # 用户输入需要修改学生的姓名
- while True:
- modify_name = input("请输入要修改的学生的姓名:")
- if modify_name:
- # 寻找是否有该学生
- for i in self.student_list:
- if i.name == modify_name:
- student_list.append(i)
- count += 1
-
- # 找不到该学生
- if count == 0:
- print("查无此人!")
- break
-
- # 与用户输入的姓名相同的学生大于等于一位时
- elif count > 1:
- print("学号\t\t姓名\t\t性别\t\t英语成绩\t\tpython成绩\t\t总成绩")
- for i in student_list:
- print(f"{i.id}\t\t{i.name}\t\t{i.gender}\t\t{i.english}\t\t{i.python}\t\t{i.total}")
- while True:
- try:
- choise = int(input("请选择需要修改的学生为第几位学生:"))
- except ValueError:
- print("输入错误,请输入整数类型")
- continue
- else:
- if count >= choise > 0:
- break
- else:
- print("输入错误,请重新输入")
- continue
- elif count == 1:
- pass
-
- # 删除该学生
- self.student_list.remove(student_list[choise - 1])
-
- # 输入学号
- while True:
- id = input("请输入ID:")
- if not id:
- print("输入错误,请重新输入")
- continue
-
- # 查看是否有其他学生有相同的学号
- for item in self.student_list:
- if item.id == id:
- print("学号与其他学生重复,请重新输入")
- break
- else:
- break
-
- # 输入姓名
- while True:
- name = input("请输入姓名:")
- if not name:
- print("输入错误,请重新输入")
- continue
- else:
- break
-
- # 输入性别
- while True:
- gender = input("请输入性别:")
- if not gender:
- print("输入错误,请重新输入")
- continue
- else:
- break
-
- # 输入英语成绩
- while True:
- try:
- english = int(input("请输入英语成绩:"))
- if english > 100:
- print("请输入100以下的英语成绩")
- continue
- else:
- break
- except ValueError:
- print("输入错误,请输入整数类型")
- continue
-
- # 输入python成绩
- while True:
- try:
- python = int(input("请输入python成绩:"))
- if python > 100:
- print("请输入100以下的python成绩")
- continue
- else:
- break
- except ValueError:
- print("输入错误,请输入整数类型")
- continue
-
- # 创建学生对象
- student = Student(id, name, gender, english, python)
-
- # 将学生保存到列表中
- self.student_list.append(student)
-
- # 保存到文件
- self.save_student()
-
- print("修改成功!")
- break
- else:
- print("输入错误,请重新输入")
- continue
-
- def search_student(self):
- # 用于存储多个学生的列表
- student_list = []
-
- # 与用户输入的姓名相同的学生个数
- count = 0
-
- # 没有任何学生的处理方法
- if len(self.student_list) == 0:
- print("无任何学生信息")
- else:
- # 用户输入需要查找学生的姓名
- while True:
- search_name = input("请输入要查询的学生的姓名:")
-
- if search_name:
- # 寻找该学生
- for i in self.student_list:
- if i.name == search_name:
- student_list.append(i)
- count += 1
-
- # 找不到人
- if count == 0:
- print("查无此人")
- break
-
- # 找到了人
- else:
- print("学号\t\t姓名\t\t性别\t\t英语成绩\t\tpython成绩\t\t总成绩")
- # 输出学生信息
- for i in student_list:
- print(f"{i.id}\t\t{i.name}\t\t{i.gender}\t\t{i.english}\t\t{i.python}\t\t{i.total}")
-
- input("请输入任意键继续...")
- break
- else:
- print("输入错误,请重新输入")
- continue
-
- def sort_student(self):
- global sort_choise_bool,cmpfun
-
- # 没有任何学生的处理方法
-
- if len(self.student_list) == 0:
- print("无任何学生信息")
-
- else:
- # 选择升序或降序
- sort_choise = input("请选择(0.升序 1.降序):")
- if sort_choise == '1':
- sort_choise_bool = True
- elif sort_choise == '0':
- sort_choise_bool = False
- else:
- print("输入错误,请重新输入")
- self.sort_student()
-
- # 排序!!!!!!!!!!!!!!!!!!!!
- while True:
- mode = input("请选择排序方式(1.按照学号排序 2.按照姓名排序 3.按照性别排序 4.按照英语成绩排序 5.按照python成绩排序 6.按照总成绩排序):")
- try:
- import operator
- except ImportError:
- cmpfun = lambda x: x.count
- else:
- if mode == '1':
- cmpfun = operator.attrgetter("id")
- elif mode == '2':
- cmpfun = operator.attrgetter("name")
- elif mode == '3':
- cmpfun = operator.attrgetter("gender")
- elif mode == '4':
- cmpfun = operator.attrgetter("english")
- elif mode == '5':
- cmpfun = operator.attrgetter("python")
- elif mode == '6':
- cmpfun = operator.attrgetter("total")
- else:
- print("输入错误,请重新输入")
- continue
-
- # 列表排序
- self.student_list.sort(key=cmpfun, reverse=sort_choise_bool)
-
- # 保存到文件
- self.save_student()
-
- # 展示结果
- self.show_student()
-
- input("请输入任意键继续...")
- break
-
- def total_student(self):
- print(len(self.student_list))
-
- def show_student(self):
- print('学号\t\t姓名\t\t性别\t\t英语成绩\t\tpython成绩\t\t总成绩')
- for i in self.student_list:
- print(f"{i.id}\t\t{i.name}\t\t{i.gender}\t\t{i.english}\t\t{i.python}\t\t{i.total}")
-
- @staticmethod
- def show_menu():
- print("====================学生信息管理系统===================")
- print("------------------------功能菜单---------------------")
- print(" 1.录入学生信息 ")
- print(" 2.删除学生信息 ")
- print(" 3.修改学生信息 ")
- print(" 4.查询学生信息 ")
- print(" 5.排序学生信息 ")
- print(" 6.统计学生人数 ")
- print(" 7.显示学生信息 ")
- print("------------------------0.退出----------------------")
-
- def load_student(self):
- global f
-
- #尝试以r打开文件,如果文件不存在则以w创建文件
- try:
- f = open('student.data', 'r')
- except:
- f = open('student.data', 'w')
- else:
- data = f.read()# 类型为str
-
- '''!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 转换数据类型为列表'''
- new_list = eval(data)# 类型为list
-
- #存储到学生列表中
-
- self.student_list = [Student(i['id'],
- i['name'],
- i['gender'],
- i['english'],
- i['python']) for i in new_list]
- finally:
- f.close()
-
- def save_student(self):
- with open("student.data", "w") as fp:
- '''!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 写入数据不能是学生对象的内存地址,需要把学生数据类型转化为列表字典数据再储存'''
- new_list = [i.__dict__ for i in self.student_list]
-
- #需要转化为str类型
- fp.write(str(new_list))
初学者,见识浅陋,请多指教。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。