目录
一、设计任务,目的与要求 .............................错误!未指定书签。 1.设计内容: ................................................错误!未指定书签。 2.设计目的: ................................................错误!未指定书签。 3.设计要求: ................................................错误!未指定书签。 二、概要设计 .....................................................错误!未指定书签。 1.需求分析: ................................................错误!未指定书签。 2.设计流程: ............................................................................... 3 1设计要求: ...........................................错误!未指定书签。 2总体设计: ...........................................错误!未指定书签。 三、运行结果及分析 .........................................错误!未指定书签。 1.程序运行测试: ........................................错误!未指定书签。 2.进入程序菜单: ........................................错误!未指定书签。 3.1号键功能: .............................................错误!未指定书签。 3.2号键功能: .............................................错误!未指定书签。 4.3号键功能: .............................................错误!未指定书签。 5.0号键功能: .............................................错误!未指定书签。 四、源代码 ………………………………………………………..6
一、设计任务,目的与要求
1.设计内容:
年历显示功能要求:
1.输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。
2.输入年月,输出该月的日历。
3.输入年月日,输出距今天还有多少天,星期几,是否是公历节日。
2.设计目的:
本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言C++(或C)》课程后进行的一次全面的综合练习。本课程设计的目的和任务: 1. 巩固和加深学生对C++(或C)语言课程的基本知识的理解和掌握 2. 掌握C++(或C)语言编程和程序调试的基本技能 3. 利用C++(或C)语言进行基本的软件设计 4. 掌握书写程序设计说明文档的能力
5. 提高运用C++(或C)语言解决实际问题的能力
3.设计要求:
1. 分析课程设计题目的要求 2. 写出详细设计说明
3. 编写程序代码,调试程序使其能正确运行 4. 设计完成的软件要便于操作和使用
5. 设计完成后提交课程设计报告及程序代码
二、概要设计
1.需求分析:
目前的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基于该程序所开发的各种应用程序中的日历程序。然而,这些程序都是千遍一律的局限于一个很短的时间内。但是,很多情况下,特别是在众多的科学领域中,一个时间跨度较大的程序是有参考价值的。C++程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本就弥补了这一领域的空白。
万年历作为日常中的一种小工具,它具有多方面的小工能,主要在日期的显示上给人以直观的表达效果,在日期的查询上方便简洁,还有就是在某些节日的提醒上都给我们带来极大的方便 ,是一种比较实用的小工具。给人的需求性很大,学生在做此万年历课程设计的同时,能够认识到C++编程给人带来的便捷,也能够清楚万历年表编程的出入。对培养学生的创新能力和动手能力具有很大的作用。
2.设计流程: 1设计要求:
(1)程序运行时,首先给4出个菜单选项的内容和输入提示:
1 显示某一年的日历 2 显示某一月的月历 3查找某一天 0 退出
(2)用户可以通过主菜单选择不同的选项:
若选择1,则通过输入年份,显示输出该年每个月的日历; 若选择2,则通过输入年月,显示输出该月的日历;
若选择3,则通过输入年月日,输出该天所在月的月历、该天是星期几、是否阳历节日、距今多少天; 若选择0,则退出。
2总体设计:
进入程序 1. 2. 3. 0. 显示一年的年历 显示一月的月历 查找一天 退出 据输入的年份打印该年的年据输入的年月打印该月的月据输入的日期打印该天所在月的月历并判断是否阳历节日 退出 显示年历、月历或查找结果
(流程图)
依据课程设计的要求,需要设计一个菜单功能,进入程序后,有菜单可以提供选择,
选择1,进入年历显示阶段,年历显示完毕,再次进入菜单选择。 选择2,进入月历显示阶段,月历显示完毕,再次进入菜单选择。 选择3,进入日期查询阶段,日期查询完毕,再次进入菜单。 选择0,退出程序。
三、运行结果及分析
1.程序运行测试:
在电脑中打开C++应用程序, 首先进入VC++6.0,将程序代码输入,编译,组建,调试。观察运行结果,和各个功能情况。
2.进入程序菜单:
(图1:菜单页面)
说明:该页面表示进入菜单选项,根据选项进入相应的功能。
3.1号键功能:
输入1,按enter键后:
输入要显示的年份:2013
(图2,显示2013年年历查询结果)
3.2号键功能:
输入2按enter键后:
输入年月,例如2013 1
(图3,2013年1月月历查询结果)
4.3号键功能:
输入3按enter键后:
输入年月日,如 3013 1 1
(图4,2013年 1月1查询结果)
显示查询天所在月月历,并标识出该天,同时显示是否阳历节日,距今多少天。
5.0号键功能:
退出程序。
四、源代码
#include #include using namespace std;int dayofmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//定义全¨局变量,每月的天数 //函数IsLeap判断是否为闰¨年 bool IsLeap(int year) { }
//函数getdays计算从1年1月1日起到输入日一共有多少天 int getdays(int year,int month,int day) { }
//函数Initdate获得现在的时间
int Initdate(int &y, int &m, int &d, int &h, int &min, int &sec) }
{
int sum; time_t t; time( &t );
struct tm * local_time = localtime( &t ); sec = local_time->tm_sec; min = local_time->tm_min ; h = local_time->tm_hour ; d = local_time->tm_mday ; m = local_time->tm_mon+1; y = local_time->tm_year+1900; sum=getdays(y,m,d); return sum; int i,sum=0;
for(i=1;iif(IsLeap(year)) dayofmonth[2]=29;//为闰年时二月有29天 for(i=1;iif(IsLeap(i)) sum+=366; else sum+=365;if(year%400==0||(year%100!=0&&year%4==0))
return 1;
else return 0;
//打印一年的年历 void printyear() { 天
}
s=s%7;
for(int m=0;mfor(int k=1;k<8-s;)//由1开始打印每月月历第一行 { }
cout<<\" \";
cout<cout<for(int j=0;j<3;j++)cout<<\"Su \"<<\"Mo \"<<\"Tu \"<<\"We \"<<\"Th \"<<\"Fr \"<<\"Sa \"<<\" \"; cout<for(int j=0;j<3;j++) {month=3*(i-1)+j+1;
s=getdays(year,month,1); //计算从年月日起到所查找¨年每月第ì天一共有多少|
----\"<cout<<\"--------------------------------------------------------------------------\"<for(int h=1;h<=3;h++) { }
int m=3*(i-1)+h;
cout<<\" \"<system(\"cls\"); int s,year,month; int a[10],b[10];cout<<\"请输入要查找的年份; cin>>year;
cout<<\"========================The Calender of Year int i=1;
for(i=1;i<=12/3;i++) //3确定每一行显示三个月的月历 {
\"<}}
cout<for(int w=1;w<=5;w++)//打印每月月历其余行 { }for(int j=0;j<3;j++) { }
cout<int m=1;for(m=1;m<=7;m++,a[j]++) { }
for(int n=1;a[j]>b[j],n<=8-m;n++)
cout<<\" \";
if(a[j]>b[j]&&m!=8) cout<<\" \";
if(a[j]>b[j]) break;
cout<cout<<\"============================================================================\"<//打印某3月的月历void printfmonth(int year,int month ,int day) {
system(\"cls\"); int i,s; s=s%7;
cout<<\"==========\"<if(i==day) cout<<\"★\"<cout << i << '\'; if ( (i+s) % 7 == 0 )cout << '\\n'; cout << '\'; cout.put( '\\n' ); if ( s == 6 )
for ( i = 1; i <= dayofmonth[month]; ++i )
s=getdays(year,month,1); //计算从1年1月1日起到所查找月第一天一共有多少|天
\"<}cout<cout<<\"==========================\"<//查找某一天void lookday(int year,int month ,int day) { 日
{
case 1:switch(day)
{
case 1:cout<<\"元旦(New year's day)\"<}break; {case 8:cout<<\"妇女节¨(Women's Day)\"<case 3:switch(day) system(\"cls\");int s,y, m, d, h, min, sec,S,sum; sum=s%7;
printfmonth(year,month,day);//打印查找日所在月的月历并标识出该天 cout<case 0:cout<<\"Sunday\"<switch(month)//判断查找天是否阳历节日先由月份判断是否有节日的月份再由日判断是否为节s=getdays(year,month,day); //计算从年月日起到查找日一共有多少′天?
case 12:cout<<\"植树节(Arbor Day)\"<default:cout<<\"不是阳历节日\"<{case 5:switch(day)
case 1:cout<<\"劳动节(Labor Day)\"<}break; {case 4:cout<<\"中国青年节(Chinese Youth Day)\"<case 6:switch(day)}
case 1:cout<<\"儿童节(Children's Day)\"<S=Initdate(y,m,d,h,min,sec);//计算从1年1月1日起到现在一共2有多少天?¨? //计算查找日距今有多少天 if(Scout<<\"距今还有\"<default:cout<<\"不是阳历节日\"<}break; {case 8:switch(day)
case 1:cout<<\"建军节(the Army's Day)\"<default:cout<<\"不是阳历节日\"<}break; {case 9:switch(day)
case 10:cout<<\"教师|节(Teacher's Day)\"<default:cout<<\"不是阳历节日¨\"<}break; {case 10:switch(day)
case 1:cout<<\"国庆节(National Day)\"<default:cout<<\"不是阳历节日\"<}break;default:cout<<\"不是阳历节¨日\"<//主函数显示程序菜单 int main() {int choice,year,month,day;
for(;1;)//显示程序菜单,为永真,每次查找完回到程序菜单ì {
cout<<\"===================================菜单选项cout<<\"请选择:\"<cout<<\"* * * * * * * * 1.查找某一年的年历 * * * * * * * cout<<\"* * * * * * * * 2.查找某一月的月历 * * * * * * * cout<<\"* * * * * * * * 3.查找某一天 * * * * * * * cout<<\"* * * * * * * * 0.退出 * * * * * * *===================================\"<*\"<cout<<\"============================================================================cin>>choice;if(choice==1) printyear();//选择1,查找¨某年年历 else if(choice==2)//选择,查找某月月历
{ int day=0;
cout<<\"请输入要查找的年月(格式如¨2012 12):\";
if(month>12) //判断输入的年月是否存在,不存在提示重新输入
cout<<\"输入的年月不存在,请重新输入\"<else printfmonth(year,month,day);//输入的年月存在,查找某月月历¤¨2==\"<cin>>year>>month;}
else if(choice==3)//选择,查找某天
{
cout<<\"请输入要查找的日期(格式如 2012 12 31):\"<case 4: case 6: case 9:case 11: //4,6,9,11月有30天
{
if(day>=1&&day<=30) lookday(year,month,day); else cout<<\"输入的日期不存在,请重新输入!\"<switch(month)cin>>year>>month>>day;
if(month>12)cout<<\"输入的月份不存在,请重新输入!\"<case 2:{
if(IsLeap(year))//闰年时二月有29天 { }
else if(day>=1&&day<=28)//非闰年时二月有28天
lookday(year,month,day);
else cout<<\"输入的日期¨存在,请重新输入!\"<if(day>=1&&day<=29) lookday(year,month,day); else cout<<\"输入的日期不存在,请重新输入!\"<} break; {if(day>=1&&day<=31) lookday(year,month,day); else cout<<\"输入的日期不存在,请重新输入!\"<default: //1,3,5,7,8,10,12月有31天}
}
}
}
else if(choice==0)//选择,退a出 }
{
cout<<\"谢谢使用!\"<else cout<<\"输入错误!请按照提示输入!\"<