鱼C论坛

 找回密码
 立即注册
查看: 2631|回复: 12

[已解决]用C++做一个带有计时闹钟功能的计算器

[复制链接]
发表于 2019-7-19 16:51:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有没有大神给点思路啥的。
最佳答案
2019-7-30 16:37:38
本帖最后由 Croper 于 2019-7-30 16:45 编辑

利用thread制作的,不会影响正常输入,甚至可以同时运行多个的闹钟,输入"setclock:"+时间 设置闹钟
  1. #include<iostream>
  2. #include<thread>
  3. #include<mutex>
  4. #include<time.h>
  5. #include<windows.h>
  6. #include<sstream>
  7. #include<string>

  8. using namespace std;
  9. mutex olock;

  10. //获取光标位置
  11. COORD getxy() {
  12.         CONSOLE_SCREEN_BUFFER_INFO info;
  13.         HANDLE hscr = GetStdHandle(STD_OUTPUT_HANDLE);
  14.         GetConsoleScreenBufferInfo(hscr, &info);
  15.         return info.dwCursorPosition;
  16. }

  17. //设置光标位置
  18. void gotoxy(int x, int y) {
  19.         COORD coord = { x,y };
  20.         HANDLE hscr = GetStdHandle(STD_OUTPUT_HANDLE);
  21.         SetConsoleCursorPosition(hscr, coord);
  22. }

  23. //字符串转整数
  24. int s2i(string s) {
  25.         stringstream ss(s);
  26.         int ret;
  27.         ss >> ret;
  28.         return ret;
  29. }

  30. void SetClock(int delay) {
  31.         olock.lock();
  32.         COORD coord0 = getxy();
  33.         cout << "闹钟已设置:剩余" << delay << "秒    \n";
  34.         olock.unlock();

  35.         time_t now = time(0);
  36.         time_t target = time(0) + delay;
  37.         while (target > now) {
  38.                 Sleep(1000);
  39.                 now = time(0);
  40.                 olock.lock();
  41.                 COORD coord = getxy();
  42.                 gotoxy(coord0.X, coord0.Y);
  43.                 cout << "闹钟已设置:剩余" << target - now << "秒     \n";
  44.                 gotoxy(coord.X, coord.Y);
  45.                 olock.unlock();
  46.         }
  47.         olock.lock();
  48.         COORD coord = getxy();
  49.         gotoxy(coord0.X, coord0.Y);
  50.         cout << "闹钟时间到!!      \n";
  51.         gotoxy(coord.X, coord.Y);
  52.         olock.unlock();
  53. }

  54. int main() {
  55.         string s;
  56.         cin >> s;
  57.         while (s != "quit") {
  58.                 if (s.substr(0, 9) == "setclock:") {
  59.                         int t = s2i(s.substr(9, -1));
  60.                         if (t > 0) {
  61.                                 thread thr(SetClock, t);
  62.                                 thr.detach();
  63.                         }
  64.                         else {
  65.                                 cout << "你不能设置时长为:" << t << "的闹钟" << endl;
  66.                         }
  67.                 }
  68.                 else {
  69.                         cout << "oops!\n";
  70.                 }
  71.                 cin >> s;
  72.         }
  73. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-7-21 14:52:45 | 显示全部楼层
Croper 发表于 2019-7-19 21:35
首先,你需要明确你的需求,你到底要什么功能,
如果要像系统自带的计算器一样的界面,那么至少要了解一部 ...

好哒
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-30 11:14:07 | 显示全部楼层
回忆浅离 发表于 2019-7-29 12:10
直接用Qt做图形界面,然后编写具体实现

我可以单独程序做一个闹钟,单独做一个计算器,但我怎么使得这两个功能同时实现呢?就程序运行就会显示时间,我可以设置一个闹钟提示警告,同时不妨碍我计算器功能。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-30 11:16:23 | 显示全部楼层
Croper 发表于 2019-7-19 21:35
首先,你需要明确你的需求,你到底要什么功能,
如果要像系统自带的计算器一样的界面,那么至少要了解一部 ...

我可以单独程序做一个闹钟,单独做一个计算器,我怎么使得这两个功能同时实现呢?就程序运行就会显示时间,我可以设置一个闹钟到点提示警告,同时不妨碍我计算器功能。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-30 13:34:27 | 显示全部楼层
回忆浅离 发表于 2019-7-30 12:19
闹钟的话也可以设置,要通过Qt库开启声音机制,不过要自己设定闹钟铃声,Qt库不提供铃声,并且在更新时间 ...

我用的<time.h><window.h>,可不可以直接在程序上入手。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-31 10:24:45 | 显示全部楼层
Croper 发表于 2019-7-30 16:37
利用thread制作的,不会影响正常输入,甚至可以同时运行多个的闹钟,输入"setclock:"+时间 设置闹钟

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-19 06:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表