C++ 会议室管理系统

简介: C++ 会议室管理系统

C++ 会议室管理系统

系统功能

  • 添加/删除会议室
  • 预约/取消预约会议室
  • 查询会议室状态
  • 显示所有会议室信息
  • 保存/加载数据

代码

#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <ctime>
#include <algorithm>
#include <iomanip>

using namespace std;

// 预约时间结构体
struct ReservationTime {
   
    int year;
    int month;
    int day;
    int startHour;
    int endHour;

    ReservationTime(int y, int m, int d, int sh, int eh) 
        : year(y), month(m), day(d), startHour(sh), endHour(eh) {
   }

    // 重载小于运算符,用于时间比较
    bool operator<(const ReservationTime& other) const {
   
        if (year != other.year) return year < other.year;
        if (month != other.month) return month < other.month;
        if (day != other.day) return day < other.day;
        if (startHour != other.startHour) return startHour < other.startHour;
        return endHour < other.endHour;
    }

    // 检查时间是否重叠
    bool overlaps(const ReservationTime& other) const {
   
        if (year != other.year || month != other.month || day != other.day) 
            return false;

        return !(endHour <= other.startHour || startHour >= other.endHour);
    }
};

// 预约记录结构体
struct Reservation {
   
    string reservator;
    ReservationTime time;

    Reservation(const string& r, const ReservationTime& t) 
        : reservator(r), time(t) {
   }
};

// 会议室类
class MeetingRoom {
   
private:
    int roomId;
    string roomName;
    int capacity;
    bool hasProjector;
    vector<Reservation> reservations;

public:
    MeetingRoom(int id, const string& name, int cap, bool projector)
        : roomId(id), roomName(name), capacity(cap), hasProjector(projector) {
   }

    // 检查时间段是否可用
    bool isAvailable(const ReservationTime& time) const {
   
        for (const auto& reservation : reservations) {
   
            if (reservation.time.overlaps(time)) {
   
                return false;
            }
        }
        return true;
    }

    // 添加预约
    bool addReservation(const string& reservator, const ReservationTime& time) {
   
        if (!isAvailable(time)) {
   
            return false;
        }
        reservations.emplace_back(reservator, time);
        sort(reservations.begin(), reservations.end(), 
             [](const Reservation& a, const Reservation& b) {
    
                 return a.time < b.time; 
             });
        return true;
    }

    // 取消预约
    bool cancelReservation(const string& reservator, const ReservationTime& time) {
   
        for (auto it = reservations.begin(); it != reservations.end(); ++it) {
   
            if (it->reservator == reservator && 
                it->time.year == time.year &&
                it->time.month == time.month &&
                it->time.day == time.day &&
                it->time.startHour == time.startHour &&
                it->time.endHour == time.endHour) {
   
                reservations.erase(it);
                return true;
            }
        }
        return false;
    }

    // 显示会议室信息
    void display() const {
   
        cout << "会议室ID: " << roomId << endl;
        cout << "名称: " << roomName << endl;
        cout << "容量: " << capacity << "人" << endl;
        cout << "投影仪: " << (hasProjector ? "有" : "无") << endl;
        cout << "预约记录:" << endl;

        for (const auto& reservation : reservations) {
   
            cout << "  " << reservation.reservator << ": " 
                 << reservation.time.year << "-"
                 << setw(2) << setfill('0') << reservation.time.month << "-"
                 << setw(2) << setfill('0') << reservation.time.day << " "
                 << setw(2) << setfill('0') << reservation.time.startHour << ":00-"
                 << setw(2) << setfill('0') << reservation.time.endHour << ":00" << endl;
        }
        cout << endl;
    }

    // 获取会议室ID
    int getId() const {
    return roomId; }

    // 获取会议室名称
    string getName() const {
    return roomName; }

    // 获取容量
    int getCapacity() const {
    return capacity; }

    // 是否有投影仪
    bool hasProj() const {
    return hasProjector; }

    // 获取所有预约记录
    const vector<Reservation>& getReservations() const {
    return reservations; }

    // 保存数据到文件
    void saveToFile(ofstream& file) const {
   
        file << roomId << " " << roomName << " " << capacity << " " << hasProjector << endl;
        file << reservations.size() << endl;
        for (const auto& reservation : reservations) {
   
            file << reservation.reservator << " "
                 << reservation.time.year << " "
                 << reservation.time.month << " "
                 << reservation.time.day << " "
                 << reservation.time.startHour << " "
                 << reservation.time.endHour << endl;
        }
    }

    // 从文件加载数据
    void loadFromFile(ifstream& file) {
   
        int reservationCount;
        file >> roomId >> roomName >> capacity >> hasProjector;
        file >> reservationCount;

        reservations.clear();
        for (int i = 0; i < reservationCount; ++i) {
   
            string reservator;
            int y, m, d, sh, eh;
            file >> reservator >> y >> m >> d >> sh >> eh;
            reservations.emplace_back(reservator, ReservationTime(y, m, d, sh, eh));
        }
    }
};

// 会议室管理系统类
class MeetingRoomManager {
   
private:
    vector<MeetingRoom> rooms;

public:
    // 添加会议室
    void addRoom(int id, const string& name, int capacity, bool hasProjector) {
   
        rooms.emplace_back(id, name, capacity, hasProjector);
        cout << "添加会议室成功!" << endl;
    }

    // 删除会议室
    bool removeRoom(int id) {
   
        for (auto it = rooms.begin(); it != rooms.end(); ++it) {
   
            if (it->getId() == id) {
   
                rooms.erase(it);
                cout << "删除会议室成功!" << endl;
                return true;
            }
        }
        cout << "未找到该会议室!" << endl;
        return false;
    }

    // 预约会议室
    bool reserveRoom(int id, const string& reservator, const ReservationTime& time) {
   
        for (auto& room : rooms) {
   
            if (room.getId() == id) {
   
                if (room.addReservation(reservator, time)) {
   
                    cout << "预约成功!" << endl;
                    return true;
                } else {
   
                    cout << "该时间段已被预约!" << endl;
                    return false;
                }
            }
        }
        cout << "未找到该会议室!" << endl;
        return false;
    }

    // 取消预约
    bool cancelReservation(int id, const string& reservator, const ReservationTime& time) {
   
        for (auto& room : rooms) {
   
            if (room.getId() == id) {
   
                if (room.cancelReservation(reservator, time)) {
   
                    cout << "取消预约成功!" << endl;
                    return true;
                } else {
   
                    cout << "未找到该预约记录!" << endl;
                    return false;
                }
            }
        }
        cout << "未找到该会议室!" << endl;
        return false;
    }

    // 查询会议室状态
    void queryRoom(int id) const {
   
        for (const auto& room : rooms) {
   
            if (room.getId() == id) {
   
                room.display();
                return;
            }
        }
        cout << "未找到该会议室!" << endl;
    }

    // 显示所有会议室
    void displayAllRooms() const {
   
        if (rooms.empty()) {
   
            cout << "暂无会议室数据!" << endl;
            return;
        }

        for (const auto& room : rooms) {
   
            room.display();
        }
    }

    // 根据条件查询可用会议室
    void findAvailableRooms(const ReservationTime& time, int minCapacity = 0, bool needProjector = false) {
   
        cout << "符合以下条件的可用会议室:" << endl;
        cout << "时间: " << time.year << "-" << time.month << "-" << time.day 
             << " " << time.startHour << ":00-" << time.endHour << ":00" << endl;
        cout << "最小容量: " << minCapacity << endl;
        cout << "需要投影仪: " << (needProjector ? "是" : "否") << endl;
        cout << "----------------------------------------" << endl;

        bool found = false;
        for (const auto& room : rooms) {
   
            if (room.getCapacity() >= minCapacity && 
                (!needProjector || room.hasProj()) && 
                room.isAvailable(time)) {
   
                cout << "会议室ID: " << room.getId() << endl;
                cout << "名称: " << room.getName() << endl;
                cout << "容量: " << room.getCapacity() << "人" << endl;
                cout << "投影仪: " << (room.hasProj() ? "有" : "无") << endl;
                cout << "----------------------------------------" << endl;
                found = true;
            }
        }

        if (!found) {
   
            cout << "没有找到符合条件的可用会议室!" << endl;
        }
    }

    // 保存数据到文件
    void saveToFile(const string& filename) {
   
        ofstream file(filename);
        if (!file) {
   
            cout << "无法打开文件进行保存!" << endl;
            return;
        }

        file << rooms.size() << endl;
        for (const auto& room : rooms) {
   
            room.saveToFile(file);
        }

        file.close();
        cout << "数据已保存到 " << filename << endl;
    }

    // 从文件加载数据
    void loadFromFile(const string& filename) {
   
        ifstream file(filename);
        if (!file) {
   
            cout << "无法打开文件进行加载!" << endl;
            return;
        }

        int roomCount;
        file >> roomCount;

        rooms.clear();
        for (int i = 0; i < roomCount; ++i) {
   
            int id, capacity;
            string name;
            bool hasProjector;

            file >> id >> name >> capacity >> hasProjector;
            MeetingRoom room(id, name, capacity, hasProjector);
            room.loadFromFile(file);
            rooms.push_back(room);
        }

        file.close();
        cout << "已从 " << filename << " 加载数据" << endl;
    }
};

// 显示主菜单
void displayMenu() {
   
    cout << "===== 会议室管理系统 =====" << endl;
    cout << "1. 添加会议室" << endl;
    cout << "2. 删除会议室" << endl;
    cout << "3. 预约会议室" << endl;
    cout << "4. 取消预约" << endl;
    cout << "5. 查询会议室状态" << endl;
    cout << "6. 显示所有会议室" << endl;
    cout << "7. 查找可用会议室" << endl;
    cout << "8. 保存数据" << endl;
    cout << "9. 加载数据" << endl;
    cout << "0. 退出系统" << endl;
    cout << "请选择操作: ";
}

// 获取时间输入
ReservationTime getTimeInput() {
   
    int y, m, d, sh, eh;
    cout << "请输入日期 (年 月 日): ";
    cin >> y >> m >> d;
    cout << "请输入开始时间和结束时间 (小时 0-23): ";
    cin >> sh >> eh;
    return ReservationTime(y, m, d, sh, eh);
}

int main() {
   
    MeetingRoomManager manager;
    int choice;

    do {
   
        displayMenu();
        cin >> choice;

        switch (choice) {
   
            case 1: {
   
                int id, capacity;
                string name;
                bool hasProjector;
                cout << "请输入会议室ID: ";
                cin >> id;
                cout << "请输入会议室名称: ";
                cin >> name;
                cout << "请输入会议室容量: ";
                cin >> capacity;
                cout << "是否有投影仪 (1/0): ";
                cin >> hasProjector;
                manager.addRoom(id, name, capacity, hasProjector);
                break;
            }
            case 2: {
   
                int id;
                cout << "请输入要删除的会议室ID: ";
                cin >> id;
                manager.removeRoom(id);
                break;
            }
            case 3: {
   
                int id;
                string reservator;
                cout << "请输入要预约的会议室ID: ";
                cin >> id;
                cout << "请输入预约人姓名: ";
                cin >> reservator;
                ReservationTime time = getTimeInput();
                manager.reserveRoom(id, reservator, time);
                break;
            }
            case 4: {
   
                int id;
                string reservator;
                cout << "请输入要取消预约的会议室ID: ";
                cin >> id;
                cout << "请输入预约人姓名: ";
                cin >> reservator;
                ReservationTime time = getTimeInput();
                manager.cancelReservation(id, reservator, time);
                break;
            }
            case 5: {
   
                int id;
                cout << "请输入要查询的会议室ID: ";
                cin >> id;
                manager.queryRoom(id);
                break;
            }
            case 6:
                manager.displayAllRooms();
                break;
            case 7: {
   
                int minCapacity;
                bool needProjector;
                cout << "请输入最小容量要求: ";
                cin >> minCapacity;
                cout << "是否需要投影仪 (1/0): ";
                cin >> needProjector;
                ReservationTime time = getTimeInput();
                manager.findAvailableRooms(time, minCapacity, needProjector);
                break;
            }
            case 8:
                manager.saveToFile("meeting_rooms.txt");
                break;
            case 9:
                manager.loadFromFile("meeting_rooms.txt");
                break;
            case 0:
                cout << "感谢使用会议室管理系统!" << endl;
                break;
            default:
                cout << "无效选择,请重新输入!" << endl;
        }

        cout << endl;
    } while (choice != 0);

    return 0;
}

功能

  1. 会议室管理

    • 添加会议室:设置ID、名称、容量和是否有投影仪
    • 删除会议室:根据ID删除会议室
  2. 预约管理

    • 预约会议室:选择会议室、预约人和时间
    • 取消预约:取消已有的预约记录
    • 查询会议室状态:查看特定会议室的详细信息
  3. 查询功能

    • 显示所有会议室:列出系统中所有会议室
    • 查找可用会议室:根据时间、容量和投影仪需求查找可用会议室
  4. 数据持久化

    • 保存数据:将会议室和预约信息保存到文件
    • 加载数据:从文件加载之前保存的数据

编译和运行

  1. 将代码保存为 meeting_room_system.cpp

  2. 使用C++编译器编译:

    g++ -std=c++11 meeting_room_system.cpp -o meeting_room_system
    
  3. 运行程序:

    ./meeting_room_system
    

参考系统 C++编写的会议室管理系统 www.youwenfan.com/contentalf/102871.html

扩展建议

  1. 用户认证:添加用户登录和权限管理功能
  2. 图形界面:使用Qt等框架开发图形用户界面
  3. 网络功能:添加网络支持,实现远程预约
  4. 邮件通知:预约成功或取消时发送邮件通知
  5. 数据库支持:使用SQLite或MySQL替代文件存储
  6. 日历集成:与Google Calendar或Outlook集成
相关文章
|
4月前
|
程序员 编译器 C#
C#语言中使用"using"关键字的介绍
以上就是 C# 中 "using" 关键字的主要用法。了解并熟练应用这个关键字,对于提高代码质量、解决命名冲突、管理资源都有着重要的作用。它是 C# 编程中不可或缺的一部分,无论是对初学者还是有经验的开发者而言,掌握它都是提高编写高效、清晰、可维护代码的关键。
194 7
|
4月前
|
数据采集 监控 数据处理
基于STM32实现多模态生物电信号采集与传输
基于STM32实现多模态生物电信号采集与传输
140 0
|
11月前
|
JSON 算法 Java
Nettyの网络聊天室&扩展序列化算法
通过本文的介绍,我们详细讲解了如何使用Netty构建一个简单的网络聊天室,并扩展序列化算法以提高数据传输效率。Netty的高性能和灵活性使其成为实现各种网络应用的理想选择。希望本文能帮助您更好地理解和使用Netty进行网络编程。
171 12
|
2月前
|
编解码 网络协议 安全
Socket-TCP 上位机下位机数据交互框架
Socket-TCP 上位机下位机数据交互框架
166 0
|
3月前
|
数据可视化 C#
使用 OpenTK 构建点云浏览程序
C# 通过USB连接斑马打印机打印ZPL条码
99 0
|
2月前
|
XML 测试技术 API
利用C#开发ONVIF客户端和集成RTSP播放功能
利用C#开发ONVIF客户端和集成RTSP播放功能
1334 123
|
2月前
|
机器学习/深度学习 并行计算 算法
粒子群算法优化RBF神经网络的MATLAB实现
粒子群算法优化RBF神经网络的MATLAB实现
355 123
|
3月前
|
算法
离散粒子群算法(DPSO)的原理与MATLAB实现
离散粒子群算法(DPSO)的原理与MATLAB实现
186 0
|
C++
基于 C++ 的 IEC60870-5-104 规约的主从站模拟数据通信
基于 C++ 的 IEC60870-5-104 规约的主从站模拟数据通信
184 0
|
2月前
|
Java 数据库连接 网络安全
SSH框架的核心原理与工作流程解析
以上描述了SSH框架中各个部分的职责和大致的工作流程,详细运作时还涉及更多的组件和配置细节,每个部分都有相应的最佳实践和性能调优策略,但这些都建立在理解其核心原理基础之上。
350 11