今天比较无聊,就随便找了个程序设计来做,下面是源代码,以及效果图...不喜请喷!
/*题目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(¤t);
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(¤t);
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 }
效果图: