1、 面向对象程序设计面向对象程序设计 课程设计报告课程设计报告 题目:题目: 万年历系统万年历系统 专业:专业: 计算机科学与技术计算机科学与技术 班级:班级: 姓名:姓名: 学号:学号: 指导教师:指导教师: 成绩:成绩: 计算机与信息工程系计算机与信息工程系 20142014 年年 6 6 月月 6 6 日日 目录目录 1 设计内容及要求. 1 1.1 设计内容. 1 1.2 设计任务及具体要求. 1 2 概要设计. 2 2.1 程序设计思路. 2 2.2 总体程序框图 3 3 设计过程或程序代码. 4 3.1 各个模块的程序流程图及运行界面. 4 3.2 对关键代码加以分析说明. 7 4
2、设计结果与分析 13 4.1 程序调试的结果 13 4.2 程序设计分析 13 5 小 结. 14 致谢. 15 参考文献. 16 源程序. 17 1 1 设计内容及要求 1.1 设计内容 万年历,实际上就是记录一定时间范围内(比如 100 年或更多)的具体阳历 或阴历的日期的年历,方便有需要的人查询使用。在我设计的万年历中主要有: (1)使用图形用户界面来查询用用户所需的日期信息,符合日常软件使用 规范。 (2)按月份查询,实现了显示查询 19012100 年某月所有日期的阴阳历对 照。 (3)并且添加了重大节日与星座等信息,界面采用日常的星期与月份结合 的格式,方便查看与使用。 (4)编写
3、万年历的课程设计,是为了使同学们更加了解高级程序设计语言 的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求 解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学 习和毕业设计打下坚实基础。 1.2 设计任务及具体要求 利用 JAVA 语言编写的万年历系统采用了多种 JAVA 语句来实现多种功能。 用 户可以通过本程序的 applet 运行界面来查找一整年某月的农历和阳历,可以查 找用户所想了解的某一天具体为星期几,并且可以看到一些重大节日的具体时 间。 要求:满足设计万年历系统的目的,即当用户查询年份与月份时,系统就要 将这一年的某一月份的阴历与阳历全部
4、显示出来,并且附带这一月份的重大节 日。当用户随意改动年份或月份时系统自动显示与星期对应的日期。用户点击日 期时系统会显示具体星座信息。 2 2 概要设计 2.1 程序设计思路 (1)总天数的算法: 首先用 if 语句判断定义年到输入年之间每一年是否为闰 年,是闰年,该年的总天数为 366,否则,为 365。然后判断输入的年是否为定 义年,若是,令总天数 S=1,否则,用累加法计算出定义年到输入年之间的总天 数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的 月份并且该月还大于二月,再使总天数加 1,否则,不加,既算出从定义年一月 一日到输出年的该月一日的总天数。 (2)输
5、出月份第一天为星期几的算法:使总天数除以 7 取余加 2 得几既为星 期几,若是 7,则为星期日。 (3)算出输出月份第一天为星期几的算法: 算出输出月份第一天为星期几后, 把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的 天数加上该月一日为星期几的数字再除以 7 得 0 换行, 即可完整的输出该月的日 历。 (4)如果年份小于 1900 年则程序不予判断。 (5)公历与农历的换算。公历年对应的农历数据,每年三字节,格式第一字节 BIT7-4 位 表示闰月月份,值为0 为无闰月,算法:日期+年份+所过闰年数+月较 正数之和除7 的余数就是星期但如果是在闰年又不到3 月份上
6、述之和要减一天 再除7星期数为0。阴历月份计算:46911几个小月返回29天, 2月经过判断是 否为闰年,选择返回28或29天,其余月份为大月,返回31天。 (6)系统时间的设置。直接从系统得到时间,设置字体,背景,显示框架等 等,绘图就好了。 3 2.2 总体程序框图 图 1 总体程序框图 开始 程序初始化 获取当 年系统 时间和年份 计算与绘制屏幕 是 否 输 入 年 份 或 选 择 月 份 提交年月变更数据 结束 4 3 设计过程或程序代码 3.1 各个模块的程序流程图及运行界面 (1)公历转农历流程图与运行界面 流程图 图 2 公历转农历流程图 5 运行界面 图 3 公农历运行图 6 (2)时间调整程序流程图 流程图 图 4 时间调整流程图 7 运行界面 图 5 万年历运行图 3.2 对关键代码加以分析说明 (1)本次程序设计共用了 class MainCal extends JFrame implements,class CurrTimeLabel 和 class Lunar 三个大类,用于绘制万年历,显示万年历的系统