用c++写一个时钟和闹钟的程序,要求有main.cpp,Clock.h,Clock.cpp,RingClock.h,RingClock.cpp
时间: 2024-10-13 10:05:38 浏览: 33
在C++中创建一个简单的时钟和闹钟程序,我们可以将功能分为两个类:一个基础时钟(Clock),用于显示当前时间;另一个闹钟(RingClock),在特定时间触发提醒。这里是一个基本的框架结构:
首先,我们有两个头文件 Clock.h 和 RingClock.h,分别包含各自的类声明。
**Clock.h**
```cpp
#ifndef CLOCK_H
#define CLOCK_H
#include <iostream>
#include <ctime>
class Clock {
public:
Clock();
void displayTime();
private:
std::time_t currentTime;
};
#endif // CLOCK_H
```
**Clock.cpp**
```cpp
#include "Clock.h"
Clock::Clock() {
currentTime = std::time(nullptr);
}
void Clock::displayTime() {
std::cout << "Current Time: " << std::ctime(¤tTime) << std::endl;
}
```
**RingClock.h**
```cpp
#ifndef RINGCLOCK_H
#define RINGCLOCK_H
#include "Clock.h"
#include <string>
#include <chrono>
class RingClock {
public:
RingClock(const std::string& alarmTime, const Clock& clock);
void setAlarm(const std::string& alarmTime);
private:
std::string alarmTimeString;
Clock clockObj;
std::chrono::time_point<std::chrono::system_clock> alarmTimePoint;
};
#endif // RINGCLOCK_H
```
**RingClock.cpp**
```cpp
#include "RingClock.h"
RingClock::RingClock(const std::string& alarmTime, const Clock& clock)
: alarmTimeString(alarmTime), clockObj(clock) {
if (!parseAlarmTime(alarmTimeString)) {
throw std::invalid_argument("Invalid alarm time format");
}
alarmTimePoint = std::chrono::system_clock::from_time_t(std::mktime(std::strptime(alarmTimeString.c_str(), "%H:%M")));
}
bool RingClock::parseAlarmTime(const std::string& alarmTimeString) {
struct tm time_struct;
return std::strptime(alarmTimeString.c_str(), "%H:%M", &time_struct) != nullptr && std::mktime(&time_struct) != -1;
}
void RingClock::setAlarm(const std::string& alarmTime) {
alarmTimeString = alarmTime;
// 实现闹钟定时功能,例如,使用`std::thread`和条件变量
// ...
}
// 假设有一个函数ringTheAlarm() 来触发闹钟,这里仅做简单示例
void RingClock::ringTheAlarm() {
while (true) {
auto now = std::chrono::system_clock::now();
if (now >= alarmTimePoint) {
// 响铃
std::cout << "Alarm rings at: " << alarmTimeString << std::endl;
break;
}
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
```
在 main.cpp 中,我们可以实例化这两个类并设置闹钟:
**main.cpp**
```cpp
#include "main.h" // Include your header files here, assuming they are in the same directory
int main() {
Clock clock;
clock.displayTime();
RingClock ringClock("08:30", clock); // 设置8:30作为闹钟时间
ringClock.setAlarm("08:30"); // 设置闹钟
// 开启环形闹钟线程
std::thread ringThread(ringClock.ringTheAlarm);
// 主线程等待闹钟响铃
ringThread.join();
return 0;
}
```
这个例子展示了如何在C++中创建一个简单的时钟和闹钟程序的基本架构。实际应用中,你需要完善闹钟的定时部分,并可能添加更多的功能,如取消闹钟等。
阅读全文