C++实现的一个打印日历程序

C++实现的一个打印日历程序

说明:总共有三个文件

1、month.h为定义函数的头文件

2、month.cpp为函数的实现代码

3、mainprog.cpp为主函数的实现代码

month.h

void printMonth(int year,int month);
void printMonthTitle(int year,int month);
void printMonthBody(int year,int month);
int getStartDay(int year,int month);
int getTotalNumberOfDays(int year,int month);
int getNumberOfDaysInMonth(int year,int month);
bool isLeapYear(int year);

month.cpp

#include<iostream>
#include<iomanip>
#include "month.h"
using namespace std;
//打印日历头部
void printMonthTitle(int year,int month){
    char chMonth[12][7] = {"一月","二月","三月","四月","五月","六月","七月",
    "八月","九月","十月","十一月","十二月"};
    cout<<endl;
    cout<<setw(12)<<year<<"年"<<"    ";
    cout<<chMonth[month-1]<<endl;
    cout<<"------------------------------"<<endl;
    cout<<"  Sun Mon Tue Wed Thu Fri Sat"<<endl;
}

void printMonthBody(int year,int month){
    int startDay = getStartDay(year,month);
    int numberOfDaysInMonth = getNumberOfDaysInMonth(year,month);
    int i = 0;
    for(i=0;i<startDay;i++){
        cout<<"    ";
    }
    for(i=1;i<=numberOfDaysInMonth;i++){
        cout<<setw(4)<<i;
        if((i+startDay)%7==0){
            cout<<endl;
        }
    }
    cout<<endl;
    cout<<"------------------------------"<<endl;
}

int getStartDay(int year,int month){
    int startDay1800 = 3;
    int totalNumberOfDays = getTotalNumberOfDays(year,month);
    return (totalNumberOfDays+startDay1800)%7;
}

int getTotalNumberOfDays(int year,int month){
    int total = 0;
    for(int i=1800;i<year;i++){
        if(isLeapYear(i)){
            total=total+366;
        }else{
            total=total+365;
        }
    }
    for(int i=1;i<month;i++){
        total=total+getNumberOfDaysInMonth(year,i);
    }
    return total;
}

int getNumberOfDaysInMonth(int year,int month){
    if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
        return 31;
    }
    if(month==4||month==6||month==9||month==11){
        return 30;
    }
    if(month==2){
        return isLeapYear(year)?29:28;
    }
    return 0;
}

bool isLeapYear(int year){
    return year%400==0||(year%4==0&&year%100!=0);
}

mainprog.cpp

#include<iostream>
#include<iomanip>
#include "month.cpp"
#include "month.h"
using namespace std;
void main(){
    cout<<"请输入年份(如2018):";
    int year;
    cin>>year;
    cout<<"请输入月份(1-12):";
    int month;
    cin>>month;
    printMonth(year,month);
}

void printMonth(int year,int month){
    printMonthTitle(year,month);
    printMonthBody(year,month);
}

结果显示:

原文地址:https://www.cnblogs.com/hglibin/p/10041606.html

时间: 2024-12-23 09:03:08

C++实现的一个打印日历程序的相关文章

一个PHP日历程序

<?php  //<-------处理通过GET方法提交的变量;开始-------->  if($HTTP_GET_VARS[year]=="")  {      $HTTP_GET_VARS[year]=date("Y");  }  if($HTTP_GET_VARS[month]=="")  {      $HTTP_GET_VARS[month]=date("n");  }  $month=$HTTP_

java例题_47 读取 7 个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*

1 /*47 [程序 47 打印星号] 2 题目:读取 7 个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*. 3 */ 4 5 /*分析 6 * 1.多次读取---for循环 7 * 2.输出多个不确定数量的*-----for循环 8 * ====>两层for循环 9 * */ 10 11 package homework; 12 13 import java.util.Scanner; 14 15 public class _47 { 16 17 public static v

自写打印日历类

在论坛上看到有人在问打印日历的程序,今天下午空闲的时候写了一个日历类,简单的写了几个方法. calendar.h #include <string> using namespace std; #ifndef CALENDAR_H #define CALENDAR_H class Calendar{ public: Calendar(){} void printAllMonth(const int &year); void printOneMonth(const int &yea

Python实战练习——打印日历教程

很长一段时间没有接触过C语言了,想来做这一行当已经有三两年了. 今天突然想起来以前用C语言在VC6上写代码的日子,想了想以前的一些实战练习. 所以今天打算用Python来写一个C语言以前练习的题目-日历打印器,并根据情况进行优化. 效果如上图所示 算法思路: 首先,关于日历的相关操作都离不开一个根本情况,1990年的1月1日是周一,所以日历的打印需要基于这一事实 想要打印日历需要解决的问题最主要便是一个——那就是本月1号是周几? 在没有更好的算法之前,最好用的方式就是根据接收的年月去累加,然后除

【Java自学】 打印日历信息

1 package codeTask_FangFa; 2 // 5.34 使用zeller公式,打印某年某月的日历信息. 3 import java.util.Scanner; 4 public class PrintRiLi { 5 public static void main(String[] args){ 6 Scanner input = new Scanner(System.in); 7 System.out.println("请输入需要打印日历的年份:"); 8 int

漫谈程序员系列:3D打印能打印出程序猿吗

首先声明,本文是一本正经的胡扯,绝不是随随便便的胡扯,请您不要随便攻击我胡说八道,我要重复星爷在<喜剧之王>里的台词:其实,我是一本正经的喷子. 3D打印的定义 关于3D打印,下面是来自百度百科的解释: " 3D打印,即快速成型技术的一种,它是一种以数字模型文件为基础,运用粉末状金属或塑料等可粘合材料,通过逐层打印的方式来构造物体的技术.    3D打印通常是采用数字技术材料打印机来实现的.常在模具制造.工业设计等领域被用于制造模型,后逐渐用于一些产品的直接制造,已经有使用这种技术打

一个初中生到程序员的辛酸经历

一个初中生到程序员的辛酸经历 转自木板 前言:我将写下一个穷苦家庭的农村孩子的经历.我念书不多,文笔不好,基本上是流水式的叙述,大家多多见谅.如果你现在年轻或迷惘,那你看下这篇文章或许有帮助.如果你想了解社会的底层,也可以看看本文.在这篇文章里我会写一些我对人生的看法,希望可以给各位参考参考. 我今年二十八岁,个子不高,长得还算端正.在学校受的教育不高,就读到初中二年级下学期.   我干过很多行业,学过厨师,学过装修,做过酒店服务员,送过报纸.可以说在在社会底层的经历十分的丰富.后来参加自考拿了

Linux下搭建Java环境变量并实现第一个Java小程序

1.首先,我们打开虚拟机里面的Linux操作系统,然后点击下图菜单下的虚拟机选项: 在点击虚拟机下的设置菜单,如下图所示: 这里我已经添加进去我所需要的文件夹了,我放在本机E盘下的as文件夹里面到底放了什么呢? 上图这两个压缩文件,一个是android studio的压缩包,上年发布出来的,一直没用它,今天本来想在windows下安装这个软件,发现所需要的jdk是1.7,而我在windows下的jdk版本为1.6,所以打算在Linux操作系统下安装jdk1.7,并安装andoid studio工

Unity3d 一个优秀的程序必备的几种设计模式

unity编程众所周知,它是属于脚本化,脚本没有一个具体的概念跟架构, 导致在项目过程中,经常出现哪里需要实现什么功能,就随便添加脚本, 结果,就造成了一片混乱,不好管理. 更有甚者,自己的写的代码闲置一段时间后,再去想找某个功能的实现,都要在视图中翻来覆去找半天. 哎!请容许我在此感叹一声,这还是你写的东西么? 因此,一个好的设计模式是多么的重要啊, 那么,我们在使用unity3d开发东西的时候,脚本架构到底应该如何来写? 呵呵... 其实,我也给不了你们具体答案,因为每个人的开发习惯,每个团