ACM日历题新版(界面修改+国际节日)

上机内容:C++程序的编写和运行
上机目的:掌握简单C++程序的编辑、编译、连接和运行的一般过程
我的程序:
/*
Copyright (c) 2013, 烟台大学计算机学院
* All rights reserved.
* 作    者:赵玲玲
* 完成日期:2014 年 3 月 12 日
* 版 本 号:v1.0
* 输入描述: 无
* 问题描述:要求:基本功能必须具备(通过年月查询本月日历),另外要有一定的创新性,可自由发挥。
      提示:
     (1)以某年某月某日为星期几为条件,算输入的年月日的日历。
      例如:1980年1月1日为星期二。
      输入(2012/2),求输出该月的日历,首先需要计算2012年1月1日为星期几,来确定日历的格式(起止位置)。当输入日期有误时要重新输入。
     (2)需要考虑闰年问题。
     (3)格式控制的头文件为<iomanip> 格式为cout<<setw(6);
     (4)可以在黑框框运行。
* 程序输出:
* 问题分析:
* 算法设计:略
*/
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
struct Calender
{
    int year;
    int month;
    int day;
};
Calender c;
void welcome();//欢迎界面
void Input();//输入时间
void days(long);
void output(long);
void jieri();//国际节日
int main()
{
    welcome();
    cout<<"输入时间(1900年及以后)(格式例:1999.12.3)\t";
    Input();//输入时间
    int sum=c.day;//该年第几天
    for(int i=1; i<c.month; i++)//对不同月份相加不同的天数
    {
        switch(i)
        {
        case 2:
            sum+=(c.year%4==0&&c.year%100!=0||c.year%400==0)?29:28;//闰年2月29天,平年2月28天
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            sum+=30;
            break;
        default:
            sum+=31;
            break;
        }
    }
    long summ=0;
    if(c.year>1900)
    {
        for(int i=1900; i<c.year; i++)//根据是否闰年,对每年进行判断
        {
            if(i%4==0&&i%100!=0||i%400==0)
            {
                summ+=366;//闰年366
            }
            else
            {
                summ+=365;//平年365
            }
        }
        summ+=sum;
    }
    else//若求1900年的,直接求该年天数
    {
        summ=sum;
    }
    cout<<"\n请按功能进行选择:"<<endl;
    cout<<"1.查询周几      2.输出该月日历      3.输出该月中的国际性节日\t";
    int n;
    cin>>n;
    switch(n)
    {
    case 1:
        days(summ);
        break;
    case 2:
        output(summ-c.day+1);
        break;//总天数减去该月天数,即每月1日,以便输出该月日历
    case 3:
        jieri();
        break;//国际节日
    default :
        cout<<"error!"<<endl;
    }
    cout<<endl;
    return 0;
}
//欢迎界面
void welcome()
{
    cout<<"                **************"<<endl;
    cout<<"                *多功能万年历*"<<endl;
    cout<<"                **************"<<endl;
}
//输入时间
void Input()
{
    char c1,c2;
    cin>>c.year>>c1>>c.month>>c2>>c.day;
    if(c1!='.'||c2!='.')
    {
        cout<<"格式不正确,请重新输入\t";
        Input();
    }
    if(c.year<1900||c.month<1||c.month>12||c.day<1||c.day>31)//对输入做判断
    {
        cout<<"输入有误!请重新输入\t";
        Input();
    }
    if(c.month==2)//判断二月的输入是否正确
    {
        if((c.year%4==0&&c.year%100!=0)||c.year%400==0)
        {
            if(c.day>29)
            {
                 cout<<"输入有误!请重新输入\t";
                 Input();
            }
        }
        else
        {
            if(c.day>28)
            {
                cout<<"输入有误!请重新输入\t";
                Input();
            }
        }
    }
    if((c.month==4||c.month==6||c.month==9||c.month==11)&&c.day>30)//判断部分月份输入是否正确
    {
        cout<<"输入有误!请重新输入\t";
        Input();
    }
}
//国际节日
void jieri()
{
    cout<<endl;
    cout<<"**********************************"<<endl;
    switch(c.month)
    {
    case 1:

        cout<<"*    "<<c.month<<"/1"<<"     新年元旦"<<endl;
        cout<<"*    "<<c.month<<"/6"<<"     中国13亿人口日"<<endl;
        cout<<"*    "<<c.month<<"/10"<<"    中国110宣传日"<<endl;
        break;
    case 2:
        cout<<"*    "<<c.month<<"/2"<<"     世界湿地日"<<endl;
        cout<<"*    "<<c.month<<"/4"<<"     世界癌症日"<<endl;
        cout<<"*    "<<c.month<<"/7"<<"     国际声援南非日"<<endl;
        cout<<"*    "<<c.month<<"/10"<<"    世界气象日"<<endl;
        cout<<"*    "<<c.month<<"/14"<<"    情人节"<<endl;
        cout<<"*    "<<c.month<<"/21"<<"    国际母语日"<<endl;
        break;
    case 3:
        cout<<"*    "<<c.month<<"/3"<<"     全国爱耳日"<<endl;
        cout<<"*    "<<c.month<<"/8"<<"     妇女节"<<endl;
        cout<<"*    "<<c.month<<"/12"<<"    植树节"<<endl;
        cout<<"*    "<<c.month<<"/15"<<"    国际消费日"<<endl;
        cout<<"*    "<<c.month<<"/21"<<"    世界森林日"<<endl;
        cout<<"*    "<<c.month<<"/22"<<"    世界水日"<<endl;
        cout<<"*    "<<c.month<<"/23"<<"    世界气象日"<<endl;
        cout<<"*    "<<c.month<<"/24"<<"    世界防治结核病日"<<endl;
        break;
    case 4:
        cout<<"*    "<<c.month<<"/1"<<"     愚人节"<<endl;
        cout<<"*    "<<c.month<<"/5"<<"     清明节"<<endl;
        cout<<"*    "<<c.month<<"/7"<<"     世界卫生日"<<endl;
        cout<<"*    "<<c.month<<"/22"<<"    世界地球日"<<endl;
        break;
    case 5:
        cout<<"*    "<<c.month<<"/1"<<"     国际劳动节"<<endl;
        cout<<"*    "<<c.month<<"/4"<<"     中国青年节"<<endl;
        cout<<"*    "<<c.month<<"/5"<<"     全国碘缺乏病日"<<endl;
        cout<<"*    "<<c.month<<"/8"<<"     世界红十字日"<<endl;
        cout<<"*    "<<c.month<<"/12"<<"    国际护士节"<<endl;
        cout<<"*    "<<c.month<<"/15"<<"    国际家庭日"<<endl;
        cout<<"*    "<<c.month<<"/17"<<"    世界电信日"<<endl;
        cout<<"*    "<<c.month<<"/18"<<"    世界博物馆日"<<endl;
        cout<<"*    "<<c.month<<"/19"<<"    中国汶川地震哀悼日"<<endl;
        cout<<"*    "<<c.month<<"/20"<<"    全国学生营养日"<<endl;
        cout<<"*    "<<c.month<<"/22"<<"    国际生物多样性日"<<endl;
        cout<<"*    "<<c.month<<"/31"<<"    世界无烟日"<<endl;
        break;
    case 6:
        cout<<"*    "<<c.month<<"/1"<<"     国际儿童节"<<endl;
        cout<<"*    "<<c.month<<"/5"<<"     世界环境日"<<endl;
        cout<<"*    "<<c.month<<"/6"<<"     全国爱眼日"<<endl;
        cout<<"*    "<<c.month<<"/17"<<"    防治荒漠化和干旱日"<<endl;
        cout<<"*    "<<c.month<<"/23"<<"    国际奥林匹克日"<<endl;
        cout<<"*    "<<c.month<<"/25"<<"    全国土地日"<<endl;
        cout<<"*    "<<c.month<<"/26"<<"    国际反毒品日"<<endl;
        break;
    case 7:
        cout<<"*    "<<c.month<<"/1"<<"     香港回归日"<<endl;
        cout<<"*    "<<c.month<<"/1"<<"     建党节"<<endl;
        cout<<"*    "<<c.month<<"/7"<<"     抗日战争纪念日"<<endl;
        cout<<"*    "<<c.month<<"/8"<<"     世界过敏性疾病日"<<endl;
        cout<<"*    "<<c.month<<"/11"<<"    世界人口日"<<endl;
        break;
        case 8:
            cout<<"*    "<<c.month<<"/1"<<"     八一建军节"<<endl;
            break;
        case 9:
            cout<<"*    "<<c.month<<"/1"<<"     劳动节"<<endl;
            cout<<"*    "<<c.month<<"/8"<<"     国际扫盲日"<<endl;
            cout<<"*    "<<c.month<<"/10"<<"    教师节"<<endl;
            cout<<"*    "<<c.month<<"/10"<<"    世界预防自杀日"<<endl;
            cout<<"*    "<<c.month<<"/16"<<"    国际臭氧层保护日"<<endl;
            cout<<"*    "<<c.month<<"/17"<<"    国际和平日"<<endl;
            cout<<"*    "<<c.month<<"/20"<<"    国际爱牙日"<<endl;
            cout<<"*    "<<c.month<<"/27"<<"    世界旅游日"<<endl;
            break;
        case 10:
            cout<<"*    "<<c.month<<"/1"<<"     国庆节"<<endl;
            cout<<"*    "<<c.month<<"/1"<<"     国际音乐节"<<endl;
            cout<<"*    "<<c.month<<"/2"<<"     国际减轻自然灾害日"<<endl;
            cout<<"*    "<<c.month<<"/7"<<"     国际住房日"<<endl;
            cout<<"*    "<<c.month<<"/8"<<"     全国高血压日"<<endl;
            cout<<"*    "<<c.month<<"/8"<<"     世界视觉日"<<endl;
            cout<<"*    "<<c.month<<"/9"<<"     邮政日"<<endl;
            cout<<"*    "<<c.month<<"/10"<<"    世界精神卫生日"<<endl;
            cout<<"*    "<<c.month<<"/15"<<"    国际盲人节"<<endl;
            cout<<"*    "<<c.month<<"/16"<<"    世界粮食节"<<endl;
            cout<<"*    "<<c.month<<"/17"<<"    世界消除贫困日"<<endl;
            cout<<"*    "<<c.month<<"/21"<<"    中国(揭阳)国际玉器节"<<endl;
            cout<<"*    "<<c.month<<"/22"<<"    世界传统医药日"<<endl;
            cout<<"*    "<<c.month<<"/24"<<"    联合国日"<<endl;
            cout<<"*    "<<c.month<<"/25"<<"    人类天花绝迹日"<<endl;
            cout<<"*    "<<c.month<<"/26"<<"    足球诞生日"<<endl;
            cout<<"*    "<<c.month<<"/31"<<"    万圣节"<<endl;
            break;
        case 11:
            cout<<"*    "<<c.month<<"/8"<<"     中国记者日"<<endl;
            cout<<"*    "<<c.month<<"/9"<<"     消防宣传日"<<endl;
            cout<<"*    "<<c.month<<"/11"<<"    光棍节"<<endl;
            cout<<"*    "<<c.month<<"/14"<<"    世界糖尿病日"<<endl;
            cout<<"*    "<<c.month<<"/17"<<"    国际大学生节"<<endl;
            break;
        default:
        cout<<"*    "<<c.month<<"/1"<<"     世界艾滋病日"<<endl;
        cout<<"*    "<<c.month<<"/3"<<"     世界残疾人日"<<endl;
        cout<<"*    "<<c.month<<"/9"<<"     世界足球日"<<endl;
        cout<<"*    "<<c.month<<"/20"<<"    澳门回归纪念日"<<endl;
        cout<<"*    "<<c.month<<"/21"<<"    国际篮球日"<<endl;
        cout<<"*    "<<c.month<<"/24"<<"    平安夜"<<endl;
        cout<<"*    "<<c.month<<"/25"<<"    圣诞节"<<endl;
        cout<<"*    "<<c.month<<"/25"<<"    世界强化免疫日"<<endl;
        cout<<"*    "<<c.month<<"/26"<<"    毛泽东诞辰"<<endl;
    }
    cout<<"**********************************"<<endl;
    cout<<"继续查询请按1,按其他键退出";
    int k;
    cin>>k;
    switch(k)
    {
        case 1:main();break;
        default :break;
    }
}
//查询周几
void days(long summ)
{
    cout<<endl;
    int t;
    t=summ%7;//1900 年1月1日正好为周一,根据此可求出周几
    cout<<c.year<<"年"<<c.month<<"月"<<c.day<<"日为";
    switch(t)
    {
    case 1:
        cout<<"周一"<<endl;
        break;
    case 2:
        cout<<"周二"<<endl;
        break;
    case 3:
        cout<<"周三"<<endl;
        break;
    case 4:
        cout<<"周四"<<endl;
        break;
    case 5:
        cout<<"周五"<<endl;
        break;
    case 6:
        cout<<"周六"<<endl;
        break;
    case 0:
        cout<<"周日"<<endl;
        break;
    };
    cout<<"继续查询请按1,按其他键退出";
    int k;
    cin>>k;
    switch(k)
    {
        case 1:main();break;
        default :break;
    }
}
//输出该月日历
void output(long s)
{
    cout<<endl;
    string tian[]={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
    string sheng[]={"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
    string sx[]={"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};
    int a=6,b=0,c1;
    c1=c.year-1900;//年差
    a=(a+c1%10)%10;//每10年一循环
    b=(b+c1%12)%12;//每12年一循环
    cout<<"    "<<c.year<<"年"<<c.month<<"月\t\t\t"<<tian[a]<<sheng[b]<<"年\t"<<sx[b]<<endl;
    cout<<"    ****************************************"<<endl;
    cout<<"    周日  周一  周二  周三  周四  周五  周六"<<endl;
    int t;
    t=s%7;
    int ci;
    if(c.month==2)
    {
        if(c.year%4==0&&c.year%100!=0||c.year%400==0)
        {
            ci=29;//变量ci控制输出日历
        }
        else
        {
            ci=28;
        }
    }
    else if(c.month==4||c.month==6||c.month==9||c.month==11)
    {
        ci=30;
    }
    else
    {
        ci=31;
    }
    int j,i;
    switch(t)//根据每月1日为周几,输出该月日历
    {
    case 0://周日
        j=1;
        for(i=0; i<ci; i++)
        {
            cout<<setw(6)<<j++;
            if(j==8||j==15||j==22||j==29)//换行
            {
                cout<<endl;
            }
        }
        break;
    case 1://周一
        j=7;
        cout<<"           1     2     3     4     5     6 \n";
        for(i=0; i<ci-6; i++)
        {
            cout<<setw(6)<<j++;
            if(j==14||j==21||j==28)
            {
                cout<<endl;
            }
        }
        break;
    case 2://周二
        j=6;
        cout<<"                 1     2     3     4     5 \n";
        for(i=0; i<ci-5; i++)
        {
            cout<<setw(6)<<j++;
            if(j==20||j==13||j==27)
            {
                cout<<endl;
            }
        }
        break;
    case 3://周三
        j=5;
        cout<<"                       1     2     3     4\n";
        for(i=0; i<ci-4; i++)
        {
            cout<<setw(6)<<j++;
            if(j==5||j==12||j==19||j==26)
            {
                cout<<endl;
            }
        }
        break;
    case 4://周四
        j=4;
        cout<<"                             1     2     3 \n";
        for(i=0; i<ci-3; i++)
        {
            cout<<setw(6)<<j++;
            if(j==11||j==18||j==25)
            {
                cout<<endl;
            }
        }
        break;
    case 5://周五
        j=3;
        cout<<"                                   1     2 \n";
        for(i=0; i<ci-2; i++)
        {
            cout<<setw(6)<<j++;
            if(j==10||j==17||j==24||j==31)
            {
                cout<<endl;
            }
        }
        break;
    case 6://周六
        j=2;
        cout<<"                                         1 \n";
        for(i=0; i<ci-1; i++)
        {
            cout<<setw(6)<<j++;
            if(j==9||j==16||j==23||j==30)
            {
                cout<<endl;
            }
        }
    }
    cout<<"\n    ****************************************"<<endl;
    cout<<endl;
    cout<<"继续查询请按1,按其他键退出";
    int k;
    cin>>k;
    switch(k)
    {
        case 1:main();break;
        default :break;
    }
}


运行结果: 

                  

心得体会: 写这个节日累死了。。。没找到适合的文件,要不直接读取了就。。。本来还想加上农历,顺便把咱自己的节日加上的呢,结果一查,农历还跟太阳历有关!?根本就不懂这怎么替换的,更不用谈写代码了。。。就先这样吧。。。
知识点总结:略
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值