基于MATLAB的日历设计

本设计主要是制作一个时钟软件,包括一个时钟表和一个日历。程序自动运行时,显示系统当前日期和时间,日期和时间可以由用户自行更改。

本软件由一个主程序myclcok及两个子函数rili 和ck组成。主程序myclcok主要用于建立主窗口的菜单及相关的功能编辑,rili函数用于建立日历界面,ck函数用于建立时钟界面。

主程序如下:

function myclock
    global aa ti hs hm hh;
    aa = 1;
    hs = 0;hm = 0;hh = 0;
    hfig= figure( 'NumberTitle', 'off', 'position',[624 118 600 350],...
                    'name', '日历','MenuBar', 'none', 'color',[0.8 0.7 0.8]);
    editdate= [ 's = clock;',...
                'p1={"年", "月","日"};',...
                'A= inputdlg(p1,"日期:",1);'...
                's(1) = str2num(A{1});',...
                's(2) = str2num(A{2});',...
                's(3) = str2num(A{3});',...
                'rili(s);'];
    u1 = uimenu(hfig, 'label','&设置日期','callback', editdate);
    u2 = uimenu(hfig, 'label','&恢复当前日期','callback','ti = clock;rili(ti);');
    ab= ['global aa ti hs hm hh;',...
        '*aa=0;',...
        'p2 ={"时","分","秒"};',...
        'B = inputdIg(p2,"日期:",1);',...
        'ti(4) = str2num(B{1});',...
        'ti(5) = str2num(B{2});',...
        'ti(6) = str2num(B({3});',...
        'delete(hs);delete( hm);delete(hh);',...
        'aa = 1;',...
        'ck(ti);'];
   
    u3 = uimenu(hfig, 'label', '&设置时间','callback',ab); 
    ab1=['global aa ti hs hm hh;',...
        'aa=0;',...
        'delete( hs);delete(hm);delete(hh);'...
        'ti = clock;',...
        'aa= 1;',...
        'ck(ti);'];
    u4 = uimenu(hfig,'label','&恢复当前时间','callback', ab1);
    u5 = uimenu(hfig, 'label', '&退出', 'callback', 'close(gcf)');
    u6 = uicontrol(hfig, 'style', 'text', 'string', 'GUI示例',...
                'Units', 'normalized', 'position',[0.85 0.01 0.15 0.05],...
                'back',[0.8 0.7 0.8]);
    ti= ?;rili(ti);ck(ti);
end

子函数

function f = ck(ti)
    global aa hs hm hh
    set(gca, 'position',[0 0 0.5 0.9])
    A = linspace(0,6.3,1000);
    x1 = 8*cos(A);%极坐标画圆
    y1 = 8*sin(A);
    x2 = 7*cos(A);
    y2 = 7*sin(A);
    plot(x1,y1, 'b','linewidth',1.4)
    hold on
    plot(x2,y2, 'b','linewidth',3.5)
    fill(0.4*cos(A),0.4*sin(A), 'r');
    axis off
    axis([-10 10 -10 10])
    axis equal
    for k= 1:12
        xk = 9*cos(- 2* pi/12*k+ pi/2);
        yk = 9*sin(-2* pi/12*k+ pi/2); 
        plot([xk/9*8 xk/9*7],[yk/9*8 yk/9*7], 'color',[0.8 0.1 0.5])
        h = text(xk-0.5, yk, num2str(k), 'fontsize',13, 'color',[0.9 0.3 0.8]);
    end
%计算时针位置
    th= - (ti(4) + ti(5)/60 + ti(6)/3600)/12*2*pi+pi/2;
    xh3 =4.0 * cos(th);
    yh3 =4.0 * sin(th);
    xh2 = xh3/2 +0.5* cos(th- pi/2);
    yh2 = yh3/2 +0.5* sin(th- pi/2);
    xh4 = xh3/2- 0.5* cos(th- pi/2);
    yh4 = yh3/2- 0.5* sin(th- pi/2);
    hh = fill([0 xh2 xh3 xh4 0],[0 yh2 yh3 yh4 0],[0.6 0.5 0.3]);
    set(hh, 'EraseMode', 'Xor');
%计算分针位置
    tm = - (ti(5) + ti(6)/60)/60*2*pi+pi/2;
    xm3 =6.0* cos(tm);
    ym3 =6.0* sin(tm);
    xm2 = xm3/2+ 0.5 *cos(tm- pi/2);
    ym2 = ym3/2+ 0.5* sin(tm- pi/2); 
    xm4 = xm3/2- 0.5* cos(tm- pi/2);
    ym4 = ym3/2- 0.5* sin(tm- pi/2);
    hm = fill([0 xm2 xm3 xm4 0],[0 ym2 ym3 ym4 0],[0.6 0.5 0.3]);
    set(hm, 'EraseMode', 'Xor');
%计算秒针位置
    ts = - (ti(6))/60*2*pi+ pi/2;
    hs = line([0 7 * cos(ts)],[0 7*sin(ts)], 'color',[0.6 0.5 0.3], 'linewidth',3);
    set( hs, 'EraseMode', 'Xor');
    set(gcf, 'doublebuffer', 'on');
    
    while 1
        if aa == 0
            aaa = 1;
            break;
        end
%计算时针位置
        th = -(ti(4) + ti(5)/60+ ti(6)/3600)/12*2*pi +pi/2;
        xh3 = 4.0*cos(th);
        yh3 = 4.0* sin(th);
        xh2 = xh3/2+0.5* cos(th- pi/2);
        yh2 = yh3/2+0.5* sin(th- pi/2); 
        xh4= xh3/2-0.5*cos(th- pi/2);
        yh4= yh3/2-0.5* sin(th- pi/2);
        set(hh,'XData',[0 xh2 xh3 xh4 0],'YData',[0 yh2 yh3 yh4 0]);
        plot(0,0,'* ')
    %计算分针位置
        tm = -(ti(5) + ti(6)/60)/60*2*pi+ pi/2;
        xm3 = 6.0* cos(tm);
        ym3 = 6.0* sin(tm);
        xm2 = xm3/2+0.5* cos(tm- pi/2);
        ym2 = ym3/2 +0.5* sin(tm- pi/2);
        xm4 = xm3/2- 0.5* cos(tm- pi/2);
        ym4 = ym3/2-0.5 * sin(tm- pi/2);
        set(hm, 'XData',[0 xm2 xm3 xm4 0],'YData',[0 ym2 ym3 ym4 0]);
    %计算秒针位置
        ts = -(ti(6))/60*2*pi+ pi/2;
        set(hs, 'XData',[0 7*cos(ts)], 'YData',[0 7*sin(ts)]);
        drawnow;
        pause(0.05) ;
    %时间更新
        ti(6) = ti(6) + 0.15;
        if ti(6) > 60
            ti(6) =0;
            ti(5) = ti(5) +1;
        end
        if ti(5)> 60
            ti(5)=0;
            ti(4)= ti(4) + 1;
        end
        if ti(4)> 12
            ti(4) =0;
        end
    end
end
function f = rili(ti)
    global h3
    a = calendar(ti(1), ti(2));
    for i=1:6
        for j=1:7
            if a(i,j) == 0
            h(i*7+j) = uicontrol(gcf, 'Style', 'text', 'Units', 'normalized',...
                        'position',[0.45+0.06* j 0.65-0.08* i 0.06 0.08], 'fontsize', 13,...
                        'fontweight', 'bold', 'back',[0.6 0.8 0.1]);
            else
            h(i*7+j)= uicontrol(gcf, 'Style', 'text', 'string',a(i,j), 'Units', 'normalized',...
                        'position',[0.45+0.06*j 0.65-0.08*i 0.06 0.08],'fontsize',13,...
                        'fontweight', 'bold', 'back',[0.6 0.8 0.1]);
            end
            if a(i,j)== ti(3)
                set(h(i*7+j),'back',[0.5 0.2 0.5]);
            end
        end
    end
    h2 = uicontrol(gcf, 'Style', 'text', 'string','日  一  二  三  四  五  六',...
                'Units', 'normalized', 'position',[0.51 0.65 0.42 0.1], 'fontsize',16,...
                'fontweight', 'bold', 'back',[0.2 0.8 0.2]);
    for m= 1:3  
        h3(m) = uicontrol(gcf, 'Style', 'text', 'string', num2str(ti(m)), 'Units', 'normalized',...
                'position',[0.39+0.13*m 0.78 0.09 0.08],'back',[0.9 0.8 0.8],'fontsize', 13, 'fontweight', 'bold');
    end
    uicontrol(gcf, 'Style', 'text', 'string','年','Units', 'normalized',...
            'position',[0.61 0.78 0.04 0.08], 'back',[0.9 0.8 0.8], 'fontsize',13, 'fontweight', 'bold');
    uicontrol(gcf, 'Style', 'text', 'string','月','Units', 'normalized',...
             'position',[0.73 0.78 0.05 0.08], 'back',[0.9 0.8 0.8],'fontsize',13, 'fontweight', 'bold');
    uicontrol(gcf, 'Style', 'text', 'string','日','Units', 'normalized',...
             'position',[0.86 0.78 0.04 0.08],'back',[0.9 0.8 0.8], 'fontsize', 13, 'fontweight', 'bold');
end

结果如下:
在这里插入图片描述
设置日期
在这里插入图片描述
程序可以运行,不过,我在上面的代码上留下了一个bug,欢迎大家一起讨论,也可以私信我哈,哈哈哈。

  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
### 回答1: 基于Matlab日历设计是一种利用Matlab编程语言和其图形用户界面设计工具,实现自定义样式和功能的日历应用程序。通过Matlab的强大计算和绘图能力,我们可以设计出具有各种功能和样式的个性化日历。 首先,我们可以使用Matlab中的日期和时间函数来获取当前日期和时间,并将其显示在日历界面上。通过添加按钮和下拉菜单,用户可以选择不同的日期范围进行查看。 其次,我们可以根据用户需求,自定义各种功能和特色。例如,我们可以添加提醒功能,在特定日期弹出提醒窗口,提醒用户重要的事项和活动。我们还可以集成天气预报功能,通过网络获取天气数据,并显示在日历中,方便用户查看当天和未来几天的天气情况。 此外,我们可以为每个日期单元格添加自定义的事件和注释。用户可以使用文本框或弹出窗口来添加、编辑和删除事件,在日历上查看和管理自己的日程安排。 对于界面设计Matlab提供了强大的绘图工具和图形用户界面编辑器。我们可以自定义颜色、字体和布局,以及添加背景图片和动画效果,使日历界面更加美观和用户友好。 总之,基于Matlab日历设计可以实现多种功能和个性化需求,提供方便、实用和美观的日历应用程序。无论是个人日程管理,还是团队协作,都可以通过Matlab来实现自定义的日历应用。 ### 回答2: 基于MATLAB日历设计是通过编程语言MATLAB来实现一个日历应用程序,可以显示指定年份的日历,并提供一些其他功能,例如显示特殊节日、添加备忘录等。 首先,需要确定要显示的年份,并通过MATLAB编程获取该年的日历数据。可以利用内置函数`calendar`来获取给定年份的日历数据,该函数会返回一个7xN的矩阵,其中N表示该年的月份数量。每一列代表一个月份的日历数据。 接下来,可以通过图形用户界面(GUI)设计一个美观、易用的日历界面。可以使用MATLAB的GUI工具箱来创建窗口、按钮、文本框等控件,并通过编程将日历数据显示在界面上。可以利用MATLAB的绘图函数来绘制日历的方格,并在每个方格中显示相应的日期信息。 同时,可以为日历设计一些附加功能。例如,可以通过调用网络资源或自定义配置文件来获取特殊节日的日期,并在日历中对这些日期进行标注。还可以添加备忘录功能,允许用户在指定日期添加和查看备忘录,可以使用MATLAB的文件操作函数来保存和读取备忘录数据。 最后,为了使日历应用程序更加灵活和易于使用,可以添加一些交互功能。例如,允许用户通过输入框输入年份,然后通过点击按钮来更新日历显示。还可以允许用户通过点击日历中的日期来查看详细信息或进行其他操作。 总之,基于MATLAB日历设计可以利用MATLAB的编程能力和图形化界面工具,实现一个功能齐全、易用的日历应用程序,帮助用户方便地查看日期、记忆重要日子和管理日程安排。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值