// 程序名称:钟表模拟程序(表针形式)
// 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版
// 程序编写:BestAns [email protected]>
// 最后更新:2010-10-30
//
#include
<graphics.h>
#include
<conio.h>
#include
<math.h>
#define
PI
3.1415926536
void
DrawHand
(
int
hour
,
int
minute
,
int
second
)
{
double
a_hour
,
a_min
,
a_sec
// 时、分、秒针的弧度值
int
x_hour
,
y_hour
,
x_min
,
y_min
,
x_sec
,
y_sec
// 时、分、秒针的末端位置
// 计算时、分、秒针的弧度值
a_sec
=
second
*
2
*
PI
/
60
a_min
=
minute
*
2
*
PI
/
60
+
a_sec
/
60
a_hour
=
hour
*
2
*
PI
/
12
+
a_min
/
12
// 计算时、分、秒针的末端位置
x_sec
=
int
(
120
*
sin
(
a_sec
))
y_sec
=
int
(
120
*
cos
(
a_sec
))
x_min
=
int
(
100
*
sin
(
a_min
))
y_min
=
int
(
100
*
cos
(
a_min
))
x_hour
=
int
(
70
*
sin
(
a_hour
))
y_hour
=
int
(
70
*
cos
(
a_hour
))
// 画时针
setlinestyle
(
PS_SOLID
,
NULL
,
10
)
setcolor
(
WHITE
)
line
(
320
+
x_hour
,
240
-
y_hour
,
320
-
x_hour
/
7
,
240
+
y_hour
/
7
)
// 画分针
setlinestyle
(
PS_SOLID
,
NULL
,
6
)
setcolor
(
LIGHTGRAY
)
line
(
320
+
x_min
,
240
-
y_min
,
320
-
x_min
/
5
,
240
+
y_min
/
5
)
// 画秒针
setlinestyle
(
PS_SOLID
,
NULL
,
2
)
setcolor
(
RED
)
line
(
320
+
x_sec
,
240
-
y_sec
,
320
-
x_sec
/
3
,
240
+
y_sec
/
3
)
}
void
DrawDial
()
{
// 绘制一个简单的表盘
circle
(
320
,
240
,
2
)
circle
(
320
,
240
,
60
)
circle
(
320
,
240
,
160
)
outtextxy
(
296
,
310
,
"BestAns"
)
// 绘制刻度
int
x
,
y
for
(
int
i
=
0
i
<
60
i
++)
{
x
=
320
+
int
(
145
*
sin
(
PI
*
2
*
i
/
60
))
y
=
240
+
int
(
145
*
cos
(
PI
*
2
*
i
/
60
))
if
(
i
%
15
==
0
)
bar
(
x
-
5
,
y
-
5
,
x
+
5
,
y
+
5
)
else
if
(
i
%
5
==
0
)
circle
(
x
,
y
,
3
)
else
putpixel
(
x
,
y
,
WHITE
)
}
}
void
main
()
{
initgraph
(
640
,
480
)
// 初始化 640 x 480 的绘图窗口
DrawDial
()
// 绘制表盘
setwritemode
(
R2_XORPEN
)
// 设置 XOR 绘图模式
// 绘制表针
SYSTEMTIME
ti
// 定义变量保存当前时间
while
(!
kbhit
())
// 按任意键退出钟表程序
{
GetLocalTime
(&
ti
)
// 获取当前时间
DrawHand
(
ti
.
wHour
,
ti
.
wMinute
,
ti
.
wSecond
)
// 画表针
Sleep
(
1000
)
// 延时 1 秒
DrawHand
(
ti
.
wHour
,
ti
.
wMinute
,
ti
.
wSecond
)
// 擦表针(擦表针和画表针的过程是一样的)
}
closegraph
()
// 关闭绘图窗口
}
其了就是用了easyx
#pragma once#define WIN32_LEAN_AND_MEAN // 从 Windows 头中排除极少使用的资料
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <iostream>
#include <cctype>
#include <string>
using namespace std
//enum int{JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC}
class Date
{
public:
//Constractors
Date( int month = 0, int day = 0, int year = 0)
Date( const Date&)
~Date(){}
class BadDate{}
void GetSystemDate( Date&)
//公有存取器函数
int GetYear() const{ return itsYear}
int GetMonth() const{ return itsMonth}
int GetDay() const{ return itsDay}
int GetDayOfWeek() const{ return itsDayOfWeek}
void SetYear( int year){ itsYear = year}
void SetMonth( int month){ itsMonth = month}
void SetDay( int day){ itsDay = day}//*/
//void SetDayOfWeek( int dayOfWeek){ itsDayOfWeek = dayOfWeek}
//检查Date的函数
bool IsRightDate() const
bool IsLeapYear() const
bool IsRightYear() const
bool IsRightMonth() const
bool IsRightDay() const
// *** 作的Date的函数
Date&AddYear( int)
Date&AddMonth( int)
Date&AddDay( int)
Date&MinusYear( int)
Date&MinusMonth( int)
Date&MinusDay( int)//*/
long ToDays() const
int SetWeek()
void SetDayOfWeek( int dayOfWeek){ itsDayOfWeek = dayOfWeek}
//重载运算符
bool operator ==(const Date&)
bool operator !=(const Date&)
Date&operator +=(const Date&)
Date&operator -=(const Date&)
Date&operator ++()
Date&operator --()
private:
int itsDay
int itsMonth
int itsYear
int itsDayOfWeek
}
//成员函数的实现
Date::Date( int month, int day, int year)
: itsMonth( month), itsDay( day), itsYear( year)
{
IsRightDate()
//cout <<ToDays() <<endl
//SetWeek()
}
Date::Date(const Date&date)
{
//if( date.IsRightDate() == false) throw BadDate()//*****似乎已经没有必要暸?
itsDay = date.itsDay
itsMonth = date.itsMonth
itsYear = date.itsYear
itsDayOfWeek = date.itsDayOfWeek
}
void Date::GetSystemDate( Date&systemDate)
{
SYSTEMTIME time
GetSystemTime(&time)
systemDate.SetMonth( int( time.wMonth))
systemDate.SetDay( time.wDay)
systemDate.SetYear( time.wYear)
systemDate.SetDayOfWeek( time.wDayOfWeek)
}
int Date::SetWeek()
{
long days = ToDays()
int week = days % 7
SetDayOfWeek(week)
return week
}
bool Date::IsRightDate() const
{
if( ( IsRightMonth() == true) &&( IsRightDay() == true) &&( IsRightYear() == true) )
return true
else
{
throw BadDate()
return false
}
}
bool Date::IsLeapYear() const
{
if ( ( itsYear % 100 != 0 &&itsYear % 4 == 0) || ( itsYear % 400 == 0))
return true
else
return false
}
inline bool Date::IsRightYear() const
{
if( itsYear != -1)
return true
else
return false
}
inline bool Date::IsRightMonth() const
{
if( ( itsMonth >= 0) &&( itsMonth <= 12))
return true
else
return false
}
bool Date::IsRightDay() const
{
if( itsMonth == 2 &&IsLeapYear() == false)
{
return ( itsDay >= 0 &&itsDay <= 28)
}
else if( itsMonth == 2 &&IsLeapYear() == true)
{
return ( itsDay >= 0 &&itsDay <= 29)
}
else
{
if( itsMonth == 1 || itsMonth == 3 || itsMonth == 5 || itsMonth == 7 ||
itsMonth == 8 || itsMonth == 10 || itsMonth == 12)
{
return( itsDay >= 0 &&itsDay <= 31)
}
else
{
return(itsDay >= 0 &&itsDay <= 30)
}
}
}
inline Date&Date::AddYear(int year)
{
if( itsYear >0)
itsYear += year
else
itsYear = itsYear + year + 1
return *this
}
inline Date&Date::AddMonth(int month)
{
for ( int mon = monthmon >0mon--)
{
if( itsMonth == 12)
{
AddYear( 1)
itsMonth = 1
}
else
itsMonth++
}
return *this
}
inline Date&Date::AddDay(int day)
{
for(int d = dayd >0d--)
{
if( itsMonth == 2 &&IsLeapYear() == false)
{
if( itsDay == 28)
{
AddMonth( 1)
itsDay = 1
}
else
itsDay++
}
else if( itsMonth == 2 &&IsLeapYear() == true)
{
if( itsDay == 29)
{
AddMonth( 1)
itsDay = 1
}
else
itsDay++
}
else
{
if( itsMonth == 1 || itsMonth == 3 || itsMonth == 5 || itsMonth == 7 ||
itsMonth == 8 || itsMonth == 10 || itsMonth == 12)
{
if( itsDay == 31)
{
AddMonth( 1)
itsDay = 1
}
else
itsDay++
}
else
{
if( itsDay == 30)
{
AddMonth( 1)
itsDay = 1
}
else
itsDay++
}
}
}
SetWeek()
return *this
}
inline Date&Date::MinusYear(int year)
{
if( itsYear >0)
itsYear -= year
else
itsYear = itsYear - year - 1
return *this
}
inline Date&Date::MinusMonth(int month)
{
for ( int mon = monthmon >0mon--)
{
if( itsMonth == 1)
{
MinusYear( 1)
itsMonth = 12
}
else
itsMonth--
}
return *this
}
inline Date&Date::MinusDay(int day)
{
for(int d = dayd >0d--)
{
if( itsMonth == 3 &&IsLeapYear() == false)
{
if( itsDay == 1)
{
MinusMonth( 1)
itsDay = 28
}
else
itsDay--
}
else if( itsMonth == 3 &&IsLeapYear() == true)
{
if( itsDay == 1)
{
MinusMonth( 1)
itsDay = 29
}
else
itsDay--
}
else
{
if( itsMonth == 2 || itsMonth == 4 || itsMonth == 6 ||
itsMonth == 9 || itsMonth == 11 || itsMonth == 1)
{
if( itsDay == 1)
{
MinusMonth( 1)
itsDay = 31
}
else
itsDay--
}
else
{
if( itsDay == 1)
{
MinusMonth( 1)
itsDay = 30
}
else
itsDay--
}
}
}
SetWeek()
return *this
}
inline long Date::ToDays() const
{
long days = 0
Date tempDate( GetMonth() - 1, GetDay(), GetYear())
for( tempDate.GetYear() >1tempDate.MinusYear( 1))
{
if( tempDate.IsLeapYear() == true)
{
days += 366
}
else days += 265
}
for( tempDate.GetMonth() >= 1 &&tempDate.GetYear() >= 1tempDate.MinusMonth( 1))
{
if( tempDate.GetMonth() == 2 &&tempDate.IsLeapYear() == true)
days += 29
else if( tempDate.GetMonth() == 2 &&tempDate.IsLeapYear() == false)
days += 28
else
{
if( tempDate.GetMonth() == 1 || tempDate.GetMonth() == 3 || tempDate.GetMonth() == 5 ||
tempDate.GetMonth() == 7 || tempDate.GetMonth() == 8 || tempDate.GetMonth() == 10 ||
tempDate.GetMonth() == 12)
{
days += 31
}
else
{
days += 30
}
}
}
days += tempDate.GetDay()
return days
}
inline bool Date::operator ==( const Date&date)
{
return( itsYear == date.itsYear &&itsMonth == date.itsMonth &&itsDay == date.itsDay)
}
inline bool Date::operator !=( const Date&date)
{
return( !( itsYear == date.itsYear &&itsMonth == date.itsMonth &&itsDay == date.itsDay))
}
inline Date&Date::operator +=( const Date&date)
{
itsYear += date.itsYear
itsMonth += date.itsMonth
itsDay += date.itsDay
SetWeek()
return *this
}
inline Date&Date::operator -=( const Date&date)
{
itsYear -= date.itsYear
itsMonth -= date.itsMonth
itsDay -= date.itsDay
//SetWeek()
return *this
}
inline Date&Date::operator ++()
{
return (AddDay( 1))
}
inline Date&Date::operator --()
{
return (MinusDay( 1))
}
//以下不是成员函数
Date operator +( Date&dateOne, int day)
{
dateOne.AddDay(day)
//SetWeek()
return dateOne
}
Date operator +( Date&dateOne, Date&dateTwo)
{
Date date
date.SetYear( dateOne.GetYear() + dateTwo.GetYear())
date.SetMonth( dateOne.GetMonth() + dateTwo.GetMonth())
date.SetDay( dateOne.GetDay() + dateTwo.GetDay())
//date.SetWeek()
return date
}
Date operator -( Date&dateOne, Date&dateTwo)
{
Date date
date.SetYear( dateOne.GetYear() - dateTwo.GetYear())
date.SetMonth( dateOne.GetMonth() - dateTwo.GetMonth())
date.SetDay( dateOne.GetDay() - dateTwo.GetDay())
//date.SetWeek()
return date
}
ostream&operator <<( ostream&ostreamOne, Date&date)
{
date.SetWeek()
string monthName
string weekName
switch(date.GetMonth())
{
case 1:monthName = "January"break
case 2:monthName = "Febrary"break
case 3:monthName = "March"break
case 4:monthName = "April"break
case 5:monthName = "May"break
case 6:monthName = "June"break
case 7:monthName = "July"break
case 8:monthName = "August"break
case 9:monthName = "September"break
case 10:monthName = "October"break
case 11:monthName = "Novenber"break
case 12:monthName = "December"break
default:cerr<<"Erroe month!"exit(-1)
}
switch(date.GetDayOfWeek())
{
case 1:weekName = "Monday"break
case 2:weekName = "Tuesday"break
case 3:weekName = "Wendesday"break
case 4:weekName = "Thursday"break
case 5:weekName = "Frisday"break
case 6:weekName = "Saterday"break
//case 7:weekName = "Sunday"break
case 0:weekName = "Sunday"break
//default:cerr<<"Erroe week!"exit(-1)
}
cout <<weekName <<" "<<monthName <<" "<<int( date.GetDay()) <<" " <<date.GetYear()
return ostreamOne
}
istream&operator >>( istream&ostreamOne, Date&date)
{
int month = 0
int day = 0
int year = 0
cin >>month >>day >>year
date.SetMonth( month)
date.SetDay( day)
date.SetYear( year)
date.IsRightDate()//判断是否坏值,保证有意义的值材会被计算
return ostreamOne
}
int main()
{
try
{
Date dateOne
dateOne.GetSystemDate( dateOne)
cout <<dateOne <<endl
Date dateTwo
cout <<"请输入: (格式: \"月/日/年\" 的数字形式.)"
cin >>dateTwo
cout <<dateTwo <<endl
//cout <<"Input Error!"
if( dateOne == dateTwo)
cout <<"dateOne is equal to dateTwo!" <<endl
else
cout <<"dateOne isn\'t equal to dateTwo!" <<endl
dateTwo++
cout <<dateTwo <<endl
cout <<"你可以为这个日期加上一个天数,请输入你想加上的天数 d = "
int d
cin >>d
dateTwo = dateTwo + d
//dateTwo.AddDay(365)
cout <<"After add d: " <<dateTwo <<endl
dateTwo--
dateTwo--
cout <<dateTwo <<endl
dateOne += dateTwo
cout <<dateOne <<endl
Date dateThree( 10, 1, 1)
cout <<"There are " <<dateThree.ToDays() <<"days in dateThree." <<endl
cout <<"There are " <<dateTwo.ToDays() <<"days in dateTwo." <<endl
}
catch(Date::BadDate)
{
cout <<"Bad Date!"
}
catch(...)
{
cout <<"Unknow Exceptions!"
}
return 0
}
#include <stdio.h>#include <time.h>
int main()
{
time_t rawtime
struct tm * timeinfo
time ( &rawtime )
timeinfo = localtime ( &rawtime )
printf ( "The current date/time is: %s", asctime (timeinfo) )
return 0
}
说明:
time_t // 时间类型(time.h 定义)
struct tm { // 时间结构,time.h 定义如下:
int tm_sec
int tm_min
int tm_hour
int tm_mday
int tm_mon
int tm_year
int tm_wday
int tm_yday
int tm_isdst
}
time ( &rawtime )// 获取时间,以秒计,从1970年1月一日起算,存于rawtime
localtime ( &rawtime )//转为当地时间,tm 时间结构
asctime() // 转为标准ASCII时间格式:
//就是直接打印tm,tm_year 从1900年计算,所以要加1900,月tm_mon,从0计算,所以要加1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)