编写一个学生管理系统,使用面向对象编程思想
系统支持4个功能:
查询全部学生
新增一个学生
根据学号修改成绩
根据学号删除学生
该项目分为3个类,学生类、学生数据库类以及学生管理系统类
学生类有4个属性,学号、姓名、性别、成绩以及一个获取自身信息的函数
学生数据库类用于存储学生类实例,并提供增删改查各种函数
学生管理系统类用于展示菜单、接收用户输入、展示功能结果
学生学号不允许重复,学生顺序有序
已经完善过了
class Student:
def __init__(self, id, name, gender, score):
self.id = id
self.name = name
self.gender = gender
self.score = score
def get_info(self):
return f"学号:{self.id},姓名:{self.name},性别:{self.gender},成绩:{self.score}"
class StudentDB:
def __init__(self):
self.students = []
def add_student(self, student):
for s in self.students:
if s.id == student.id:
return False
self.students.append(student)
self.students.sort(key=lambda x: x.id)
return True
def remove_student(self, id):
for i, s in enumerate(self.students):
if s.id == id:
self.students.pop(i)
return True
return False
def update_score(self, id, score):
for s in self.students:
if s.id == id:
s.score = score
return True
return False
def query_all(self):
for s in self.students:
print(s.get_info())
def query_by_id(self, id):
for s in self.students:
if s.id == id:
print(s.get_info())
return
print("未找到该学生。")
class StudentSystem:
def __init__(self):
self.db = StudentDB()
def show_menu(self):
print("学生管理系统")
print("1、查询全部学生")
print("2、新增一个学生")
print("3、根据学号修改成绩")
print("4、根据学号删除学生")
print("0、退出系统")
def run(self):
while True:
self.show_menu()
choice = input("请选择功能:")
if choice == "1":
self.db.query_all()
elif choice == "2":
id = input("请输入学号:")
name = input("请输入姓名:")
gender = input("请输入性别:")
score = input("请输入成绩:")
student = Student(id, name, gender, score)
if self.db.add_student(student):
print("学生添加成功。")
else:
print("学生已存在,添加失败。")
elif choice == "3":
id = input("请输入学号:")
score = input("请输入成绩:")
if self.db.update_score(id, score):
print("成绩修改成功。")
else:
print("未找到该学生,修改失败。")
elif choice == "4":
id = input("请输入学号:")
if self.db.remove_student(id):
print("学生删除成功。")
else:
print("未找到该学生,删除失败。")
elif choice == "0":
print("bye")
break
else:
print("输入有误,请重新输入。")
if __name__ == "__main__":
system = StudentSystem()
system.run()
不知道你这个问题是否已经解决, 如果还没有解决的话:我可以通过以下步骤实现学生学号不允许重复、学生顺序有序的功能:
class Student:
__count = 0 # 用于保存学生对象的实例化个数,设为私有属性
def __init__(self, id, name, gender, score):
self.id = id
self.name = name
self.gender = gender
self.score = score
Student.__count += 1
class StudentDB:
__students = {} # 私有的字典属性,用于保存学生对象
def add_student(self, student):
# 判断学号是否已存在
if student.id in StudentDB.__students:
print("学号已存在,添加失败!")
else:
StudentDB.__students[student.id] = student
def delete_student(self, id):
if id in StudentDB.__students:
del StudentDB.__students[id]
else:
print("学号不存在,删除失败!")
def modify_student(self, id, new_score):
if id in StudentDB.__students:
StudentDB.__students[id].score = new_score
else:
print("学号不存在,修改失败!")
def get_ordered_students(self):
ordered_student_list = sorted(StudentDB.__students.values(), key=lambda x: x.id)
return ordered_student_list
class Student:
__count = 0 # 用于保存学生对象的实例化个数,设为私有属性
def __init__(self, name, gender, score):
Student.__count += 1
self.id = Student.__count # 通过调用私有属性获取学生的唯一序号
self.name = name
self.gender = gender
self.score = score
```python class StudentManagementSystem: def show_menu(self): menu = ''' ====== 学生管理系统 ====== 1. 查询全部学生 2. 新增一个学生 3. 根据学号修改成绩 4. 根据学号删除学生 0. 退出系统 ========================= ''' print(menu)
def run(self):
student_db = StudentDB() # 创建学生数据库实例
while True:
self.show_menu()
choice = input("请选择功能:")
if choice == '1':
students = student_db.get_ordered_students()
for student in students:
print(f"学号:{student.id}, 姓名:{student.name}, 性别:{student.gender}, 成