万年历应用小程序设计报告

合集下载

万年历课程设计报告报告

万年历课程设计报告报告

WORD格式可编辑面向对象课程设计题目万年历程序设计系部商学系专业信息管理与信息系统班级信息N122 学号学生姓名指导教师编写日期 2015.01.15第一章需求分析 (3)第二章概要设计 (4)第三章详细设计与编码 (6)第四章调试分析 (10)第五章用户使用说明 (13)第六章设计心得 (14)第一章需求分析如今的社会是一个信息的时代,随着电脑等科技产品在人们生活中占据着越来越重要的地位,人们就会越加的善加利用,这为我们的生活带来了极大的效率,同时计算机的普及更可以看出它所占的地位。

万年历作为日常中的一种小工具,它具有多方面的小工能,主要在日期的显示上给人以直观的表达效果,在日期的查询上方便简洁,还有就是在某些节日的提醒上都给我们带来极大的方便,是一种比较实用的小工具。

我们每个人都可以在自己的个人电脑上进行制作,一方面不仅可以加强巩固我们对C#语言的学习,还可以通过自主的编程找到自身的缺点。

这对培养我们自身的创新能力和动手能力具有很大的作用。

第二章概要设计1.设计要求程序完成运行时,能过正确的表达出所输入年份的万年历。

2.总体设计<1>实现操作流程图<2>程序设计流程图第三章详细设计与编码<1>源代码using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Linq;using System.Windows.Forms;using System.Globalization;namespace AllAgesCalendar{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e) {string intmonth =monthCalendar1.TodayDate.Month.ToString();string intdaty =monthCalendar1.TodayDate.Day.ToString();if (monthCalendar1.TodayDate.Month < 10){intmonth = "0" +monthCalendar1.TodayDate.Month.ToString();}if (monthCalendar1.TodayDate.Day < 10){intdaty = "0" +monthCalendar1.TodayDate.Day.ToString();}string s = String.Format("{0}年{1}月{2}", GetStemBranch(monthCalendar1.TodayDate),GetMonth(monthCalendar1.TodayDate),GetDay(monthCalendar1.TodayDate)); label1.Text = monthCalendar1.TodayDate.Year + "年" + intmonth + "月" + intdaty + "日" + " " + s + " " + getReturnYear(monthCalendar1.TodayDate) + "年";label1.ForeColor = Color.Green;}private void label1_Click(object sender, EventArgs e) {}ChineseLunisolarCalendar calendar = new ChineseLunisolarCalendar();public string GetYear(DateTime time){StringBuilder sb = new StringBuilder();int year = calendar.GetYear(time);int d;do{d = year % 10;sb.Insert(0, ChineseNumber[d]);year = year / 10;} while (year > 0);return sb.ToString();}private static string ChineseNumber = "〇一二三四五六七八九";public string GetMonth(DateTime time){int month = calendar.GetMonth(time);int year = calendar.GetYear(time);int leap = 0;for (int i = 3; i <= month; i++){if (calendar.IsLeapMonth(year, i)){leap = i;break;}}if (leap > 0) month--;return (leap == month + 1 ? "闰" : "") + ChineseMonthName[month - 1];}public static readonly string[] ChineseMonthName = new string[] { "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };public string GetDay(DateTime time){returnChineseDayName[calendar.GetDayOfMonth(time) - 1];}public static readonly string[] ChineseDayName = new string[] {"初一","初二","初三","初四","初五","初六¨´","初七","初八?","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","廿一","廿二","廿三","廿四","廿五","廿六¨´","廿七","廿八","廿九","三十"};public string GetStemBranch(DateTime time){int sexagenaryYear =calendar.GetSexagenaryYear(time);string stemBranch =CelestialStem.Substring(calendar.GetCelestialStem(sexagenar yYear) - 1, 1) +TerrestrialBranch.Substring(calendar.GetTerrestrialBranch(s exagenaryYear) - 1, 1);return stemBranch;}public const string CelestialStem = "甲乙丙丁戊己庚辛壬癸";public const string TerrestrialBranch = "子丑寅卯辰巳午未申酉戌亥";public string getReturnYear(DateTime time){int sexagenaryYear =calendar.GetSexagenaryYear(time);string Tree =TreeYear.Substring(calendar.GetTerrestrialBranch(sexagenary Year) - 1, 1);return Tree;}public const string TreeYear = "鼠牛虎兔龙蛇马羊猴鸡狗猪";private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e){string strYesr = String.Format("{0}年{1}月{2}", GetStemBranch(monthCalendar1.SelectionStart),GetMonth(monthCalendar1.SelectionStart),GetDay(monthCalendar1.SelectionStart));toolTip1.ToolTipTitle =monthCalendar1.SelectionStart.ToShortDateString();toolTip1.Show(strYesr + " " +getReturnYear(monthCalendar1.SelectionStart) + "年", monthCalendar1, monthCalendar1.Location, 5000);}}}第四章调试分析<1>程序运行测试①进入程序界面:。

万年历实验报告

万年历实验报告

万年历实验报告1. 引言日历是人们日常生活中必不可少的工具,用于追踪时间和日期。

在计算机科学中,开发一个能够准确显示日期和日历的程序也是非常重要的。

本实验的目标是设计并实现一个万年历程序,能够显示指定年份和月份的日历。

2. 实验目标本实验的目标是设计和实现一个简单的万年历程序,具体要求如下: - 能够根据指定的年份和月份显示该月的日历。

- 显示的日历应包含月份的名称、年份、星期几和日期。

- 如果输入的年份和月份超出了合法范围(如年份小于1或大于9999,月份小于1或大于12),程序应给出相应的错误提示。

3. 实验方法为了实现上述目标,我们采用了以下步骤:3.1 设计算法设计一个算法来确定给定年份和月份的开始日期,以及该月份的天数。

我们使用基于蔡勒公式的算法来计算开始日期,并根据每个月的天数确定日历的布局。

3.2 编写代码使用Python编程语言编写代码来实现万年历程序。

采用面向对象的编程方式,将日历的显示和计算逻辑封装到一个Calendar类中。

3.3 编写测试用例编写一系列测试用例来验证万年历程序的正确性。

测试用例包括输入合法年份和月份的情况,以及输入非法年份和月份的情况。

3.4 运行程序运行程序,并根据输入的年份和月份来显示相应的日历。

如果输入的年份和月份超出合法范围,程序应给出相应的错误提示信息。

4. 实验结果经过编写代码并进行测试,我们得到了一个能够正常显示日历的万年历程序。

以下是几个测试用例的示例结果:4.1 输入合法年份和月份输入年份为2022,月份为6的情况下,程序显示的结果如下:六月 2022日一二三四五六1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 304.2 输入非法年份和月份输入年份为0,月份为13的情况下,程序应给出错误提示信息,如下:输入的年份或月份不合法,请重新输入。

C语言万年历设计报告

C语言万年历设计报告

C语言课程设计报告题目:编写万年历系统年级:专业:班级:姓名:学号:目录第1章设计目的第2章需求分析第3章概要设计第4章源程序清单第5章执行结果1)登陆界面2)显示当前日月历3)显示具体日期信息第6章程序问题调试与课程设计心得第1章设计目的设计目的(实验要求):1.模仿现实生活中的挂历.2.当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几).3.当系统日期变到下一月时,系统自动翻页到下一月.第2章需求分析(1)程序运行时,首先给出菜单选项和输入提示:(2)用户可以通过主菜单选择不同选项。

输入1,通过输入当前日期可显示当前月的日历;输入2,通过输入具体日期(中间以空格分开)可显示该日具体信息;输入3,则退出查询系统。

第3章概要设计1.菜单选择界面可通过下面所示函数时现;主要思路:通过while语句与swich…case以及if条件语句实现菜单的循环功能和不同选项的功能实现。

闰年与平年的判断:代码如下:void main(){int year,month,day,a,b;while(1){printf("\n\n\n\n");printf("**********************************************************\n\n");printf(" * * \n");printf(" Welcome to enter calendar system \n");printf(" * * \n\n");printf("**********************************************************\n\n\n");printf(" 1 The month of current date 2 Date 3 Exit\n");printf(" please import your choose<1~3>,press Enter to define: ");scanf("%d",&b);switch(b){case 1:printf("\n Please import the year,month and day which you want tocheck,the year,month and day separation by blank space: ");scanf("%d%d%d",&year,&month,&day);a=x3(year,month,1);if(a==0){printf("Error!Please import again.\n");break;}yueli(year,month,day);break;case 2:printf("\n Please import the year,month and day which you want to check,the year,month and day separation by blank space: ");scanf("%d%d%d",&year,&month,&day);a=x3(year,month,day);if(a==0){printf("Error!Please import again.\n");break;}rili(year,month,day);break;case 3:exit(0);default:printf("Error!Please import again.\n\n");}}2.闰年的判断:计算所输入的年份是否可被4整除,若不能被整除,为平年。

(2023)C语言万年历设计报告(一)

(2023)C语言万年历设计报告(一)

(2023)C语言万年历设计报告(一)C语言万年历设计报告这份报告是针对 2023 年度 C 语言万年历设计而准备的。

设计目的该万年历的设计目的是为了让用户能够快速地查看任意公历年份的日历,同时还能够显示节气、万年历和日历信息。

设计思路该万年历的主要思路是通过用户输入任意公历年份,在程序中计算并显示该年的日历信息。

具体实现思路如下:1.用户输入年份信息。

2.程序判断该年份是否为闰年,并计算该年的总天数。

3.根据该年第一天是星期几,排列该年每个月的天数。

4.标记国历节日,如元旦、劳动节等。

5.计算并标记该年的节气,如立春、清明等。

6.计算并标记该年的重要万年历信息,如“三伏”、“四季”等。

设计要点在实现该万年历的过程中需要注意以下几个要点:1.为了代码的可维护性,尽量将每个功能模块拆分成函数的形式。

2.程序中需要处理日期的加减运算,可以使用标准库中的<time.h>。

3.节气和万年历的计算应该基于一些公式而不是硬编码。

设计结果经过实现,该万年历已经能够正常运行,并能够正确地显示各种信息。

用户输入任意公历年份后,程序可以迅速计算并展示该年的万年历、节气和重要节日信息。

结论通过本次 C 语言万年历的设计,我们不仅深入地了解了日期处理等相关知识,还提升了编码的能力。

在日常开发中,我们也可以根据这些基础知识,设计更为实用的应用程序。

可改进之处尽管该万年历已经能够满足基本的需求,但仍有一些改进空间。

例如:1.目前仅支持公历,可以添加其他历法的支持,如农历、阴阳历等。

2.界面可以进一步美化,增加更多交互性的组件,如按钮、下拉菜单等。

3.可以添加更多的功能,如查询特定日期的天气、星座运势等。

总结本次 C 语言万年历设计,使我们更好地理解了日期处理的相关知识,提高了我们的编码水平。

同时,我们也意识到在实际项目中,需要更多的功能和优化,才能更好地服务于用户的需求。

通过持续不断的学习和实践,我们可以不断提升自己的编程技能。

万年历设计报告

万年历设计报告

万年历设计报告1. 引言万年历是一种用于查询日期和显示重要节假日的工具,可以帮助用户快速了解任意日期所处的星期、月份、季节等信息。

在本设计报告中,我们将介绍一个基于Python语言的万年历设计方案。

该万年历设计方案使用了面向对象编程的思想,具有良好的可拓展性和易于维护的特点。

2. 功能需求本次万年历设计的功能需求如下:•显示指定年份的公历日历•查询指定日期的公历信息,如星期、星座、节假日等•支持农历查询,显示指定日期的农历信息•支持阳历和农历之间的转换•提供用户友好的命令行界面3. 设计思路基于以上功能需求,我们设计了以下几个核心类来实现万年历的功能:3.1 DateConverterDateConverter是一个日期转换的工具类,用于实现公历日期和农历日期之间的转换。

它包含了以下主要方法:•convert_to_lunar(year, month, day):将公历日期转换为农历日期•convert_to_solar(year, month, day):将农历日期转换为公历日期3.2 CalendarCalendar类负责输出指定年份的公历日历。

它包含以下主要方法:•display(year):输出指定年份的公历日历3.3 HolidayHoliday类负责确定指定日期是否为节假日。

它包含以下主要方法:•is_holiday(year, month, day):判断指定日期是否为节假日3.4 LunarCalendarLunarCalendar类负责显示指定日期的农历信息。

它包含以下主要方法:•display(year, month, day):输出指定日期的农历信息4. 实现结果4.1 用户界面我们使用命令行界面来与用户进行交互。

用户可以输入指令来查询对应的日期信息,例如:请输入指令(输入 help 查看帮助):cal 20222022 年日历如下:一月二月三月日一二三四五六日一二三四五六日一二三四五六...十月十一月十二月日一二三四五六日一二三四五六日一二三四五六4.2 功能展示以下是使用我们设计的万年历程序的一些功能示例:•查询公历日期请输入指令(输入 help 查看帮助):info 2022-01-01查询结果如下:日期:2022-01-01星期:六星座:摩羯座节假日:元旦节•查询农历日期请输入指令(输入 help 查看帮助):lunar 2022-01-01查询结果如下:日期:2022-01-01农历日期:腊月廿七农历年份:牛年•查询节假日请输入指令(输入 help 查看帮助):holiday 2022-05-01查询结果如下:日期:2022-05-01节假日:劳动节5. 总结本次万年历设计方案基于Python语言,使用了面向对象编程的思想,实现了查询公历和农历日期、显示公历日历以及查询节假日等功能。

用Java程序编写万年历程序的设计报告

用Java程序编写万年历程序的设计报告

用Java程序编写万年历程序的设计报告一、引言本文档是针对使用Java程序编写万年历程序的设计报告,旨在详细介绍该程序的设计思路和实现细节。

二、需求分析1.背景介绍在现代社会中,人们经常需要查看特定日期的日历信息。

为了方便用户直观地查看任意年月的日历信息,设计一个万年历程序,可以满足用户的需求。

2.功能需求万年历程序具备以下功能:●显示指定年月的日历信息●支持用户输入任意年月●能够高亮当前日期●具备简洁易读的界面设计3.性能需求●用户界面响应迅速,无明显卡顿●日历信息准确无误,支持闰年判断三、概要设计1.系统架构万年历程序采用MVC(Model.View.Controller)架构,将数据模型、用户界面和控制逻辑分离。

模型层:负责处理日期计算和数据存储视图层:负责展示日历信息,接收用户输入控制器层:负责协调模型层和视图层的交互2.关键模块●日历模块:负责日期计算,并提供接口给视图层调用●用户界面模块:提供用户交互界面,并接收用户输入●控制器模块:负责协调日历模块和用户界面模块四、详细设计1.日历模块设计●定义日期对象:包括年、月、日等属性●实现日期计算功能:如计算指定年月的第一天是星期几,判断某年是否为闰年等●提供接口给其他模块调用:如获取指定年月的日历信息2.用户界面设计●设计主界面:包括输入年月的文本框和显示日历信息的面板●设计按钮事件:响应用户输入的年月,调用日历模块计算并显示日历信息3.控制器设计●建立模型与视图之间的联系:将用户输入传递给日历模块,并将计算后的日历信息传递给视图层进行显示五、测试计划1.单元测试●对日历模块进行单元测试,测试日期计算功能的准确性●对用户界面模块进行单元测试,测试界面的交互和显示是否正常2.集成测试●测试控制器模块与日历模块、用户界面模块之间的功能协调是否正常六、附录1.附件●无2.法律名词及注释●无。

c语言万年历课程设计报告

c语言万年历课程设计报告

本次课程设计的主题为“C语言万年历”,旨在通过设计和实现一个简单的万年历程序,深入了解C语言程序设计的基本方法和技巧。

通过本课程设计的学习,我对C语言程序设计的各个方面进行了深入的了解和掌握,同时也提高了自己的编程思维和实践能力。

一、设计思路。

本次课程设计的主要功能是实现万年历。

在设计程序之前,我首先对万年历的基本功能进行了分析和思考,包括输入年月日,输出当月的日历和星期几等。

同时,考虑到用户友好性,我还增加了一些额外的功能,如输入错误时的提示,具体日历同时附带节假日等。

在分析了功能需求之后,我便开始考虑程序设计的具体实现。

首先,我选择了C语言作为实现程序的语言,因为C语言广泛应用于各类软件工程和移动计算等领域,适用性强,易于学习和掌握。

接着,我根据分析需求,确定了程序的基本框架和主要模块,包括输入年月日模块、求解该日是星期几模块、绘制当月日历模块和判断节日等模块。

二、程序实现。

在程序实现过程中,我遵循了模块化编程的原则,把整个程序划分成几个独立的模块,并在模块之间进行数据交互和函数调用。

具体来说,我分别实现了以下几个模块:1.输入年月日模块:该模块负责接收用户输入的年月日信息,并检查输入格式是否正确。

在输入不合法时,该模块能够给用户相应的提示信息,并要求用户重新输入。

2.求解该日是星期几模块:该模块根据给定年月日,求出该日是星期几。

该模块采用基姆拉尔森计算公式来实现。

3.绘制当月日历模块:该模块负责绘制给定月份的日历,并标注当日及节假日等信息。

在绘制日历时,该模块能够考虑各种特殊情况,如闰年、月初不为星期一等。

4.判断节日等模块:该模块能够根据给定年月日信息,判断当日是否为节假日、纪念日等特殊日子,如春节、圣诞节等,并在日历上作出相应标注。

以上四个模块构成了整个程序的主要功能。

在实现过程中,我还遇到了一些问题,如求解闰年的问题、绘制多行日历的问题等。

针对这些问题,我通过查找资料、借鉴其他同学的代码等方式进行了解决。

桌面万年历程序设计综合实践报告

桌面万年历程序设计综合实践报告

程序设计综合实践报告(C语言)项目名称:桌面万年历班级:姓名:学号:山东科技大学信息科学与工程学院2012年12月目录1. 项目概述 (3)1.1 需求陈述 (3)1.2 开发技术、环境与工具 (3)2. 软件需求 (3)2.1 功能性需求 (3)2.2 非功能性需求 (3)3. 软件架构设计 (3)4. 软件详细设计与实现 (3)4.1 主要模块的流程图 (3)4.2 核心代码 (4)5 总结与体会 (22)5.1遇到的问题与解决途径 (22)5.2 心得体会 (22)1. 项目概述1.1 需求陈述本项目是桌面小时钟的实现,表盘上可以实现星期、年月日、时分秒、生肖以及天干地支,右击可以打开延伸项目,包括日历、关于、表盘颜色设置、以及退出等选型,在日历表中可以实现从1901-2099年公历农历以及周几的查询,在日历表格中也可以进行换肤操作,同时还可以进行闹钟设定,通过“开启闹钟”“关闭闹钟”两个按钮来实现对闹钟开关的控制1.2 开发技术、环境与工具相关技术:1、(DrawClocktext)2、(DrawCalendar)2. 软件需求基于c语言利用vb2008实现改程序2.1 功能性需求可以实现时钟的消息处理(包括添加图片、背景色透明、更新时钟、绘制时钟、弹出菜单、处理菜单消息)、绘制时钟(包括年月日、时分秒)、万年历的背景的绘制、日历的绘制、以及按键消息。

2.2 非功能性需求编制闹钟,实现了闹钟的设定3. 软件架构设计1、日历绘制函数2、表盘函数的绘制3、按键函数的绘制4. 软件详细设计与实现1、通过GetLocalTime(&datetime);来实现获得当下时间,然后通过SunToLunar实现公历和农历日期的转化。

通过绘制表格,由GetDayOfWeek可以判断出某一天是周几,然后可以确定日历表中各个月份天数所在的位置,实现了万年历的基本功能。

其次,利用按键功能,实现了对年月日的的选择。

用Java程序编写万年历程序的设计报告

用Java程序编写万年历程序的设计报告

用Java程序编写万年历程序的设计报告一、引言万年历是一种常见的工具,用于显示特定日期的星期几、农历日期、节气等信息。

本设计报告旨在介绍使用Java编写万年历程序的设计过程和实现细节。

二、需求分析1. 显示当前日期的星期几和农历日期;2. 支持用户输入指定日期,显示该日期的星期几和农历日期;3. 显示当月的日历,并标记当天;4. 支持用户选择不同年份和月份,显示相应的日历;5. 显示当天的节气。

三、设计思路1. 日期计算:使用Java提供的日期和时间类,如`java.util.Calendar`,来进行日期计算和格式化;2. 农历计算:根据农历算法,计算指定日期的农历日期和节气;3. 用户界面:使用Java图形用户界面(GUI)库,如`javax.swing`,来实现用户界面;4. 数据展示:使用文本框、标签等组件来展示日期、星期几、农历日期和节气。

四、程序实现1. 创建Java项目,并导入所需的库;2. 创建主界面窗口,设置布局和组件;3. 添加日期选择器,用于选择年份和月份;4. 添加按钮,用于触发日期查询和切换月份;5. 根据用户选择的日期,计算并显示星期几、农历日期和节气;6. 根据用户选择的年份和月份,计算并显示当月的日历;7. 标记当天的日期;8. 添加事件监听器,处理用户的操作。

五、代码示例```java// 导入所需的库import java.util.Calendar;import java.util.Date;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;public class CalendarProgram extends JFrame {private JLabel dateLabel;private JLabel weekdayLabel;private JLabel lunarLabel;private JLabel festivalLabel;private JPanel calendarPanel;public CalendarProgram() {// 设置窗口标题和大小setTitle("万年历程序");setSize(800, 600);// 创建主界面布局和组件JPanel mainPanel = new JPanel(); dateLabel = new JLabel();weekdayLabel = new JLabel(); lunarLabel = new JLabel();festivalLabel = new JLabel();calendarPanel = new JPanel();// 将组件添加到主界面布局中 mainPanel.add(dateLabel);mainPanel.add(weekdayLabel); mainPanel.add(lunarLabel);mainPanel.add(festivalLabel);mainPanel.add(calendarPanel); // 设置主界面布局和显示setContentPane(mainPanel);setVisible(true);}public void updateCalendar(Date selectedDate) {// 根据选择的日期更新界面显示Calendar calendar = Calendar.getInstance();calendar.setTime(selectedDate);// 计算并显示星期几、农历日期和节气int weekday = calendar.get(Calendar.DAY_OF_WEEK); String lunarDate = calculateLunarDate(calendar);String festival = calculateFestival(calendar);dateLabel.setText("日期:" + selectedDate.toString()); weekdayLabel.setText("星期几:" + weekday);lunarLabel.setText("农历日期:" + lunarDate);festivalLabel.setText("节气:" + festival);// 计算并显示当月的日历int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH);int daysInMonth = calculateDaysInMonth(year, month); displayCalendar(year, month, daysInMonth);}private String calculateLunarDate(Calendar calendar) {// 根据农历算法计算农历日期// 实现略}private String calculateFestival(Calendar calendar) {// 根据日期计算节气// 实现略}private int calculateDaysInMonth(int year, int month) {// 计算指定年份和月份的天数// 实现略}private void displayCalendar(int year, int month, int daysInMonth) { // 显示当月的日历// 实现略}public static void main(String[] args) {CalendarProgram program = new CalendarProgram();program.updateCalendar(new Date());}}```六、总结通过使用Java编写万年历程序,我们可以实现日期计算、农历计算和节气计算等功能,并通过图形界面展示给用户。

万年历设计报告书

万年历设计报告书

万年历设计报告书一、设计要求:1.具有年、月、日、星期、时、分、秒等功能;2.时间与阴、阳历能够自动关联;图-1 主程序流程图三、各模块的功能及程序说明1. 具有年、月、日、星期、时、分、秒等功能在设计这一程序的时候,考虑到要在用户界面上对年月日以及时分秒的输入,在使用上更简单易操作。

2. 时间与阴、阳历能够自动关联在设计这一功能的时候,考虑到阴历和阳历要关联,翻阅了大量的资料,找到他们的函数关系,使这一功能在使用上更方便。

四、源程序package prog;import java.util.Scanner;public class MC2 {static final int BASE_YEAR = 2000;static final int BASE_WEEK_DAY = 6;static int getWeekDay(int year, int month, int day) {int base = getWeekDayOfFirstDay(year);int days = getDaysBetweenFirstDay(year, month, day);return (base + days) % 7;}static int getWeekDayOfFirstDay(int year) {if (BASE_YEAR == year) return BASE_WEEK_DAY;int days = getDaysBetweenTwoYear(year, BASE_YEAR);if (year > BASE_YEAR)return (BASE_WEEK_DAY + days) % 7;elsereturn (BASE_WEEK_DAY - days % 7);}static int getDaysBetweenTwoYear(int year1, int year2) {int min = Math.min(year1, year2);int max = Math.max(year1, year2);int sum = 0;for (int i = min; i < max; i++)sum += getYearDays(i);return sum;}static int getYearDays(int year) {return isLeapYear(year)? 366: 365;}static int getDaysBetweenFirstDay(int year, int month, int day) { int sum = 0;for (int i = 1; i < month; i++)sum += getMonthDays(year, i);sum += day - 1;return sum;}static int getMonthDays(int year, int month) {switch (month) {case 1: case 3: case 5: case 7:case 8: case 10: case 12:return 31;case 4: case 6: case 9: case 11:return 30;case 2:return isLeapYear(year)? 29: 28;}return 0;}static boolean isLeapYear(int year) {return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;}static void printYear(int year) {for (int i = 1; i <= 12; i++)printMonth(year, i);}static void printMonth(int year, int month) {System.out.print("\n\n====================== " + month + " ======================\n");System.out.print("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");int wd = getWeekDay(year, month, 1);for (int i = 0; i < wd; i++)System.out.print("\t");int lastday = getMonthDays(year, month);for (int i = 1; i <= lastday; i++) {System.out.printf("%3d\t", i);if (wd++ % 7 == 6 && i != lastday)System.out.println();}}public static void main(String [] args) {System.out.print("Input a year: ");Scanner scanner = new Scanner(System.in);int year = Integer.parseInt(scanner.nextLine());printYear(year);}}五、操作方法当进入用户界面的时候,可以在年月日栏里分别输入年份月份和日,并能自己显示出相对应的农历以及星期。

用Java程序编写万年历程序的设计报告

用Java程序编写万年历程序的设计报告

用Java程序编写万年历程序的设计报告用Java程序编写万年历程序的设计报告1. 引言本文档是关于设计和实现使用Java编写的万年历程序的报告。

万年历是一种常见的日历工具,可以显示指定年份和月份的日历信息。

本报告将介绍所使用的开发工具和环境、程序设计的架构和实现细节,以及可能的改进和扩展方向。

2. 开发工具和环境本项目的开发工具和环境如下:- 开发工具:使用Java开发的集成开发环境(IDE)Eclipse 进行代码编写和调试;- 编程语言:使用Java编程语言进行程序设计和开发;- 版本控制:使用Git进行版本控制和团队协作;- 协作工具:使用GitHub进行代码托管和团队协作。

3. 程序设计架构万年历程序的设计采用了MVC(模型-视图-控制器)架构。

MVC 架构的目的是解耦程序的数据逻辑(模型)、用户界面(视图)和用户输入与反馈(控制器),实现更可扩展和可维护的代码结构。

3.1 模型(Model)在万年历程序中,模型负责处理日历数据的计算和逻辑。

它包括以下几个关键组件:- Calendar类:封装了表示日历的数据结构和相关操作方法。

提供了获取指定年份和月份的日历数据的方法,如获取日期、星期几等信息;- DateUtil类:提供了一些与日期计算和格式化有关的工具方法,如计算某月总共有多少天、计算某天是星期几等。

3.2 视图(View)视图负责用户界面的展示和交互。

在万年历程序中,视图由一个图形用户界面(GUI)组成,用户可以通过界面输入需要显示的年份和月份来获取日历数据。

GUI的设计可以使用Swing或JavaFX等工具。

3.3 控制器(Controller)控制器负责处理用户界面与模型之间的交互。

在万年历程序中,控制器包括以下几个组件:- MnWindow类:负责创建和管理主窗口界面,以及用户交互事件的处理;- CalendarController类:作为控制器的核心,负责调用模型的方法获取日历数据,并更新视图。

C语言万年历设计报告

C语言万年历设计报告

千里之行,始于足下。

C语言万年历设计报告以下是一个关于C语言万年历设计报告的例子,共计约:设计报告:C语言万年历1. 引言万年历是一种用来显示特定年份日历的工具。

本设计报告将介绍一个使用C语言编写的万年历程序,它可以接受用户输入的年份,并显示该年份的日历。

2. 设计目标本程序的主要设计目标是实现以下功能:- 接受用户输入的年份。

- 检查年份的有效性。

- 显示该年份的万年历。

3. 设计思路万年历程序的设计思路如下:- 首先,接受用户输入的年份。

这可以通过使用C语言的scanf函数等方法来实现。

- 然后,检查年份的有效性。

年份必须大于0且小于或等于当前年份。

这可以通过使用C语言的条件语句来实现。

- 接下来,确定年份的第一天是星期几。

这可以通过查找该年份第一天距离已知星期几(比如星期一)的天数来实现。

- 然后,确定该年份每个月的天数。

根据已知的规则(比如闰年规则),计算每个月的天数。

- 最后,根据以上信息,显示该年份的日历。

可以使用C语言的循环语句和格式化输出函数来实现。

第1页/共2页锲而不舍,金石可镂。

4. 主要函数本程序将包含以下主要函数:- int isLeapYear(int year):判断给定年份是否是闰年。

根据已知的闰年规则进行计算,并返回一个布尔值。

- int getFirstDayOfWeek(int year):确定给定年份的第一天是星期几。

根据该年份的第一天距离已知星期几的天数进行计算,并返回一个整数(代表星期几)。

- void printCalendar(int year):根据给定年份的信息,打印该年份的日历。

5. 测试和调试在开发过程中,可以使用一些测试和调试方法来确保程序的正确性和稳定性。

比如:- 输入测试:使用各种不同类型的数据(正常、边界和异常)进行测试,确保程序在各种情况下都能正常工作。

- 边界测试:测试该程序处理边界条件的能力,比如闰年、非闰年、最小年份、最大年份等。

万年历程序设计报告

万年历程序设计报告

电机学院课程设计2014~2015学年第一学期课程名称程序设计设计题目万年历院(系)高职学院专业计算机应用技术班级计算机1401 学号36学生茅晔豪设计时间2015.1.12指导教师唐政提交日期2015.1.15目录1. 选题的意义 (2)2. 总体设计 (2)2.1 系统分析 (2)2.2 系统概述 (2)2.3 系统的构成 (2)2.4 各模块的功能 (2)3. 系统的流程图 (3)4. 功能测试........................................................... 4-105. 课程设计小结 (11)参考文献 (11)附录:源代码清单 ............................................... 12-15 课程设计评语及成绩评定记录 . (16)1. 选题的意义(1)通过万年历的设计,使我们掌握软件开发过程的问题分析、系统设计、程序编写、测试等基本方法。

(2)通过万年历的设计,熟练掌握C++中的分支、循环、数组、函数、文件操作等应用。

2. 总体设计2.1系统分析2.2系统概述:该程序可以实现系统当前日期所在月份的日历显示功能,日期查询功能,程序的初始日期设定功能,还有把给定年份的万年历输出到txt文档中的功能。

2.3系统的构成:1日历查询功能2日期查询、闰年判断功能。

3支持通过键盘的操作调整年份、月份、和日期。

并显示调整后的日期。

4 输入任意年份,将该年份每月的日历输入文件。

2.4各模块的功能及分析1、定义全局变量及数组。

2、程序共由十一个函数组成,其功能分别为:a.showtime()显示系统日期所在月份的日历。

b.refer()查询日期并显示所在年份是否为闰年。

c.setdate()设定系统的初始日期。

d.print()打印指定年份的每月日历并写入文件。

e.nowday()提取系统所在日。

f.nowmoth()提取系统所在月。

万年历C程序设计报告

万年历C程序设计报告

C语言课程设计报告一、设计目标设计一个C语言程序(万年历系统),具体要求:模仿生活中的挂历设计一个C语言程序,由键盘输入一个日期(年月日)对其进行如下处理:主要功能:1、调用计算机的系统日期。

2、输出本年中该月份的日历,并能查看该月份前后月份的日历。

3、通过函数输出输入日期是星期几。

4、通过函数判断输出输入日期是否为特殊节日。

二、总体设计1、程序设计组成框图2、程序流程图三、详细设计 ( 流程图见附录 )1、功能函数f ( )——本函数由设计函数的功能:调用系统当前日期。

函数的入口:从main()按顺序进入该函数。

函数调用关系:被主函数调用。

在文中无返回值的空值void函数。

函数的出口:在主函数中按顺序执行后自动跳出,继续执行主函数。

2、功能函数f1( )——本函数由设计函数的功能:显示一个月的天数及对应星期。

函数的入口:从main()的switch()开关结构中进入,即choice的值为1时进入该函数。

函数调用关系:被主函数调用。

由switch()开关结构中进入,并在文中无返回值的空值void函数。

函数的出口:当程序执行提示语“printf("1-查看上一月\n 2-查看下一月\n 3-返回上一级\n");”的时候,对用户的操作进行提示,如果用户选择了按“1或2”键,则用户选择了继续该函数,如果用户选择了按“3”键,将结束该函数,返回主函数main(),继续执行主函数。

3、功能函数f2()——本函数由设计函数的功能: 输入一个日期,输出它并输出对应的星期。

函数的入口:程序从main()的开关1结构中进入,即按2时,开始进入该函数,进入函数后,按提示输入所查询的日期。

函数调用关系:被主函数调用。

由开关2结构中进入,并在文中无返回值的空值void函数。

函数的出口:当输出排序结果用printf()标准输出到屏幕上,然后结束该函数,而执行主函数main()中“goto”跳出开关2函数,继续执行其他功能。

C语言万年历设计报告

C语言万年历设计报告

千里之行,始于足下。

C语言万年历设计报告设计报告:C语言万年历1. 引言本文旨在介绍一个基于C语言开发的万年历设计,并对其设计思路、代码细节、实现效果进行具体的阐述。

万年历是一种依据历法规章,能够显示任意年份任意月份的日历的工具。

在本设计中,我们使用C语言来编写一个简易的万年历程序,具备显示任意年份任意月份的日历、日期查询等功能。

2. 设计思路2.1 数据结构设计在设计万年历程序时,我们需要设计适用于存储日期信息的数据结构。

考虑到日历是依据年份和月份来呈现的,我们可以使用结构体来存储日期的年、月、日信息。

具体数据结构如下:```struct Date {int year;int month;int day;};```2.2 星期计算算法第1页/共3页锲而不舍,金石可镂。

在日历中,我们需要依据给定日期计算出其对应的星期。

这里我们接受Zeller公式来计算星期。

Zeller公式可以依据给定的年、月、日计算出一个对应的星期数。

具体公式如下:```h = (q + ((13*(m+1))/5) + K + (K/4) + (J/4) - (2*J)) % 7```其中,h是一个星期的编号,0代表星期一,1代表星期二,以此类推。

2.3 日历显示算法对于日历的显示,我们需要依据给定的年份和月份计算出该月的天数,并打印出日历表。

具体算法如下:- 首先,依据给定的年份和月份,计算出该月的天数。

- 然后,依据给定年份、月份、星期计算公式,计算出该月的第一天是星期几。

- 接下来,依据计算结果,打印出日历表。

3. 主要函数设计在C语言万年历程序的设计中,我们主要需要设计以下几个函数:3.1 输入函数该函数用于接收用户输入的年份和月份,并进行基本的输入验证,确保输入的年份和月份在合理范围内。

千里之行,始于足下。

3.2 星期计算函数该函数依据给定的年份、月份、日期,计算出对应的星期数,并返回星期数。

3.3 天数计算函数该函数依据给定的年份和月份,计算出该月的天数,并返回天数。

万年历java课程设计报告

万年历java课程设计报告

万年历java课程设计报告一、课程目标知识目标:1. 让学生掌握Java语言中日期处理的基本知识,理解万年历的原理和实现方式;2. 使学生了解并运用面向对象编程思想,设计合理的类和对象,实现万年历功能;3. 帮助学生理解数组、循环、条件判断等基础语法在万年历项目中的应用。

技能目标:1. 培养学生运用Java语言编写程序解决实际问题的能力,特别是日期计算和处理;2. 培养学生运用面向对象编程思想,进行模块化设计和编程;3. 培养学生运用调试工具和技巧,找出并解决程序中的错误。

情感态度价值观目标:1. 培养学生积极探究、合作学习的态度,增强团队协作能力;2. 培养学生面对编程困难时,勇于挑战、持续改进的精神;3. 增强学生的创新意识,激发对计算机编程的兴趣和热情。

课程性质:本课程为计算机科学与技术专业的Java语言程序设计课程的一部分,旨在通过实际项目万年历的设计与实现,使学生掌握Java编程的基本知识和技能。

学生特点:学生处于高中年级,已经具备一定的编程基础,对Java语言有一定的了解,但对于面向对象编程和实际项目开发的经验较少。

教学要求:结合学生特点,本课程要求教师采用任务驱动的教学方法,将万年历项目拆解为多个小任务,引导学生逐步完成。

在教学过程中,注重理论与实践相结合,强调学生的实际操作和团队协作。

通过课程学习,使学生在掌握知识技能的同时,培养良好的情感态度和价值观。

最终将课程目标分解为具体的学习成果,以便进行教学设计和评估。

二、教学内容1. Java语言基础复习:回顾变量、数据类型、运算符、数组等基本概念,为编写万年历程序打下基础。

教材章节:第一章至第三章。

2. Java控制结构:介绍循环结构(for、while)、条件判断(if、switch)等,用于实现日期计算。

教材章节:第四章。

3. 面向对象编程基础:讲解类、对象、构造方法、封装等概念,指导学生设计万年历类。

教材章节:第五章。

4. Java异常处理:学习异常处理机制,提高程序的稳定性和可靠性。

万年历程序实验报告

万年历程序实验报告

万年历程序实验报告一、实验目的与要求1.实验目的:(1)能按照软件工程的思想,采用面向过程的方法开发出一个小型软件系统。

(2).在软件系统开发过程中,能综合利用一门编程语言、和软件工程二门课程的知识。

(3).通过实例使同学们掌握结构化数据流分析技术。

2.要求:(1)软件需求分析:要求做到使用结构化数据流分析技术分析课题需求,写出详细的数据流图和数据字典,数据流图的基本处理的个数不得少与5个。

(2)软件设计与编码:要求做到对上一实验的软件需求进行软件结构设计,模块数不少于四个。

然后再进行详细设计并编码。

程序要符合结构化程序的要求。

(3)软件测试和调试:要求掌握如何设计测试方案、撰写测试说明书,并掌握程序修改的常用技术。

要求对上一实验所编的程序进行测试,要分步进行,要有详细的测试说明书,要测试通过。

二、实验方案(一)软件需求分析1.需求分析:编制一个万年历程序,程序包括的功能查询具体某年某月某日是星期几,查询某一年是否闰年,打印某一年的年历。

2.根据需求画出初步的数据流图:把“万年历系统”细化,得出完整的数据流图如下:3.根据需求分析与数据流图,写出卡片式的数据字典(2)软件设计与编码1.首先进行总体设计,根据需求,系统应该划分功能模块如下:2.进行详细设计 按照需求,本系统有上图所示的三个功能模块,所以在编码设计的时候,应该就分别设计三个功能模块,三个功能模块主要就是三个分别的算法。

先定义本程序主要的几个数据项:char*month_str[]={"January","February","March","April","May","June","July","August","September","Oc tober","November","December"}; //月份的名称,在列印年历的功能时候使用到char* week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};//星期,在查询具体某天是星期几时候使用到接着就是三个算法,因为三个算法都是借鉴别人的,所以就不在这里显示了,最后在main 函数用switch 语句把三个功能组合起来。

java课程设计报告之万年历程序设计报告(1)

java课程设计报告之万年历程序设计报告(1)

目录前言 (2)1需求分析 (2)1.1需求分析 (2)1.2功能设计 (2)2.概要设计 (2)2.1程序设计思路 (2)2.2程序运行界面 (3)2.3流程图 (4)3.各模块的功能及程序说明 (4)3.1.初始化组件 (4)3.2.初始化数据 (5)3.3.绘制程序界面 (5)4.测试分析 (7)5.源程序清单 (9)6.课程设计体会 (17)参考文献 (17)前言Java的前身是Oak,它一开始只是被应用于消费性电子产品中。

后来它的开发者们发现它还可以被用于更大范围的Internet上。

1995年,Java语言的名字从Oak编程了Java。

1997年J2SE1.1发布。

1998年J2SE1.2发布,标志Java2的诞生。

十多年来,Java编程语言及平台成功地运用在网络计算及移动等各个领域。

Java的体系结构由Java语言、Java class、Java API、Java虚拟机组成。

它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。

Java 支持多线程编程,Java运行时系统在多线程同步方面具有成熟的解决方案。

Java 的平台标准有Java ME,Java SE和Java EE。

Java发展到今天,它的卓越成就及在业界的地位毋庸置疑。

目前在众多的支持Java的开发工具中主要的7有Java Development Kit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。

其中Java Development Kit 简称JDK是大多开发工具的基础。

以上的每种开发工具都有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种合适的开发工具。

1需求分析1.1需求分析本程序的要求为:1.使用图形用户界面;2.本程序能够实现日期与星期的查询。

1.2功能设计本程序要构建的万年历程序,其功能有以下几个方面:(1)通过网页形式运行,实现图形界面。

万年历应用小程序设计报告

万年历应用小程序设计报告

题目:万年历应用小程序一、题目陈述:设计一个万年历,要求具有显示年份、月份、日期的功能,与windowsXP 系统的日期与时间的界面和功能类似。

二、问题分析:万年历的界面可由内容面板类panel 和spinner 、textArea 、comboBox 等容器构成;布局可以由BorderLayout 、FlowLayout 、GridLayout 使其达到美观整齐的效果。

万年历功能的实现是通过添加相应的监听器和事件处理函数来完成的。

三、题目设计:(一)、类设计:1、 面板类CalendarDemo :嵌入显示月份的comboBox 和显示年份的spinner ,以及显示日期的textArea 。

2、 窗口类CalendarTest :镶入面板,设计窗口大小等属性,并包含主函数。

运行后显示该窗口。

3、 类与类之间的关系:(二)、界面设计:根据windows 的日期界面,利用JPanel 提供的BorderLayout 、FlowLayout ,将包含comboBox 和spinner 的panel1放在NORTH 区,包含textArea 的panel2放在CENTER 区。

CalendarDemo 类的对象panel 的titledBorder 设置为“日期”(三)、事件处理:匿名内部类事件监听器做事件处理:用comboBox实现月份变换改变日期变换的PopupMenuListener()、用spinner实现年份变换改变日期变换的ChangeListener()。

具体处理方式:(四)、主要的成员变量和成员函数:1、面板类CalculatorDemo:JComboBox comboBox;JSpinner spinner;JTextArea textArea;JPanel panel1,panel2;String[] monthsString[] date;int thisYear, thisMonth;Public void typeset() ;2、窗口类CalculatorTest:CalendarDemo panel;public static void main;四、源代码:import javax.swing.*;import java.awt.*;import javax.swing.event.*;public class CalendarDemo extends JPanel{JComboBox comboBox;JSpinner spinner;JTextArea textArea;JPanel panel1,panel2;String[] months = { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月","十月", "十一月", "十二月" };String[] date = { "日", "一", "二", "三", "四", "五", "六" };int thisYear , thisMonth;public CalendarDemo(){super(new BorderLayout());setBorder(BorderFactory.createTitledBorder("日期"));comboBox = new JComboBox(months);spinner = new JSpinner(new SpinnerNumberModel(2006, 1980, 2099, 1));textArea = new JTextArea();panel1=new JPanel(new FlowLayout());panel2=new JPanel(new FlowLayout());panel1.add(comboBox);panel1.add(spinner);panel2.add(textArea);add(panel1,BorderLayout.NORTH);add(panel2,BorderLayout.CENTER);comboBox.setSelectedItem( "十二月");thisMonth =comboBox.getSelectedIndex()+1;comboBox.addPopupMenuListener(new PopupMenuListener() {public void popupMenuCanceled(PopupMenuEvent e) {}public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {thisMonth = comboBox.getSelectedIndex() + 1;typeset();}public void popupMenuWillBecomeVisible(PopupMenuEvent e) {}});spinner.setValue( 2006);spinner.addChangeListener(new ChangeListener() {public void stateChanged(ChangeEvent e) {thisYear = Integer.parseInt(spinner.getValue().toString());typeset();}});textArea.setBorder(BorderFactory.createLoweredBevelBorder());textArea.setEditable(false);textArea.setTabSize(3);typeset();}public void typeset(){textArea.setText( "");int jan,march,may,july,augest,oct,dec;int feb=28;int april,june,sept,nov;int day,days,tempdays;int i,j,num=1;jan=march=may=july=augest=oct=dec=31;april=june=sept=nov=30;i=j=0;day=days=tempdays=0;thisYear = 2006;if(thisYear%4==0){if(thisYear%100==0){ if(thisYear%400==0) feb=29;else feb=28;}else feb=29;}else feb=28;tempdays=(thisYear-1980)/4*(365*3+366)+((thisYear-1980)%4)*365+29-feb;switch (thisMonth){case 1:days=jan;day=tempdays%7;break;case 2:days=feb;day=(jan+tempdays)%7;break;case 3:days=march;day=(jan+feb+tempdays)%7 ;break;case 4:days=april;day=(jan+feb+march+tempdays)%7 ;break;case 5:days=may;day=(jan+feb+march+april+tempdays)%7 ;break;case 6:days=june;day=(jan+feb+march+april+may+tempdays)%7 ;break;case 7:days=july;day=(jan+feb+march+april+may+june+tempdays)%7 ;break;case 8:days=augest;day=(jan+feb+march+april+may+june+july+tempdays)%7 ;break;case9:days=sept;day=(jan+feb+march+april+may+june+july+augest+tempdays)%7 ;break;case10:days=oct;day=(jan+feb+march+april+may+june+july+augest+sept+tempdays)%7;break;case11:days=nov;day=(jan+feb+march+april+may+june+july+augest+sept+oct+tempdays)%7 ;break;case12:days=dec;day=(jan+feb+march+april+may+june+july+augest+sept+oct+nov+tempdays)%7 ;br eak;}for(i=0;i<7;i++)textArea.append("\t"+date[i]);textArea.append( "\n");if(day<5){ textArea.append( "\t \t ");for(i=0,j=3;i<day;i++,j++)textArea.append("\t ");}else if(day==6){textArea.append("\t ");j=2;}else j=1;for(num=1;num<=days;num++,j++){if(num<10) textArea.append(" \t" + num);else textArea.append("\t" + num);if((j!=0)&&((j%7)==0)) textArea.append("\n");}textArea.append("");}}import java.awt.*;import javax.swing.*;public class CalendarTest extends JFrame{CalendarDemo panel;public CalendarTest(){super("Karen's Calendar");Container contentPane = getContentPane();panel = new CalendarDemo();contentPane.add(panel);setBounds(300, 200, 295, 240);setResizable(false);setVisible(true);}public static void main(String[] args){CalendarTest calFr = new CalendarTest();calFr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}五、收获体会:1、写监听器类的时候要覆盖它的全部父类函数,因为它是抽象类2、学会了使用java自带的库函数3、类与类之间数据通过类对象的传递4、尝试了创建事件监听器的4种方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:万年历应用小程序一、题目陈述:设计一个万年历,要求具有显示年份、月份、日期的功能,与windowsXP 系统的日期与时间的界面和功能类似。

二、问题分析:万年历的界面可由内容面板类panel 和spinner 、textArea 、comboBox 等容器构成;布局可以由BorderLayout 、FlowLayout 、GridLayout 使其达到美观整齐的效果。

万年历功能的实现是通过添加相应的监听器和事件处理函数来完成的。

三、题目设计:(一)、类设计:1、 面板类CalendarDemo :嵌入显示月份的comboBox 和显示年份的spinner ,以及显示日期的textArea 。

2、 窗口类CalendarTest :镶入面板,设计窗口大小等属性,并包含主函数。

运行后显示该窗口。

3、 类与类之间的关系:(二)、界面设计:根据windows 的日期界面,利用JPanel 提供的BorderLayout 、FlowLayout ,将包含comboBox 和spinner 的panel1放在NORTH 区,包含textArea 的panel2放在CENTER 区。

CalendarDemo 类的对象panel 的titledBorder 设置为“日期”(三)、事件处理:匿名内部类事件监听器做事件处理:用comboBox实现月份变换改变日期变换的PopupMenuListener()、用spinner实现年份变换改变日期变换的ChangeListener()。

具体处理方式:(四)、主要的成员变量和成员函数:1、面板类CalculatorDemo:JComboBox comboBox;JSpinner spinner;JTextArea textArea;JPanel panel1,panel2;String[] monthsString[] date;int thisYear, thisMonth;Public void typeset() ;2、窗口类CalculatorTest:CalendarDemo panel;public static void main;四、源代码:import javax.swing.*;import java.awt.*;import javax.swing.event.*;public class CalendarDemo extends JPanel{JComboBox comboBox;JSpinner spinner;JTextArea textArea;JPanel panel1,panel2;String[] months = { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月","十月", "十一月", "十二月" };String[] date = { "日", "一", "二", "三", "四", "五", "六" };int thisYear , thisMonth;public CalendarDemo(){super(new BorderLayout());setBorder(BorderFactory.createTitledBorder("日期"));comboBox = new JComboBox(months);spinner = new JSpinner(new SpinnerNumberModel(2006, 1980, 2099, 1));textArea = new JTextArea();panel1=new JPanel(new FlowLayout());panel2=new JPanel(new FlowLayout());panel1.add(comboBox);panel1.add(spinner);panel2.add(textArea);add(panel1,BorderLayout.NORTH);add(panel2,BorderLayout.CENTER);comboBox.setSelectedItem( "十二月");thisMonth =comboBox.getSelectedIndex()+1;comboBox.addPopupMenuListener(new PopupMenuListener() {public void popupMenuCanceled(PopupMenuEvent e) {}public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {thisMonth = comboBox.getSelectedIndex() + 1;typeset();}public void popupMenuWillBecomeVisible(PopupMenuEvent e) {}});spinner.setValue( 2006);spinner.addChangeListener(new ChangeListener() {public void stateChanged(ChangeEvent e) {thisYear = Integer.parseInt(spinner.getValue().toString());typeset();}});textArea.setBorder(BorderFactory.createLoweredBevelBorder());textArea.setEditable(false);textArea.setTabSize(3);typeset();}public void typeset(){textArea.setText( "");int jan,march,may,july,augest,oct,dec;int feb=28;int april,june,sept,nov;int day,days,tempdays;int i,j,num=1;jan=march=may=july=augest=oct=dec=31;april=june=sept=nov=30;i=j=0;day=days=tempdays=0;thisYear = 2006;if(thisYear%4==0){if(thisYear%100==0){ if(thisYear%400==0) feb=29;else feb=28;}else feb=29;}else feb=28;tempdays=(thisYear-1980)/4*(365*3+366)+((thisYear-1980)%4)*365+29-feb;switch (thisMonth){case 1:days=jan;day=tempdays%7;break;case 2:days=feb;day=(jan+tempdays)%7;break;case 3:days=march;day=(jan+feb+tempdays)%7 ;break;case 4:days=april;day=(jan+feb+march+tempdays)%7 ;break;case 5:days=may;day=(jan+feb+march+april+tempdays)%7 ;break;case 6:days=june;day=(jan+feb+march+april+may+tempdays)%7 ;break;case 7:days=july;day=(jan+feb+march+april+may+june+tempdays)%7 ;break;case 8:days=augest;day=(jan+feb+march+april+may+june+july+tempdays)%7 ;break;case9:days=sept;day=(jan+feb+march+april+may+june+july+augest+tempdays)%7 ;break;case10:days=oct;day=(jan+feb+march+april+may+june+july+augest+sept+tempdays)%7;break;case11:days=nov;day=(jan+feb+march+april+may+june+july+augest+sept+oct+tempdays)%7 ;break;case12:days=dec;day=(jan+feb+march+april+may+june+july+augest+sept+oct+nov+tempdays)%7 ;br eak;}for(i=0;i<7;i++)textArea.append("\t"+date[i]);textArea.append( "\n");if(day<5){ textArea.append( "\t \t ");for(i=0,j=3;i<day;i++,j++)textArea.append("\t ");}else if(day==6){textArea.append("\t ");j=2;}else j=1;for(num=1;num<=days;num++,j++){if(num<10) textArea.append(" \t" + num);else textArea.append("\t" + num);if((j!=0)&&((j%7)==0)) textArea.append("\n");}textArea.append("");}}import java.awt.*;import javax.swing.*;public class CalendarTest extends JFrame{CalendarDemo panel;public CalendarTest(){super("Karen's Calendar");Container contentPane = getContentPane();panel = new CalendarDemo();contentPane.add(panel);setBounds(300, 200, 295, 240);setResizable(false);setVisible(true);}public static void main(String[] args){CalendarTest calFr = new CalendarTest();calFr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}五、收获体会:1、写监听器类的时候要覆盖它的全部父类函数,因为它是抽象类2、学会了使用java自带的库函数3、类与类之间数据通过类对象的传递4、尝试了创建事件监听器的4种方法。

相关文档
最新文档