c++课程设计(日历)

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

效果图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据小魔方

教你如何优雅的用R语言调用有道翻译

最近刚发现了个有趣的包,一个R语言发烧友开发了R语言与有道在线翻译的接口,可能这位大神也是一个受够了每天打开网页狂敲键盘查词的罪,索性自己动手,从此丰衣足食。 ...

26430
来自专栏数据结构与算法

32:日历问题

32:日历问题 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 在我们现在使用的日历中, 闰年被定义为能被4整除的年份,但...

37870
来自专栏一个会写诗的程序员的博客

《Kotlin 反应式编程》使用 RxKotlin 实现一个极简的 http DSL ( Reactive Programming Using Rx Kotlin )《Kotlin 反应式编程》使用

我们现在已经基本知道 Kotlin 中 DSL 的样子了。但是这些 DSL 都是怎样实现的呢?本节我们就通过实现一个极简的http DSL来学习创建 DSL 背...

36020
来自专栏HansBug's Lab

1740: [Usaco2005 mar]Yogurt factory 奶酪工厂

1740: [Usaco2005 mar]Yogurt factory 奶酪工厂 Time Limit: 5 Sec  Memory Limit: 64 MB ...

27450
来自专栏数据结构与算法

cf1043C. Smallest Word(贪心)

这题打cf的时候真的是脑残,自己造了个abcdad的数据开心的玩了半天一脸懵逼。。。最后还好ycr大佬给了个思路不然就凉透了。。。

7010
来自专栏数据结构与算法

洛谷11月月赛题解(A-C)

辣鸡T3卡我1.5h题意,要不是最后nlh跟我解释了一下大样例估计这次是真凉透了。。

8710
来自专栏深度学习之tensorflow实战篇

计算机常用算法对照表整理

常用对照: NLP CRF算法: 中文名称条件随机场算法,外文名称conditional random field algorithm,是一种数学算法,是2...

54050
来自专栏web前端教室

为什么你的代码看起来像“野路子”出来的?

这段时间看0827零基础班同学们的作业,html、css、js的基本的语法、用法已经都能掌握。现在阶段主要的问题是,

12030
来自专栏草根专栏

RxJS速成 (上)

What is RxJS? RxJS是ReactiveX编程理念的JavaScript版本。ReactiveX是一种针对异步数据流的编程。简单来说,它将一切数据...

39240
来自专栏用户2442861的专栏

Qt5之QRadioButton

本例程介绍QRadioButton的使用,包括QRadioButton的分组、多个QRadioButton控件响应同一个槽函数、QRadioButton的ID...

1.4K20

扫码关注云+社区

领取腾讯云代金券