logo资料库

c++课程设计万年历.doc

第1页 / 共32页
第2页 / 共32页
第3页 / 共32页
第4页 / 共32页
第5页 / 共32页
第6页 / 共32页
第7页 / 共32页
第8页 / 共32页
资料共32页,剩余部分请下载后查看
四 川 理 工 学 院 计算机学院 C++ 课 程 设 计 报 告 姓名 项 目 组 成 员: 专 业 班 级: 软件工程 08 级 2 班 学号 www.oursuse.cn 328754147 service@oursuse.cn 电脑崽 QQ: E-mail: 指 导 教 师: 开 始 日 期: 2010 年 1 月 6 日 完 成 日 期: 2010 年 1 月 10 日 二〇一〇年一月
目 录 一、课程设计题目.................................................................................1 二、课程设计目的.................................................................................1 三、需求分析及开发背景.....................................................................1 四、设计原理.........................................................................................1 五、课程设计内容 1. 程序功能描述.............................................................................2 2. 算法实现描述.............................................................................2 六、程序操作界面.................................................................................5 七、流程图.............................................................................................6 八、程序代码.........................................................................................7 九、程序调试........................................................................................23 十、总结................................................................................................28 附: 程序使用说明书及工作列表......................................................29
一、 课程设计题目: 《万年历+记事簿+倒计时》 二、 课程设计目的 在完成《C++程序设计》课程学习后,通过本次教学实习,对所学专 业知识进一步消化、理解并掌握,锻炼和提高综合运用所学知识解决实际 问题的能力,熟悉编译工具的使用方法和环境,协调团队合作力,相互学 习,相互帮助。对 C++中时间函数博大精深有了更深刻的认识,了解自己 有哪些方面的不足之处,以便日后改进。另外,希望通过本次课程设计, 增加对 C++这门课的兴趣,促进学习的积极性,为尽早确定将来选择方向 定下目标。 三、 需求分析及开发背景 目前流行的计算机日历程序,比较典型的是 Windows 各版本中的日历 程序以及基础于该程序所开发的各种应用程序中的日历程序。然而,这些 程序都千篇一律的局限在一个很短的时间范围内。(Windows 各个版本一 般都局限在 1980 年至 2099 年这一范围内),但是,在很多情况下,特别 是在众多的科学研究领域中,一个时间跨度较大的日历程序是很有参考价 值的。C 程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程 序文本填补了这一领域的空白,同时用铁的事实强有力的告诉世人:C 程 序设计语言作为计算机语言家族的新生事物,其发展前景是极为广阔的。 四、 设计原理 面向对象的程序设计是现在最外流行的程序设计方法。面向对象的方 法模仿人们建立现实世界模型的方法,认为客观世界是由各种各样的对象 组成的,每个对象都有各自的内部状态和运动规律,不同对象之间的相互 作用和联系就构成了各种各样的系统。利用人们对事物分类和抽象的自然 倾向,引进了类的概念,具有封装性、继承性和多态性等特点。 在 C++中,类是指由用户定义的一种抽象数据类型,将一组具有相关
性的数据成员结合在一起,要使用类中所包含的数据时,必须通过有该类 所提供的成员函数来存取。 数据封装是指将类中的数据成员以其可被使用或不可被使用的方式 进行分类,即有条件地限制类中部分或全部的数据成员被使用,在定义数 据成员时在其前面冠以 private、protected 或 public,分别表示私有的、 保护的和公有的。因此,类是实现数据封装的一个有力方法,类的特性是 实现了数据封装或数据抽象。 C++的流插入运算符“<<”和流提取运算符“>>”是 C++在类库中提 供的,所有 C++编译系统都在类库中提供输入流类 istream 和输出流类 ostream。Cin 和 Cout 分别是 istream 和 ostream 的对象。在类库中提供 的头文件中已经对“<<和“>>”进行了重载,使之作为流插入运算符和流 提取运算符,能用来输出和输入 C++标准类型的数据。对流插入运算符 “<<”进行重载后,在程序中用“<<”不仅能输出标准类型数据,而且可 以输出用户自己定义的类对象。 五、 课程设计内容 1、程序功能描述 ①阳历查询功能:程序开始默认当前系统时间月份的日历表,可单击 按钮逐月前翻、后翻;也可直接输入指定年、月查看; ②农历查询功能:当点击日历中对应阳历日期,可在顶部显示出当前 选择日期的农历信息; ③记事本功能:可在记事栏目中写入文本记事内容,可实现对记事时 间与当前时间的时差计算,显示倒计时,并将记事内容保存在数据库中, 以便随时查看; ④记事查看功能:可在记事显示区域查看数据库中已经存放了的记事 事件,实现翻页功能显示;并提取记事内容中的时间元素,进行时间差判 断,显示倒计时差! ⑤提示功能:对程序可能发生的错误进行相关处理,以弹窗形式反馈 给用户。 2、算法实现描述
【一】阳历相关 ① 平年 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 周+5 天)-1 天=5217 周+5 天 (整百年暂设为平年), 每 400 年共 4*(5217 周+5 天)+1 天(整 400 年闰)=20871 周+0 天(4 个整百年只有一个闰年) 即 400 年一轮回!(原来万年历 400 年前是一家) 【二】农历相关 ① 节气的计算 先给节气进行编号,从近日点开始的第一个节气编为 0,编号如下及 其相应的月份如下: 0 小寒 腊月 6 清明 三月 12 小暑 六月 18 寒露 九月 1 大寒 腊月 7 谷雨 三月 13 大暑 六月 19 霜降 九月 2 立春 正月 8 立夏 四月 14 立秋 七月 20 立冬 十月 3 雨水 正月 9 小满 四月 15 处暑 七月 21 小雪 十月 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)
是否为定义年,若是,令总天数 S=1,否则,用累加法计算出定义年到输 入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起 来,若该月是闰年中的月份并且该月还大于二月,再使总天数加 1,否则, 不加,既算出从定义年一月一日到输出年的该月一日的总天数。 ⑤ 输出月份第一天为星期几的算法:使总天数除以 7 取余加 2 得几既为 星期几,若是 7,则为星期日。 ⑥ 算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几 后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底, 该月中的天数加上该月一日为星期几的数字再除以 7 得 0 换行,即可完整 的输出该月的日历。 六、 程序操作界面 界面(Windows 窗口应用程序): ① 当前时间显示(包含农历显示) ② 逐月查看按钮(向前、向后) ③ 星期列表项 ④ 当月日历内容显示 ⑤ 指定日期跳转框及按钮 ⑥ 记事日期选择列表项 ⑦ 记事文本输入框及提交按钮 ⑧ 记事显示区及翻页按
分享到:
收藏