C++实现闹钟程序的方法

下面我来详细讲解一下 C++ 实现闹钟程序的方法。

一、实现思路

要实现闹钟程序,就需要先了解一下闹钟程序的基本功能:1)设置闹钟时间;2)定时器到时后发出提示音;3)停止提示音。根据这些功能,我们可以分解出以下几个步骤:

  1. 读取用户设置的闹钟时间;
  2. 判断当前时间是否等于闹钟时间,如果不等待,则继续等待;
  3. 定时器到时后,播放提示音;
  4. 用户选择关闭提示音或延迟提示音;如果关闭,则结束程序;如果延迟,则重新进入步骤 2。

在实现过程中,我们可以利用 C++ 中的库函数和数据类型来实现上述功能。

二、示例1:使用 库实现闹钟程序

下面是使用 库实现闹钟程序的示例代码:

#include <ctime>  // 包含 <ctime> 库
#include <iostream>
#include <string>

int main() {
  bool alarm_set = false;  // 闹钟是否设置
  std::string alarm_time;  // 闹钟时间字符串

  while (!alarm_set) {
    std::cout << "请输入闹钟时间(格式为HH:MM):" << std::endl;
    std::cin >> alarm_time;

    // 判断时间格式是否合法
    time_t alarm_seconds;
    tm alarm_tm;
    const char *time_str = alarm_time.c_str();
    if (strptime(time_str, "%H:%M", &alarm_tm) == NULL) {
      std::cout << "输入的时间格式错误,请重新输入。" << std::endl;
      continue;
    }

    alarm_tm.tm_sec = 0;  // 秒数设为0
    alarm_seconds = mktime(&alarm_tm);  // 转为 time_t 类型
    time_t now_seconds = time(NULL);  // 获取当前时间的 time_t 值

    if (now_seconds >= alarm_seconds) {
      std::cout << "输入的闹钟时间已过,请重新输入。" << std::endl;
      continue;
    } else {
      std::cout << "闹钟设置成功!" << std::endl;
      alarm_set = true;
    }
  }

  time_t start_time = time(NULL);  // 记录程序启动时间
  bool alarm_ringing = false;

  while (true) {
    time_t current_time = time(NULL);
    if (current_time - start_time >= alarm_seconds && !alarm_ringing) {
      std::cout << "\a";  // 发出提示音
      alarm_ringing = true;
    }

    if (alarm_ringing) {
      std::cout << "是否关闭提示音?(Y/N)" << std::endl;
      char choice;
      std::cin >> choice;
      if (choice == 'Y' || choice == 'y') {
        std::cout << "提示音关闭。" << std::endl;
        break;
      } else {
        start_time = time(NULL);  // 重新记录程序启动时间,相当于延迟提示音
        alarm_ringing = false;
      }
    }
  }

  return 0;
}

代码中使用了 库中的 time() 函数和 mktime() 函数来处理时间,其中 strftime() 函数用于将时间转为字符串,strptime() 函数用于将字符串转为时间。程序先要读取用户设置的闹钟时间,如果格式合法且未过期,则进行闹钟计时;当闹钟时间到达时,发出提示音,并询问用户是否关闭提示音或延迟提示音,如果用户选择关闭,则结束程序。

三、示例2:使用第三方库实现闹钟程序

第三方库常用的是 Qt,这里我们会用到 Qt5.10 。在此之前需要先安装 Qt5.10,然后启用Qt Creator IDE。下面是使用 Qt5.10 实现闹钟程序的示例代码:

#include <QApplication>
#include <QTime>
#include <QTimer>
#include <QMessageBox>

int main(int argc, char *argv[]) {
  QApplication app(argc, argv);

  QTime alarm_time;
  bool alarm_set = false;

  while (!alarm_set) {
    QString input_time = QInputDialog::getText(NULL, "设置闹钟时间",
                                                "请输入闹钟时间:(格式为HH:MM)");
    QStringList time_parts = input_time.split(":");
    int hour = time_parts[0].toInt();
    int minute = time_parts[1].toInt();

    if (hour >= 24 || minute >= 60) {
      QMessageBox::warning(NULL, "时间格式不正确", "请检查输入的时间格式是否正确。");
      continue;
    } else {
      alarm_time = QTime(hour, minute);
      alarm_set = true;
    }
  }

  QTimer alarm_timer;
  alarm_timer.setInterval(1000);
  alarm_timer.start();

  QObject::connect(&alarm_timer, &QTimer::timeout, [&]() {
    QTime current_time = QTime::currentTime();
    if (current_time.hour() == alarm_time.hour() &&
        current_time.minute() == alarm_time.minute()) {
      QMessageBox msgBox;
      msgBox.setText("时间到了!");
      QAbstractButton *cancel_button = msgBox.addButton("取消", QMessageBox::RejectRole);
      QAbstractButton *delay_button = msgBox.addButton("延迟五分钟", QMessageBox::ActionRole);
      msgBox.setDefaultButton(cancel_button);
      msgBox.exec();

      if (msgBox.clickedButton() == cancel_button) {
        app.quit();
      } else if (msgBox.clickedButton() == delay_button) {
        alarm_time = alarm_time.addSecs(300);
      }
    }
  });

  return app.exec();
}

代码中使用了 Qt library 中的 QTimer 类来实现时钟,QInputDialog 类来获取用户的设置,QMessageBox 类来显示提示音。程序先要读取用户设置的闹钟时间,如果格式合法,则开始闹钟计时;当闹钟时间到达时,发出提示音,并询问用户是否关闭提示音或延迟五分钟后继续,如果用户选择关闭,则结束程序。

四、总结

以上就是 C++ 实现闹钟程序的方法和示例,通过使用 C++ 标准库或第三方库,我们可以轻松实现具备一定功能的闹钟程序。需要注意的是,不同的库和框架会有不同的实现方法和细节处理,需要结合实际情况进行选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现闹钟程序的方法 - Python技术站

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

相关文章

  • 逍遥自在学C语言 | 第一个C语言程序 九层之台起于垒土

    一、人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。 二、C语言简介 C语言是一种高级语言,运行效率仅次于汇编,支持跨平台 C语言是学习其他高级语言的基础,如C++、Java和Python 三、编程环境 1、在线编译 百度搜索C语言在线编译,会发现有很多在线编译工具 这里以菜鸟工…

    C语言 2023年4月18日
    00
  • 浅谈c++11闭包的实现

    浅谈C++11闭包的实现 什么是闭包 闭包是一种特殊的函数,它可以访问它的外部作用域中的变量,并且可以在离开作用域后仍然继续访问这些变量。在C++中,闭包通常会通过lambda函数来实现。 Lambda表达式简介 Lambda表达式是C++11引入的新特性,它是一种匿名函数,可以用于定义匿名临时函数对象。Lambda表达式通常有以下形式: [capture …

    C 2023年5月22日
    00
  • C++中的memset用法详解

    C++中的memset用法详解 什么是memset函数 memset函数是C++ STL库中的一个函数,它的作用是对一块内存空间进行初始化赋值。memset可以将一段内存空间的每一个字节都设置成相同的值,例如将一个数组中的所有元素都设置为0。 memset函数的语法 memset函数的语法如下: void *memset(void *ptr, int val…

    C 2023年5月23日
    00
  • C语言用malloc创建一维数组

    当我们在C语言中需要动态分配一维数组时,我们可以使用malloc函数来进行分配。malloc函数会返回一个void类型的指针,我们需要将它强制类型转换成所需要的数组类型指针,以便后续的使用。 下面是使用malloc创建一维数组的完整攻略: 1. 分配内存空间 我们可以使用malloc函数来分配内存空间,其函数原型为: #include <stdlib.…

    C 2023年5月9日
    00
  • python深度总结线性回归

    Python深度总结线性回归攻略 本文将详细介绍如何使用Python实现线性回归,并包含两个完整的示例说明。 一、线性回归概述 线性回归是一种统计学习方法,用于建立两个或多个变量之间的线性关系。 在线性回归中,我们尝试找到一条直线,以使所有数据点与该直线的距离最小化。 二、Python实现线性回归 下面我们将使用Python实现线性回归。我们需要使用NumP…

    C 2023年5月22日
    00
  • Win8.1系统运行阿里旺旺提示异常代码c0000005怎么办?

    问题描述: 在Win8.1系统中运行阿里旺旺时,提示异常代码c0000005,导致无法正常使用阿里旺旺。 解决方法: Step 1:检查阿里旺旺版本和系统版本 首先检查阿里旺旺是否与Win8.1系统兼容。可以在阿里旺旺官方网站上查看阿里旺旺的最新版本和兼容性信息。 Step 2:更新阿里旺旺到最新版本 如果阿里旺旺与Win8.1兼容,那么可能是阿里旺旺的版本…

    C 2023年5月23日
    00
  • 电脑越来越卡怎么办 手写CCleaner电脑垃圾文件清理规则

    关于“电脑越来越卡怎么办”这个问题,我们可以通过手写CCleaner电脑垃圾文件清理规则来优化电脑性能。以下就是详细的攻略: 步骤一:下载和安装CCleaner 首先,我们需要从官方网站下载并安装CCleaner。下载链接:https://www.ccleaner.com/ccleaner/download 步骤二:运行CCleaner 安装完成后,我们可以…

    C 2023年5月23日
    00
  • C语言之选择分支语句详解

    C语言之选择分支语句详解 在C语言中,选择分支语句主要用来根据某些条件来决定程序运行的不同路径,通常有以下三种形式: if语句 switch语句 三目运算符 if语句 if语句的一般形式如下: if (条件表达式) { // 条件满足时执行的代码块 } 例如,下面的代码将根据用户输入的数字来判断其是正数、负数还是零: #include <stdio.h…

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