万年历

原创 2006年06月24日 12:54:00

源代码如下:

#include <iostream>

using namespace std;

 

void DataShow(int d, int w, int ** p);  // 显示日历函数d为本月共有多少天,w为第一天为星期几,p为存储空间

 

int main()

{

    char key;

    int year = 0;           // 当前查询的年份

    int count = 0 ;         // 从年到当前年闰年的个数(包括当前年)

    int current = 0;        // current为,当前年为闰年;为,当前年为平年

    long int days = 0;      // 从年到当前年闰年的个数(不包括当前年)

    int which = 1;          // 判定当前年的第一天是星期几

    int ** data = new int *[6]; // 分配个空格

    for (int i = 0; i < 6; ++i)

        data[i] = new int[7];

    while (key != 'Q' && key != 'q')

    {

        cout << "请输入所要查询的年份(19999): ";

        cin >> year;

        while (cin.get() != '/n')

                ;

        if (year >=1 && year <= 9999)

        {

            count = 0;      // 全部回复原始设定

            current = 0;

            days = 0;

            which = 1;

            for (int i = 1; i <= year; ++i)

            {

                if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0))     // 闰年判定条件:能被整除且不能被整除,或者能被整除

                {

                    count++;

                    if (i == year)

                        current = 1;

                }

            }

            days = 365 * (year - 1) + count;    // 计算从年到当前年的总天数(不包括当前年)

            if (current == 1)                   // 如果当前年为闰年,则总天数减去

                days--;    

            which += days % 7;                  // 计算当前年第一天为星期几

            cout << "/n********* " ;

            cout.width(4);

            cout << year;

            cout << "年年历*********/n";

            cout << "******************************/n"

                 << "           一月份/n"

                 << "******************************/n"

                 << "        /n";

            DataShow(31, which, data);

            cout << "******************************/n"

                 << "           二月份/n"

                 << "******************************/n"

                 << "        /n";

            which = (which + 31) % 7;           // 计算当月第一天是星期几

            if (current == 1)

                DataShow(29, which, data);

            else

                DataShow(28, which ,data);

            cout << "******************************/n"

                 << "           三月份/n"

                 << "******************************/n"

                 << "        /n";

            if (current == 1)

            {

                which = (which + 29) % 7;

                DataShow(29, which, data);

            }

            else

            {

                which = (which + 28) % 7;

                DataShow(28, which ,data);

            }

            cout << "******************************/n"

                 << "           四月份/n"

                 << "******************************/n"

                 << "        /n";

            which = (which + 31) % 7;

            DataShow(31, which, data);

            cout << "******************************/n"

                 << "           五月份/n"

                 << "******************************/n"

                 << "        /n";

            which = (which + 30) % 7;

            DataShow(31, which, data);

            cout << "******************************/n"

                 << "           六月份/n"

                 << "******************************/n"

                 << "        /n";

            which = (which + 31) % 7;

            DataShow(31, which, data);

            cout << "******************************/n"

                 << "           七月份/n"

                 << "******************************/n"

                 << "        /n";

            which = (which + 30) % 7;

            DataShow(31, which, data);

            cout << "******************************/n"

                 << "           八月份/n"

                 << "******************************/n"

                 << "        /n";

            which = (which + 31) % 7;

            DataShow(31, which, data);

            cout << "******************************/n"

                 << "           九月份/n"

                 << "******************************/n"

                 << "        /n";

            which = (which + 31) % 7;

            DataShow(31, which, data);

            cout << "******************************/n"

                 << "           十月份/n"

                 << "******************************/n"

                 << "        /n";

            which = (which + 30) % 7;

            DataShow(31, which, data);

            cout << "******************************/n"

                 << "          十一月份/n"

                 << "******************************/n"

                 << "        /n";

            which = (which + 31) % 7;

            DataShow(31, which, data);

            cout << "******************************/n"

                 << "          十二月份/n"

                 << "******************************/n"

                 << "        /n";

            which = (which + 30) % 7;

            DataShow(31, which, data);

            cout << "/n退出请按'Q',继续查询请按回车:";

            key = cin.get();

            cout << endl << endl;

        }

        else

            cout << "/n输入错误/n/n";

    }

    cout << "/n程序结束,谢谢使用!^O^/n/n";

    return 0;

}

 

void DataShow(int d, int w, int ** p)

{

    int temp = 1;      

    int number = d;     // 实际天数监测

    for (int i = 0; i < 6; ++i)

    {

        for (int j = 0; j < 7; ++j)

        {

            if ((i == 0 && j < w) || number == 0 )      // 无日期对应项中填充空格

                p[i][j] = 0;

            else

            {

                p[i][j] = temp++;

                number--;

            }

        }

    }

    for (int i = 0; i < 6; ++i)

    {

        for (int j = 0; j < 7; ++j)

        {

            if (p[i][j] == 0)

            {

                cout.width(4);      // 控制输出格式

                cout << "";

            }

            else

            {

                cout.width(4);

                cout << p[i][j];

            }

        }

        cout << endl;

    }

    cout << endl;

}

 

基于至简设计法实现的万年历功能

一、   功能描述 1、上板复位后从元年1月1号开始计数,为方便上板调试,将一天的时间压缩为1秒; 2、按键用于设置日历,按下按键0进入设置状态,再次按下按键0退出设置状态;3、按键1...
  • luckyb1
  • luckyb1
  • 2017年03月25日 16:23
  • 255

综合实例:51单片机(AT89C52)万年历(温度闹钟年月日时分秒星期)

功能说明: LCD1602液晶显示年、月、日、时、分、秒、星期、温度,三个按键控制时间日期调整以及闹钟设定。   三个按键: 1、“校时”键,每次按下分别对应调整秒、调整分钟、调整小时、调整星...

利用89c51单片机编写可调万年历

最近需要编写我学单片机一个星期以来最大的一个项目,目前感觉相当有挑战性,题目如下: 1)         项目一(远程时钟控制系统) 项目背景:时间对于每个人都很重要,特别是对于高速发展的今天...
  • stweddy
  • stweddy
  • 2012年06月25日 21:12
  • 1830

C#版万年历源码、农历、节日、节气齐全

转载自:http://haizigeren.haotui.com/thread-280-1-1.html using System; using System.Collections.Generic...

黑马程序员----java基础---自制万年历记事本,有什么更好方法欢迎指点

import java.awt.*; import java.io.*; import java.awt.event.*; import java.text.DateFormat; impor...

JAVA自学日记--万年历的小练习

public class calendarDemo {public static void main(String[] args) {Calendars(2015,12);}// 判断一个年份是闰年还...

基于Win32控制台的万年历的实现(下)

在“基于Win32控制台的万年历的实现(上)”中,实现了指定年份日历的显示。在显示日历时,每次只能显示一个月份。本文将程序进行修改,使其每次可以实现指定个数的月份,如图1所示。...

用java做一个简单的万年历

一个简单的万历表制作 简单介绍万历表的各功能实现: 1.首先键盘输入查询的年份和月份 Scanner sc = new Scanner(System.in); System.o...

python3实现万年历(包括公历、农历、节气、节日)

#!/usr/local/bin/python3 # coding=utf-8 # Created: 20/07/2012 # Copyright: http://www.cnblo...
  • txw1958
  • txw1958
  • 2013年07月23日 17:07
  • 971

JAVA的图形用户界面练习——万年历的制作

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class calendar extends JFr...
  • wyf2017
  • wyf2017
  • 2017年12月10日 16:53
  • 51
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:万年历
举报原因:
原因补充:

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