课程设计

#include<iostream>
#include<string>
#include<iomanip>
#include <stdlib.h>
#include<time.h>
#include<windows.h>
using namespace std;


class Calendar
{
private:
 int y;
 int m;
 int d;
 static int mon_days_R[12];//定义闰年时每个月的天数
 static int mon_days_NR[12];//定义非闰年时每个月的天数
 static int week_days[7];//定义星期,从星期六开始
public:
 Calendar();//构造函数初始化y,m,d
 void showtime();//显示日期
 int define_year_days(int year);//确定年份天数
 int define_mon_days(int mon);//确定月份天数
 int define_week_days();//确定月份首日星期数
 void print_Calendar();//显示当月日历
 void search_the_month();//查询月份
 void the_last_month();//上一个月
 void the_next_month();//下一个月
};
Calendar::Calendar()//构造函数初始化y,m,d
{
 time_t timer;
 time(&timer);
 tm* t_tm = localtime(&timer);
    y=t_tm->tm_year+1900;
 m=t_tm->tm_mon+1;
 d=t_tm->tm_mday;
}
void Calendar::showtime()//显示日期
{
 cout<<'\n'<<"  "<<y<<"年"<<m<<"月"<<d<<"日"<<'\n';
 cout<<"  -----------------------------------------"<<endl;
}

int Calendar::define_year_days(int year)//确定年份天数
{
 int year_days;
 if(((year%400==0) || (year%4==0 && year%100!=0)))
  year_days=366;
 else
  year_days=365;
 return year_days;
}
int Calendar::define_mon_days(int mon)//确定月份天数
{
 int mon_days;
 if(((y%400==0) || (y%4==0 && y%100!=0)))
  mon_days=mon_days_R[mon-1];
 else
  mon_days=mon_days_NR[mon-1];
 return mon_days;
}
int Calendar::define_week_days()//确定月份首日星期数
{
 long temp=0,temp1=0,temp2=0;
 long i,j,remainder;
 int week_d;
 if(y>=2000)
 {
  for(i=2000;i<y;i++)
  {
   int year_days=define_year_days(i);
   temp1+=year_days;
  };
 }
 if(m>=1&&m<13)
 {
  for(j=1;j<m;j++)
  {
   int mon_days=define_mon_days(j);
   temp2+=mon_days;
  };
 }
 temp=temp1+temp2;//总天数
 remainder=temp%7;
 week_d=week_days[remainder];
 return week_d;
}
void Calendar::print_Calendar()//显示当月日历
{
 while(1)
 {
  system("cls");
  showtime();
  int w_day,m_day;
  int t=1,p,q;
     w_day=define_week_days();
     m_day=define_mon_days(m);
     int chat[6][7];
     cout<<endl;
     cout<<"  日    一    二    三    四    五    六"<<endl;
     cout<<"  -----------------------------------------"<<endl;
     for(p=0;p<1;p++)
  {
      for(q=w_day;q<7;q++)
       chat[p][q]=t++;
  }
     for(p=1;p<6;p++)
  {
      for(q=0;q<7;q++)
   {
       chat[p][q]=t++;
       if(t>m_day)
        break;
   }
  }
  cout<<"  ";
  for(p=0;p<1;p++)
  {
   for(q=0;q<w_day;q++)
    cout<<"      ";
   for(q=w_day;q<7;q++)
    cout<<setfill('0')<<setw(2)<<chat[p][q]<<"    ";
  }
  cout<<endl;
  for(p=1;p<6;p++)
  {
   cout<<"  ";
   for(q=0;q<7;q++)
   {
    cout<<setfill('0')<<setw(2)<<chat[p][q]<<"    ";
          if(chat[p][q]==m_day)
     break;
   }
   cout<<endl;
   if(chat[p][q]==m_day)
    break;
  }
  cout<<endl<<endl;
  cout<<"  -----------------------------------------"<<endl;
  cout<<"  功能选项:"<<endl;
  cout<<"  -----------------------------------------"<<endl;
  cout<<"  1.查询日历"<<endl;
  cout<<"  2.上一个月"<<endl;
  cout<<"  3.下一个月"<<endl;
  cout<<"  0.返回主菜单"<<endl<<endl;
  cout<<"  请选择:";
  int choose;
  cin>>choose;
  if(choose==0) break;
  switch(choose)
  {
     case 1:
   search_the_month();//查询月份
   system("pause");
   break;
  case 2:
   the_last_month();//上一个月
   system("pause");
   break;
  case 3:
      the_next_month();//下一个月
   system("pause");
   break;
  default:
   cout<<"  选择有误!!"<<endl;
  }
 }
}
void Calendar::search_the_month()//查询月份
{
 char sel;
 do
 {
  system("cls");
  cout<<endl;
  cout<<"  请输入所查询时间:";
      cin>>y>>m>>d;
     if(y>=2000 && m>=1 && m<13 && d>=1 && d<=define_mon_days(m))
  {
   system("cls");
   showtime();
      print_Calendar();
  }
     else
  {
   cout<<"  输入有误,是否要继续查询(Y/N):";
      cin>>sel;
  }
 }while(sel=='Y' || sel=='y' );
}
void Calendar::the_last_month()//上一个月
{
 system("cls");
 if(m==1)
 {
  if(y==2000)
   cout<<"  时间已至最前"<<endl;
  else
  {
   m=12;
   --y;

  }
 }
 else
  --m;
 d=1;
 showtime();
 print_Calendar();

}
void Calendar::the_next_month()//下一个月
{
 system("cls");
 if(m==12)
 {
  m=1;
  ++y;
 }
 else
  ++m;
  d=1;
 showtime();
 print_Calendar();
}

 


int Calendar::mon_days_R[12]={31,29,31,30,31,30,31,31,30,31,30,31};//定义闰年时每个月的天数
int Calendar::mon_days_NR[12]={31,28,31,30,31,30,31,31,30,31,30,31};//定义非闰年时每个月的天数
int Calendar::week_days[7]={6,0,1,2,3,4,5};//定义星期,从星期六开始

 

int main()
{
    int select;
   
 while(1)
 {
  system("cls");
  cout<<endl;
  cout<<"  -----------------------------------------"<<endl;
  cout<<"                 日历记事本                "<<endl;
  cout<<"  -----------------------------------------"<<endl;
  cout<<"             1--使用万年历                 "<<endl;
  cout<<"             2--新建记事本                 "<<endl;
  cout<<"             3--查看记事本                 "<<endl;
  cout<<"             0--退出                       "<<endl;
  cout<<endl;
  cout<<"  请选择:";
  cin>>select;
  if(select==0) break;
  switch(select)
  {
  case 1:
   {
    Calendar chat1;
       chat1.print_Calendar();
       system("pause");
       break;
   }
  default:
   cout<<"  选择有误,请重新选择"<<endl;
  }

 }

 return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值