跪求C语言编写的时钟(能修改时钟时间,且时钟是指针式的 只编写修改时间的部分也行)

跪求C语言编写的时钟(能修改时钟时间,且时钟是指针式的 只编写修改时间的部分也行),第1张

////////////////////////////////////////////

// 程序名称:钟表模拟程序(表针形式)

// 编译环境: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

++)

{

=

 

320

 

+

 

int

(

145

 

*

 

sin

(

PI 

*

 

2

 

*

 i 

/

 

60

))

=

 

240

 

+

 

int

(

145

 

*

 

cos

(

PI 

*

 

2

 

*

 i 

/

 

60

))

if

 

(

%

 

15

 

==

 

0

)

bar

(

-

 

5

,

 y 

-

 

5

,

 x 

+

 

5

,

 y 

+

 

5

)

else

 

if

 

(

%

 

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11885514.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存