用C++实现自行设计实现顺序表的类模板,并通过课程考勤表对其实例化进一步实现至少20名同学10周的考勤功能(例如每次课出勤为为某一变量赋值为1,否则赋值为0),最后至少实现一种考勤情况的汇总方式,比如指定周次的出勤情况或某个同学10周内的总体出勤情况等。
时间: 2024-12-23 22:17:18 浏览: 3
在C++中,我们可以自定义一个序列容器类模板`SequenceList`,用于存储元素并支持顺序访问。为了模拟课程考勤表,我们可以创建一个`Student`类模板实例,然后将学生对象作为列表中的元素。下面是一个简单的实现示例:
```cpp
template <typename T>
class SequenceList {
public:
SequenceList(size_t size) : elements(new T[size]) { fill zeroes(); }
~SequenceList() { delete[] elements; }
void add(T value) {
if (current_index < size)
elements[current_index++] = value;
}
private:
void fill_zeroes() {
for (size_t i = 0; i < size; ++i)
elements[i] = 0;
}
T* elements;
size_t current_index = 0;
size_t size;
};
// 定义学生模板类,包含姓名和10周考勤记录
template <typename WeeklyAttendance>
class Student {
public:
std::string name;
// 初始化学生时,初始化所有考勤为0
Student(const std::string& name) : name(name), attendance(WeeklyAttendance(10)) {}
// 学生出勤
void attendWeek(size_t weekIndex, bool attended) {
attendance[weekIndex - 1] = attended ? 1 : 0;
}
// 获取某一周的考勤状态
WeeklyAttendance getAttendanceWeek(size_t weekIndex) const {
return attendance[weekIndex - 1];
}
private:
WeeklyAttendance attendance;
};
int main() {
// 创建一个可以容纳20名学生的顺序表
SequenceList<Student<int>> students(20);
// 添加学生并设置他们的考勤信息
for (size_t i = 0; i < students.size(); ++i) {
std::string studentName = "Student" + std::to_string(i + 1);
students.add(Student<int>(studentName));
// 示例出勤情况,这里仅设置前几周的考勤
students.back().attendWeek(1, true); // 第1周出勤
students.back().attendWeek(3, false); // 第3周未出勤
}
// 汇总特定周次的考勤情况,如第5周
int totalAttendanceInWeek5 = 0;
for (const auto& student : students)
totalAttendanceInWeek5 += student.getAttendanceWeek(5);
std::cout << "Total attendance in Week 5: " << totalAttendanceInWeek5 << std::endl;
return 0;
}
```
阅读全文