用C++做一个带有计时闹钟功能的计算器
有没有大神给点思路啥的。 首先,你需要明确你的需求,你到底要什么功能,如果要像系统自带的计算器一样的界面,那么至少要了解一部分windows sdk编程或者mfc
计时,可以使用time.h中的time(0)获取当前时间,并使用localtime函数转化为容易识别的格式,
如果要跟精确,可以使用<window.h>中的timeGetTime(毫秒级)或<chrono>中的system_clock.now()(1/10微秒级),
闹钟,使用playsound播放声音或直接beep
你要什么功能自己去组合,我说的这些都能很容易搜到教程,怎么完成就看你自己了 Croper 发表于 2019-7-19 21:35
首先,你需要明确你的需求,你到底要什么功能,
如果要像系统自带的计算器一样的界面,那么至少要了解一部 ...
好哒 直接用Qt做图形界面,然后编写具体实现 回忆浅离 发表于 2019-7-29 12:10
直接用Qt做图形界面,然后编写具体实现
我可以单独程序做一个闹钟,单独做一个计算器,但我怎么使得这两个功能同时实现呢?就程序运行就会显示时间,我可以设置一个闹钟提示警告,同时不妨碍我计算器功能。 Croper 发表于 2019-7-19 21:35
首先,你需要明确你的需求,你到底要什么功能,
如果要像系统自带的计算器一样的界面,那么至少要了解一部 ...
我可以单独程序做一个闹钟,单独做一个计算器,我怎么使得这两个功能同时实现呢?就程序运行就会显示时间,我可以设置一个闹钟到点提示警告,同时不妨碍我计算器功能。 内裤里有糖吃 发表于 2019-7-30 11:14
我可以单独程序做一个闹钟,单独做一个计算器,但我怎么使得这两个功能同时实现呢?就程序运行就会显示时 ...
这个好办,利用Qt库直接达到当前时间,然后通过Qt开设定时器每秒更新时间,而计算器可以通过按键+信号与槽机制实现数据的计算并显示在上面两者互不冲突,一个界面就能实现 回忆浅离 发表于 2019-7-30 12:14
这个好办,利用Qt库直接达到当前时间,然后通过Qt开设定时器每秒更新时间,而计算器可以通过按键+信号与 ...
得到,打错了 回忆浅离 发表于 2019-7-30 12:15
得到,打错了
闹钟的话也可以设置,要通过Qt库开启声音机制,不过要自己设定闹钟铃声,Qt库不提供铃声,并且在更新时间地方判断设置时间是否等于当前时间,如果等于,可以直接在这个定时器里设置响铃,或者通过信号与槽机制,在更新时间这里将信号传递出去,在槽函数实现响铃处理 回忆浅离 发表于 2019-7-30 12:19
闹钟的话也可以设置,要通过Qt库开启声音机制,不过要自己设定闹钟铃声,Qt库不提供铃声,并且在更新时间 ...
我用的<time.h><window.h>,可不可以直接在程序上入手。 最好的方法是利用<thread>库新建进程处理闹钟的各项工作,这样可以保证不冲突,
如果你是做的windows下的,那么也可以SetTimer()然后响应WM_TIMER事件,
不然你就自己模拟信号机制,建立一个缓冲区保存输入和时间消息,把核心逻辑和输入输出分开,不过这样整个程序估计都得重新设计; 本帖最后由 Croper 于 2019-7-30 16:45 编辑
利用thread制作的,不会影响正常输入,甚至可以同时运行多个的闹钟,输入"setclock:"+时间 设置闹钟#include<iostream>
#include<thread>
#include<mutex>
#include<time.h>
#include<windows.h>
#include<sstream>
#include<string>
using namespace std;
mutex olock;
//获取光标位置
COORD getxy() {
CONSOLE_SCREEN_BUFFER_INFO info;
HANDLE hscr = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hscr, &info);
return info.dwCursorPosition;
}
//设置光标位置
void gotoxy(int x, int y) {
COORD coord = { x,y };
HANDLE hscr = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hscr, coord);
}
//字符串转整数
int s2i(string s) {
stringstream ss(s);
int ret;
ss >> ret;
return ret;
}
void SetClock(int delay) {
olock.lock();
COORD coord0 = getxy();
cout << "闹钟已设置:剩余" << delay << "秒 \n";
olock.unlock();
time_t now = time(0);
time_t target = time(0) + delay;
while (target > now) {
Sleep(1000);
now = time(0);
olock.lock();
COORD coord = getxy();
gotoxy(coord0.X, coord0.Y);
cout << "闹钟已设置:剩余" << target - now << "秒 \n";
gotoxy(coord.X, coord.Y);
olock.unlock();
}
olock.lock();
COORD coord = getxy();
gotoxy(coord0.X, coord0.Y);
cout << "闹钟时间到!! \n";
gotoxy(coord.X, coord.Y);
olock.unlock();
}
int main() {
string s;
cin >> s;
while (s != "quit") {
if (s.substr(0, 9) == "setclock:") {
int t = s2i(s.substr(9, -1));
if (t > 0) {
thread thr(SetClock, t);
thr.detach();
}
else {
cout << "你不能设置时长为:" << t << "的闹钟" << endl;
}
}
else {
cout << "oops!\n";
}
cin >> s;
}
}
Croper 发表于 2019-7-30 16:37
利用thread制作的,不会影响正常输入,甚至可以同时运行多个的闹钟,输入"setclock:"+时间 设置闹钟
{:7_146:}{:7_146:}{:7_146:}
页:
[1]