时钟万年历
电气工程及其自动化12级3班
制作人:杨福1238170349
党国椿1238170339
一、程序介绍
本程序是一个时钟日历软件。程序自动运行时,调用系统当前日期和时间显示,日期可以更改达到万年历效果而且可以恢复当前日历。
二、程序界面
 
三、程序源代码
function wannianli
global aa ti hs hm hh;
aa=1;
hs=0;hm=0;hh=0;
hfig=figure('NumberTitle','off','MenuBar','none','position',[330 180 600 350],'name','时钟万年历','color','c');%建立窗口,设置窗口位置,去掉标题栏,建立自己的标题栏
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','更改日期','call',editdate);
u2=uimenu(hfig,'label','当前时间','call','ti=clock;rili(ti);');
u3=uimenu(hfig,'label','退出','Call','close(gcf)');
u4=uicontrol(hfig,'style','text','string','杨福 1238170349 党国椿1238170339','fontsize',10, 'Units','normalized', 'position',[0 0 0.2 0.1], 'back','w')%制作人信息
ti=clock;rili(ti);ck(ti);%定义时钟函数  调用子程序运行完后提示有错
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','y');%日历框定义位置颜
        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.085],'fontsize',13,'fontweight','bold','back','y');%日历日期位置排序
        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','m','fontsize',13, 'fontweight','bold');%显示数字日期
end
uicontrol(gcf,'Style','text','string','年', 'Units','normalized', 'position',[0.61 0.78 0.04 0.08],'back','m','fontsize',13, 'fontweight','bold');
uicontrol(gcf,'Style','text','string','月', 'Units','normalized', 'position',[0.73 0.78 0.05 0.08],'ba
fontweight属性bold
ck','m','fontsize',13, 'fontweight','bold');
uicontrol(gcf,'Style','text','string','日', 'Units','normalized', 'position',[0.86 0.78 0.04 0.08],'back','m','fontsize',13, 'fontweight','bold'); %年月日显示的位置
function f=ck(ti)%时钟程序
global aa hs hm hh
set(gca,'position',[[0 0 0.5 1.0]]) %时钟的位置
A=linspace(0,2*pi,1000); %画时针的外圈
x1=7*cos(A);
y1=7*sin(A);
plot(x1,y1,'b','linewidth',1.5)
hold on
fill(0.3*cos(A),0.3*sin(A),'r'); %画钟表的内圈
axis off
axis([-10 10 -10 10]) %画钟表,去掉坐标轴显示样式
axis equal
for k=1:12;
    xk=6*cos(-2*pi/12*k+pi/2);
    yk=6*sin(-2*pi/12*k+pi/2);
    h=text(xk-0.5,yk,num2str(k),'fontsize',13,'color','k'); %外圈的数字字体,颜,大小
end
th=-(ti(4)+ti(5)/60+ti(6)/3600)/12*2*pi+pi/2; %时针位置颜线粗
hh=line([0 4*cos(th)],[0 4*sin(th)],'color', 'r','linewidth',5);
set(hh,'EraseMode','Xor');
tm=-(ti(5)+ti(6)/60)/60*2*pi+pi/2; % 分针位置颜线粗
hm=line([0 5*cos(tm)],[0 5*sin(tm)],'color', 'r','linewidth',3);
set(hm,'EraseMode','Xor');
ts=-(ti(6))/60*2*pi+pi/2; % 秒针位置颜线粗
hs=line([0 6.5*cos(ts)],[0 6.5*sin(ts)],'color', 'r','linewidth',2);
set(hs,'EraseMode','Xor');
set(gcf,'doublebuffer','on');
while 1
    if aa==0
        break
    end
    th=-(ti(4)+ti(5)/60+ti(6)/3600)/12*2*pi+pi/2;  %时针长度形状设置
    set(hh,'XData',[0 4*cos(th)],'YData',[0 4*sin(th)])%赋值给横纵坐标 动态 这里有毛错啊检查几天了
    tm=-(ti(5)+ti(6)/60)/60*2*pi+pi/2;    % 分针长度形状设置
    set(hm,'XData',[0 5*cos(tm)],'YData',[0 5*sin(tm)]) %赋值给横纵坐标 动态
    ts=-(ti(6))/60*2*pi+pi/2;    % 秒针长度形状设置
    set(hs,'XData',[0 6.5*cos(ts)],'YData',[0 6.5*sin(ts)]) %赋值给横纵坐标 动态
    drawnow;pause(1) ;    %时间更新的周期
    ti(6)=ti(6)+1;
    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 24>ti(4)>12 %时针清零
        ti(4)=0;
    end
end

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。