C++实现学生考勤信息管理系统
系统需求
首先,我们需要定义考勤信息管理系统的需求:
- 能够添加新学生记录;
- 能够删除指定学生记录;
- 能够显示所有学生记录;
- 能够修改指定学生记录;
- 能够查询指定学生记录。
数据结构设计
为了实现学生考勤信息管理系统,我们需要定义数据结构来存储学生记录。这里我们选择使用结构体来表示一个学生记录,包括以下字段:
struct StudentRecord {
string name;
string id;
bool attendance[MAX_DAYS];
int absent_count;
};
其中,name
表示学生姓名,id
表示学生学号,attendance
用于记录多个日期的出勤情况,absent_count
表示缺勤次数。
为了方便操作,我们还需要定义一个学生信息管理类:
class StudentManager {
public:
void addRecord(const string& name, const string& id);
void deleteRecord(const string& id);
void showRecords();
void modifyRecord(const string& id);
void queryRecord(const string& id);
private:
vector<StudentRecord> records_;
int findRecord(const string& id);
};
其中,addRecord
用于添加新的学生记录,deleteRecord
用于删除指定学生记录,showRecords
用于显示所有学生记录,modifyRecord
用于修改指定学生记录,queryRecord
用于查询指定学生记录。records_
表示所有学生记录的容器。
我们还需要定义一个常量 MAX_DAYS
来表示记录的天数。
实现细节
添加学生记录
添加学生记录需要输入学生姓名和学号,并将相应的记录添加到容器中。具体实现如下:
void StudentManager::addRecord(const string& name, const string& id) {
// 检查是否已经存在该学号的记录
if (findRecord(id) != -1) {
cout << "Error: 学号已存在!" << endl;
return;
}
// 创建新的学生记录
StudentRecord record = { name, id };
// 将新的学生记录添加到容器中
records_.push_back(record);
cout << "Success: 添加学生记录成功!" << endl;
}
删除学生记录
删除学生记录需要输入学生学号,首先需要查找该学号对应的学生记录,然后从容器中删除该记录。具体实现如下:
void StudentManager::deleteRecord(const string& id) {
// 查找学号对应的学生记录在容器中的下标
int index = findRecord(id);
if (index == -1) {
cout << "Error: 学号不存在!" << endl;
return;
}
// 从容器中删除学生记录
records_.erase(records_.begin() + index);
cout << "Success: 删除学生记录成功!" << endl;
}
显示所有学生记录
显示所有学生记录需要将容器中的每个学生记录逐个输出。具体实现如下:
void StudentManager::showRecords() {
if (records_.empty()) {
cout << "暂无学生记录!" << endl;
return;
}
cout << "学号\t姓名\t出勤次数" << endl;
for (const auto& record : records_) {
int attendance_count = MAX_DAYS - record.absent_count;
cout << record.id << "\t" << record.name << "\t" << attendance_count << endl;
}
}
修改学生记录
修改学生记录需要输入学生学号,然后查找该学号对应的学生记录,最后修改该学生记录的相应字段。具体实现如下:
void StudentManager::modifyRecord(const string& id) {
// 查找学号对应的学生记录在容器中的下标
int index = findRecord(id);
if (index == -1) {
cout << "Error: 学号不存在!" << endl;
return;
}
// 修改学生记录
auto& record = records_[index];
cout << "姓名(原):" << record.name << endl;
string name;
cout << "请输入新的姓名:" << endl;
cin >> name;
record.name = name;
cout << "Success: 修改学生记录成功!" << endl;
}
查询学生记录
查询学生记录需要输入学生学号,然后查找该学号对应的学生记录,最后输出该学生记录的详细信息。具体实现如下:
void StudentManager::queryRecord(const string& id) {
// 查找学号对应的学生记录在容器中的下标
int index = findRecord(id);
if (index == -1) {
cout << "Error: 学号不存在!" << endl;
return;
}
// 输出学生记录的详细信息
const auto& record = records_[index];
cout << "姓名:" << record.name << endl;
cout << "学号:" << record.id << endl;
int attendance_count = MAX_DAYS - record.absent_count;
cout << "出勤次数:" << attendance_count << endl;
cout << "出勤情况:";
for (int i = 0; i < MAX_DAYS; i++) {
cout << (record.attendance[i] ? "√" : "X");
}
cout << endl;
}
查找学生记录
查找学生记录需要输入学生学号,并在容器中查找该学号对应的学生记录。具体实现如下:
int StudentManager::findRecord(const string& id) {
for (int i = 0; i < records_.size(); i++) {
if (records_[i].id == id) {
return i;
}
}
return -1;
}
示例说明
下面是使用示例:
int main() {
StudentManager manager;
manager.addRecord("张三", "1001");
manager.addRecord("李四", "1002");
manager.showRecords();
manager.modifyRecord("1002");
manager.showRecords();
manager.deleteRecord("1001");
manager.showRecords();
manager.queryRecord("1002");
return 0;
}
输出:
学号 姓名 出勤次数
1001 张三 0
1002 李四 0
姓名(原):李四
请输入新的姓名:
王五
Success: 修改学生记录成功!
学号 姓名 出勤次数
1001 张三 0
1002 王五 0
Success: 删除学生记录成功!
学号 姓名 出勤次数
1002 王五 0
姓名:王五
学号:1002
出勤次数:0
出勤情况:XXXXXXXX
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现学生考勤信息管理系统 - Python技术站