上机内容:C++程序的编写和运行
上机目的:掌握简单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;
}
}
运行结果:
心得体会: 写这个节日累死了。。。没找到适合的文件,要不直接读取了就。。。本来还想加上农历,顺便把咱自己的节日加上的呢,结果一查,农历还跟太阳历有关!?根本就不懂这怎么替换的,更不用谈写代码了。。。就先这样吧。。。
知识点总结:略