课程设计

原创 2015年07月10日 11:47:40

#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;
}

相关文章推荐

数据库课程设计——羽晴YuQ3,物资管理系统

附录1课程设计题目  (1) 设计题目:物资管理及出借系统 背景资料: 1) 摆放物资的有两间办公室,每间办公室都有若干个位置摆放物资。 2) 每个摆放物资的地方都有一个唯一的编号。 3) ...

数据库课程设计(实验报告管理系统)

数据库系统原理 课程设计报告         设计题目  实验报告管理系统数据库设计   专业班级     信管1402班               学    号     31140...
  • dxx_111
  • dxx_111
  • 2016年12月26日 22:28
  • 2327

嵌入式 课程设计指导书

《嵌入式体系结构与接口技术》 课程设计指导书   题目1:电子计算器 一、设计任务   设计一个具有加减乘除功能的计算器,带三角函数、指数函数、对数函数计算功能,科学计数法表示。  二、任务...

数据结构课程设计--连连看

/* * Copyright (c)2015,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:linktolink.cbp * 作 者:朱希康 * 完成...

C++课程设计报告--通讯录管理系统

C++课程设计报告--通讯录管理系统 建立两个文本文件,记录存储在手机上联系人的基本信息和存储在手机卡上的联系人的信息。"mymobilelistdata.txt";"mycardlistdata.t...

JAVA基础课程设计 简易坦克大战

工程的结构如下: 类名 父类/接口 功能 Paly void 音频播放 Wel_Panel JPanel 欢迎界面 keylistener ...

课程设计——小型图书管理系统中遇到的问题

为期两周的课程设计中,我选的课题是小型图书管理系统,该系统有如下功能: 用户登陆和注册、用户信息查看(个人信息,图书借阅情况,到期归还提醒,个人读书笔记管理,个人读书计划管理) 在编写程序的过程中...

数据结构课程设计-学生成绩管理系统

学生成绩管理系统 1.头文件 //第一门成绩即为语文成绩 //第二门成绩即为数学成绩 //第三门成绩即为英语成绩 #include #include #include #include #inc...

c语言版数据结构课程设计 学生成绩管理系统

此学生成绩管理系统完成15项功能,是我经过很多次的修改得到的。花费时间不短,功能齐全,主要完成了:输入,输出,插入,修改,删除,查询,读取文件,写入文件,复制文件,建立索引,显示各种情况下的信息,追加...

C++/C课程设计(1)课题要求文档

原文取自个人博客:www.jycoder.com
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:课程设计
举报原因:
原因补充:

(最多只允许输入30个字)