{ int count = 0; for (int i = 0; i < enrollments.size(); ++i) { if (enrollments[i].courseId == courseId) { count++; } } return count; } void queryEnrollmentCount() { int courseId; cout << "请输入要查询的课程编号:"; cin >> courseId; Course* course = NULL; for (int i = 0; i < courses.size(); ++i) { if (courses[i].id == courseId) { course = &courses[i]; break; } } if (course == NULL) { cout << "课程不存在!" << endl; return; } int count = countEnrollment(courseId); cout << "课程 " << course->name << " 的选课人数为:" << count << endl; } int calculateCredits(int studentId, int year) { int totalCredits = 0; for (int i = 0; i < enrollments.size(); ++i) { if (enrollments[i].studentId == studentId && enrollments[i].year == year && enrollments[i].grade >= 60) { Course* course = NULL; for (int j = 0; j < courses.size(); ++j) { if (courses[j].id == enrollments[i].courseId) { course = &courses[j]; break; } } if (course != NULL) { totalCredits += course->credit; } } } return totalCredits; }
时间: 2024-02-14 11:26:17 浏览: 134
这段代码包含了三个函数:`queryEnrollmentCount`、`countEnrollment`和`calculateCredits`。
`queryEnrollmentCount`函数用于查询特定课程的选课人数。它首先要求用户输入要查询的课程编号,然后在`courses`列表中查找匹配的课程。如果找到了匹配的课程,就调用`countEnrollment`函数计算该课程的选课人数,并输出结果。
`countEnrollment`函数用于计算与给定课程ID匹配的选课人数。它通过遍历`enrollments`列表,对每个注册的课程ID进行比较,如果匹配则计数加一。
`calculateCredits`函数用于计算特定学生在特定年份所修学分总数。它遍历`enrollments`列表,对每个满足条件的选课记录进行判断:学生ID与给定的学生ID相同、年份与给定的年份相同并且成绩大于等于60。对于满足条件的课程,在`courses`列表中查找匹配的课程,并将该课程的学分累加到总学分中。
请注意,以上代码只是函数的框架,实际的数据结构和具体实现可能需要根据实际情况进行适当调整。
相关问题
SQL server设计一个事务,给所有在册的非新生学生增加1岁.要求:50个人作为一个事务提交一次
首先,我们需要创建一个用于存储学生信息的表格。假设该表格已经创建,并且包含以下字段:
- `student_id` : 学生ID
- `name` : 学生姓名
- `age` : 学生年龄
接下来,我们需要编写一个 SQL 事务来增加所有在册的非新生学生的年龄。以下是一个可能的解决方案:
```sql
BEGIN TRANSACTION
DECLARE @batch_size INT = 50
DECLARE @total_rows INT = (SELECT COUNT(*) FROM students WHERE age > 0)
DECLARE @start_idx INT = 1
WHILE @start_idx <= @total_rows
BEGIN
UPDATE TOP (@batch_size) students
SET age = age + 1
WHERE age > 0
AND student_id NOT IN (
SELECT student_id
FROM enrollments
WHERE enrollment_year = YEAR(GETDATE())
)
SET @start_idx += @batch_size
IF @@ROWCOUNT < @batch_size
SET @start_idx = @total_rows + 1
WAITFOR DELAY '00:00:01' -- 添加等待时间,以便模拟长时间运行的事务
END
COMMIT TRANSACTION
```
这个事务使用一个循环,每次更新 `@batch_size` 行记录,直到所有符合条件的记录都被更新完毕。在每次循环中,我们检查每个学生是否在当前年级注册,并且不是新生。如果是,则将其年龄加1。为了防止一次性更新过多行记录,我们使用 `TOP` 关键字限制每次更新的行数。同时,我们使用 `WAITFOR DELAY` 添加了一个等待时间来模拟长时间运行的事务。
需要注意的是,在实际应用中,我们需要根据具体的业务需求和数据量来调整事务的大小和等待时间。
阅读全文