编写学生考勤系统程序c++主要功能包括考勤数据的新增、删除、修改、查找、统计、排序、输出、学生补卡、请假办理
时间: 2023-07-10 09:38:48 浏览: 167
C++课程设计-学生考勤管理系统源码.cpp
5星 · 资源好评率100%
好的,学生考勤系统程序的C++代码如下:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// 学生结构体
struct Student {
string id; // 学号
string name; // 姓名
int attendance; // 出勤次数
bool isLeave; // 是否请假
bool isCard; // 是否补卡
};
// 全局变量
vector<Student> students; // 学生信息数组
// 函数声明
void loadFile(); // 从文件读取学生信息
void saveFile(); // 保存学生信息到文件
void addStudent(); // 新增学生信息
void deleteStudent(); // 删除学生信息
void modifyStudent(); // 修改学生信息
void searchStudent(); // 查找学生信息
void statAttendance(); // 统计出勤情况
void sortStudent(); // 排序学生信息
void outputStudent(); // 输出学生信息
void supplementCard(); // 学生补卡
void leaveApply(); // 学生请假
// 主函数
int main() {
// 从文件读取学生信息
loadFile();
// 选择菜单
int choice = 0;
while (1) {
cout << "请选择操作:" << endl;
cout << "1. 新增学生 2. 删除学生 3. 修改学生 4. 查找学生" << endl;
cout << "5. 统计出勤 6. 排序学生 7. 输出学生 8. 学生补卡" << endl;
cout << "9. 学生请假 0. 退出程序" << endl;
cin >> choice;
switch (choice) {
case 1:
addStudent();
break;
case 2:
deleteStudent();
break;
case 3:
modifyStudent();
break;
case 4:
searchStudent();
break;
case 5:
statAttendance();
break;
case 6:
sortStudent();
break;
case 7:
outputStudent();
break;
case 8:
supplementCard();
break;
case 9:
leaveApply();
break;
case 0:
// 保存学生信息到文件
saveFile();
cout << "程序已退出!" << endl;
return 0;
default:
cout << "输入有误,请重新选择!" << endl;
break;
}
}
return 0;
}
// 从文件读取学生信息
void loadFile() {
ifstream fin("students.txt");
if (!fin) {
cout << "文件不存在,新建文件!" << endl;
return;
}
while (!fin.eof()) {
Student student;
fin >> student.id >> student.name >> student.attendance >> student.isLeave >> student.isCard;
students.push_back(student);
}
fin.close();
cout << "学生信息读取成功!" << endl;
}
// 保存学生信息到文件
void saveFile() {
ofstream fout("students.txt");
for (int i = 0; i < students.size(); i++) {
fout << students[i].id << " " << students[i].name << " " << students[i].attendance << " " << students[i].isLeave << " " << students[i].isCard << endl;
}
fout.close();
cout << "学生信息保存成功!" << endl;
}
// 新增学生信息
void addStudent() {
Student student;
cout << "请输入学生学号:" << endl;
cin >> student.id;
cout << "请输入学生姓名:" << endl;
cin >> student.name;
student.attendance = 0;
student.isLeave = false;
student.isCard = false;
students.push_back(student);
cout << "学生信息添加成功!" << endl;
}
// 删除学生信息
void deleteStudent() {
string id;
cout << "请输入要删除的学生学号:" << endl;
cin >> id;
for (int i = 0; i < students.size(); i++) {
if (students[i].id == id) {
students.erase(students.begin() + i);
cout << "学生信息删除成功!" << endl;
return;
}
}
cout << "学生信息不存在!" << endl;
}
// 修改学生信息
void modifyStudent() {
string id;
cout << "请输入要修改的学生学号:" << endl;
cin >> id;
for (int i = 0; i < students.size(); i++) {
if (students[i].id == id) {
cout << "请输入学生姓名:" << endl;
cin >> students[i].name;
cout << "请输入学生出勤次数:" << endl;
cin >> students[i].attendance;
cout << "请输入学生请假情况(0为未请假,1为已请假):" << endl;
cin >> students[i].isLeave;
cout << "请输入学生补卡情况(0为未补卡,1为已补卡):" << endl;
cin >> students[i].isCard;
cout << "学生信息修改成功!" << endl;
return;
}
}
cout << "学生信息不存在!" << endl;
}
// 查找学生信息
void searchStudent() {
string id;
cout << "请输入要查找的学生学号:" << endl;
cin >> id;
for (int i = 0; i < students.size(); i++) {
if (students[i].id == id) {
cout << "学号\t姓名\t出勤次数\t请假情况\t补卡情况" << endl;
cout << students[i].id << "\t" << students[i].name << "\t" << students[i].attendance << "\t\t" << students[i].isLeave << "\t\t" << students[i].isCard << endl;
return;
}
}
cout << "学生信息不存在!" << endl;
}
// 统计出勤情况
void statAttendance() {
int total = 0, present = 0, absent = 0, leave = 0, card = 0;
for (int i = 0; i < students.size(); i++) {
if (students[i].isLeave) {
leave++;
} else if (students[i].isCard) {
card++;
} else {
total++;
if (students[i].attendance > 0) {
present++;
} else {
absent++;
}
}
}
cout << "总人数:" << total << endl;
cout << "出勤人数:" << present << endl;
cout << "缺勤人数:" << absent << endl;
cout << "请假人数:" << leave << endl;
cout << "补卡人数:" << card << endl;
}
// 排序学生信息
void sortStudent() {
int choice = 0;
cout << "请选择排序方式:" << endl;
cout << "1. 按学号升序排序 2. 按出勤次数降序排序" << endl;
cin >> choice;
switch (choice) {
case 1:
sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
return a.id < b.id;
});
cout << "学号升序排序成功!" << endl;
break;
case 2:
sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
return a.attendance > b.attendance;
});
cout << "出勤次数降序排序成功!" << endl;
break;
default:
cout << "输入有误,请重新选择!" << endl;
break;
}
}
// 输出学生信息
void outputStudent() {
cout << "学号\t姓名\t出勤次数\t请假情况\t补卡情况" << endl;
for (int i = 0; i < students.size(); i++) {
cout << students[i].id << "\t" << students[i].name << "\t" << students[i].attendance << "\t\t" << students[i].isLeave << "\t\t" << students[i].isCard << endl;
}
}
// 学生补卡
void supplementCard() {
string id;
cout << "请输入要补卡的学生学号:" << endl;
cin >> id;
for (int i = 0; i < students.size(); i++) {
if (students[i].id == id) {
students[i].isCard = true;
cout << "学生补卡成功!" << endl;
return;
}
}
cout << "学生信息不存在!" << endl;
}
// 学生请假
void leaveApply() {
string id;
cout << "请输入要请假的学生学号:" << endl;
cin >> id;
for (int i = 0; i < students.size(); i++) {
if (students[i].id == id) {
students[i].isLeave = true;
cout << "学生请假成功!" << endl;
return;
}
}
cout << "学生信息不存在!" << endl;
}
```
以上代码实现了学生考勤系统的主要功能,包括考勤数据的新增、删除、修改、查找、统计、排序、输出、学生补卡、请假办理。在主函数中,通过一个循环菜单实现了对各个功能的选择和调用。同时,在程序启动时会从文件中读取学生信息,程序退出时会将学生信息保存到文件中。
阅读全文