学生选修课程这一事实可以用学生类和课程类之间的关联关系来建模。设计并实现这两个类以及它们的关联关系。要求如下。 (1)使用c++语言。 (1)学生的属性有姓名和学号。 (2)课程的属性有课程名、课程编号和学分。 模拟学生选课的操作,选课完成后: (3)课程能知道选修了该课程的所有学生以及学生总数。 (4)学生知道自己选修了哪些课程以及总的学分。 编写测试程序,输出学生对象,能够输出该学生的姓名、学号,以及该生所选的课程名、课程编号和学分,并能输出该学生选修课程的总学分数; 输出课程对象,能够输出该门课程的课程名、课程编号、学分,以及选修该课程所有的学生姓名、学号,并能输出选修该课程的学生总数。
时间: 2023-06-10 13:08:18 浏览: 62
下面是使用C语言实现学生类和课程类及其关联关系的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_COURSES 10
#define MAX_STUDENTS 100
typedef struct Course {
char name[20];
int id;
int credit;
int num_students;
int student_ids[MAX_STUDENTS];
} Course;
typedef struct Student {
char name[20];
int id;
int num_courses;
int course_ids[MAX_COURSES];
int total_credits;
} Student;
void add_student_to_course(Student* s, Course* c) {
if (c->num_students < MAX_STUDENTS) {
c->student_ids[c->num_students++] = s->id;
}
}
void add_course_to_student(Course* c, Student* s) {
if (s->num_courses < MAX_COURSES) {
s->course_ids[s->num_courses++] = c->id;
s->total_credits += c->credit;
}
}
void print_student(Student* s) {
printf("Name: %s\n", s->name);
printf("ID: %d\n", s->id);
printf("Courses:\n");
for (int i = 0; i < s->num_courses; i++) {
printf("- %d (%s, %d credits)\n", s->course_ids[i], courses[s->course_ids[i]].name, courses[s->course_ids[i]].credit);
}
printf("Total credits: %d\n", s->total_credits);
}
void print_course(Course* c) {
printf("Name: %s\n", c->name);
printf("ID: %d\n", c->id);
printf("Credit: %d\n", c->credit);
printf("Students:\n");
for (int i = 0; i < c->num_students; i++) {
printf("- %d (%s)\n", c->student_ids[i], students[c->student_ids[i]].name);
}
printf("Total students: %d\n", c->num_students);
}
Course courses[MAX_COURSES];
Student students[MAX_STUDENTS];
int num_courses = 0;
int num_students = 0;
int main() {
// add some courses
courses[num_courses++] = (Course){"Math", 1, 3, 0, {}};
courses[num_courses++] = (Course){"Physics", 2, 4, 0, {}};
courses[num_courses++] = (Course){"History", 3, 2, 0, {}};
// add some students
students[num_students++] = (Student){"Alice", 1, 0, {}, 0};
students[num_students++] = (Student){"Bob", 2, 0, {}, 0};
students[num_students++] = (Student){"Charlie", 3, 0, {}, 0};
// enroll students in courses
add_student_to_course(&students[0], &courses[0]);
add_student_to_course(&students[0], &courses[1]);
add_student_to_course(&students[1], &courses[1]);
add_student_to_course(&students[2], &courses[2]);
// add courses to students
add_course_to_student(&courses[0], &students[0]);
add_course_to_student(&courses[1], &students[0]);
add_course_to_student(&courses[1], &students[1]);
add_course_to_student(&courses[2], &students[2]);
// print student report
printf("Student report:\n");
print_student(&students[0]);
// print course report
printf("\nCourse report:\n");
print_course(&courses[1]);
return 0;
}
```
这个示例代码实现了学生类和课程类的基本属性和方法,并且建立了学生和课程之间的关联关系。在主函数中,首先创建了几门课程和几个学生,并且通过调用`add_student_to_course`和`add_course_to_student`函数,将学生和课程关联起来。
最后,调用`print_student`和`print_course`函数,输出学生和课程的报告。报告包括了学生和课程的基本信息,以及它们之间的关联信息,如选修的课程、学生的总学分、选修该课程的学生名单和学生总数等。