还剩33页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《C++语言程序设计》课程设计报告设计题目:简单万年历专业:网络工程班级:12级姓名:杨茂林学号:121124028__方式:13213501410目录
1.设计目标……………………………………………
32.设计思想……………………………………………
33.类及函数的实现……………………………………
34.程序流程图…………………………………………
35.程序源代码…………………………………………
116.调试记录……………………………………………
307.调试语录……………………………………………
338.总结…………………………………………………34简单万年历程序
1.1设计题目描述本程序是一个简单的实现时间系统功能的万年历程序,此程序是为了遵循用户的意愿与指示对用户输入的日期进行简单的处理,输出所要查询的日期的信息,如当时的时间,年月日,__,天干地支,以及输出所要查询的日期日历并以日历形式排列出来
1.2设计目标本程序有以下目标要实现
①用户可以进行选择,是要进行万年历时间校对系统还是万年历的查询系统,用户可以随时退出系统;
②显示本地时间,并征询用户___是否要进行时间调整,如果进行了时间调整,要输出调整后的时间;
③查询某年的万年历,并输出当年的年历,并显示所要查询的年份,显示出一年的日历、当年的天干地支、__、并判断是否为闰年;
④将
③的功能具体到月份;
⑤将
④的功能具体到日,并判断出用户所要查询的日期当天是什么节日,以及用户所要查询的节日距今天有多少天;
⑥用户多次进行输入,知道用户满意为止
2.设计思想本程序中,因为要用到万年历的时间校对系统,所以,在设计的时候,我定义了一个时间类clock类;由于系统要同步到本地的时间(即为运行时电脑上显示的时间),这里用到了structtime结构体,接下来就是万年历的查询系统功能里面的函数,这些函数要实现的有指导用户进行操作的选项的界面,有计算该月的1号是星期几的函数,有输出每周即每月的表头函数、判断是否为闰年、判断每个月有多少天、要查询的那天距今天有多少天、判断所要查询的年份有多少天、计算指定日期距今天有多少天等函数其中,共含一个主函数文件、三个功能文件、一个功能函数头文件、界面文件以及时钟类文件其中,功能函数是主要的函数实现部分,时钟类则主要是实现万年历时间系统
3.类及函数的实现在此只涉及部分函数的实现细节,其他函数详看程序源代码
1.1本程序中,我只设计了一个clock类,类里面有实现时间系统校对功能的私有量,在进行时间校对的过程中,我选择了重载的方法,以达到自己想要的结果
1.2函数部分的实现则是比较普通的,没有什么特殊的地方其中有如下函数需要实现intweekintyintm;//计算该月一号是星期几voidprintweek;//输出每周表头voidprintmonthintm;//输出每月表头intleepinty;//判断该年是否闰年intmdintyintm;//判断该月有多少天voidotherintyear;intdays1intyintmintd;//计算该天时这一年的第几天intdays2inty;//判断该年有多少天intdays3inty;//计算从元年到该之年前总天数inttotaldaysintyintmintd;//计算指定日期距今天的天数intyi;//实现万年历的时间校对功能inter;//进入万年历的系统功能intfirst;//实现第一个功能intsecond;//实现第二个功能voidthird;//实现第三功能//inttiangan_____;intjiemian1;//界面1intjiemian2;在jiemian,intmd及voidthird的实现过程中,我选用了switch-case套用switch-case语句;在intweek函数中,我采用了蔡勒公式用于计算每个月的星期一是多少,其他函数的实现详看源代码
1.3在这个程序设计中,有好多知识是我以前没有接触过得,这一点还是比较欣慰的吧,例如,system(“pause”)有着清屏作用,还有就是计算每个月的1号是星期几的问题以及程序运行后背景与字体颜色的变换要用到system(“color”9b)
4.程序流程图
5.程序源代码#includeiostream#includefstream//文件输出#includestdlib.h//清屏#includeio__nip//控制宽度#includetime.h//这两个头文件是为了调用系统时间的#includestdio.h#includeconio.h#includesstreamusingnamespa__std;intweekintyintm;//计算该月一号是星期几voidprintweek;//输出每周表头voidprintmonthintm;//输出每月表头intleepinty;//判断该年是否闰年intmdintyintm;//判断该月有多少天voidotherintyear;//以下六个函数是第三个功能里的intdays1intyintmintd;//计算该天时这一年的第几天intdays2inty;//判断该年有多少天intdays3inty;//计算从元年到该之年前总天数inttotaldaysintyintmintd;//计算指定日期距今天的天数intyi;//实现万年历的时间校对功能inter;//进入万年历的系统功能intfirst;//实现第一个功能intsecond;//实现第二个功能voidthird;//实现第三功能//inttiangan_____;intjiemian1;//界面1intjiemian2;intjiemian{systemcls;systemcolor9d;//控制程序背景和字体的颜色,均为16进制,9背景颜色,d字体颜色coutsetw6=====================================================================endl;coutsetw6==========★=======================================★================endl;coutsetw6╬---★★★★★★★★--------╬endl;coutsetw6╬╬endl;coutsetw6╬★欢迎进入万年历的页面★╬endl;coutsetw6╬★★★★╬endl;coutsetw6╬★★★★╬endl;coutsetw6╬★★★★╬endl;coutsetw6╬★★╬endl;coutsetw6╬╬endl;coutsetw6╬*****----该万年历有以下功能供您选择----*****╬endl;coutsetw6╬╬endl;coutsetw6╬*★*....
1.万年历的时间校对系统....*★*╬endl;coutsetw6╬★*....
[30];intbcdshifenmiao;time_tt;timet;structtm*now;//tm结构体,得到本地时间now=localtimet;strftimetemp30%Hnow;istringstreaminput3temp;input3shi;strftimetemp30%Mnow;istringstreaminput4temp;input4fen;strftimetemp30%Snow;istringstreaminput5temp;input5miao;Clockmyclock;myclock.settimeshifenmiao;myclock.showtime;cout是否要调整时间,如果是请按y,按其他键继续返回主菜单endl;coutendl;a=getch;ifa==y{cout请问是要将现在的时间调大还是调小,如果调大请按m否者按nendl;do{i=getch;ifi==m{cout请输入要增加小时的个数;coutendl;cinb;b*=3600;whileb--myclock++;cout请输入要增加分钟的个数;coutendl;cinc;c*=60;whilec--myclock++;cout请输入要增加的秒数;coutendl;cind;whiled--myclock++;myclock.showtime;systempause;}elseifi==n{cout请输入要减少小时的个数;cinb;b*=3600;whileb--myclock--;cout请输入要减少分钟的个数;cinc;c*=60;whilec--myclock--;cout请输入要减少的秒数;cind;whiled--myclock--;myclock.showtime;systempause;}elsecout输入有误,请重新输入endl;}whilei!=mi!=n;}jiemian;}inter{coutjiemian1endl;coutjiemian2endl;}int__in{coutjiemianendl;//调用jiemian函数,到达页面coutyiendl;systemcls;return0;}intjiemian1{coutendlendl;coutsetw6==============================================================endl;coutsetw6╬***********************************************************╬endl;coutsetw6╬╬endl;coutsetw6╬
(二)现在进入万年历查询系系统╬endl;coutsetw6╬╬endl;coutsetw6╬该系统有以下功能可供您选择╬endl;coutsetw6╬╬endl;coutsetw6==============================================================endl;coutendlendlendl;systempause;systemcls;jiemian2;}intjiemian2{coutendl;coutsetw6==============================================================endl;coutsetw6==============================================================endl;coutsetw6╬╬endl;coutsetw6╬系统功能╬endl;coutsetw6╬
1、查询某年的日历╬endl;coutsetw6╬
2、查询某年某月的日历╬endl;coutsetw6╬
3、查询某年某月某日的信息╬endl;coutsetw6╬
4、返回╬endl;coutsetw6╬╬endl;coutsetw6==============================================================endl;coutendlendl;cout请输入您要使用的功能的序号(回车键确认);intn;do{cinn;switchn{case1:first;break;case2:second;break;case3:third;break;case4:jiemian;break;default:cout输入有误,请重新输入endl;}}whilen1||n4;coutendl;cout点任意键返回主菜单endl;systempause;systemcls;jiemian;}intfirst//第一个功能,查询某年的日历{ofstreamoutfile第一个功能.___ios::out;//定义一个文件输出流对象outfileintymwdiday;cout请输入你要查询的年份;ciny;cout您所查询的内容如下endl;coutendl;couty年日历endl;othery;outfiley年日历endl;//输出到文件form=1;m=12;m++{intm1y1;//m1是指月份,y1是指年份m1=m;y1=y;ifm13{m1+=12;y1--;}//在蔡勒公式中,某年的1,2月份要看作是上一年的1314月份w=weeky1m1;//调用week函数,计算该月一号是星期几day=mdym;//调用md函数,判断该月有多少天printmonthm;//调用printmonth函数,输出月份表头outfilem月份endl;//输出到文件printweek;//输出每周表头outfilesetw8Sunsetw8Monsetw8Tuessetw8Wedsetw8Thurssetw8Frisetw8Satendl;//输出到文件fori=0;iw;i++//若每个月前面有空的,将其空出,w是指每个月的1号是星期几{coutsetw8;outfilesetw8;//输出到文件}ford=1;d=day;d++w++//输出该月的日历,day是指每个月的天数{coutsetw8d;outfilesetw8d;//输出到文件ifw%7==6{coutendl;outfileendl;//输出到文件}}coutendl;coutendl;coutendl;outfileendlendlendl;//输出到文件}outfile.close;//关闭文件return0;}intsecond//第二个功能查询某年某月的日历{ofstreamoutfile第二个功能.___ios::out;intymwdiday;cout请输入你要查询的年月;cinym;cout您所查询的内容如下endl;w=weekym;day=mdym;coutendl;othery;couty年m月endl;outfiley年m月endl;printweek;outfilesetw8Sunsetw8Monsetw8Tuessetw8Wedsetw8Thurssetw8Frisetw8Satendl;//输出到文件fori=0;iw;i++{coutsetw8;outfilesetw8;}ford=1;d=day;d++w++{coutsetw8d;outfilesetw8d;ifw%7==6//w%7是判断换行不行的星期日在第一位星期六在最后一位{coutendl;outfileendl;}}coutendl;outfileendl;return0;}voidthird//第三个功能,查询某年某月某日的信息{//couttiangan_____endl;ofstreamoutfile第三个功能.___ios::out;intymdn;cout请输入您要查询的年月日;cinymd;cout您所查询的内容如下endl;coutendl;n=totaldaysymd;//计算指定日期距今天的天数outfile距离今天还有n天endl;coutendl;outfileendl;intmonthday;month=y+y/4+5-42+26*m+1/10+d%7;//蔡勒公式,用于计算星期几switchm{case1:switchd{case1:cout这天是元旦!;break;}break;case2:switchd{case2:cout这天是世界湿地日!;break;case14:cout这天是情人节!;break;}break;case3:switchd{case3:cout这天是全国爱耳日!;break;case5:cout这天是青年志愿者服务日!;break;case8:cout这天是国际妇女节!;break;case9:cout这天是保护母亲河日!;break;case12:cout这天是中国植树节!;break;case14:cout这天是白色情人节,国际__日!;break;case15:cout这天是世界消费者权益日!;break;case21:cout这天是世界森林日,世界睡眠日!;break;case22:cout这天是世界水日!;break;case23:cout这天是世界气象日!;break;case24:cout这天是世界防治结核病日!;break;}break;case4:switchd{case1:cout这天是愚人节!;break;case5:cout这天可能是清明节!;break;case7:cout这天是世界卫生日!;break;case22:cout这天是世界地球日!;break;case26:cout这天是世界知识产权日!;break;}break;case5:switchd{case1:cout这天是国际劳动日!;break;case3:cout这天是世界哮喘日!;break;case4:cout这天是中国青年节!;break;case8:cout这天是世界红十字日!;break;case12:cout这天是国际护士节!;break;case15:cout这天是国际家庭日!;break;case17:cout这天是世界__日!;break;case20:cout这天是全国学生营养日!;break;case23:cout这天是国际牛奶日!;break;case24:cout这天是世界防治结核病日!;break;}break;case6:switchd{case1:cout这天是国际儿童节!;break;case5:cout这天是世界环境日!;break;case6:cout这天是全国爱眼日!;break;case17:cout这天是世界防治荒漠化和干旱日!;break;case23:cout这天是国际奥林匹克日!;break;case25:cout这天是全国土地日!;break;case26:cout这天是国际禁毒日!;break;}break;case7:switchd{case1:cout这天是中国___诞生日,国际建筑日!;break;case7:cout这天是中国人民__战争纪念日!;break;case11:cout这天是世界人口日!;break;}break;case8:switchd{case1:cout这天是中国人民___建军节!;break;case12:cout这天是国际青年节!;break;}break;case9:switchd{case8:cout这天是国际扫盲日!;break;case10:cout这天是中国教师节!;break;case16:cout这天是中国脑健康日,国际臭氧层保护日!;break;case20:cout这天是全国爱牙日!;break;case21:cout这天是世界停火日!;break;case27:cout这天是世界旅游日!;break;}break;case10:switchd{case1:cout这天是中华人民___国庆节,国际音乐节,;cout国际老年人日!;break;case4:cout这天是世界动物日!;break;case5:cout这天是世界教师日!;break;case8:cout这天是全国高血压日!;break;case9:cout这天是世界邮政日!;break;case10:cout这天是世界精神卫生日!;break;case14:cout这天是世界标准日!;break;case15:cout这天是国际盲人节,世界农村妇女日!;break;case16:cout这天是世界粮食日!;break;case17:cout这天是国际消除贫困日!;break;case24:cout这天是___日,世界发展新闻日!;break;case28:cout这天是中国男性健康日!;break;case29:cout这天是国际生物多样性日!;break;case31:cout这天是万圣节!;break;}break;case11:switchd{case8:cout这天是中国记者节!;break;case9:cout这天是消防宣传日!;break;case14:cout这天是世界糖尿病日!;break;case17:cout这天是国际大学生节!;break;case25:cout这天是国际消除对妇女的__日!;break;}break;case12:switchd{case1:cout这天是世界艾滋病日!;break;case3:cout这天是世界残疾人日!;break;case4:cout这天是全国法制宣传日!;break;case9:cout这天是世界足球日!;break;case25:cout这天是圣诞节!;break;case29:cout这天是国际生物多样性!;break;}break;}coutendl;outfileendl;}//inttiangan_____{//classdate//{//public://intotherintyearintmonthintday;//判断本年的干支纪年,__,是否闰年//private://boolcheck;//判断是否输入的日期有误,若有则返回1,否则返回0//intyear;//intmonth;//intday;//};intleepinty//闰年的判断{ify%4==0y%100!=0||y%400==0return1;elsereturn0;}voidotherintyear{//判断本年的干支纪年,__,是否闰年,星期stringtian_gan
[10]={甲乙丙丁戊己庚辛壬癸};stringdi_zhi
[12]={子丑寅卯辰巳午未申酉戌亥};stringsheng_xiao
[32]={鼠牛虎兔龙蛇马羊猴鸡狗猪};stringxing_qi
[7]={日一二三四五六};intyears=year-1924;//1924甲子年,鼠年,1月1日是星期二intn_di_zhi=years%12;//获得不够一个地支周期的天数intn_tian_gan=years%10;//获得不够一个天干周期的天数ifn_di_zhi0n_di_zhi=12+n_di_zhi;ifn_tian_gan0n_tian_gan=10+n_tian_gan;coutsetw12tian_gan[n_tian_gan]di_zhi[n_di_zhi]年;coutsetw12sheng_xiao[n_di_zhi]年;ifleepyearcoutsetw12闰年;elsecoutsetw12平年;coutendl;}intweekintyintm{intw;w=y+y/4+5-42+26*m+1/10+1%7;returnw;}voidprintweek{coutsetw8Sunsetw8Monsetw8Tuessetw8Wedsetw8Thurssetw8Frisetw8Satendl;}voidprintmonthintm{switchm{case1:cout1月份endl;break;case2:cout2月份endl;break;case3:cout3月份endl;break;case4:cout4月份endl;break;case5:cout5月份endl;break;case6:cout6月份endl;break;case7:cout7月份endl;break;case8:cout8月份endl;break;case9:cout9月份endl;break;case10:cout10月份endl;break;case11:cout11月份endl;break;case12:cout12月份endl;break;}}intmdintyintm{intd;switchm{case1:case3:case5:case7:case8:case10:case12:d=31;break;case4:case6:case9:case11:d=30;break;case2:ifleepy==1d=29;elsed=28;break;}returnd;}//以下是第三个功能的函数intdays1intyintmintd//计算该天是这一年的第几天{intisum1=0day;fori=1;im;i++{day=mdyi;sum1=sum1+day;}sum1+=d;returnsum1;}intdays2inty{intyeardays;ifleepyyeardays=366;elseyeardays=365;returnyeardays;}intdays3inty//计算从元年到该之年前总天数定义部分{intiyeardays;longsum3=0;fori=1;iy;i++{yeardays=days2i;sum3+=yeardays;}returnsum3;}inttotaldaysintyintmintd//计算指定日期距今天的天数定义部分{inty1m1d1;longsum=0localsum=0finaldays=0;sum=days1ymd+days3y;structtm*local;time_tt;t=timeNULL;local=localtimet;y1=local-tm_year+1900;m1=local-tm_mon+1;d1=local-tm_mday;localsum=days1y1m1d1+days3y1;finaldays=sum-localsum;cout距离今天还有finaldays天endl;returnfinaldays;}
6.调试记录
(1)欢迎进入页面的调试记录
(2)选择
1.万年历的时间校对系统
(3)按y进行时间调整并按m把时间调大,或者按n把时间调小()
(4)选择进入万年历时间查询系统
(5)选择功能1(由于运行结果太长,故只粘贴了一部分,详看源代码运行结果)
(6)选择功能2
(7)选择功能
37.调试语录在我选择程序的时候参考了很多人的课程设计,逐一完善自己的课程设计如我看见同学们的课程设计的界面比较好看,我就想到完善一下自己的界面,这个过程中,由于我自己不知道别人界面怎么设定的,所以,二话没说我就去问了百度,那个过程,可谓是煎熬啊,从下午第一节下课就一直调试到晚上熄灯,不过,皇天不负有心人,最后还是调试出来了,当然这个过程虽然煎熬,但是还能够体验到调试成功后的喜悦的这个程序中,原来的判断节日的部分是用if-else语句实现的,可是我看了去年学长做的课程设计中采用的swith-case语句简单明了,于是,我就很大胆的借用了可是我的程序有两个遗憾的地方,一个就是不能判断阳历节日,这个部分的实现,我现在还是没有弄清楚另外一个是我想根据家里面的万年的整点报时特点,想让该程序也能够整点报时,这个功能我也不知道怎么加入,希望在不久的将来能够实现的吧
7.总结通过了这次的课程设计,暴露了自己在学习上的很多弊端,课堂上的好多东西没有完全理解,导致了自己在做课程设计的时候遇到很多问题不能够自己亲自解决,这就需要自己花费大量时间问百度问同学问一些编程的朋友,由于将近期末考试,时间紧,未能够将自己遇到的问题逐一解决,这是非常遗憾的事情,当然,期末以后我会花费一些精力完善自己的程序在编程序的时候,我可能做得并不够好,因为程序的实现都比较简单,尽管有些东西,我们没有介入到过,可是我觉得还是用到什么就搜些什么,不断地进行调试以得到自己想要的结果在程序调试的时候,我想的还比较多的吧,小小的程序设计,我就做了好久,而且,其中还有很多问题没能够完全弄懂,暴露出来了自己在语法、算法上的很多问题以前有一个很伟大的梦想,就是成为编程上的佼佼者,如今,不是说梦想破碎,而是__了我的思想,以后学习要踏实,学习的时候不能死板教条,要发散思维,多方面的学习,这样才能不断地提升自己未来的路还有很长,可是如果不走好第一步的话,就只会越偏越远,所以,现在要明确目标,确定方向,不仅仅是为了实现自己的梦想,而是不能枉费青春白走这一趟参考资料
①郑莉董渊《C++语言程序设计》,清华大学出版社.
②《c++primer》
③《c++程序设计》谭浩强
④c++学习群与相关__开始进入欢迎页面选择相应的系统功能选择相应按任意键继续进行
1.万年历时间校对功能
2.万年历时间查询功能
3.退出时间校对的实现万年历三个查询功能的实现显示结果按任意键继续进行万年历时间校对系统的实现显示当地时间是否要进行时间调整按y任意键调大还是调小按m要增加的小时的个数要增加的分钟的个数要增加的秒的个数按n要减少的小时的个数要减少的分钟的个数要减少的秒的个数显示结果时间校对系统结束万年历的三个查询系统功能的实现
1.查询某年的日历2查询某年某月的日历
3.查询某年某月某日的日历输入要查询的年份输入要查询的年月输入要查询的年月日显示结果点任意键返回查询系统的第一个功能界面输入要查询的月份输出所要查询的年份的天干地支,__,是否为闰年定义月份变量m,并付初始值m=1判断该月天数根据年月由蔡勒公式计算出该月1号是星期几输出月份和每周的表头用循环输出前面空白的部分用循环输出该月的日历m=12m++第一个功能结束用循环输出前面空白的部分输出月份和每周的表头根据年月由蔡勒公式计算出该月1号是星期几判断该月天数输出所要查询的年份的天干地支,__,是否为闰年输入要查询的年月查询系统的第二个功能界面用循环输出该月的日历第二个功能结束输入要查询的年月日查询系统的第三个功能界面输出所要查询的年份的天干地支,__,是否为闰年距今天多少天判断该日期是星期几判断该日期是不是公历节日输入的日期距元年1月1日的天数–系统的日期距元年1月1日的天数蔡勒公式计算,并用switch语句判断余数,输出对应的语句用switch语句判断是否为公历节日,并输出对应的语句第三个功能结束。