
利用Visual C++设计一个闹钟程序,定时事件提醒等。本题目涉及使用设备上下文进行绘图和定时器的应用。
功能要求:
1表盘界面的显示,显示当前时间。
2设置交互界面,用以设置时间信息和选择提示事件。
3用户可以输入特定时间和选择播放声音或闪动指示灯来提醒用户。
4具有秒表功能。
设计提示:
1应用程序框架设计。
2程序菜单设计。
3程序对话框设计。
4表盘绘图程序设计。
5事件定时提醒功能设计。
#include<graphicsh>
#include<conioh>
#include<mathh>
#include<dosh>
#include<stdioh>
void main()
{
int gd=DETECT,gm;
int x=320,y=240,r=200,i,h,m,s,thetamin,thetasec;
struct time t;
char n[12][3]={"3","2","1","12","11","10","9","8","7","6","5","4"};
initgraph(&gd,&gm,"C:\Win-TC\bgi");//图形驱动器路径,根据自己的系统更换!
circle(x,y,210);
setcolor(4);
settextstyle(4,0,5);
for(i=0;i<12;i++)
{
if(i!=3)
outtextxy(x+(r-14)cos(M_PI/6i)-10,y-(r-14)sin(M_PI/6i)-26,n[i]);
else
outtextxy(x+(r-14)cos(M_PI/6i)-20,y-(r-14)sin(M_PI/6i)-26,n[i]);
}
gettime(&t);
printf("The current time is: %2d:%02d:%02d%02d\n",tti_hour, tti_min,
tti_sec, tti_hund);
while(!kbhit())
{
setcolor(5);
setfillstyle(1,5);
circle(x,y,10);
floodfill(x,y,5);
gettime(&t);
if(tti_min!=m)
{
setcolor(0);
line(x,y,x+(r-60)cos(thetamin(M_PI/180)),y-(r-60)sin(thetamin(M_PI/180
)));
circle(x+(r-80)cos(thetamin(M_PI/180)),y-(r-80)sin(thetamin(M_PI/180))
,10);
line(x,y,x+(r-110)cos(M_PI/6h-((m/2)(M_PI/180))),y-(r-110)sin(M_PI/6h
-((m/2)(M_PI/180))));
circle(x+(r-130)cos(M_PI/6h-((m/2)(M_PI/180))),y-(r-130)sin(M_PI/6h-(
(m/2)(M_PI/180))),10);
}
if(tti_hour>12)
tti_hour=tti_hour-12;
if(tti_hour<4)
h=abs(tti_hour-3);
else
h=15-tti_hour;
m=tti_min;
if(tti_min<=15)
thetamin=(15-tti_min)6;
else
thetamin=450-tti_min6;
if(tti_sec<=15)
thetasec=(15-tti_sec)6;
else
thetasec=450-tti_sec6;
setcolor(4);
line(x,y,x+(r-110)cos(M_PI/6h-((m/2)(M_PI/180))),y-(r-110)sin(M_PI/6h
-((m/2)(M_PI/180))));
circle(x+(r-130)cos(M_PI/6h-((m/2)(M_PI/180))),y-(r-130)sin(M_PI/6h-(
(m/2)(M_PI/180))),10);
line(x,y,x+(r-60)cos(thetamin(M_PI/180)),y-(r-60)sin(thetamin(M_PI/180
)));
circle(x+(r-80)cos(thetamin(M_PI/180)),y-(r-80)sin(thetamin(M_PI/180))
,10);
setcolor(15);
line(x,y,x+(r-70)cos(thetasec(M_PI/180)),y-(r-70)sin(thetasec(M_PI/180
)));
delay(1000);
setcolor(0);
line(x,y,x+(r-70)cos(thetasec(M_PI/180)),y-(r-70)sin(thetasec(M_PI/180
)));
}
}
//我已通过Turbo C++30编译,给分!
有,但是要求有一点多,就是打开的浏览器必须开着,到点时才能提醒,下面用2345浏览器1010版本演示 *** 作方法:
一、打开电脑浏览器,搜索“便民查询网”,并打开。
二、打开便民查询网后,找到在线闹钟,点击打开。
三、打开之后是设置时间,点击时间箭头,设置时间。
四、如下图,设置响铃时间之后,就会立即进入闹钟状态,时间到后就会通知。
import javautil;
import javaawt;
import javaapplet;
import javatext;
public class AlarmClock extends Applet implements Runnable
{
Thread timer=null; //创建线程timer
Image clockp,gif1,gif2,clock6,clock7; //clockp:闹钟的外壳,闹铃和报时鸟
int s,m,h,hh;
AudioClip ipAu,danger,chirp;
boolean canPaint=true;
boolean flag=false;
boolean strike=true;
int counter=0;
int lasts;
Image offscreen_buf=null;
int i,j,t=0;
int timeout=166;
int lastxs=0,lastys=0,lastxm=0,lastym=0,lastxh=0,lastyh=0;
Date dummy=new Date(); //生成Data对象
GregorianCalendar cal=new GregorianCalendar();
SimpleDateFormat df=new SimpleDateFormat("yyyy MM dd HH:mm:ss");//设置时间格式
String lastdate=dfformat(dummy);
Font F=new Font("TimesRoman",FontPLAIN,14);//设置字体格式
Date dat=null;
Date timeNow=null;
Color fgcol=Colorblue;
Color fgcol2=ColordarkGray;
Panel setpanel;
Color backcolor=Colorpink;
TextField showhour,showmin,showsec,sethour,setmin,setsec;//显示当前时间文本框和定时文本框
Button onbutton;
Button offbutton;
Label hlabel1,mlabel1,slabel1,hlabel2,mlabel2,slabel2;//显示时间单位时所用的标签(时、分、秒)
Label info1=new Label("欢迎使用定时提醒闹钟"),info2=new Label("");
Label note1=new Label("当前时间:"),note2=new Label("闹钟设置:");
boolean setalerm=false,clickflag=false;//判断是否响铃和振动
int fixh=0,fixm=0,fixs=0;//记录闹钟的定时
public void init()//初始化方法
{
Integer gif_number;
int fieldx=50,fieldy1=120,fieldy2=220,fieldw=30,fieldh=20,space=50;//显示时间和定时文本框的定位参数
setLayout(null); //将布局管理器初始化为null
setpanel=new Panel();
setpanelsetLayout(null);
setpaneladd(note1);
setpaneladd(note2);
note1setBounds(30,100,60,20);
note1setBackground(backcolor);
note1setForeground(Colorblack);
note2setBounds(30,180,60,20);
note2setBackground(backcolor);
note2setForeground(Colorblack);
hlabel1=new Label();
mlabel1=new Label();
slabel1=new Label();
hlabel2=new Label();
mlabel2=new Label();
slabel2=new Label();
//显示当前时间用的文本框
showhour=new TextField("00",5);
showmin=new TextField("00",5);
showsec=new TextField("00",5);
//定时用的文本框(时、分、秒)
sethour=new TextField("00",5);
setmin=new TextField("00",5);
setsec=new TextField("00",5);
//当前时间用的文本框的位置、大小
setpaneladd(showhour);
showhoursetBounds(fieldx,fieldy1,fieldw,fieldh);
showhoursetBackground(Colorwhite);
//在文本框后加入单位“时”
setpaneladd(hlabel1);
hlabel1setText("时");
hlabel1setBackground(backcolor);
hlabel1setForeground(Colorblack);
hlabel1setBounds(fieldx+fieldw+3,fieldy1,14,20);
fieldx=fieldx+space;
//当前时间的分钟文本框的位置、大小
setpaneladd(showmin);
showminsetBounds(fieldx,fieldy1,fieldw,fieldh);
showminsetBackground(Colorwhite);
//在文本框后加入单位“分”
setpaneladd(mlabel1);
mlabel1setText("分");
mlabel1setBackground(backcolor);
mlabel1setForeground(Colorblack);
mlabel1setBounds(fieldx+fieldw+3,fieldy1,14,20);
fieldx=fieldx+space;
//当前时间的秒文本框的位置、大小
setpaneladd(showsec);
showsecsetBounds(fieldx,fieldy1,fieldw,fieldh);
showsecsetBackground(Colorwhite);
//在文本框后加入单位“秒”
setpaneladd(slabel1);
slabel1setText("秒");
slabel1setBackground(backcolor);
slabel1setForeground(Colorblack);
slabel1setBounds(fieldx+fieldw+3,fieldy1,14,20);
fieldx=50;
//定时的小时文本框的位置、大小
setpaneladd(sethour);
sethoursetBounds(fieldx,fieldy2,fieldw,fieldh);
sethoursetBackground(Colorwhite);
//在文本框后加入单位“时”
setpaneladd(hlabel2);
hlabel2setText("时");
hlabel2setBackground(backcolor);
hlabel2setForeground(Colorblack);
hlabel2setBounds(fieldx+fieldw+3,fieldy2,14,20);
fieldx=fieldx+space;
//定时的分钟文本框的位置、大小
setpaneladd(setmin);
setminsetBounds(fieldx,fieldy2,fieldw,fieldh);
setminsetBackground(Colorwhite);
//在文本框后加入单位“分”
setpaneladd(mlabel2);
mlabel2setText("分");
mlabel2setBackground(backcolor);
mlabel2setForeground(Colorblack);
mlabel2setBounds(fieldx+fieldw+3,fieldy2,14,20);
fieldx=fieldx+space;
//定时的秒文本框的位置、大小
setpaneladd(setsec);
setsecsetBounds(fieldx,fieldy2,fieldw,fieldh);
setsecsetBackground(Colorwhite);
//在文本框后加入单位“秒”
setpaneladd(slabel2);
slabel2setText("秒");
slabel2setBackground(backcolor);
slabel2setForeground(Colorblack);
slabel2setBounds(fieldx+fieldw+3,fieldy2,14,20);
//设置闹钟控制按钮(on,off)
onbutton=new Button("开");
offbutton=new Button("关");
setpaneladd(onbutton);
setpaneladd(offbutton);
onbuttonsetBounds(90,180,40,20);
offbuttonsetBounds(140,180,40,20);
//加入一些附加的信息标签(题头,题尾)
setpaneladd(info1);
info1setBackground(backcolor);
info1setForeground(Colorblue);
info1setBounds(50,50,150,20);
setpaneladd(info2);
info2setBackground(backcolor);
info2setForeground(Colorblue);
info2setBounds(150,280,100,20);
//将面板加入当前容器中,并设置面板的大小和背景色
add(setpanel);
setpanelsetBounds(300,1,250,420);
setpanelsetBackground(backcolor);
//获取声音文件
ipAu=getAudioClip(getDocumentBase(),"bells/仙剑mid");
danger=getAudioClip(getDocumentBase(),"bells/0mid");
chirp=getAudioClip(getDocumentBase(),"bells/3mid");
int xcenter,ycenter,s,m,h;
xcenter=145;
ycenter=162;
s=(int)calget(CalendarSECOND);
m=(int)calget(CalendarMINUTE);
h=(int)calget(CalendarHOUR_OF_DAY);
//初始化指针位置
lastxs=(int)(Mathcos(s314f/30-314f/2)30+xcenter);
lastys=(int)(Mathsin(s314f/30-314f/2)30+ycenter);
lastxm=(int)(Mathcos(m314f/30-314f/2)25+xcenter);
lastym=(int)(Mathsin(m314f/30-314f/2)25+ycenter);
lastxh=(int)(Mathcos((h30+m/2)314f/180-314f/2)18+xcenter);
lastyh=(int)(Mathsin((h30+m/2)314f/180-314f/2)18+ycenter);
lasts=s;
MediaTracker mt=new MediaTracker(this);//创建Tracke对象
clockp=getImage(getDocumentBase(),"休闲png");
gif1=getImage(getDocumentBase(),"gif1gif");
gif2=getImage(getDocumentBase(),"gif2gif");
clock6=getImage(getDocumentBase(),"clock6gif");
clock7=getImage(getDocumentBase(),"clock7gif");
mtaddImage(clockp,i++);
mtaddImage(gif1,i++);
mtaddImage(gif2,i++);
mtaddImage(clock6,i++);
mtaddImage(clock7,i++);
try{mtwaitForAll();}catch(InterruptedException e){};//等待加载结束
resize(600,420);//设置窗口大小
}
public void paint(Graphics g){//重写paint()方法
int xh,yh,xm,ym,xs,ys,strike_times;
int xcenter,ycenter;
String today;
Integer gif_number;
xcenter=148;
ycenter=186;
dat=new Date();
calsetTime(dat);
//读取当前时间
s=(int)calget(CalendarSECOND);
m=(int)calget(CalendarMINUTE);
h=(int)calget(CalendarHOUR_OF_DAY);
today=dfformat(dat);
//指针位置
xs=(int)(Mathcos(s314f/30-314f/2)30+xcenter);
ys=(int)(Mathsin(s314f/30-314f/2)30+ycenter);
xm=(int)(Mathcos(m314f/30-314f/2)25+xcenter);
ym=(int)(Mathsin(m314f/30-314f/2)25+ycenter);
xh=(int)(Mathcos((h30+m/2)314f/180-314f/2)18+xcenter);
yh=(int)(Mathsin((h30+m/2)314f/180-314f/2)18+ycenter);
//设置字体和颜色
gsetFont(F);
gsetColor(fgcol);
gsetColor(fgcol2);
gsetColor(getBackground());
gfillRect(1,1,634,419);
gdrawImage(clockp,75,110,this);
gdrawImage(clock6,83,280,this);
gsetColor(fgcol2);
gsetColor(getBackground());
gsetColor(fgcol2);
//以数字方式显示年、月、日和时间
gdrawString(today,55,415);
gdrawLine(xcenter,ycenter,xs,ys);
gsetColor(fgcol);
//画指针
gdrawLine(xcenter,ycenter-1,xm,ym);
gdrawLine(xcenter-1,ycenter,xm,ym);
gdrawLine(xcenter,ycenter-1,xh,yh);
gdrawLine(xcenter-1,ycenter,xh,yh);
lastxs=xs;lastys=ys;
lastxm=xh;lastym=ym;
lastxh=xh;lastyh=yh;
lastdate=today;
if(h<12)hh=h;//将系统时间变换到0-11区间
else hh=h-12;
if(hh==0) strike_times=12;//计算整点时钟声数
else strike_times=hh;
if((s==0&&m==0)||flag){//判断是否整点,是否是主动刷新
if(counter<strike_times){
flag=true;
gdrawImage(gif2,115,35,this);
if(lasts!=s){
if(strike){
counter++;
dangerplay();//播放闹铃声
}
if(strike)strike=false;
else strike=true;
}
}
else {
counter=0;
flag=false;
}
}
else
gdrawImage(gif1,115,35,this);
int timedelta;//记录当前时间与闹铃定时的时差
Integer currh,currm,currs;//分别记录当前的时、分、秒
timeNow=new Date();
currh=new Integer(timeNowgetHours());
currm=new Integer(timeNowgetMinutes());
currs=new Integer(timeNowgetSeconds());
//判断是否要更新当前显示的时间,这样可以避免文本框出现频率闪动
if(currhintValue()!=IntegervalueOf(showhourgetText())intValue())
showhoursetText(currhtoString());
if(currmintValue()!=IntegervalueOf(showmingetText())intValue())
showminsetText(currhtoString());
if(currsintValue()!=IntegervalueOf(showsecgetText())intValue())
showsecsetText(currhtoString());
if(setalerm){ //判断是否设置了闹钟
//判断当前时间是否为闹钟所定的时间
if((currhintValue()==fixh)&&(currmintValue()==fixm)&&(currsintValue()==fixs))
clickflag=true;
timedelta=currmintValue()60+currsintValue()-fixm60-fixs;
if((timedelta<60)&&(clickflag==true)){ //若当前时间与闹钟相差时间达到60秒
chirpplay();
gdrawImage(clock7,83,280,this);
}
else{
chirpstop();
clickflag=false;
}
}
if(lasts!=s)
ipAuplay();//播放滴答声
lasts=s;
if(canPaint){
t+=1;
if(t==12)t=0;
}
canPaint=false;
dat=null;
}
public void start(){
if(timer==null){
timer=new Thread(this);//将timer实例化
timerstart();
}
}
public void stop(){
timer=null;
}
public void run(){
while(timer!=null){
try{timersleep(timeout);}catch(InterruptedException e){}
canPaint=true;
repaint();//刷新画面
}
timer=null;
}
public void update(Graphics g){ //采用双缓冲技术的update()方法
if(offscreen_buf==null)
offscreen_buf=createImage(600,420);
Graphics offg=offscreen_bufgetGraphics();
offgclipRect(1,1,599,419);
paint(offg);
Graphics ong=getGraphics();
ongclipRect(1,1,599,419);
ongdrawImage(offscreen_buf,0,0,this);
}
public boolean action(Event evt,Object arg){ //按钮事件处理函数
if(evttarget instanceof Button){
String lable=(String)arg;
if(lableequals("开")){
setalerm=true;
//获取输入的时间
fixh=IntegervalueOf(sethourgetText())intValue();
fixm=IntegervalueOf(setmingetText())intValue();
fixs=IntegervalueOf(setsecgetText())intValue();
clickflag=false;
}
if(lableequals("关")){
setalerm=false;
if(chirp!=null)
chirpstop();
clickflag=false;
}
return true;
}
return false;
}
}
如果您的手机出现没有设置闹钟但显示图标的现象,请您按照以下步骤排查:
1 检查是否有第三方应用启用了闹钟
三方应用可以调用系统闹钟,如果在三方应用中设置过闹钟、提醒等功能,状态栏就会显示闹钟图标(如:夜间护眼、小米有品、使命闹钟、中华万年历,去哪儿,拼多多,墨迹天气,猎豹清理大师、YY、滴答清单等)。请您进入应用的设置界面,检查是否有闹钟、提醒等相关功能,如果有,请关闭后观察;如果没有,请卸载应用后观察。
2 检查是否有第三方服务启用了闹钟
部分三方服务可以调用系统闹钟导致出现此情况,请您检查“设置”>“应用和服务">"服务管理"是否有"星生活优惠充值"服务,您不需要使用此服务,可通过点击该服务,进入服务详情界面后点击“移除”即可。
3 备忘录中是否设置过提醒
可能是您在备忘录中设置过提醒,您可以进入备忘录>待办中查看。
如果有,您可根据需要删除提醒。
若没有,检查备忘录>全部笔记>最近删除是否还有设置过的闹钟,请清理最近删除的记录(此条只适用于EMUI 91/10X/11X和HarmonyOS 20)。
4 检查情景智能中是否有智能提醒卡片
可能是负一屏情景智能中有智能提醒卡片,导致出现闹钟图标,您可以根据需要关闭情景智能。
5 是否其他用户设置了闹钟
隐私空间:请进入设置,搜索并进入隐私空间,查看隐私空间界面是否提示可进入,若可以进入即为开启了隐私空间。
多用户:请进入设置,搜索并进入多用户,多用户界面是否显示有其他用户、访客信息,若存在即为开启了多用户。
请您切换到对应的空间查看或者删除设置的闹钟(部分手机不支持隐私空间/多用户,请以手机实际情况为准)。
6 仍无法确认闹钟来源
您可进入设置,搜索应用管理,然后搜索(查找)并点击时钟,进入存储 > 删除数据。
温馨提醒:此方法会清除之前设置过的所有闹钟数据。
看你是什么手机了,苹果手机的话,双击Home键即可切换到后台,左右滑动找到你需要切换的应用点击进入即可。如果是安卓系统的,可以按菜单键也就是三条横线的那个键即可进入后台,之后的 *** 作方法和上面描述的一样。
以上就是关于1、 用C++编写一个闹钟程序,能设置5组闹钟,定时时间到时扬声器有音乐播放, 屏幕有文字作提示。全部的内容,包括:1、 用C++编写一个闹钟程序,能设置5组闹钟,定时时间到时扬声器有音乐播放, 屏幕有文字作提示。、有没有网上的闹钟、请用JAVA编一个闹钟程序,符合要求追加100分!急!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)