让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言回答: 根据需求,我们需要设计一个学生选修课程系统,具有添加、查询、显示、编辑、删除、统计、保存和读取的功能。以下是一种设计方案:
- 学生类(Student): 属性:学号、姓名、性别、年龄、系别、班级、联系方式 方法:无
- 课程类(Course): 属性:课程代码、课程名称、课程性质、总学时、学分、开课学期、选修人数 方法:无
- 管理类(System): 属性:学生列表、课程列表 方法:
- 添加新的学生记录:输入学生信息,生成唯一的学号,将学生信息加入学生列表中。
- 添加新的课程记录:输入课程信息,生成唯一的课程代码,将课程信息加入课程列表中。
- 根据学号或姓名查询学生记录:输入查询条件,循环遍历学生列表,返回查询结果。
- 根据课程代码或名称查询课程记录:输入查询条件,循环遍历课程列表,返回查询结果。
- 显示所有学生和课程记录:依次输出学生列表和课程列表中的所有记录。
- 根据学号或课程代码查询记录,编辑对应学生或课程的信息。
- 根据学号或课程代码删除学生或课程记录。
- 统计学生数、课程数、某门课程的选修人数和学生列表。
- 将所有学生和课程记录保存到文本文件中。
- 从文本文件中读取学生和课程记录到系统中。 以下是示例代码,用于说明实现方法:
class Student:
def __init__(self, id, name, gender, age, department, clazz, contact):
self.id = id
self.name = name
self.gender = gender
self.age = age
self.department = department
self.clazz = clazz
self.contact = contact
class Course:
def __init__(self, code, name, type, total_hours, credit, semester, num_students):
self.code = code
self.name = name
self.type = type
self.total_hours = total_hours
self.credit = credit
self.semester = semester
self.num_students = num_students
class System:
def __init__(self):
self.students = []
self.courses = []
def add_student(self, name, gender, age, department, clazz, contact):
id = len(self.students) + 1 # generate unique id
student = Student(id, name, gender, age, department, clazz, contact)
self.students.append(student)
def add_course(self, name, type, total_hours, credit, semester, num_students):
code = len(self.courses) + 1 # generate unique code
course = Course(code, name, type, total_hours, credit, semester, num_students)
self.courses.append(course)
def find_student(self, id=None, name=None):
for s in self.students:
if (id is not None and s.id == id) or (name is not None and s.name == name):
return s
return None
def find_course(self, code=None, name=None):
for c in self.courses:
if (code is not None and c.code == code) or (name is not None and c.name == name):
return c
return None
def show_all(self):
print('All students:')
for s in self.students:
print(f'{s.id}: {s.name} ({s.gender}), {s.age} years old, {s.department}-{s.clazz}, {s.contact}')
print('All courses:')
for c in self.courses:
print(f'{c.code}: {c.name} ({c.type}), {c.total_hours} hours, {c.credit} credits, {c.semester}, {c.num_students} students')
def edit_student(self, id, name=None, gender=None, age=None, department=None, clazz=None, contact=None):
s = self.find_student(id)
if s is None:
print('Student not found')
else:
if name is not None:
s.name = name
if gender is not None:
s.gender = gender
if age is not None:
s.age = age
if department is not None:
s.department = department
if clazz is not None:
s.clazz = clazz
if contact is not None:
s.contact = contact
print('Student info updated')
def edit_course(self, code, name=None, type=None, total_hours=None, credit=None, semester=None, num_students=None):
c = self.find_course(code)
if c is None:
print('Course not found')
else:
if name is not None:
c.name = name
if type is not None:
c.type = type
if total_hours is not None:
c.total_hours = total_hours
if credit is not None:
c.credit = credit
if semester is not None:
c.semester = semester
if num_students is not None:
c.num_students = num_students
print('Course info updated')
def delete_student(self, id):
s = self.find_student(id)
if s is None:
print('Student not found')
else:
self.students.remove(s)
print('Student deleted')
def delete_course(self, code):
c = self.find_course(code)
if c is None:
print('Course not found')
else:
self.courses.remove(c)
print('Course deleted')
def count_students(self):
return len(self.students)
def count_courses(self):
return len(self.courses)
def count_course_students(self, code):
c = self.find_course(code)
if c is None:
return None
else:
return (c.name, c.type, c.num_students, [s.name for s in self.students if code in [c.code for c in self.courses]])
def save_to_file(self, filename):
with open(filename, 'w') as f:
f.write(f'students {len(self.students)}\n')
for s in self.students:
f.write(f'{s.id},{s.name},{s.gender},{s.age},{s.department},{s.clazz},{s.contact}\n')
f.write(f'courses {len(self.courses)}\n')
for c in self.courses:
f.write(f'{c.code},{c.name},{c.type},{c.total_hours},{c.credit},{c.semester},{c.num_students}\n')
def load_from_file(self, filename):
with open(filename, 'r') as f:
all_lines = f.readlines()
num_students = int(all_lines[0].split()[1])
for i in range(num_students):
s = all_lines[i+1].strip().split(',')
self.students.append(Student(int(s[0]), s[1], s[2], int(s[3]), s[4], s[5], s[6]))
num_courses = int(all_lines[num_students+1].split()[1])
for i in range(num_courses):
c = all_lines[num_students+i+2].strip().split(',')
self.courses.append(Course(int(c[0]), c[1], c[2], int(c[3]), float(c[4]), c[5], int(c[6])))
这样的设计和实现能够满足学生选修课程系统的需求,并且代码结构清晰、易于维护、易于扩展。例如,如果需要增加其他功能,比如学生选课、查看课表等,只需要在管理类中新增对应的方法即可。代码中也使用了面向对象的编程思想,学生和课程分别对应一个类,使得操作更具有直观性和形象化。
