C++实现学生考勤信息管理系统

yizhihongxing

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技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言实现学籍管理系统

    C语言实现学籍管理系统攻略 一、需求分析 学籍管理系统需要具备以下功能:1. 添加学生信息2. 修改学生信息3. 删除学生信息4. 查询学生信息5. 查看全部学生信息 二、设计思路 学籍管理系统的数据结构可以使用链表来实现,具体分为两个结构体:教务处(包含链表头)和学生。其中教务处是包含多个学生的一个链表,学生则是链表中的一个节点。 具体实现思路如下:1. …

    C 2023年5月23日
    00
  • win10桌面快捷方式图标该怎么制作?

    当你在使用Windows 10操作系统时,你可能需要在桌面放置一些常用的应用程序的快捷方式。下面是Win10桌面快捷方式图标该怎么制作的完整攻略: 第一步:选择要添加快捷方式的应用程序 首先,你需要选择要添加快捷方式的应用程序。这些应用程序可以是你经常使用的软件,比如浏览器、音乐播放器、文档编辑器等等。 第二步:创建应用程序的快捷方式 接下来,你需要创建应用…

    C 2023年5月22日
    00
  • Golang校验字符串是否JSON格式的方法总结

    当我们使用Golang进行Web开发时,经常需要对前端提交的数据进行JSON格式校验,以保证数据的正确性和数据传输的安全性。下面是针对Golang校验字符串是否JSON格式的方法总结的详细攻略。 方法一:使用json.Unmarshal()函数校验 使用Golang标准库中的json.Unmarshal()函数,可以直接将JSON格式的规范化字符串解析成JS…

    C 2023年5月23日
    00
  • C# JsonHelper 操作辅助类,拿来直接用

    首先,为了更好地讲解这个“C# JsonHelper操作辅助类,拿来直接用”的攻略,我们需要了解以下几个重要概念: C#: 一种面向对象的、现代的、通用的、类型安全的编程语言,由微软公司开发并推广,被广泛运用于开发各种类型的应用程序。 Json: 一种轻量级的数据交换格式,基于JavaScript语言的语法规则,易于人们阅读和编写,同时也易于机器解析和生成,…

    C 2023年5月23日
    00
  • C++入门之基础语法学习教程

    当初编写C++入门之基础语法学习教程的目的是为了帮助初学者快速掌握C++的基础语法知识,确保他们能够顺利理解和编写简单的C++程序。下面将分为四步详细讲解攻略: 第一步:学习C++的基本语法 C++的基本语法包括变量定义、数据类型、运算符、控制语句和函数等,其中变量定义是C++程序必须要掌握的基础;数据类型可以构建不同类型的数据,可以帮助我们更好地处理数据;…

    C 2023年5月23日
    00
  • C++中的编译与链接

    C++中的编译与链接是将源代码转换为可执行文件的过程。它分为三个阶段:预处理、编译和链接。 预处理 预处理是C++编译过程的第一个阶段,该阶段将源文件中的预处理指令处理为有效的C++代码。 预处理器在编译之前会检查源文件并执行以下操作: 处理所有以 “#” 开头的预处理指令。 删除所有注释(// 和 / /)。 将所有 #include 指令替换为相应头文件…

    C 2023年5月23日
    00
  • C++实现简单版图书管理系统

    C++实现简单版图书管理系统攻略 本文将介绍如何使用C++语言实现简单版图书管理系统。本系统主要包含以下功能:添加图书信息、删除图书信息、查看图书信息、修改图书信息、退出系统。 设计思路 在开始实现之前,我们需要先确定程序的设计思路。将所有的操作封装成一个类,来实现图书的添加、删除、修改、查询等操作。同时,我们需要设计出一个图书类,包含图书的基本信息。 代码…

    C 2023年5月23日
    00
  • C++ cmake实现日志类的示例代码

    C++ cmake实现日志类的示例代码攻略 前置要求 安装cmake工具:在官网 https://cmake.org/download/ 下载对应系统的版本进行安装 C++编译器:这里以g++为例 IDE:这里以Visual Studio Code为例 步骤一:创建工程 利用cmake工具创建一个C++工程。 在项目根目录创建文件CMakeLists.txt…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部