打印

怎么用c++做个日历出来啊

[复制链接]
1721|7
手机看帖
扫描二维码
随时随地手机跟帖
沙发
dgun| | 2012-5-14 18:04 | 只看该作者
#include <iostream>
#include <iomanip>
using namespace std;

class calendarType {
public:
    calendarType(int Year = 1500, int Month = 1);
    void setYear(int Year);
    void setMonth(int Month);
    int getYear();
    int getMonth();
    int getDays(int Year, int Month);
    bool IsLeapYear(int Year);
    void disCalendar(int Year, int Month);
private:
    int year;
    int month;
    int days;
};

int main()
{
    int year, month;
    cout << "请输入年份和月份:";
    cout << flush;
    cin >> year >> month;
    calendarType Cal(year, month);
    Cal.disCalendar(year, month);
    getchar(); getchar();
    return 0;
}

calendarType::calendarType(int Year, int Month)
{
    if (Year < 1500 || Year > 3000)
        year = 1500;
    else
        year = Year;
    if (Month > 12 || Month < 1)
        month = 1;
    else
        month = Month;
    getDays(year, month);
}

void calendarType::setYear(int Year)
{
    if (Year >= 1500 && Year <= 3000)
        year = Year;
}

void calendarType::setMonth(int Month)
{
    if (Month >=1 && Month <= 12)
        month = Month;
}

inline int calendarType::getYear()
{
    return year;
}

inline int calendarType::getMonth()
{
    return month;
}

int calendarType::getDays(int Year, int Month)
{
    switch(Month) {
    case 1: case 3: case 5:
    case 7: case 8: case 10:
    case 12:
        days = 31;
        break;
    case 4: case 6: case 9:
    case 11:
        days = 30;
        break;
    case 2:
        if (IsLeapYear(Year))
            days = 29;
        else
            days = 28;
    }
    return days;
}

bool calendarType::IsLeapYear(int Year)
{
    if ((Year % 4 == 0 && Year % 100 != 0)
            || Year % 400 == 0)
        return true;
    else
        return false;
}

void calendarType::disCalendar(int Year, int Month)
{
    int totalDays = 0;
    for (int i = 1500; i < Year; i++)
    {
        if (IsLeapYear(i))
            totalDays += 366;
        else
            totalDays += 365;
    }
    for (int i = 1; i < Month; i++)
    {
        totalDays += getDays(Year, i);
    }
    totalDays++;
    int week = totalDays % 7;
    cout << setw(30) << Year << "年" << Month << "月";
    cout << endl;
    cout << setw(8) << "Sun";
    cout << setw(8) << "Mon";
    cout << setw(8) << "Tue";
    cout << setw(8) << "Wed";
    cout << setw(8) << "Thu";
    cout << setw(8) << "Fri";
    cout << setw(8) << "Sat";
    cout << endl;
    week++;
    if (week > 7) week = 1;
    for (int i = 1; i < week; i++)
        cout << setw(8) << "";
    getDays(Year, Month);
    for (int i = 1; i <= days; i++)
    {
        if (week > 7) {
            cout << endl;
            week = 1;
        }
        cout << setw(8) << i;
        week++;
    }
}

使用特权

评论回复
板凳
joing1999| | 2012-5-16 14:35 | 只看该作者
LS好人……我就不多说了

使用特权

评论回复
地板
sedatefire| | 2012-6-24 14:33 | 只看该作者
额? 这样就行啦
快快结贴哦

使用特权

评论回复
5
wukunshan| | 2012-6-24 22:32 | 只看该作者
那么麻烦?用VC++6.0,调用CTime类的函数获取系统日历信息不就得了?

使用特权

评论回复
6
seakmoon| | 2012-8-1 16:25 | 只看该作者
额?楼上还是体谅我们这些菜鸟吧……

使用特权

评论回复
7
engineertky| | 2012-10-7 19:53 | 只看该作者
2楼强大啊,多谢啊

使用特权

评论回复
8
Dick00| | 2012-10-7 20:13 | 只看该作者
是好强大哦,表示写这样的程序压力很大。不是职业编程的飘过……

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

2

帖子

0

粉丝