ImageVerifierCode 换一换
格式:DOCX , 页数:39 ,大小:254.50KB ,
资源ID:9015814      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9015814.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(万年历及日期查询工具.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

万年历及日期查询工具.docx

1、万年历及日期查询工具齐鲁工业大学信息学院课 程 设 计 报 告课程名称:面向对象程序设计 题目名称:日期查询工具 学生姓名:刘胜军 学生学号:201203014036 专业班级:计科(高职)12-1 指导教师:任晓强 完成日期:2013年6月25日 目 录一、课程设计目的与任务 2二、课程设计内容 2 1 本设计题目的主要内容 2 2 设计思想与程序构架 3 3 软件使用说明书 14 4 程序测试及分析 15 5 设计总结 19三、主要参考资料 19四、附录 20 1 程序源代码及基本注释 20一、 课程设计目的与任务本课程设计是针对面向对象程序设计课程的实践教学项目,为学生提供一个既动手又动

2、脑,针对C+面向对象语言的独立实践的机会,将课本上的理论知识和实际有机的结合起来,通过接近实际项目的训练,锻炼的分析解决实际问题的能力。提高学生面向应用的实践编程的能力。二、 课程设计内容1 本设计题目的主要内容1. 设计内容编写一个可以查询任意年的日历,任意月的日历;可以查询某天的对应星期,查询当前时间;可以计算两日期差的工具日期查询工具。2. 具体功能及要求:1).显示公元后任何年份的日历,日历以月份顺序排列,每月以星期顺序排列,类似于一般挂历上的格式。2).显示公元后任何年份任何月份的日历,以星期顺序排列,类似于一般挂历上的格式。3).可以查询某天的对应星期,查询当前时间。4).可以计算

3、指定的两日期间的时间(天数)差。5).可以计算指定日期后,前后某天数对应的日期。6).可以对年日历和月日历进行保存。3. 最终程序样式4. 运行环境(1)Windows XP/7/8系统(2)Microsoft Visual C+ 6.0编译环境5. 开发工具C语言6. 实现方法(1)定义一个Date类,使包含所有数据成员及函数,如数据成员年、月、日、星期,成员函数年份平润年的判断函数JudgeYear(int y),某日期到公元1年1月1日实有天数的计算函数GetYearDays(int y)等12个主要函数及主要函数中需要用到的12个辅助函数;(2)在主函数中通过选择不同的功能,执行不同的

4、模块,完成相应功能;(3)画出所有模块的流程图;(4)编写代码;(5)程序分析与调试。2 设计思想与程序构架 . 程序类中主要成员函数的定义方式及解释(原代码详见附录1)1. 先分析一个实验所要完成的功能,发现中间需要有平润年的判断;任意年份的实有天数判断;任意月的实有天数判断;任意年到1年1月1日的实有天数;由到1年1月1日的实有天数计算对应日期;判断任意日期对应的星期;显示年日历,保存年日历;显示月日历,保存月日历等。2. 根据分析定义一Date类,拥有Year,Month,Day,Week四个私有整形数据成员,然后根据分析分别声明相应类型的成员函数,又因为数据成员为私有成员,若要调用或修

5、改只能调用函数,所以另直接定义八个成员函数以实现这部分获取、修改功能。最后还要定义构造函数以实现对数据成员的快速赋值,包括没有参数,年月日皆为1,只一个参数对年赋值,月日为1,两个参数对年月赋值,日为1,三个参数对年月日赋值,星期直接通过函数计算可得。成员函数累计24个,基本如下:class Date /定义日期类private: int Year; int Month; int Day; int Week;public: Date()Year=1;Month=1;Day=1; /构造函数,经初始化数据成员 Date(int y)Year=y;Month=1;Day=1; Date(int y

6、,int m)Year=y;Month=m;Day=1; Date(int y,int m,int d)Year=y;Month=m;Day=d; void SetYear(int y)Year=y; /设置年份 void SetMonth(int m)Month=m; /设置月份 void SetDay(int d)Day=d; /设置日份 void SetWeek(int w)Week=w; /设置星期 int GetYear() const return Year; /获取年份 int GetMonth() const return Month; /获取月份 int GetDay() c

7、onst return Day; /获取日份 int GetWeek() const return Week; /设置星期 static bool JudgeYear(int y) /判断某年是否为润年(平年) if(y%4=0 & y%100!=0 | y%400=0) return true; else return false; int GetMonthDays(int m); /判断某年某月实有天数 int GetYearDays(int y); /判断某年实有天数 int DateToNum(); /判断某年到1年1月1日实有天数 Date NumToDate(int); /由1年1

8、月1日至指定日期实有天数返回日期 void OutMonth(int r); /月份输出 void OutWeek(int r); /星期输出 void AllShow(); /输出某年全年日历 void WAllShow(); /文件输出某年全年日历 void MonthShow(); /输出某年某月日历 void WMonthShow(); /输出某年某月日历 void WeekShow(); /输出某年某月某日星期日历;3. 定义平润年的判断,只需要获取指定的年份,能过“能被4整除不能被100整除是润年和能被400整除是润年”判断即可,是润年返回True,否则返回False,直接在类内定

9、义。static bool JudgeYear(int y) /判断某年是否为润年(平年) if(y%4=0 & y%100!=0 | y%400=0) return true; else return false; 4. 定义任意年份的实有天数判断,只需要判断指定年份是否为润年,是则返回366,否则365。int Date:GetYearDays(int y) /判断某年实有天数 if(JudgeYear(y) /调用JudgeYear(int y)判断平润年 return 366; else return 365;5. 定义任意月的实有天数判断,需要获取指定的年份与月份,能过判断月份,大月

10、返回31天,小月返回30天,2月还需要通过判断年份是否为润年返回相应值,润年返回29天,平年返回28天。int Date:GetMonthDays(int m) /判断某年某月实有天数 int n; switch(m) /判断月份 case 1: case 3: case 5: case 7: case 8: case 10:case 12: n=31;break; case 4: case 6: case 9: case 11: n=30;break; case 2: if(JudgeYear(GetYear() /调用JudgeYear(int y)判断平润年 n=29; /是润年返回29

11、年 else n=28; /不是润年返回28年 break; return n;6. 定义任意年到1年1月1日的实有天数,定义一个用于存放总天数的n,赋初值为0,通过循环先与指定年份前1年到公元1年所有年份的总天数相加,每次循环都需要调用任意年份的实有天数判断函数获取某年的总天数;指定年份前x年所有年份总天数相加完成后,再通过循环与指定月份前1月到1月所有月份总天数相加,期间也要计算个个月的总天数;最后与指定日期的天数相加,返回n的值即可。int Date:DateToNum() /判断某年到1年1月1日实有天数 int y,n=0; for(y=1;yGetYear();y+) n+=Get

12、YearDays(y); for(int m=1;mGetYearDays(y);y+) rest-=GetYearDays(y); for(m=1,rest;restGetMonthDays(m);m+) rest-=GetMonthDays(m); d=rest; return Date(y,m,d);8. 定义判断任意日期对应的星期,此过程只需要计算出指定日期到公元1年1月1日的实有天数,然后除7取余即可,其余数就是对应的星期。9. 定义显示年日历,此函数目的在于输入全年日历。具体实现如下:定义4个变量,分别存放指定年份的1月1日到公元1年1月1日的实有天数,可调用函数实现,此年份中某月

13、1号对应的星期,可调用函数计算此年某月1号到公元1年1月1日的实有天数除7取余实现,另两个用于循环。共有两层循环,第一层循环共计12次,一年只有12个月,第二层循环次数由当前要输出的月份的总天数判断。第二层循环内又嵌套二个循环,第一个条件为某月1号是星期几则输出几个tab空格,第二层循环用于输出日历,能过输出的日期加上之前的空格数除7余0作为换行条件,以实现以星期布局。主要部分也就如此,另外日历前后的横线、星期、年月份直接输出,或调用函数输出即可。此次编写,也把月份的输出重定义了一个函数,由获取一个月份,输出大写月份,由switch语句实现。void Date:AllShow() /输出某年全

14、年日历 int n,morday,wek,j; morday=DateToNum(); cout Year年endl; for(n=1;n=12;n+) cout-n; cout ; OutMonth(n); cout星期日 星期一 星期二 星期三 星期四 星期五 星期六n; wek=morday%7; for(j=1;j=wek;j+) coutt; for(j=1;j=GetMonthDays(n);j+) couttj; if(wek+j)%7=0) coutn; morday+; if(j=GetMonthDays(n) coutn; cout-n; ;10. 定义保存年日历,前面定义

15、了在屏幕上显示的函数,这里和上面差不多,只需要打开或新建一文件,判断文件打开与否,打开了,则把所有输出到屏幕的内容,改为输入到文件即可。最后关闭文件,提示用户保存成功。void Date:WAllShow() /文件输出某年全年日历 int n,morday,wek,j; morday=DateToNum(); ofstream outfile(年日历.txt,ios:trunc); if(!outfile)cerrOpen error!endl;exit(1); outfile Year年endl; for(n=1;n=12;n+) outfile-n; outfile ; switch(n

16、) case 1:outfile一月份n;break; case 2:outfile二月份n;break; case 3:outfile三月份n;break; case 4:outfile四月份n;break; case 5:outfile五月份n;break; case 6:outfile六月份n;break; case 7:outfile七月份n;break; case 8:outfile八月份n;break; case 9:outfile九月份n;break; case 10:outfile十月份n;break; case 11:outfile十一月份n;break; default:o

17、utfile十二月份n; outfile 星期日 星期一 星期二 星期三 星期四 星期五 星期六n; wek=morday%7; for(j=1;j=wek;j+) outfilet; for(j=1;j=GetMonthDays(n);j+) outfiletj; if(wek+j)%7=0) outfilen; morday+; if(j=GetMonthDays(n) outfilen; outfile-n; outfile.close(); cout保存成功endl;11. 定义显示月日历,此函数与定义显示年日历函数相似,只是不需要外循环而以,比起定义显示年日历函数相对简单。能过显示年

18、日历函数略微修改即可。void Date:MonthShow() /输出某年某月日历 int morday,wek,j; morday=DateToNum(); cout GetYear()年GetMonth()月endl; cout-n; cout星期日 星期一 星期二 星期三 星期四 星期五 星期六n; wek=morday%7; for(j=1;j=wek;j+) coutt; for(j=1;j=GetMonthDays(GetMonth();j+) couttj; if(wek+j)%7=0) coutn; morday+; if(j=GetMonthDays(GetMonth()

19、coutn; cout-n;12. 定义保存月日历,与定义保存年日历相似,通过显示月日历函数修改即可。void Date:WMonthShow() /输出某年某月日历 int morday,wek,j; morday=DateToNum(); ofstream outfile(月日历.txt,ios:trunc); if(!outfile)cerrOpen error!endl;exit(1); outfile GetYear()年GetMonth()月endl; outfile-n; outfile星期日 星期一 星期二 星期三 星期四 星期五 星期六n; wek=morday%7; for

20、(j=1;j=wek;j+) outfilet; for(j=1;j=GetMonthDays(GetMonth();j+) outfiletj; if(wek+j)%7=0) outfilen; morday+; if(j=GetMonthDays(GetMonth() outfilen; outfile-n; outfile.close(); cout保存成功12 | md.GetMonthDays(m) | da1;) coutymda; d.SetYear(y); d.SetMonth(m); d.SetDay(da); y=d.GetYear(); m=d.GetMonth(); d

21、a=d.GetDay(); ; . 程序主函数中主要功能的实现方式及解释(代码详见附录1)1. 为实现循环,调用dowhile语句。2. 提示部分直接在dowhile语句内最前面输出即可,如选择几,是什么功能。 cout-n; cout 选择1:查看X年日历n; cout 选择2:查看X年X月日历n; cout 选择3:查看X年X月X日对应星期n; cout 选择4:计算两日期间的天数差n; cout 选择5:计算指定日期后X天的日期n; cout 选择6:查看系统时间n; cout 选择7:清屏并继续n; cout 选择8:退出n; cout-n;3. 定义一整形变量jud,并赋初值为可满足

22、dowhile语句循环的值,这里为7.do while(jud=7);4. 通过if判断jud的值,执行不同的功能,前5个功能都是依靠Date类及里面的函数实现的,这里就不多说了,主要说一下第6个,显示当前系统时间,需要用到函数库,定义time_t 变量now,使用time(&now)实现给now赋当前系统时间,定义tm型指针*tim=localtime(&now),然后按指定格式依次输出tim中对应的年月日时分秒。 if(jud=6) time_t now; time(&now); tm *tim=localtime(&now); cout当前时间:tm_year+1900-tm_mon+1

23、 -tm_mday tm_hour:tm_min: tm_secendl; jud=7;continue; 5. 当jud=7时,运行continue调出此次循环;jud=8时,运行exit(0)退出。 if(jud=7) system(cls); continue; if(jud=8) exit(0);. 各模块实现流程图 . 程序主流程图3 软件使用说明书运行程序后,会出现主菜单,如下图,根据菜单选择相应的功能,每部分功能如下:1. 第一项,用于查询任意指定年份的全年日历。选择第1项后,输入想要查询的年份,回车确认后,屏幕上会以一星期为周期显示全年日历,在第十二月份显示完毕后,会提示用户是否保存当前所查询的年份日历到文本文档,用户输入y或Y,即可保存,输入其他任意字符则不保存,不输入则不做任何反应。判断结束,若保存,程序自动将本年份日历保存到程序所在位置,并命名为年日历.txt,然后回到主菜单,若不保存,直接返回主菜单。2. 第二项,用于查询任意指定年份与月份的全月日历。选择第2项后,输入想要查询的年份,月份,年月中

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1