在学生考勤管理系统中,考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课)。系统功能包括信息录入、修改、查询、统计等。 2. 功能要求: 录入学
时间: 2023-08-31 12:50:58 浏览: 287
生考勤信息时,需要输入缺课日期、第几节课、课程名称、学生姓名、缺课类型等信息,可以逐条录入,也可以批量导入。修改考勤信息时,需要根据学生姓名和缺课日期进行修改。查询考勤信息时,可以按照学生姓名、缺课日期、缺课类型等条件进行查询。统计考勤信息时,可以按照学生、课程、时间等维度进行统计,并生成相应的报表。同时,系统还需要具备数据备份和恢复功能,以确保数据的安全性。
相关问题
用c++设计一个程序,基本要求: 考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型 (迟到、早退、请假及旷课)。 功能要求: 1)录入学生的缺课记录; 2)修改某个学生的缺课记录; 3)查询某个学生的缺课情况;且系统以菜单方式工作。
好的,下面是一个简单的示例程序,实现了你提出的基本要求:
```c++
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 学生缺课信息结构体
struct Record {
string date; // 缺课日期
int section; // 第几节课
string courseName; // 课程名称
string studentName; // 学生姓名
string type; // 缺课类型
};
// 打印菜单
void printMenu() {
cout << "1. 录入学生缺课记录" << endl;
cout << "2. 修改某个学生的缺课记录" << endl;
cout << "3. 查询某个学生的缺课情况" << endl;
cout << "4. 退出系统" << endl;
cout << "请选择操作(输入数字1-4):";
}
// 录入学生缺课记录
void addRecord(vector<Record>& records) {
Record record;
cout << "请输入缺课日期(yyyy-mm-dd):";
cin >> record.date;
cout << "请输入第几节课(1-8):";
cin >> record.section;
cout << "请输入课程名称:";
cin >> record.courseName;
cout << "请输入学生姓名:";
cin >> record.studentName;
cout << "请输入缺课类型(迟到、早退、请假或旷课):";
cin >> record.type;
records.push_back(record);
cout << "已添加缺课记录!" << endl;
}
// 修改学生缺课记录
void modifyRecord(vector<Record>& records) {
string studentName;
cout << "请输入要修改的学生姓名:";
cin >> studentName;
for (auto& record : records) {
if (record.studentName == studentName) {
cout << "请输入新的缺课日期(原值:" << record.date << "):";
cin >> record.date;
cout << "请输入新的第几节课(原值:" << record.section << "):";
cin >> record.section;
cout << "请输入新的课程名称(原值:" << record.courseName << "):";
cin >> record.courseName;
cout << "请输入新的缺课类型(迟到、早退、请假或旷课,原值:" << record.type << "):";
cin >> record.type;
cout << "已修改缺课记录!" << endl;
return;
}
}
cout << "找不到该学生的缺课记录!" << endl;
}
// 查询学生缺课情况
void queryRecord(const vector<Record>& records) {
string studentName;
cout << "请输入要查询的学生姓名:";
cin >> studentName;
for (const auto& record : records) {
if (record.studentName == studentName) {
cout << "缺课日期:" << record.date << endl;
cout << "第几节课:" << record.section << endl;
cout << "课程名称:" << record.courseName << endl;
cout << "学生姓名:" << record.studentName << endl;
cout << "缺课类型:" << record.type << endl;
return;
}
}
cout << "找不到该学生的缺课记录!" << endl;
}
int main() {
vector<Record> records;
int op;
while (true) {
printMenu();
cin >> op;
switch (op) {
case 1:
addRecord(records);
break;
case 2:
modifyRecord(records);
break;
case 3:
queryRecord(records);
break;
case 4:
cout << "谢谢使用!" << endl;
return 0;
default:
cout << "无效的操作,请重新选择!" << endl;
break;
}
}
}
```
这个程序使用了一个结构体 `Record` 来存储学生缺课信息,使用了一个 `vector` 来存储多个学生的缺课记录。程序提供了三个操作:录入学生缺课记录、修改某个学生的缺课记录和查询某个学生的缺课情况,并以菜单方式工作。你可以根据自己的需要对程序进行改进和扩展。
请写一个学生考勤信息管理系统并给出注释,该记录了学生的缺课情况,它包括: 缺课日期、第几节课、课程名称、学生姓名、学生学号、缺课类型(迟到、请假及旷课)。系统具有以下功能: 1)、录入学生的缺课记录; 2)、修改某个学生的缺课记录; 3)、查询某个学生的缺课情况; 4)、统计 旷课学生姓名及旷课次数,按旷课次数由多到少排序; 5)、统计 有学生旷课的课程及旷课人次(每次课时累加),按旷课人次由多到少排序;
以下是一个学生考勤信息管理系统的代码示例,注释在代码中:
```
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
// 学生类
class Student {
public:
string name; // 姓名
string id; // 学号
int absentCount; // 旷课次数
Student(string n, string i) {
name = n;
id = i;
absentCount = 0;
}
};
// 缺课记录类
class Absent {
public:
string date; // 缺课日期
int lesson; // 第几节课
string courseName; // 课程名称
string studentName; // 学生姓名
string studentId; // 学生学号
string type; // 缺课类型
Absent(string d, int l, string c, string sN, string sI, string t) {
date = d;
lesson = l;
courseName = c;
studentName = sN;
studentId = sI;
type = t;
}
};
// 学生考勤信息管理系统类
class AttendanceSystem {
public:
vector<Student> students; // 学生列表
vector<Absent> absents; // 缺课记录列表
map<string, int> absentCounts; // 旷课次数统计
map<string, int> courseAbsentCounts; // 课程旷课人次统计
// 添加新学生
void addStudent(string name, string id) {
Student s(name, id);
students.push_back(s);
}
// 添加新缺课记录
void addAbsent(string date, int lesson, string courseName, string studentName, string studentId, string type) {
Absent a(date, lesson, courseName, studentName, studentId, type);
absents.push_back(a);
// 更新旷课次数统计
if (type == "旷课") {
if (absentCounts.count(studentId) == 0) {
absentCounts[studentId] = 1;
} else {
absentCounts[studentId]++;
}
// 更新学生对象中的旷课次数
for (int i = 0; i < students.size(); i++) {
if (students[i].id == studentId) {
students[i].absentCount++;
break;
}
}
}
// 更新课程旷课人次统计
if (courseAbsentCounts.count(courseName) == 0) {
courseAbsentCounts[courseName] = 1;
} else {
courseAbsentCounts[courseName]++;
}
}
// 修改某个学生的缺课记录
void modifyAbsent(string date, int lesson, string courseName, string studentId, string newType) {
for (int i = 0; i < absents.size(); i++) {
if (absents[i].date == date && absents[i].lesson == lesson && absents[i].courseName == courseName && absents[i].studentId == studentId) {
// 更新旷课次数统计
if (newType == "旷课" && absents[i].type != "旷课") {
absentCounts[studentId]++;
for (int j = 0; j < students.size(); j++) {
if (students[j].id == studentId) {
students[j].absentCount++;
break;
}
}
} else if (newType != "旷课" && absents[i].type == "旷课") {
absentCounts[studentId]--;
for (int j = 0; j < students.size(); j++) {
if (students[j].id == studentId) {
students[j].absentCount--;
break;
}
}
}
// 更新课程旷课人次统计
if (newType == "旷课" && absents[i].type != "旷课") {
courseAbsentCounts[courseName]++;
} else if (newType != "旷课" && absents[i].type == "旷课") {
courseAbsentCounts[courseName]--;
}
// 更新缺课记录
absents[i].type = newType;
break;
}
}
}
// 查询某个学生的缺课情况
void queryStudent(string studentId) {
cout << "缺课记录如下:" << endl;
for (int i = 0; i < absents.size(); i++) {
if (absents[i].studentId == studentId) {
cout << "日期:" << absents[i].date << ",第" << absents[i].lesson << "节课,课程名称:" << absents[i].courseName << ",缺课类型:" << absents[i].type << endl;
}
}
cout << "旷课次数:" << absentCounts[studentId] << endl;
}
// 统计旷课学生姓名及旷课次数,按旷课次数由多到少排序
void sortAbsentStudents() {
vector<pair<string, int>> absentCountVec(absentCounts.begin(), absentCounts.end());
sort(absentCountVec.begin(), absentCountVec.end(), [](const pair<string, int>& a, const pair<string, int>& b) { return a.second > b.second; });
cout << "旷课学生姓名及旷课次数如下:" << endl;
for (int i = 0; i < absentCountVec.size(); i++) {
for (int j = 0; j < students.size(); j++) {
if (students[j].id == absentCountVec[i].first) {
cout << "姓名:" << students[j].name << ",学号:" << students[j].id << ",旷课次数:" << absentCountVec[i].second << endl;
break;
}
}
}
}
// 统计有学生旷课的课程及旷课人次,按旷课人次由多到少排序
void sortAbsentCourses() {
vector<pair<string, int>> courseAbsentCountVec(courseAbsentCounts.begin(), courseAbsentCounts.end());
sort(courseAbsentCountVec.begin(), courseAbsentCountVec.end(), [](const pair<string, int>& a, const pair<string, int>& b) { return a.second > b.second; });
cout << "有学生旷课的课程及旷课人次如下:" << endl;
for (int i = 0; i < courseAbsentCountVec.size(); i++) {
cout << "课程名称:" << courseAbsentCountVec[i].first << ",旷课人次:" << courseAbsentCountVec[i].second << endl;
}
}
};
int main() {
AttendanceSystem s;
s.addStudent("张三", "1001");
s.addStudent("李四", "1002");
s.addStudent("王五", "1003");
s.addAbsent("2022-01-01", 1, "数学", "张三", "1001", "迟到");
s.addAbsent("2022-01-02", 2, "数学", "张三", "1001", "请假");
s.addAbsent("2022-01-03", 3, "英语", "张三", "1001", "旷课");
s.addAbsent("2022-01-03", 3, "英语", "李四", "1002", "旷课");
s.addAbsent("2022-01-04", 4, "物理", "王五", "1003", "旷课");
s.queryStudent("1001");
s.sortAbsentStudents();
s.sortAbsentCourses();
s.modifyAbsent("2022-01-03", 3, "英语", "1001", "请假");
return 0;
}
```
上述代码中,`Student` 和 `Absent` 类分别表示学生和缺课记录,`AttendanceSystem` 类表示学生考勤信息管理系统。在 `main` 函数中,首先添加了三个学生,然后添加了五个缺课记录,并查询了学号为 `1001` 的学生的缺课情况。接下来按旷课次数由多到少排序并输出了旷课学生姓名及旷课次数,以及按旷课人次由多到少排序并输出了有学生旷课的课程及旷课人次。最后对一条缺课记录进行了修改。
阅读全文