关于我的铃声系统如何实现的
我的铃声项目已经开源到这里
一半是用AI写的
main.cpp(最初项目里命名为time_get.cpp)编译后运行时会打开class_form.csv看是否存在,若存在将会加载时间,加载时间方法:
int time=1145;
int time_hour=time/100;//这里会读取时间的小时位
int time_min=time%100//取模求分钟位
/*
接下来在这里判断时间即可
*/
用上面的东西我们还在班里整了个自动眼操播放程序,语文老师:强制下课是吧
如果判断是这个时间,那么main.cpp会先打开事先编译好的audio_control.cpp(这里要编译为1_control.exe),而audio_control会打开ring_path.txt,若main.cpp运行的命令为.\1.control.exe 1
(有点忘了咋编的了)则会读取第一行,打上课铃 响铃命令例:powershell -c (New-Object Media.SoundPlayer 'ring.wav').PlaySync()
如果识别为none,则会响铃3次
代码:
if(path=="none"){
Beep(500,500);
Sleep(200);
Beep(500,500);
Sleep(200);
Beep(500,500);}
Beep这里是响铃的意思,好像是Beep(频率(Hz),时长(ms))
来着
在执行完该程序后,会执行class_form.cpp(但这里用的是多线程执行),但是class_form.cpp会再次读表 (有点负优化了) 好像运行命令是.\class_form.exe 1 2
这里“1”是指上课“2”指第几节课,第几周程序会自己判断,之后会调用msg_control.cpp来显示弹窗,由于msg_control.cpp代码很少,这里直接粘贴到这里:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main(int argc, char *argv[])
{
// 检查参数个数
if (argc != 4)
{
printf("Usage: ./msg_control.exe info title type\n");
return 1;
}
// 获取参数
char *info = argv[1]; // 消息框内容
char *title = argv[2]; // 消息框标题
char *type = argv[3]; // 消息框类型
// 根据type的值选择消息框类型
UINT msg_type;
if (strcmp(type, "w") == 0 || strcmp(type, "W") == 0)
{
msg_type = MB_ICONWARNING;
}
else if (strcmp(type, "e") == 0 || strcmp(type, "E") == 0)
{
msg_type = MB_ICONERROR;
}
else if (strcmp(type, "i") == 0 || strcmp(type, "I") == 0)
{
msg_type = MB_ICONINFORMATION;
}
else
{
printf("Invalid type: %s\n", type);
return 2;
}
// 创建消息框
int result = MessageBox(NULL, info, title, msg_type);
if (result == 0)
{
printf("Failed to create message box.\n");
return 3;
}
return 0;
}
由于铃声可能非常短,这里我在main.cpp里又加了一个记忆的系统,主体代码(示例):
int cache[rows][2] = {0};
for (int x = 1; x <= rows - 1; x++)
{//设定初始值
cache[x][1] = 0;
cache[x][2] = 0;
}
for (int k = 0; k <= 2; k++)
{//刷新时间
k--;
time_t now = time(NULL);
tm *t = localtime(&now);
for (int l = 0; l < rows - 1; l++)
{
if (t->tm_hour == begin_time_hour[l] && t->tm_min == begin_time_min[l] && cache[l][1] == 0)
{
cache[l][1]++;
}
else
{
if (t->tm_hour == end_time_hour[l] && t->tm_min == end_time_min[l] && cache[l][2] == 0)
{
cache[l][2]++;
}
}
}
Sleep(50);
}
总的来说我这程序还算挺简单的,欢迎评论!
注:第一次用markdown写