我的网站

notepad++作者脑瘫

关于我的铃声系统如何实现的

我的铃声项目已经开源到这里

一半是用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写