万年历课程设计论文_第1页
万年历课程设计论文_第2页
万年历课程设计论文_第3页
万年历课程设计论文_第4页
万年历课程设计论文_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

深圳大学成教学院课程论文(设计)C+万年历的查询与显示xx大学考试答题纸(以论文、报告等形式考核专用)二 二 学年度第 学期课程编号课程名称课程设计主讲教师xxx评分学 号xxx姓名xxx专业年级xxx教师评语:题目:C+万年历的查询与显示深圳大学课程论文(设计)诚信声明本人郑重声明:所呈交的课程论文(设计),题目 C+万年历的查询与显示 是本人在教师的指导下,独立进行研究工作所取得的成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式注明。除此之外,本论文不包含任何其他个人或集体已经发表或撰写过的作品成果。本人完全意识到本声明的法律结果。 课程论文(设计)作者签名: 日期: 年 月 日目录一、引言1二、课程设计题目1三、课程设计目的1四、需求分析及开发背景1五、设计原理6六、课程设计内容11.程序功能描述52.算法实现描述6七、程序操作界面1八、流程图1九、程序清单1十、程序调试1十一、总结1参考文献7深圳大学成教学院课程论文(设计)C+万年历的查询与显示C+万年历的查询与显示深圳大学成教学院 09计算机应用技术(1) 周文勇学号:20091032121771025(一)引言:万年历作为电子类小设计不仅是市场上的宠儿,也是是C+实验中一个很常用的题目。因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对C+的掌握能力更加强调了对C+扩展的应用。而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。所以,万年历无论作为比赛题目还是练习题目都是很有价值。 (二)课程设计题目:C+万年历的查询与显示(三)课程设计目的:在完成C+程序设计课程学习后,通过本次教学实习,对所学专业知识进一步消化、理解并掌握,锻炼和提高综合运用所学知识解决实际问题的能力,熟悉编译工具的使用方法和环境,协调团队合作力,相互学习,相互帮助。对C+中时间函数博大精深有了更深刻的认识,了解自己有哪些方面的不足之处,以便日后改进。另外,希望通过本次课程设计增加对C+这门课的兴趣,促进学习的积极性,为尽早确定将来的选择方向而定下目标。也为以后的工作更方便而奋斗。(四)需求分析及开发背景: 目前流行的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基础于该程序所开发的各种应用程序中的日历程序。然而,这些程序都千篇一律的局限在一个很短的时间范围内。(Windows各个版本一般都局限在1980年至2099年这一范围内),但是,在很多情况下,特别是在众多的科学研究领域中,一个时间跨度较大的日历程序是很有参考价值的。C程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本填补了这一领域的空白,同时用铁的事实强有力的告诉世人:C程序设计语言作为计算机语言家族的新声事物,其发展前景是极为广阔的。(五)设计原理: 面向对象的程序设计是现在最外流行的程序设计方法。面向对象的方法模仿人们建立现实世界模型的方法。认为客观世界是由各种各样的对象组成的,每个对象都有各字的内部状态和运动规律,不同对象之间的相互作用和联系就构成了各种各样的系统。利用人们对事物分类和抽象的自然倾向,引进了类的概率,具有封装性、继承性和多态性等特点。 在C+中,类是指由用户定义的一种抽象数据类型,将一组具有相关性的数据成员结合在一起,要使用类中所包含的数据时,必须通过有该类所提供的成员函数来存取。 数据封装是指将类中的数据成员以其可被使用或不可被使用的方式进行分类,即有条件地限制类中部分或全部的数据成员被使用,在定义数据成员时在其前面冠以private、protected或public,分别表示私有的、保护的和公有的。因次,类是实现数据封装的一个有力的方法,类的特性是实现了数据封装或数据抽象。 C+的流程插入运算符“”和流程提取运算符“”是C+在类库中提供的,所有C+编译系统都是在类库中提供输入流类istream和输出流类ostream。Cin和Cout分别是istream和ostream的对象。在类库中提供的头文件中已经对“”和“”进行了重载,使之作为流程插入运算符和流程提取运算符,能用来输出和输入C+标准类型的数据。对流程插入运算符“”进行重载后,在程序中用“”不仅能输出标准类型数据,而且可以输出用户自己定义的类对象。 (六)课程设计内容:1、程序功能描述: (1)阳历查询功能:程序开始有选择查询功能,起初是默认为当前系统时间月份的日历表,可根据提示输入数据来查询每年的年历,也可以翻看该年每月月历。(2)农历查询功能:程序开始有选择查询功能,起初是默认为当前系统时间月份的日历表,可根据提示输入数据来查询该年的农历。(3)月历查询功能:程序开始有选择查询功能,起初是默认为当前系统时间月份的日历表,可根据提示输入数据来查询某年某月的月历。(4)生肖查询功能:程序开始有选择查询功能,起初是默认为当前系统时间月份的日历表,可根据提示的输入数据来查询某年的生肖年。(5)星期查询功能:程序开始有选择查询功能,起初是默认为当前系统时间月份的日历表,可根据提示的输入数据来查询某年某月某天是星期几。2、算法实现描述:(1)阳历相关:平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。由于公元1月1日设为星期六,故3月1日为星期三。一一注意这个“三”为使用算法达到最简,故本算法以“星期”为计算单位。且选3月1日为基月。每400年整一闰,或每4年且不为百年的一闰。(原因:地球绕太阳一周的时间是365天5小时46秒,为了使得一年的天数为整数,将一年的天数定为365天,余下的时间积累起来,四年就是23小时15分4秒,将近一天,把这一天加在某年的二月而成29天,该年称为闰年,其它年称为平年。但四年加一天又多用了44分56秒,这个数积满400年为三天。因此400年中只能有97个闰年,所以凡是能被400整除的,或不能被100整除的,但是能被4整除的年份为闰年。)每4年(3个平年+1个闰年)共208年+5天。每百年共100*(208周+天)-1天=5217周+5天(整百年暂设为平年),每400年共4*(5217周+5天)+1天(为整400年为闰年)=20871周+0天(4个整百年只有一个闰年)即400年一轮回!(原来万年历是400年前是一家)(2)农历相关:节气的计算: 先给节气进行编号,从近日点开始的第一个节气编为0,编号如下及其相应的月份如下: 0 小寒 腊月 6 清明 三月 12 小暑 六月 18 寒露 九月 1 大寒 腊月 7 谷雨 三月 13 大署 六月 19 霜降 九月 2 立春 正月 8 立夏 四月 14 立秋 七月 20 小雪 十月 4 惊蛰 二月 10 芒种 五月 16 白露 八月 22 大学 冬月 5 春分 二月 11 夏至 五月 17 秋分 八月 23 冬至 冬月 把当天和1900年1月0日(星期日)的差称为积日,那么第Y年(1900年算第0年)第X个节气的积日是 F=365.242*y+6.2+15.22*x-1.9*sin(0.262*x) 这个公式的误差在0.05天左右。朔日的计算: 从1900年开始的第m个朔月的公式是: M=1.6+29.5306*m+0.4*sin(1-0.45058*m) 这个公式的误差在0.2天左右。年份的确定: 1864年1月0日是农历癸亥年,所以用当年减去1864,用10除得的余数作为年份天干的,用12除得的余数作为年份的地支,数字对应的天干和地支如下。 数字:0 1 2 3 4 5 6 7 8 9 10 11 天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸 地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥 当年的1月0日换算为积日,可以用年份减去1900得到的年数被4整除,所得商数作为y(D4),余数作为y(M4),y(M4)为零的年份是公历闰年,积日是D(1)=1461*y(D4)-1。 y(M4)不为零的年份是公历平年,积日是 D(1)=1461*y(D4)+365*y(M4)月份的确定: 计算前一年冬至的积日F(0),并用F(0)计算冬至所在的朔月m及其朔日M(0),就可以推算冬至的农历日期,冬至所在的农历月份总是十一月。计算下一个中气F(1)和下一个朔日M(1),如果F(1)M(1),那么该月就是上一个月的闰月,并把这个中气作为F(2),以后的中气,朔日和农历月份也这样确定。(3)算法及公式推导:某平年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7某闰年3月1日星期几=(年+年/4+月星期表+日+2天)%7某日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7总天数的算法:首先用if语句判断定义年到输入年之间的每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到底输入年之间的天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加一,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。输出月份第一天为星期几的算法:使总天数除以7取余数加2得几既为星期几,若是7,则为星期日,若是1,则为星期一,其他类同。算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字在除以7得0换行,即可完整的输出该月的日历。(七)程序操作界面:界面(Windows下C+程序的DOS): C+操作界面 C+的代码区域 C+的代码验证区域 C+运行方法 程序查询运行界面 查询某年年历的内容显示 查询某年年历的农历和生肖及月历的显示 查询某年某月某日是星期显示图1图2图3(八)流程图:图4(九)程序清单:#include iostream#include string#include iomanipusing namespace std;int monthdays12=31,28,31,30,31,30,31,31,30,31,30,31;string weekday7=星期天,星期一,星期二,星期三,星期四,星期五,星期六;string monthname12=January,February,March,April,May,June,July,August,September,October,November,December;string tiangan10=甲,乙,丙,丁,戊,己,庚,辛,壬,癸;string dizhi12=子,丑,寅,卯,辰,巳,午,未,申,酉,戌,亥;string shengxiao12=鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪;/以上六句(从int到最后一个string)定义了 六个整体变量void showcalendar(int f);void showpermoncal(int mon,int monthweek,int flag);/以上两句为类的声明,即声明两个返回值为void型的类,类名分别为showcalendar 和showpermoncalint main()int f;cout请选择操作:endl1.查询某年日历;endl2.查询某年某月的日历;endl3.查询某天是星期几f;showcalendar(f);/调用类return 0;void showcalendar(int f)/类定义int year,month,day;int flag=0,mon=1;int monthweek,week;int totaldays;int T,D,S;/天干,地支,生肖coutyear;totaldays=(year-1)*365+(year-1)/4+(year-1)/400-(year-1)/100;/计算自公元0年到year年份总共多少天week=(totaldays+1)%7;/计算星期几monthweek=week;T=(year+6)%10;D=(year+8)%12;S=D;/天干,地支,生肖与公元纪年法的换算(我也不懂)if(year%4=0&year%100!=0)|(year%400=0) flag=1;coutendl *year年*endlendl;cout shengxiaoS年endl;cout 农历tianganTdizhiD年endl=2)coutmonth;if(f=3)coutday;while(mon2&flag) totaldays+;/如果是偶数年,即2月为29天,天数还要加一天totaldays=totaldays+day-1;最终的天数还要加上这月的day-1天week=(totaldays+1)%7;计算星期几coutyear年month月day日 weekdayweekendl;return;while(mon=12)/调用showpermoncal输出指定的月历if(mon=month)showpermoncal(mon,monthweek,flag); break;if(mon=2&flag) monthweek+;monthweek=(monthweek+monthdaysmon+-1)%7;return;while(mon=12)showpermoncal(mon,monthweek,flag);if(mon=2&flag) monthweek+;monthweek=(monthweek+monthdaysmon+-1)%7;void showpermoncal(int mon,int monthweek,int flag)/输出指定的月份,若f=1,则顺序输出12个月的月历coutmonthnamemon-1endl;cout*endl;coutSun Mon Tue Wen Tur Fri Satendl;for(int i=0;imonthweek;i+) cout ;for(int j=0;jmonthdaysmon-1;j+) coutsetw(2)j+1 ; if(j+1+monthweek)%7=0) coutendl;if(mon=2&flag) cout29;coutendlendl;(十)程序调试:1、C+初始界面图:图52、运行并调试程序:图6图73、调试成功没有任何警告与错误:图84、运行程序进入程序界面:图95、选择1.查询某年年历:图10滚动栏可以滑动选择看几月几日。6、选择2查询某年某月的月历:图117、查询某年某月某天是星期几:图128、经过测试,任何问题都没有,这里就不在贴图了。9、关于异常错误处理机制,当C+调试显示窗口出现错误和警告时,是程序版本问题,要根据该程序的版本根据窗口里的内容选择小部分修改。10、尚未解决的问题还有显示阴历问题,因为窗口的原因,排版会出现不少错误,不关做何修改阴历一直不可以显示,要不没有要不就是出错,估计是版本的问题,由于程序复杂度高,代码行数多,后面的处理相对困难,暂时不添加特殊功能,待下学期C+语言学习新的办法更新。11、后续:希望下学期学完C+以后能更完善该程序,再度增加独立窗口,改变新的排版使之更美化,加入闹钟功能等等的功能,让多功能一体化。(十一)总结:1、 通过对本万年历的设计进一步的巩固了用C+语言编写程序,并且有利于更好的掌握C+语言,从而让以后的学期变的更多时间去钻研C+。2、 在万年历的编程过程中也体会到了做事情一定要细心、认真。更加知道了要掌握好基础知识。还有体会到了成功的感觉!在万年历的设计过程中更加体会到了C+以后的编程的团队合作的重要性,“三个臭皮匠顶个诸葛亮。”知道了只有团队合作才会完成更艰巨更难更好的设计!也体会到以后在工作中团队合作的必要性和重要性!3、 通过本项课程设计也培养了我独立思考,综合运用所学有关响应知道的能力,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!4、 由于C+语言是近年在国内外得到迅速推广应用的一种语言。C+语言功能丰富,表达能力强,使用灵活方便,应用面光,目标程序效率高,可移植性好,既有具备高级语言的优点,又具备底级语言的许多特点。通过这次的C+语言程序设计更加了解了C+语言的好处和其可用性!5、 在这次课程设计中也知道了自己的动手能力不强有待进一步的提高!在设计过程中不能够把书本上的知识与实践相互结合,这也就增加了设计不好该程序的想法!在设计过程中的一次

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论