C++课程设计日期类的编制

上传人:仙*** 文档编号:33890361 上传时间:2021-10-19 格式:DOC 页数:18 大小:260KB
返回 下载 相关 举报
C++课程设计日期类的编制_第1页
第1页 / 共18页
C++课程设计日期类的编制_第2页
第2页 / 共18页
C++课程设计日期类的编制_第3页
第3页 / 共18页
点击查看更多>>
资源描述
辽 宁 工 业 大 学C+语言程序设计课程设计(论文)题目: 日期类的编制 院(系): 软 件 学 院 专业班级: 软件工程133班 学 号: 101301065 学生姓名: 指导教师: 教师职称: 讲 师 起止时间:2013.12.20-2013.12.31课程设计(论文)任务及评语院(系):软件学院 教研室:软件教研室学 号m学生姓名专业班级133班课程设计(论文)题目日期类的编制课程设计(论文)任务(1). 掌握面向对象程序设计语言C+的基本语法(2). 掌握C+面向对象设计的思想(3). 掌握VC+6.0与DEV C+ 开发工具的使用 (4). 运用标准C+规范设计应用程序设计过程中,要严格遵守设计的时间安排,听从指导教师的指导。正确地完成上述内容,规范完整地撰写出设计报告。指导教师评语及成绩成绩: 指导教师签字: 年 月 日辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)目 录第1章课程设计目的与要求11.1 课程设计目的11.2 课程设计的实验环境11.3 课程设计的预备知识11.4 课程设计要求1第2章课程设计内容22.1 C+语言程序设计-日期类的编制问题分析。22.1.1 功能分析22.1.2 算法设计及程序设计中技术重点22.2 程序中涉及的类的UML类图和主要函数流程图或框图。52.2.1 系统UML类图52.2.2程序流程图62.2.3系统流程图62.2.4将指定日期转换为从0年0月0日起的天数72.2.5判断指定的年份是否为闰年72.3 程序源代码8第3章课程设计总结14参考文献15第1章 课程设计目的与要求1.1 课程设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程C+语言教程的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。 (2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。 (3)利用所学知识,开发小型应用系统,掌握运用C+语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 (5)掌握面向对象程序设计的方法。(6)熟练掌握C+语言的基本语法,灵活运用各种数据类型。(7)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。1.2 课程设计的实验环境硬件要求能运行Windows 操作系统的微机系统。C+语言应用程序开发软件使用:VC+ 系统,或其他C+语言应用程序开发软件。1.3 课程设计的预备知识熟悉C+语言程序设计的基本知识及VC+编辑器的使用方法。织梦仿站知识大全1.4 课程设计要求1. 仔细分析设计题目,画出程序流程图,编写程序源代码。2. 积极上机调试源程序,增强编程技巧与调程能力。3. 认真书写课程设计预习报告,课程设计说明书。4. 遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容第2章 课程设计内容2.1 C+语言程序设计-日期类的编制问题分析。日期类的编制电子万年历在生活中是经常可一看到的,比如当你使用手中的计算机时,双击屏幕右下方,一个日历就会跳出,上面显示当前年、月下该月的日期与星期的具体关系问题。当你手中拿着一个文曲星之类电子词典时,首先映入眼帘的也是一个电子日期。你可以感觉到如果有一个电子日期在手头,那么工作、学习就可以方便一些了,至少用不着为了查看本周的日期分布而到处奔波了。2.1.1 功能分析测试日期类成员函数,在主函数中列出菜单选项,可以完成日期的加法比较等测试功能。织梦知识库万年历算星期几 只要随便说出公元几几年几月几日就可以马上算出是星期几。 只要计算出日的代码,月份代码,年份代码。三个加起来除以七的余数就是星期几。完善程序功能,在日期相加的菜单选项中增加日期加天数,结果为新日期;日期加月份,结果为新日期,要考虑闰年的情况。显示日期时增加显示星期及英文形式的月份的功能。增加输入的甄别功能,即输入非发数据(如负数、日期超过31天、时间超过24小时等情况)的识别显示功能。编制主函数 main() 完成函数调用过程。程序中所涉及C语言内容包括:C语言编译预处理过程、函数、数组、结构化程序设计等相关内容。2.1.2 算法设计及程序设计中技术重点计算设计:日的代码计算:日的代码最简单,就是它本身,是几号就是几。月份代码计算:月份代码也很简单,下面有十二个数:144725736146,分别代表一至十二月份每个月的代码。比如,九月份的代码为6。(据姚江啸介绍,他是用逆推的方法,计算出这12个月份代码的,即知道某年某月某日是星期几,反过来推算月份代码。)年份代码计算:年份代码相对比较复杂,先记住2000年对应的年份代码是4,这是基础代码,牢记即可。假如大于2000年,比如2010年,则对应的年份代码是(20102000)/4=22,再用基数代码4减去2倍的商加上余数再加1。即42*2+2+1=3,则2010年对应的年份代码为3。如果没有余数,即润年,则余数后面的1也不用加。比如2008年,对应的年份代码为0。假如小于2000年,比如1991年,则对应的年份代码是(20001991)/4=21,再用基数代码4加上2倍的商减去余数。 即4+2*21=7,则1991年对应的年份代码为7。再记住1个特殊情况,即润年的3到12月份到最后要加1。 举个例子吧,比如1992年8月27日。则(20001992)/2=20,再4+2*20=8,年份代码计算结果为8,加上8月份的代码3,再加上日的代码27,因为是润年,所以还要加1,等于39。再除以七的余数为4,则这一天为星期四。Setday()函数用于设置日期,setmonth()函数用于设置月份,setyear()函数用于设置年份。Getday()函数用于输出日期,getmonth()函数用于输出月份,getyear()用于输出年份。易语言教程Date operator+(int days)对日期类重载运算符 +,日期型数据 加上一个整数Date operator-(int days)对日期类重载运算符 - ,日期型数据减一个整数int operator-(Date &b)对日期类重载运算符 -,对应两个日期型数据相减void disp()显示当前日期函数Date(int y,int m,int d)构造函数对日期进行初始化dton(Date &d)将指定日期转换为从0年0月0日起的天数dtow(Date &d)将指定日期转换为星期几在取系统时间然后在countdays()函数里判断是否为闰年,判断闰年算法为如果年份被400整除或者可被100和4整除的话为闰年。用month()函数里的switch语句来控制每个月应该拥有的实际天数。技术重点:1.类的成员函数描述的是类的行为,例如时钟类的成员函数SetTime()和ShowTime()。成员函数是程序算法的实现部分,是对封装的数据进行操作的方法。2. 运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为。一个操作符,其实是一个函数,这种函数的调用语法和普通函数不同。3. 封装就是将抽象得到得数据和行为相结合,形成一个有机地结合,形成“类”,其中的数据和函数都是类得成员。定义一个类将类中成员函数和数据的实现细节隐藏起来,意味着类的实现细节对于使用该类的编程人员来说是不可见的。为了实现这一功能,引用私有成员概念,一旦交同,除了在类的成员函数中,在其他任何地方都不能改变私有成员变量的值,也不能引用该成员变量。意味着编译器强行隐藏了类中数据的实现细节。4.课题功能描述给出某年显示该年的年日历。 5.问题详细描述随意给出某年(如2007年),可以显示该年的年日历(包括每月的天数和所对应的星期几),并且在每月的左上角或右上角打印出相应的年份和月份,要求输出界面尽可能整齐、美观,符合日历显示规范。 6.问题的解决方案:根据问题的描述,可以按照程序要求的功能采用结构化的设计思想。 1)找到一个基点,例如从公元01年的第一天开始考虑(01年1月1日对应星期判断从01年至该年以前的年份是否闰年,以计算从01年至该年开始的总天数。 2)注意每月的天数不同,并且二月份又有两种情况:是闰年和不是闰年的情况。 3)为了将每月的日期和星期相对应,用从显示月份开始的总天数除7取余,控制日期和星期几的对应关系。7.主要技术问题的描述根据三的分析,主要问题在于:可以构造一个函数来判断该年是否闰年:intIsLeapYear(intyear);利用一个一维数组month_day,存放不同月对应的天数;为显示出月份可用switch-case分支结构。8.创新要求在基本要求达到后,进行创新设计:(1)使用多文件,即主函数和各个函数分别存放在不同的.cpp文件中,在头文件中进行函数原型声明;(2)对程序功能进行拓展,例如,显示前后三年的年日历等。2.2 程序中涉及的类的UML类图和主要函数流程图或框图。2.2.1 系统UML类图Data-year:int-month:int-day:int-leap(:int):int-ntod(:int):Data+Date(y:int,m:int,d:int)+setday(d:int):void+setmonth(m:int):void+setyear(y:int):void+getday():int+getmonth():int+getyear():int+dtow(d:Data&):void+dton(d:Data&):int图2.1 系统UML类图2.2.2程序流程图开始now.disp()w.disp()(then-now)求两日期相差的天数Date d1=now+100,d2=now-100d1.disp()d2.disp()求一日期加上100天,减去100天Date num(2009,12,24)求日期是星期几num.dtow()窗体顶端IT知识库窗体底端then.disp()Date now(2009,6,12),then(2009,12,10)图2.2程序流程图2.2.3系统流程图日期的程序首先用一张高层次的系统流程图描绘系统总体概貌,表明程序的关键功能。然后分别把每个关键功能扩大扩展到适当的详细程度,这种分层次的描绘方法便于阅读者按从抽象到具体的过程深入地了解一个复杂的系统。图2.3系统流程图2.2.4将指定日期转换为从0年0月0日起的天数leap(y)=1 ap(y)y+y=d.year leap(y)days+=366 y=1days+=365m=0days+=day_tab1mdays+=day_tab0mmd.month-1leap(y)leap(d.year)=leap(y)m+return daysdays+=d.dayfalsefalsetruetruetruetruefalsefalsedays=0图2.4 指定日期流程图2.2.5判断指定的年份是否为闰年编写一个布尔函数int is_leap_year(int year),判断参数year是不是闰年。如果某年份能被4整除,但不能被100整除,那么这一年就是闰年,此外,能被400整除的年份也是闰年。year%4=0year%100!=0year%400=0return 1return 0falsefalsetruetruetruefalsetruefalse2.5 闰年流程图2.3 程序源代码程序源代码:#include#includeusing namespace std;int i,c,day,year,k,a50;void f1(int x) /大月for( i=0;i=0;i-)ai=000; /1号前均为空格for(i=k;i31+k;i+)ai=ai-1+1;void f2(int x) /小月for( i=0;i=0;i-)ai=000;for(i=k;i30+k;i+)ai=ai-1+1;void f3(int x) /闰年二月for( i=0;i=0;i-)ai=000;for(i=k;i29+k;i+)ai=ai-1+1;void f4(int x) /非闰年二月for( i=0;i=0;i-)ai=000;for(i=k;i28+k;i+)ai=ai-1+1;void g(int y,int z) / 输出日历表 cout日t一t二t三t四t五t六endl;for(i=0;i50;i+)if(ai=0)cout(char)ait;if(ai!=0&ai!=33)coutait;else ;if(i%7=0)coutendl;coutendlendlendl;int main() int s,count=0;coutyear;coutendl;c=year;for(s=1;s=year;s+)if(s-1)%4=0&(s-1)%100!=0)|(s-1)%400=0)count+;day=365*c+count; /相差天数cout*year年日历*;coutendlendlendlendl;k=(day%7+6)%7+1;cout一月endlendl;f1(k);g(a,50);if(year%4=0&year%100!=0)|year%400=0) /闰年二月 k=(day+31)%7+6)%7+1;cout二月endlendl;f3(k);g(a,50);day=day+31+29;else /非闰年二月k=(day+31)%7+6)%7+1;cout二月endlendl;f4(k);g(a,50);day=day+31+28; div技术大全k=(day%7+6)%7+1;cout三月endlendl;f1(k);g(a,50); k=(day+31)%7+6)%7+1;cout四月endlendl;f2(k);g(a,50);k=(day+31+30)%7+6)%7+1;cout五月endlendl;f1(k);g(a,50);k=(day+31+30+31)%7+6)%7+1;cout六月endlendl;f2(k);g(a,50);k=(day+31+30+31+30)%7+6)%7+1;cout七月endlendl;f1(k);g(a,50);k=(day+31+30+31+30+31)%7+6)%7+1;cout八月endlendl;f1(k);g(a,50);k=(day+31+30+31+30+31+31)%7+6)%7+1;cout九月endlendl;f2(k);g(a,50);k=(day+31+30+31+30+31+31+30)%7+6)%7+1;cout十月endlendl;f1(k);g(a,50);k=(day+31+30+31+30+31+31+30+31)%7+6)%7+1;cout十一月endlendl;f2(k);g(a,50);k=(day+31+30+31+30+31+31+30+31+30)%7+6)%7+1;cout十二月endlendl;f1(k);g(a,50);return 0; 程序实现如下图:图2.6运行程序图2.7输出输入数据并运行程序输出结果图2.8输出输入数据并运行程序输出结果第3章 课程设计总结通过这两周的课程设计,使我更加的了解了C+ 程序设计,掌握了它基本语言及语法知识,把课堂上学到的知识应用到实际的生活中,让我学有所用,通过这次实训,我充分的了解到只有不断地学习汲取新信息,才能获得进步的动力。 我做的题目是日期类的编制程序,更多内容详细参考在设计的过程中,我遇到了许多问题,可是在老师、同学的帮助之下,这些问题都已解决。并且还掌握在集成环境下如何调试程序。在我的努力之下,我顺利的完成的课设,非常感谢学校给我们提供了这么一次实践的机会,让我理论和实践相结合。学到了许多有用的知识。编写程序应该养成良好的习惯。流程图可以使复杂的问题变得明了,可以帮助理清思路。另外,适当的注释不仅增加了程序的可读性,而且也有助于之后的修改和完善。有人说:学的东西越多,不懂的东西也越多。也许我们以前从来都没认为计算机复杂到什么程度,只要学了就会用。总而言之,这次的课程设计给了我不少的帮助,增强了我的操作能力。对问题的解决也有了进一步的提高。并且,在这两周的实训中,我得到了最好的教育,那就是我们要知道什么去学,当一个确立了远大的目标就不会因为一个小小的挫折而放弃,梦想会支撑着我们前进!参考文献1于明等.C+程序设计教程.上海:海洋出版社,2001:56-782艾德才.C+程序设计简明教程.北京:中国水利水电出版社,2000:24-363刁成嘉.面向对象C+程序设计.天津:机械工业出版社,2007:34-454刘瑞新. Visual C+面向对象程序设计程.天津:机械工业出版社,2009:15-235陈文宇.C+语言教程.北京:电子科技大学出版社,2005:23-346张凯.C+程序设计.大连:大连理工大学出版社,2002:34-557马建红.C+程序设计与软件技术基础.保定:中国水利水电出版社,2008:56-608钱能.C+程序设计教程.北京:清华大学出版社,2007:23-309吴昭九.C+语言课程设计案例精编.北京:吴昭九,2003:102-15610黄迪明.C+语言程序设计基础.北京:冶金工业出版社,2004:35-4515
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!