LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 657|回复: 5

小弟写的一个初步计算星期的,

[复制链接]
发表于 2003-10-14 10:55:31 | 显示全部楼层 |阅读模式
小弟准备写个计算日期的程序,你输入哪年哪月哪天,就知道星期几的程序,
小弟的想法是用具体的哪天做个参照,用给出的日期,和参照的日期相比较,
然后除以7,余几就是星期几,不知道小弟的想法里还少了点什么!
第一次,  喜欢大家多多包涵!我是newbie,随便写写,写了个雏形,
没有加上判闰年的,还有我把0000,1,1为星期一了,不知道好不好?
写了个小雏形,贴出来,接受大家的批评!
  1. #include <iostream>
  2. using namespace std;

  3. class Data
  4. {
  5.   public:
  6.        Data(int a,int b,int c);
  7. //     ~Data();
  8.   private:
  9.     int year;
  10.     int month;
  11.     int day;
  12. };

  13. Data::Data(int a,int b,int c)
  14. {
  15.     month=a;day=b;year=c;
  16. int l=c*356+a*30+b;
  17. int m=l%7;
  18. switch(m)
  19. {
  20.    case '1':cout<<"This is Monday";break;
  21.    case '2':cout<<"This is Tuesday";break;
  22.    case '3':cout<<"This is Wednesday";break;
  23.    case '4':cout<<"This is Thursday";break;
  24.    case '5':cout<<"This is Friday";break;
  25.    case '6':cout<<"This is Saturday";break;
  26.    case '7':cout<<"This is Sunday";break;
  27. }
  28. }

  29. int main()
  30. {
  31.    int _month,_day,_year;
  32.    cout<<"Please input a day:";
  33.    cin>>_month>>_day>>_year;
  34. Data a(_month,_day,_year);
  35. }
  36. /* data.cpp:In function 'int main()':
  37.   data.cpp:37:warning:unused variable 'Data a'
  38. */
复制代码

还有点小错误,不好意思,希望各位大哥多多包涵!
:p
发表于 2003-10-14 21:22:35 | 显示全部楼层
呵呵,我来说一点,
1、data这个名字怪怪的,让人糊涂
2、构造函数里没有检查输入的合法性
3、int l=c*356+a*30+b;,这个,就算不考虑闰年,起码28、30和31天应该考虑一下把

《C++程序设计语言》第10章不是有个Date类吗,可以参考一下。
 楼主| 发表于 2003-10-14 22:34:31 | 显示全部楼层
我这个也没有考虑,不过那个月分我考虑过了,用emun,先判断给出的年份是不是闰年,然后再计算日期,但是有一个问题,不知道给出的日期里面包涵几个闰年,这个一直没有想通!
发表于 2003-10-15 01:00:00 | 显示全部楼层
date 要比 data 来得易懂吧!
发表于 2003-10-15 01:21:57 | 显示全部楼层
求星期几的我这里倒有一段程序,大家可以研究研究:

/***************************************************************************
* Function Name : DayOfWeek
* Description   :
     * Get the week day by params input. 0 is sunday.
* Input         : Date params
* Output        : None
* Return value  : -1 is Wrong
***************************************************************************/
INT16 DayOfWeek(INT16 ssYear,INT16 ssMonth,INT16 ssDay)
{
  INT16 ssDeltYear= (14 - ssMonth) / 12;
  INT16 ssTmpYear = ssYear - ssDeltYear;
  INT16 ssTmpMonth = ssMonth + 12*ssDeltYear - 2;

  return (ssDay + ssTmpYear + ssTmpYear/4 -
              ssTmpYear/100 + ssTmpYear/400 +
              (31*ssTmpMonth)/12) % 7;
}
发表于 2003-10-15 09:51:52 | 显示全部楼层
直接使用localtime呢
不就可以了吗
只要不小于1970年
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表