《显示年历C++课程设计报告.doc》由会员分享,可在线阅读,更多相关《显示年历C++课程设计报告.doc(15页珍藏版)》请在三一办公上搜索。
1、目录一、设计任务,目的与要求21.设计内容:22.设计目的:23.设计要求:3二、概要设计31.需求分析:32.设计流程:31设计要求:32总体设计:4三、运行结果及分析51.程序运行测试:52.进入程序菜单:53.1号键功能:63.2号键功能:64.3号键功能:75.0号键功能:7四、源代码.7一、设计任务,目的与要求1.设计内容:年历显示功能要求:1输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。2输入年月,输出该月的日历。3输入年月日,输出距今天还有多少天,星期几,是否是公历节日。2.设计目的:本课程设计是计算机科学与技术专业重要的实践性环节之一,是
2、在学生学习完程序设计语言C+(或C)课程后进行的一次全面的综合练习。本课程设计的目的和任务: 1. 巩固和加深学生对C+(或C)语言课程的基本知识的理解和掌握 2. 掌握C+(或C)语言编程和程序调试的基本技能 3. 利用C+(或C)语言进行基本的软件设计 4. 掌握书写程序设计说明文档的能力 5. 提高运用C+(或C)语言解决实际问题的能力3.设计要求:1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告及程序代码二、概要设计1.需求分析:目前的计算机日历程序,比较典型的是Window
3、s各版本中的日历程序以及基于该程序所开发的各种应用程序中的日历程序。然而,这些程序都是千遍一律的局限于一个很短的时间内。但是,很多情况下,特别是在众多的科学领域中,一个时间跨度较大的程序是有参考价值的。C+程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本就弥补了这一领域的空白。万年历作为日常中的一种小工具,它具有多方面的小工能,主要在日期的显示上给人以直观的表达效果,在日期的查询上方便简洁,还有就是在某些节日的提醒上都给我们带来极大的方便 ,是一种比较实用的小工具。给人的需求性很大,学生在做此万年历课程设计的同时,能够认识到C+编程给人带来的便捷,也能够清楚万历年表编程的出入。对
4、培养学生的创新能力和动手能力具有很大的作用。2.设计流程:1设计要求:(1)程序运行时,首先给4出个菜单选项的内容和输入提示:1 显示某一年的日历2 显示某一月的月历3查找某一天0 退出(2)用户可以通过主菜单选择不同的选项:若选择1,则通过输入年份,显示输出该年每个月的日历;若选择2,则通过输入年月,显示输出该月的日历;若选择3,则通过输入年月日,输出该天所在月的月历、该天是星期几、是否阳历节日、距今多少天;若选择0,则退出。2总体设计:据输入的年份打印该年的年历据输入的年月打印该月的月历据输入的日期打印该天所在月的月历并判断是否阳历节日退出1. 显示一年的年历2. 显示一月的月历3. 查找
5、一天0. 退出显示年历、月历或查找结果进入程序 (流程图)依据课程设计的要求,需要设计一个菜单功能,进入程序后,有菜单可以提供选择,选择1,进入年历显示阶段,年历显示完毕,再次进入菜单选择。选择2,进入月历显示阶段,月历显示完毕,再次进入菜单选择。选择3,进入日期查询阶段,日期查询完毕,再次进入菜单。选择0,退出程序。三、运行结果及分析1.程序运行测试:在电脑中打开C+应用程序, 首先进入VC+6.0,将程序代码输入,编译,组建,调试。观察运行结果,和各个功能情况。2.进入程序菜单: (图1:菜单页面)说明:该页面表示进入菜单选项,根据选项进入相应的功能。3.1号键功能:输入1,按enter键
6、后:输入要显示的年份: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#includeusing namespace std;int dayofmonth13=0,31,28,31,30,31,30,31,31,30,31,30,31;/定义全局变量,每月的天数/函数
7、IsLeap判断是否为闰年bool IsLeap(int year) if(year%400=0|(year%100!=0&year%4=0) return 1; else return 0; /函数getdays计算从1年1月1日起到输入日一共有多少天int getdays(int year,int month,int day) int i,sum=0;for(i=1;iyear;i+) if(IsLeap(i) sum+=366; else sum+=365; if(IsLeap(year) dayofmonth2=29;/为闰年时二月有29天for(i=1;itm_sec;min = l
8、ocal_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;/打印一年的年历void printyear()system(cls);int s,year,month; int a10,b10;coutyear;cout=The Calender of Year year=endl; int i=1; for(i=1;i=12/3;i+) /3确定每一行显示三个月
9、的月历 cout-endl;for(int h=1;h=3;h+)int m=3*(i-1)+h; cout m月 ; /打印月份名称 coutendl-endl; for(int j=0;j3;j+)coutSu Mo Tu We Th Fr Sa ; coutendl; for(int j=0;j3;j+) month=3*(i-1)+j+1; s=getdays(year,month,1); /计算从年月日起到所查找年每月第天一共有多少天s=s%7; for(int m=0;ms;m+) cout ;/每月第一天之前打印空格if(IsLeap(year) dayofmonth2=29;
10、bj=dayofmonthmonth; for(int k=1;k8-s;)/由1开始打印每月月历第一行coutsetw(2)setfill( )k ;k+;aj=k;cout ; coutendl; for(int w=1;w=5;w+)/打印每月月历其余行for(int j=0;j3;j+) int m=1; for(m=1;mbj) break; coutsetw(2)setfill( )aj ; if(m=7) coutbj,n=8-m;n+)coutbj&m!=8) cout ; coutendl; cout=endl; /打印某3月的月历 void printfmonth(int
11、year,int month ,int day)system(cls);int i,s; s=getdays(year,month,1); /计算从1年1月1日起到所查找月第一天一共有多少天s=s%7;coutyear 年month 月?endl;cout SuntMontTuetWedtThutFritSatn;/for ( i = 0; i s; +i )cout t;if ( s = 6 )cout.put( n );for ( i = 1; i = dayofmonthmonth; +i ) if(i=day) coutit;elsecout i t;if ( (i+s) % 7 =
12、0 )cout n;coutendl;coutendl; /查找某一天 void lookday(int year,int month ,int day)system(cls); int s,y, m, d, h, min, sec,S,sum; s=getdays(year,month,day); /计算从年月日起到查找日一共有多少天sum=s%7;printfmonth(year,month,day);/打印查找日所在月的月历并标识出该天coutyear-month-day is ;switch(sum)/判断所查找天是星期几 case 0:coutSundayendl;break;cas
13、e 1:coutMondayendl;break; case 2:coutTuesdayendl;break; case 3:coutWednesdayendl;break; case 4:coutThursdayendl;break; case 5:coutFridayendl;break;case 6:coutSaturdayendl;break; switch(month)/判断查找天是否阳历节日先由月份判断是否有节日的月份再由日判断是否为节日 case 1:switch(day) case 1:cout元旦(New years day)endl;break; default:cout不
14、是阳历节日endl; break;case 3:switch(day) case 8:cout妇女节(Womens Day)endl;break; case 12:cout植树节(Arbor Day)endl;break; default:cout不是阳历节日endl; break; case 5:switch(day) case 1:cout劳动节(Labor Day)endl;break; case 4:cout中国青年节(Chinese Youth Day)endl;break; default:cout不是阳历节日endl;break; case 6:switch(day) case
15、1:cout儿童节(Childrens Day)endl;break; default:cout不是阳历节日endl;break; case 8:switch(day) case 1:cout建军节(the Armys Day)endl;break; default:cout不是阳历节日endl;break; case 9:switch(day) case 10:cout教师|节(Teachers Day)endl;break; default:cout不是阳历节日endl;break; case 10:switch(day) case 1:cout国庆节(National Day)endl;
16、break; default:cout不是阳历节日endl;break; default:cout不是阳历节日endl;S=Initdate(y,m,d,h,min,sec);/计算从1年1月1日起到现在一共2有多少天/计算查找日距今有多少天if(Ss)cout距今还有s-S天endl;elsecout已经过去S-s天endl; /主函数显示程序菜单int main()int choice,year,month,day;for(;1;)/显示程序菜单,为永真,每次查找完回到程序菜单cout=菜单选项=endl;cout请选择:endl;cout* * * * * * * * 1.查找某一年的年
17、历 * * * * * * * *endl;cout* * * * * * * * 2.查找某一月的月历 * * * * * * * *endl;cout* * * * * * * * 3.查找某一天 * * * * * * * *endl;cout* * * * * * * * 0.退出 * * * * * * * *endl;cout=choice;if(choice=1) printyear();/选择1,查找某年年历else if(choice=2)/选择,查找某月月历 int day=0;coutyearmonth;if(month12) /判断输入的年月是否存在,不存在提示重新输入
18、cout输入的年月不存在,请重新输入endl;else printfmonth(year,month,day);/输入的年月存在,查找某月月历 else if(choice=3)/选择,查找某天cout请输入要查找的日期(格式如 2012 12 31):yearmonthday;/判断输入的年月日是否存在,不存在提示重新输入,存在则查找 if(month12)cout输入的月份不存在,请重新输入!=1&day=30) lookday(year,month,day); else cout输入的日期不存在,请重新输入!=1&day=29) lookday(year,month,day);else cout输入的日期不存在,请重新输入!=1&day=28)/非闰年时二月有28天lookday(year,month,day);else cout输入的日期存在,请重新输入!=1&day=31) lookday(year,month,day);else cout输入的日期不存在,请重新输入!endl; else if(choice=0)/选择,退出 cout谢谢使用!endl;break;else cout输入错误!请按照提示输入!endl;