今天比较无聊,就随便找了个程序设计来做,下面是源代码,以及效果图...不喜请喷!
/*题目1:年历显示。
功能要求:
(1) 输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。
(2) 输入年月,输出该月的日历。
(3) 输入年月日,输出距今天还有多少天,星期几,是否是公历节日。
*/
1 //日历
2 // Coder @Gxjun 2014/3/30/10:35
3 #include<iostream>
4 #include<ctime>
5 #include<
string>
6 #include<iomanip>
7 using namespace std;
8 namespace isprimer
9 {
10 int ren[
13]={
0,
31,
60,
91,
131,
162,
192,
223,
254,
284,
315,
335,
366} ;
//是闰年
11 int pin[
13]={
0,
31,
59,
90,
130,
161,
191,
222,
253,
283,
314,
334,
365} ;
12 }
13 namespace mon
14 {
15 int ren_month[
13]={
0,
31,
29,
31,
30,
31,
30,
31,
31,
30,
31,
30,
31};
16 int pin_month[
13]={
0,
31,
28,
31,
30,
31,
30,
31,
31,
30,
31,
30,
31};
17 }
18 bool isprim(
int year)
19 {
20 if(year%
400==
0||(year%
4==
0&&year%
100!=
0))
21 return true;
22 return false;
23 }
24 void print(
int month,
int weekly,
int tol_day)
25 {
26
27 int k=
1;
28 cout.width(
3);
29 cout<<month<<
" SUN MON TUE WED THU FRI SAT"<<
endl;
30 cout<<
" ";
31 int kongge=weekly%
7;
32 while(kongge)
33 {
34 cout<<
" ";
35 kongge--
;
36 }
37 for(k=
1;k<=tol_day ;k++
)
38 {
39 cout<<setw(
3)<<setiosflags(ios::right)<<k<<
" ";
40 if(weekly%
7==
6)
41 cout<<endl<<
" ";
42 weekly++
;
43 }
44 cout<<
endl;
45 }
46 class Calender
47 {
48 public :
49 Calender(){};
50 Calender(
int y):year(y){};
51 Calender(
int y,
int m): year(y),month(m){};
52 Calender(
int y,
int m,
int d): year(y),month(m),day(d){};
53 ~
Calender(){};
54 void show1();
55 void show2();
56 void show3();
57 private:
58 int year;
59 int month;
60 int day;
61 };
62 void Calender::show1()
63 {
64 time_t current;
65 struct tm *
t;
66 time(¤t);
//得到目前的时间
67 t=localtime(&
current);
68 t->tm_year+=
1900;
69 t->tm_mon+=
1;
70 cout<<
"今天的时间为:"<<t->tm_year<<
" 年 ";
71 cout<<t->tm_mon<<
" 月 "<<t->tm_mday<<
" 日"<<
endl;
72 cout<<
"您要查询的时间为: "<<year<<
" 年 "<<month<<
" 月 "<<day<<
"日"<<
endl;
73 //判断是否闰年
74 using namespace isprimer ;
75 int en,start;
76 if(isprim(t->tm_year))
//这一天为闰年
77 start=ren[t->tm_mon-
1]+t->
tm_mday ;
78 else
79 start=pin[t->tm_mon-
1]+t->
tm_mday ;
80 if(isprim(year))
81 en=ren[month-
1]+
day;
82 else
83 en=pin[month-
1]+
day;
84 int year_cha=year - t->
tm_year;
85 int ans=(year_cha/
4)*
366+(year_cha - year_cha/
4)*
365+en-
start;
86 cout<<
"相隔:"<<ans<<
" 天"<<
endl;
87 cout<<
"那一天是:"<<t->tm_wday+ans%
7<<
endl;
88 };
89 void Calender::show2()
90 {
91 time_t current;
92 struct tm *
t;
93 time(¤t);
//得到目前的时间
94 t=localtime(&
current);
95 int en,start,sday=
1;
96 using namespace isprimer ;
97 t->tm_year+=
1900;
98 t->tm_mon++
;
99 if(isprim(t->tm_year))
//这一天为闰年
100 start=ren[t->tm_mon-
1]+t->
tm_mday ;
101 else
102 start=pin[t->tm_mon-
1]+t->
tm_mday ;
103 using namespace mon ;
104 if(isprim(year))
105 en=ren[month-
1]+
sday;
106 else
107 en=pin[month-
1]+
sday;
108 int year_cha=year - t->
tm_year;
109 int ans=(year_cha/
4)*
366+(year_cha - year_cha/
4)*
365+en-
start;
110 //得到本月初一是星期几
111 int weekly=t->tm_wday+ans%
7;
112 if(weekly<
0)weekly+=
7;
113 if(isprim(year))
114 print(month,weekly,ren_month[month]);
115 else
116 print(month,weekly,pin_month[month]);
117 };
118 void Calender::show3()
119 {
120 int start,ans;
121 using namespace mon;
122 time_t k;
123 time(&
k);
124 struct tm *
t;
125 t=localtime(&
k);
126 //推出其为星期几即可
127 int sday,mon;
128 sday=mon=
1;
129 t->tm_year+=
1900;
130 t->tm_mon++
;
131 using namespace isprimer;
132 if(isprim(t->
tm_year))
133 start=ren[t->tm_mon-
1]+t->
tm_mday;
134 else
135 start=pin[t->tm_mon-
1]+t->
tm_mday;
136 int year_cha=(year-t->
tm_year);
137 ans=(year_cha/
4)*
366+(year_cha - year_cha/
4)*
365+
1-
start;
138 int weekly=t->tm_wday+ans%
7;
139 if(weekly<
0)weekly+=
7;
140 if(isprim(year))
141 {
142 for(
int i=
1;i<=
12 ;i++
)
143 print(i,(weekly+ren[i-
1])%
7,ren_month[i]);
144 }
145 else
146 for(
int i=
1;i<=
12 ;i++
)
147 print(i,(weekly+pin[i-
1])%
7,pin_month[i]);
148
149 };
150 int main()
151 {
152 int tem,aa,bb,cc;
153 cout<<
"你想要查找什么?";
154 cout<<
"1.某年某月某日距现在的天数以及是星期几?"<<
endl;
155 cout<<
"2.某年某月的一个月的日历"<<
endl;
156 cout<<
"3.某年的日历"<<
endl;
157 cin>>
tem;
158 switch(tem)
159 {
160 case 1:
161 {
162 cout<<
"输入年 月 日"<<
endl;
163 cin>>aa>>bb>>
cc;
164 Calender stu(aa,bb,cc);
165 stu.show1();
166 } ;
break;
167 case 2:
168 {
169 cout<<
"输入年 月"<<
endl;
170 cin>>aa>>
bb;
171 Calender tt(aa,bb);
172 cout<<
"this is "<<aa<<
" Calender !"<<
endl;
173 tt.show2();
174 break;
175 }
176 case 3:
177 {
178 cout<<
"输入 年"<<
endl;
179 cin>>
aa;
180 Calender stu(aa);
181 stu.show3();
182 }
183 }
184 return 0;
185 }
效果图:
转载于:https://www.cnblogs.com/gongxijun/p/3633874.html
相关资源:C语言课程设计报告——万年历