Java课程设计万年历

合集下载

万年历java课程设计说明书

万年历java课程设计说明书

JA V A程序设计课程设计(论文)题目:万年历院(系):软件学院专业班级:计算机信息管理051班学号:学生姓名:指导教师:教师职称:起止时间:程序设计专题(报告)任务及评语目录第1章课程设计的目的与要求 (1)1.1 课程设计目的 (1)1.2 课程设计的实验环境 (1)1.3 课程设计的预备知识 (1)1.4 课程设计要求 (1)第2章课程设计内容 (2)2.1课程设计题目 (2)2.2课程设计整体设计说明 (2)2.2.1课程设计内容 (2)2.2.2程序中所用类说明 (3)2.2.3程序中使用方法的说明 (3)2.2.4异常处理说明 (4)2.2.5程序运行效果及存在的问题 (4)2.3程序部分源代码及注释 (5)第3章课程设计总结 (12)参考资料 (13)第1章课程设计的目的与要求1.1 课程设计目的《JA V A程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。

实践教学环节是必不可少的一个重要环节。

本课程的程序设计专题实际是计算机信息管理专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JA V A程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

1.2 课程设计的实验环境硬件要求能运行Windows 9.X操作系统的微机系统。

JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。

1.3 课程设计的预备知识熟悉JAVA语言及ECLIPSE开发工具。

1.4 课程设计要求按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。

要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JA V A程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。

java 课程设计 万年历

java 课程设计  万年历

沈阳工程学院课程设计设计题目:万年历系别信息工程系班级计算机C131 学生姓名姜鹏宫明辉张祥李星辰学号36 35 30 38指导教师王素芬、曾祥萍职称副教授、讲师起止日期:2015年7月13日起——至2015年7月24日止沈阳工程学院课程设计任务书课程设计题目:万年历系别信息工程系班级学生姓名学号指导教师职称副教授、讲师课程设计进行地点:实训F任务下达时间:2015 年7 月 6 日起止日期:2015 年7 月13 日起——至2015年7月24 日止系部主任2015年7月6 日批准1.设计的原始资料及依据查阅有关数据库设计、JSP程序设计、面向对象程序设计等资料,进一步加深对课程内容的理解,利用程序设计的基本思想进行程序的开发,进一步掌握编程方法和技巧,提高学生用程序的思想来解决实际问题的能力。

本课程设计主要涉及到需求分析、总体设计、详细设计以及底层数据库设计几个主要环节。

2.设计的主要内容及要求(1)写出系统的需求分析。

(2)写出数据库设计。

(3)写出系统的详细设计及各模块的功能。

(4)编写代码,开发系统。

3.对设计说明书撰写内容、格式、字数的要求⑴学生应撰写的内容为:中文摘要和关键词、目录、正文、参考文献等。

课程设计说明书(论文)的结构及各部分内容要求可参照《沈阳工程学院毕业设计(论文)撰写规范》执行。

应做到文理通顺,内容正确完整,书写工整,装订整齐。

⑵装订格式封面、任务书、成绩评审意见表、摘要和关键词、目录、正文、结论、致谢、参考文献。

⑶课程设计说明书(论文)是体现和总结课程设计成果的载体,一般不应少于3000字。

打印时采用A4纸,页边距均为20mm,正文采用宋体小四号字,行间距18磅。

文中大标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字,三级节标题采用黑体小四号字,表题与图题采用宋体五号字。

4. 设计完成后应提交成果的种类、数量、质量等方面的要求⑴课程设计任务书⑵课程设计报告⑶设计成品(光盘)5.时间进度安排6.主要参考资料(文献)[1] 耿祥义.JA V A2 实用教程.北京:清华大学出版社,2006[3] 耿祥义.JA V A程序设计精编教程.北京:清华大学出版社,2010[4] 王珊.数据库系统概论.北京:高等教育出版社,2000[5]张玲.软件工程.北京:清华大学出版社,2004沈阳工程学院面向对象程序设计课程设计成绩评定表系(部):信息学院班级:学生姓名:沈阳工程学院面向对象程序设计课程设计成绩评定表系(部):信息学院班级学生姓名:沈阳工程学院面向对象程序设计课程设计成绩评定表系(部):信息学院班级:学生姓名:沈阳工程学院面向对象程序设计课程设计成绩评定表系(部):信息学院班级:学生姓名:沈阳工程学院课程设计报告摘要(空1行)(新起一页)摘要(空1行)下列各排版样式中的空行指采用小4号汉字、单倍行距时的空行。

JAVA课程设计 万年历 源代码

JAVA课程设计 万年历 源代码

测试用例设计:根据 需求文档和功能描述, 设计出能够覆盖所有 功能的测试用例
测试工具:使用JUnit 等测试框架进行单元 测试,使用Selenium 等工具进行UI测试
测试结果分析:根 据测试结果,分析 代码存在的问题, 并进行修改和优化
集成测试:验证各个模块之间的接口是否正确,数据传输是否正常 性能测试:测试系统的响应时间、吞吐量、资源利用率等性能指标
提醒功能:用户可以设置提醒功能,在节日或假期到来之前,系统会自动提醒用户。
删除事件:用户可以删除不 再需要的事件
编辑事件:用户可以对已添加 的事件进行编辑,如修改事件 名称、时间等
添加事件:用户可以在万年历 中添加新的事件,如生日、纪 念日等
查询事件:用户可以查询特定 日期或时间段内的事件,如查
界面显示:万年历界面将显示年、 月、日、星期等信息,用户可以通 过点击相应的按钮来切换日期。
添加标题
添加标题
添加标题
添加标题
系统响应:当用户输入日期后,系统 将根据输入的日期显示相应的万年历 信息,包括年、月、日、星期等信息。
用户操作:用户可以通过点击相应 的按钮来切换日期,系统将根据用 户的操作显示相应的万年历信息。
添加标题
界面设计:简洁明了,易于阅读
添加标题
添加标题
交互性:用户可以选择查看不同日 期的日历信息
功能描述:在万年历中,用户可以选择标注节日和假期,以便于查看和提醒。
节日标注:用户可以在万年历中设置自己喜欢的节日,如春节、中秋节等,系统会自动 标注这些节日。
假期标注:用户可以在万年历中设置自己的假期,如年假、病假等,系统会自动标注这 些假期。
,a click to unlimited possibilities

Java万年历课程设计报告

Java万年历课程设计报告

杭州师范大学钱江学院课程设计题目万年历学院钱江学院专业信电分院计算机科学与技术班级计算机1101姓名崔伊平指导教师王李冬2013 年9 月20 日目录一.概述 (1)二.总体方案设计 (2)三.详细设计 (3)四.最终输出 (7)五.课程设计总结 (8)参考文献 (9)一、概述1.课程设计的目的通过显示年日历程序的设计,培养学生综合利用java语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力。

通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《java语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了java语言的好处和其可用性!2.课程设计的要求2.1输入查询的年份与月份,单击“更新”按扭,则可得到相应的日历。

本实验是对图形用户界面,布局管理器的综合运用。

要掌握APPLET容器中添加组件的方法,理解JAVA 的事件处理机制,编写独立的运行窗口。

2.2 输出形式使用独立的运行窗口进行显示。

界面主要由两部分组成——查询输入部分和结果显示部分。

查询输入部分包括两个文本域,一个用于输入年份:一个用于选择月份:一个更新按扭,用来触发查询事件。

二总体方案设计1.程序开发环境a.开发环境:eclipseb.系统环境:windows xp/7c.设计工具:Microsoft office 20032.整体流程图图1 流程图3.功能模块图图2 结构图三.详细设计3.1导入的包import java.applet.*;import java.awt.*;import java.awt.event.*;import java.util.*;3.2Applet的初始化public void init(){Label L1 = new Label("输入年份");Label L2 = new Label("输入月份");TextField F1 = new TextField(5);TextField F2 = new TextField(5);Button B1 = new Button("查询");int arr = new int[12];add(L1);add(F1);add(L2);add(F2);add(B1);Date date = new Date();F1.setText(String.valueOf(date.getYear() + 1900));F2.setText(String.valueOf(date.getMonth() + 1));B1.addActionListener(this);arr[0] = arr[2] = arr[4] = arr[6] = arr[7] = arr[9] = arr[11] = 31; arr[3] = arr[5] = arr[8] = arr[10] = 30;date.setDate(1);//设置每月第一天var = date.getDay();//得到每月最后一天}3.3监听器public void actionPerformed(ActionEvent e) {int x = Integer.parseInt(F1.getText()), i = Integer.parseInt(F2.getText()) - 1, s = 0;if(F1.getText().isEmpty()||F2.getText().isEmpty()){JOptionPane.showMessageDialog(null,"输入不能为空!");}Date date = new Date();date.setYear(x - 1900);date.setMonth(i);date.setDate(1);var = date.getDay();repaint();}3.3paint()public void paint(Graphics g) {int xpos, ypos;//arr[0] = arr[2] = arr[4] = arr[6] = arr[7] = arr[9] = arr[11] = 31; //arr[3] = arr[5] = arr[8] = arr[10] = 30;int x = Integer.parseInt(F1.getText()), i = Integer.parseInt(F2.getText()) - 1;if ((x % 4 == 0 && x % 100 != 0) || (x % 400 == 0))arr[1] = 29;elsearr[1] = 28;g.drawString("星期一", 50, 50);g.drawString("星期二", 100, 50);g.drawString("星期三", 150, 50);g.drawString("星期四", 200, 50);g.drawString("星期五", 250, 50);g.drawString("星期六", 300, 50);g.drawString("星期日", 350, 50);ARR = new String[arr[i]];int j = 0, k = 1;while (k <= arr[i]) {ARR[j] = String.valueOf(k);//获得每个月日期k ++;j ++;}int line = 0;for (int m = 0 ; m < ARR.length ; m ++) { //设置日期显示的位置ypos = 50 + 50 * (line + 1);xpos = (var * 50 + 50 * (m % 7)) % 350;if (xpos == 0) {xpos = 350;line ++;}g.drawString(ARR[m], xpos, ypos);}}}四.最终输出1.输入年月界面2.显示界面4.输入为空情况五.课程设计总结在最初设计这个程序的时候走了不少弯路,一开始对Applet程序没有深入理解,就把初始化部分写到构造函数里去了,后来在老师的提醒下,自己修改过来了。

java课程设计任务书万年历

java课程设计任务书万年历

课程设计(论文)任务书软件学院学院_______________________________ 专业_______________________ 班一、课程设计(论文)题目 ____________________________________________________________二、课程设计(论文)工作自2012 年12月_2£日起至2012年12月_28_日止。

三、课程设计(论文)地点:软件学院实训中心四、课程设计(论文)内容要求:1 •本课程设计的目的______________________________________________________________(1)掌握Java语言的程序设计方法;( 2)理论联系实际,进一步提高学生的软件开发技术;( 3)培养学生分析、解决问题的能力;( 4)提高学生实践论文撰写能力。

2 •课程设计的任务及要求1 )课程设计任务:(1) 设计一个万年历系统,能查看日期。

___________________________________________(2) 能查任意一年任意一月的日期。

_______________________________________________(3) 背景显示当前年月。

_________________________________________________________ 2) 创新要求:(1)月份查看使用下拉菜单。

(2)查看框可随意拉大拉小,背景显示当前的年月。

__________________________________3) 课程设计论文编写要求___________________________________________________________(1)课程设计任务及要求____________________________________________________________(2 )设计思路--工作原理、功能规划(3)详细设计---数据分析、算法思路、类设计、功能实现(含程序流程图、主要代码及注释)、界面等。

JAVA课程设计--基于JAVA的万年历设计与实现

JAVA课程设计--基于JAVA的万年历设计与实现

JAVA课程设计--基于JAVA的万年历设计与实现Java课程设计报告:万年历课程设计题目:万年历指导老师:**********学生姓名:*********专业:**********学号:*******1.课程设计目的本学期我们研究了Java语言,它是当今世界最流行的开发语言之一,具有面向对象、跨平台、分布应用等特点。

为了巩固所学知识,锻炼学生熟练应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。

本次课程设计要求我们利用已学的Java知识,编辑一个电子万年历,通过自主研究和实践,将理论变成实践,将知识真正学以致用。

2.需求分析2.1 本程序要求本程序要使用图形用户界面,能够实现日期与星期查询,同时显示此时的时间。

2.2 功能设计本程序要构建万年历程序,其功能如下:1) 通过窗口形式运行,实现界面功能;2) 以月历的形式来显示日期与星期;3) 为用户提供年份与月份的下拉形式菜单,选择年份与月份;4) 同时显示查看时的时刻。

3.课程设计的基本算法在Java程序中,通过定义中英文字符数组来存储星期信息,用于转换显示。

同时,使用Date类和GregorianCalendar 类来获取日期和时间信息,实现万年历的功能。

以上是本次Java课程设计的基本内容和算法,通过此次实践,我们巩固了Java语言的基本知识,掌握了JDK、JCreator等开发工具的运用,拓宽了常用类库的应用,对Java这门课程有了更深的了解和认识。

public class DateUtil {private static final String[] stringWeekEn = {"Sun"。

"Mon"。

"Tue"。

"Wed"。

"Thu"。

"Fri"。

"Sat"};private static final String[] stringMonthEn = {"Jan"。

JAVA万年历系统课程设计报告附源码

JAVA万年历系统课程设计报告附源码

2013-2014学年第二学期《面向对象程序设计》课程设计报告题目:万年历系统专业:计算机科学与技术班级::学号:指导教师:成绩:计算机与信息工程系2014年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对关键代码加以分析说明 (8)4 设计结果与分析 (14)4.1程序调试的结果 (14)4.2程序设计分析 (14)5 小结 (15)致 (16)参考文献 (17)源程序 (18)1 设计容及要求1.1设计容万年历,实际上就是记录一定时间围(比如100年或更多)的具体阳历或阴历的日期的年历,方便有需要的人查询使用。

在我设计的万年历中主要有:(1)使用图形用户界面来查询用用户所需的日期信息,符合日常软件使用规。

(2)按月份查询,实现了显示查询1901~2100年某月所有日期的阴阳历对照。

(3)并且添加了重大节日与星座等信息,界面采用日常的星期与月份结合的格式,方便查看与使用。

(4)编写万年历的课程设计,是为了使同学们更加了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。

为后续各门计算机课程的学习和毕业设计打下坚实基础。

1.2设计任务及具体要求利用JAVA语言编写的万年历系统采用了多种JAVA语句来实现多种功能。

用户可以通过本程序的applet运行界面来查找一整年某月的农历和阳历,可以查找用户所想了解的某一天具体为星期几,并且可以看到一些重大节日的具体时间。

要求:满足设计万年历系统的目的,即当用户查询年份与月份时,系统就要将这一年的某一月份的阴历与阳历全部显示出来,并且附带这一月份的重大节日。

当用户随意改动年份或月份时系统自动显示与星期对应的日期。

Java超级万年历课程设计

Java超级万年历课程设计
2.2.1自定义类说明
(1) ClockAction类
作用:获取当前下拉列表中所选择的信息
实现的接口:ActionListener
ActionListener用于接收操作事件的侦听器接口。使用该类创建的对象可使用组件的addActionListener方法向该组件注册。在发生操作事件时,调用该对象的actionPerformed方法。ActionEvent指示发生了组件定义的动作的语义事件。当特定于组件的动作(比如被按下)发生时,由组件生成此高级别事件。事件被传递给每一个ActionListener对象,这些对象是使用组件的addActionListener方法注册的,用以接收这类事件。
2.2概要设计
本程序涉及三个类,MainFrame为显示日期部分的类,是程序中的主类,ClockAction
是对所要查询的年份及其月份进行选择的类,Clock是对当前时间进行显示的类,位与整个界面的底部,程序运行时,只要运行MainFrame即可显示出日期以及时间的详细信息。以下是对这三个类的具体说明。
//得到当前所选年份
c_year = Integer.parseInt(com1.getSelectedItem().toString());
//得到当前月份,并减1,计算机中的月为0-11
c_month = Integer.parseInt(com2.getSelectedItem().toString())-1;
2.设计方案论证
2.1需求分析
本次课程设计是编写一个万年历程序,主要目的是加强对Java的实际运用,了解图形用户界面的基本组件窗口、按纽(JButton)、标签(JLabel)、下拉表组件(JComboBox)、文本框(TextBox)、选择框、查询事件的处理,菜单的设计还有日期的计算等的使用方法,了解如何使用布局管理器对组件进行管理,以及如何使用Java的事件处理机制。

java课程设计报告万年历程序设计报告

java课程设计报告万年历程序设计报告

JAVA程序设计目录目录 (1)前言 (1)1需求分析 (2)2.概要设计 (3)3.各模块的功能及程序说明 (5)4.测试分析 (13)5.源程序清单 (13)6.课程设计体会 (22)前言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,uilder,JDeveloper和Eclipse等。

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

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

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

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

〔2〕能以月历形式显示日期与星期。

〔3〕支持用户自己输入年份,并提供月份的下拉形式菜单来选择月份。

〔4〕通过点击“更新〞来刷新日历。

2.概要设计2.1程序设计思路1. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。

万年历Java课程程序设计

万年历Java课程程序设计

Java课程设计报告题目:万年历班级:姓名/学号:指导教师:完成时间:2014年4月21日题目内容本程序的要求为:1.使用图形用户界面;2.本程序能够实现日期与星期的查询功能设计:(1)能以月历形式显示日期与星期。

(2)支持用户自己输入年份,并提供月份的下拉形式菜单来选择月份。

(3)通过点击“更新”来刷新日历。

设计分析1(1). 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。

然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。

(2). 输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若是7,则为星期日。

(3). 算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。

2流程图各模块的功能及程序说明1.初始化组件importjava.applet.Applet; importjava.awt.*; importjava.util.*;2.初始化数据public class CalendarApplet extends Applet{static final int TOP = 70; //顶端距离static final int CELLWIDTH=50,CELLHEIGHT = 30; //单元格尺寸static final int MARGIN = 3; //边界距离static final int FEBRUARY = 1;TextFieldtfYear = new TextField("2004", 5); //显示年份的文本域Choice monthChoice = new Choice(); //月份选择下拉框Button btUpdate = new Button("更新"); //更新按钮GregorianCalendar calendar=new GregorianCalendar(); //日历对象Font smallFont = new Font("TimesRoman", Font.PLAIN, 15); //显示小字体Font bigFont = new Font("TimesRoman", Font.BOLD, 50); //显示大字体String days[] = {"星期日", "星期一", "星期二", "星期三","星期四", "星期五", "星期六"};String months[] = {"一月", "二月", "三月", "四月","五月", "六月", "七月", "八月", "九月","十月", "十一月", "十二月"};intdaysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //每个月的天数intsearchMonth,searchYear; //查询的年份及月份3.绘制程序界面public void init(){setBackground(Color.white); //设置背景颜色searchMonth = calendar.get(Calendar.MONTH); //得到系统年份searchYear = calendar.get(Calendar.YEAR); //得到系统月份add(new Label(" 年:")); //增加组件到ApplettfYear.setText(String.valueOf(searchYear)); //设置文本域文字add(tfYear);add(new Label(" 月:"));monthChoice.setFont(smallFont); //设置月份选择下拉框的显示字体for (inti = 0; i< 12; i++) {monthChoice.addItem(months[i]); //增加下拉框选项}monthChoice.select(searchMonth); //设置下拉框当前选择项add(monthChoice);add(btUpdate);intcomponentCount=this.getComponentCount(); //得到Applet中的组件数量for (inti=0;i<componentCount;i++){getComponent(i).setFont(smallFont); //设置所有组件的显示字体}}设计分析原程序packagecom.exem;importjava.applet.Applet;importjava.awt.*;importjava.util.*;public class final_text extends Applet{static final int TOP = 70; //顶端距离static final int CELLWIDTH=50,CELLHEIGHT = 30; //单元格尺寸static final int MARGIN = 3; //边界距离static final int FEBRUARY = 1;TextFieldtfYear = new TextField("2004", 5); //显示年份的文本域Choice monthChoice = new Choice(); //月份选择下拉框Button btUpdate = new Button("更新"); //更新按钮GregorianCalendar calendar=new GregorianCalendar(); //日历对象Font smallFont = new Font("TimesRoman", Font.PLAIN, 15); //显示小字体Font bigFont = new Font("TimesRoman", Font.BOLD, 50); //显示大字体String days[] = {"星期日", "星期一", "星期二", "星期三","星期四", "星期五", "星期六"};String months[] = {"一月", "二月", "三月", "四月","五月", "六月", "七月", "八月", "九月","十月", "十一月", "十二月"};intdaysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //每个月的天数intsearchMonth,searchYear; //查询的年份及月份public void init(){setBackground(Color.white); //设置背景颜色searchMonth = calendar.get(Calendar.MONTH); //得到系统年份searchYear = calendar.get(Calendar.YEAR); //得到系统月份add(new Label(" 年:")); //增加组件到ApplettfYear.setText(String.valueOf(searchYear)); //设置文本域文字add(tfYear);add(new Label(" 月:"));monthChoice.setFont(smallFont); //设置月份选择下拉框的显示字体for (inti = 0; i< 12; i++) {monthChoice.addItem(months[i]); //增加下拉框选项}monthChoice.select(searchMonth); //设置下拉框当前选择项add(monthChoice);add(btUpdate);intcomponentCount=this.getComponentCount(); //得到Applet中的组件数量for (inti=0;i<componentCount;i++){getComponent(i).setFont(smallFont); //设置所有组件的显示字体 }}public void paint(Graphics g){FontMetricsfontMetric; //显示字体的FontMetrics对象intfontAscent;intdayPos;inttotalWidth, totalHeight; //总的宽度,高度intnumRows; //行数intxNum, yNum; //水平和垂直方向单元格数量intnumDays;String dayStr; //显示天数字符串int margin;g.setColor(Color.lightGray); //设置当前颜色g.setFont(bigFont); //设置当前使用字体g.drawString(searchYear+"年",60,TOP+70); //绘制字符串g.drawString((searchMonth+1)+"月",200,TOP+130);g.setColor(Color.black);g.setFont(smallFont);fontMetric = g.getFontMetrics(); //获取变量初值fontAscent = fontMetric.getAscent();dayPos = TOP + fontAscent / 2;totalWidth = 7 * CELLWIDTH; //得到总的表格宽度for (inti = 0; i< 7; i++) {g.drawString(days[i], (CELLWIDTH-fontMetric.stringWidth(days[i]))/2 + i*CELLWIDTH,dayPos-20); //绘制表格标题栏}numRows = getNumberRows(searchYear, searchMonth); //计算需要的行的数量totalHeight = numRows * CELLHEIGHT; //得到总的表格高度for (inti = 0; i<= totalWidth; i += CELLWIDTH) {g.drawLine(i, TOP , i, TOP+ totalHeight); //绘制表格线}for (inti = 0, j = TOP ; i<= numRows; i++, j += CELLHEIGHT) {g.drawLine(0, j, totalWidth, j); //绘制表格线}xNum = (getFirstDayOfMonth(searchYear, searchMonth) + 1) * CELLWIDTH - MARGIN;yNum = TOP + MARGIN + fontAscent;numDays = daysInMonth[searchMonth] + ((calendar.isLeapYear(searchYear) && (searchMonth == FEBRUARY)) ? 1 : 0);for (int day = 1; day <= numDays; day++) {dayStr = Integer.toString(day);g.drawString(dayStr, xNum - fontMetric.stringWidth(dayStr), yNum);//绘制字符串xNum += CELLWIDTH;if (xNum>totalWidth) {xNum = CELLWIDTH - MARGIN;yNum += CELLHEIGHT;}}}publicboolean action(Event e, Object o){intsearchYearInt;if (e.target==btUpdate){searchMonth = monthChoice.getSelectedIndex(); //得到查询月份searchYearInt = Integer.parseInt(tfYear.getText(), 10); //得到查询年份if (searchYearInt> 1581) {searchYear = searchYearInt;}repaint(); //重绘屏幕return true;}return false;}private intgetNumberRows(int year, int month) { //得到行数量intfirstDay;intnumCells;if (year < 1582) { //年份小于1582年,则返回-1return (-1);}if ((month < 0) || (month > 11)) {return (-1);}firstDay = getFirstDayOfMonth(year, month); //计算月份的第一天if ((month == FEBRUARY) && (firstDay == 0) && !calendar.isLeapYear(year)) {return 4;}numCells = firstDay + daysInMonth[month];if ((month == FEBRUARY) && (calendar.isLeapYear(year))) {numCells++;}return ((numCells<= 35) ? 5 : 6); //返回行数}private intgetFirstDayOfMonth(int year, int month) { //得到每月的第一天intfirstDay;inti;if (year < 1582) { //年份小于1582年,返回-1return (-1);}if ((month < 0) || (month > 11)) { //月份数错误,返回-1return (-1);}firstDay = getFirstDayOfYear(year); //得到每年的第一天for (i = 0; i< month; i++) {firstDay += daysInMonth[i]; //计算每月的第一天}if ((month > FEBRUARY) &&calendar.isLeapYear(year)) {firstDay++;}return (firstDay % 7);}private intgetFirstDayOfYear(int year){ //计算每年的第一天intleapYears;int hundreds;intfourHundreds;int first;if (year < 1582) { //如果年份小于1582年return (-1); //返回-1}leapYears = (year - 1581) / 4;hundreds = (year - 1501) / 100;leapYears -= hundreds;fourHundreds = (year - 1201) / 400;leapYears += fourHundreds;first=5 + (year - 1582) + leapYears % 7; //得到每年第一天return first;}}课程设计体会(1)选题目的:本次课程设计为课本后设计题目任选一题进行设计。

万年历Java课程设计

万年历Java课程设计

2.2.2程序流程框图
开始
初始化
读、写日期、时间和温度
分离日期\时间\温度显示值
显示子程序
定时闹铃子程序
日期、时间修改子程序
农历自动更新子程序
闰月子程
返回
图1 主程序流程图
图2计算阳历程序流程图
图3时间调整程序流程图
课程设计说明书N O.19
课程设计说明书N O.20 3、设计结果与分析
3.1程序效果图
3.1.1程序打开时的效果,左边是记事本框,右边是万年历框。

图4程序效果图
3.1.2月份下拉列表的视图,选择某月很方便的。

图5程序效果图
3.1.3任选一个日期,在此日期中输入日记的信息。

效果如下图:
图6程序效果图
课程设计说明书N O.21 3.1.4保存日历成功对话框,选择“save”按键后自动弹出此对话框。

图7程序效果图
3.1.5当想删除所写日记时此确认对话框可有效防止误删。

图8程序效果图
3.1.6删除成功后会显示此对话框,提示删除成功。

图9程序效果图
3.2程序分析
该程序能够很好得实现万年历得功能,包括选择年份,月份,天份。

而且从外观上看不但简洁实用而且很美观。

程序打开的时候,能看到。

左边显示得是记事本框,右边显示是万年历框,简洁明了。

具有月份下拉功能,需要月份下拉得时候,可以随意调到自己需要得月份进行查看,十分方便。

可以任选一个日期,并在此日期中输入日记的信
课程设计说明书N O.22。

万年历java课程设计报告

万年历java课程设计报告

万年历 Java 课程设计报告1. 引言本文档是关于一个用 Java 编写的万年历应用程序的课程设计报告。

该应用程序可以通过输入年份和月份来打印出对应的日历。

2. 设计目的本次课程设计的主要目的是让学生运用所学的 Java 编程知识,熟悉并掌握面向对象编程的基本概念,并且能够将这些知识应用到实际的项目中。

3. 设计思路3.1 输入验证用户输入的年份和月份需要进行验证,确保其合法性。

在程序中,我们使用Scanner类来获取用户输入,并通过一系列的条件判断语句来验证输入的年份和月份是否在合理范围内。

3.2 闰年判断万年历中,2 月有时为 28 天,有时为 29 天,这取决于年份是否为闰年。

我们可以通过以下规则判断某一年是否为闰年:•若该年份能被 4 整除但不能被 100 整除,或者能被 400 整除,则该年份是闰年;•否则,该年份不是闰年。

根据这个规则,我们可以在程序中编写一个方法来判断某一年是否为闰年。

3.3 日历打印通过输入的年份和月份,我们可以计算出该月份的第一天是星期几,并据此来确定日历的布局。

在程序中,我们可以使用java.util.Calendar类来获取日期相关信息。

接下来,我们可以按照日历的布局,使用循环语句逐行打印出日历。

对于非当前月份的日期,我们可以用空格来进行占位处理。

4. 程序实现下面是一个简化版的代码示例,用于展示万年历应用程序的实现:import java.util.Calendar;import java.util.Scanner;public class CalendarApp {public static void main(String[] args) {// 获取用户输入的年份和月份Scanner scanner = new Scanner(System.in);System.out.print("请输入年份:");int year = scanner.nextInt();System.out.print("请输入月份:");int month = scanner.nextInt();// 验证输入的年份和月份是否合法if (year < 0 || month < 1 || month > 12) {System.out.println("输入的年份或月份不合法!");return;}// 创建 Calendar 对象并设置日期Calendar calendar = Calendar.getInstance();calendar.set(year, month - 1, 1);// 获取该月份的天数int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MON TH);// 获取该月份的第一天是星期几int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);// 打印日历System.out.println("日\t一\t二\t三\t四\t五\t六");for (int i = 1; i < firstDayOfWeek - 1; i++) {System.out.print(" \t");}for (int day = 1; day <= daysInMonth; day++) {System.out.print(day + "\t");if ((firstDayOfWeek + day - 1) % 7 == 0) {System.out.println();}}}}5. 测试与运行使用以上代码,我们可以编译并运行该 Java 应用程序。

java课程设计万年历报告

java课程设计万年历报告

java课程设计万年历报告一、课程目标知识目标:1. 掌握Java语言基础,包括数据类型、运算符、控制结构等;2. 学会使用Java中的类和对象,理解面向对象编程思想;3. 了解Java中日期时间处理类,如java.util.Calendar和java.time包的使用;4. 能够运用所学知识设计并实现一个简单的万年历程序。

技能目标:1. 培养学生运用Java语言解决实际问题的能力;2. 提高学生的编程实践能力,使其能够独立完成程序的设计、编码、测试和调试;3. 培养学生查阅资料、自学新知识的能力,为后续学习打下基础。

情感态度价值观目标:1. 培养学生热爱编程,对计算机科学产生浓厚兴趣;2. 培养学生积极思考、主动探究的学习态度,提高其解决问题的自信心;3. 培养学生良好的团队合作精神,学会在团队中沟通与协作。

分析课程性质、学生特点和教学要求:本课程为Java语言编程课程,旨在让学生掌握Java编程基础,并能运用所学知识解决实际问题。

学生处于初中年级,具备一定的逻辑思维能力,对新鲜事物充满好奇心,但编程实践经验不足。

因此,教学要求注重理论与实践相结合,以项目驱动教学,激发学生兴趣,培养其编程技能和解决问题的能力。

课程目标分解:1. 知识目标:通过讲解和练习,使学生掌握Java基础知识和日期时间处理类;2. 技能目标:通过项目实践,培养学生编程能力和解决问题的能力;3. 情感态度价值观目标:通过团队合作和互动交流,激发学生兴趣,培养其积极的学习态度和价值观。

二、教学内容1. Java基础知识回顾- 数据类型与变量- 运算符与表达式- 控制结构(顺序、分支、循环)2. 面向对象编程基础- 类与对象- 方法- 封装、继承、多态3. Java日期时间处理类- java.util.Calendar类- java.time包(LocalDate、LocalTime、LocalDateTime)4. 万年历项目实践- 项目需求分析- 程序设计(界面设计、功能模块划分)- 编码实现(关键代码:日期计算、界面展示)- 测试与调试5. 教学内容的安排和进度- Java基础知识回顾(1课时)- 面向对象编程基础(2课时)- Java日期时间处理类(1课时)- 万年历项目实践(3课时)6. 教材章节及内容列举- 《Java编程思想》第3章:控制结构- 《Java编程思想》第4章:面向对象编程- 《Java核心技术 卷I》第9章:日期时间处理教学内容确保科学性和系统性,结合课程目标,注重理论与实践相结合,以项目驱动教学,使学生在实践中掌握Java编程知识。

用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编写万年历程序,我们可以实现日期计算、农历计算和节气计算等功能,并通过图形界面展示给用户。

用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类:作为控制器的核心,负责调用模型的方法获取日历数据,并更新视图。

Java课程设计-万年历精编版

Java课程设计-万年历精编版

河北科技大学课程设计报告学生姓名:学号:专业班级:课程名称:Java程序设计课程设计学年学期:2 014 —2 015 学年第2 学期指导教师:刘伟2 0 年月课程设计成绩评定表学生姓名学号成绩专业班级起止时间设计题目指导教师评语学习态度:端正□较端正□一般□较差□学习纪律:好□较好□一般□较差□出勤情况:好□较好□一般□较差□程序设计:好□较好□一般□较差□动手能力:强□较强□一般□较差□团队精神:好□较好□一般□较差□创新意识:强□较强□一般□较差□课程设计完成情况:优秀□好□一般□较差□课程设计报告完成情况:优秀□好□一般□较差□指导教师:年月日目录1.课程设计目的 (1)2.需求分析 (1)3.总体设计 (1)4.详细设计 (1)5.软件测试 (10)6.课程设计总结 (11)一、课程设计目的(1)熟练使用java语言编写程序,解决实际问题。

(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(3)学会自己调试程序的方法并掌握一定的技巧。

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

三、总体设计(1)可以通过图形界面显示日历。

(2)能以月历形式显示日期与星期。

(3)支持用户自己输入年份,可以通过上一年,下一年等按钮来选择年份和月份。

四、详细设计1.总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。

2.输出月份第一天为星期几的算法:使总天数除以7取余得几既为星期几,若是0,则为星期日。

3.算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。

4.查询年份必须为四位有效数字,否则不予显示。

程序源代码:import java.awt.BorderLayout;import java.awt.Color;import java.awt.FlowLayout;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.sql.Date;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.awt.*;import java.awt.event.*;import java.text.*;import java.time.Clock;import java.util.*;import javax.swing.*;import javax.swing.table.*;import javax.swing.*;import javax.swing.table.DefaultTableModel;public class wannianli extends JFrame implements ActionListener{private Calendar cal= Calendar.getInstance();private String [] str = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};private DefaultTableModel dtm = new DefaultTableModel(null,str);private JTable table = new JTable(dtm); //装日期的表格private JScrollPane sp = new JScrollPane(table);private JButton bLastYear = new JButton("上一年");private JButton bNextYear = new JButton("下一年");private JButton bLastMonth = new JButton("上月");private JButton bNextMonth = new JButton("下月");private JTextField Year = new JTextField(4);//jtfYear年份显示和输入文本private JLabel jla=new JLabel("年");private JTextField month = new JTextField(4);private JLabel jla1=new JLabel("月");private JTextField jtfMonth = new JTextField(2);//jtfMonth月份显示文本框private JComboBox comb;private JPanel p1 = new JPanel();//装入控制日期按钮的模块private JPanel p2 = new JPanel();private JPanel p3 = new JPanel(new GridLayout(2,1));private JPanel p4 = new JPanel();private JPanel p5 = new JPanel();private JLabel l = new JLabel("文本框中可直接键入要查找的年份,以提高查询效率");private JLabel lt = new JLabel();private JLabel com = new JLabel("请选择月份:");private int lastTime;privatewannianli(){super("万年历"); //框架命名this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数table.setGridColor(Color.GRAY);//星期之间的网格线是灰色的table.setColumnSelectionAllowed(true);table.setSelectionBackground(Color.BLACK);//当选定某一天时这一天背景黑色table.setSelectionForeground(Color.GREEN);//选定的日期字体是绿色的table.setBackground(new Color(184,207,229));//日期显示表格颜色浅蓝色table.setFont(new Font("黑体",Font.BOLD,24));//日期数字字体格式table.setRowHeight(30);//表格的高度Year.addActionListener(this);//可输入年份的文本框//month.addActionListener(this);//可输入年份的文本框 //为各个按钮添加监听函数bLastYear.addActionListener(this);bNextYear.addActionListener(this);bLastMonth.addActionListener(this);bNextMonth.addActionListener(this); //将按钮添加到String[] str={"1","2","3","4","5","6","7","8","9","10","11","12"};comb = new JComboBox(str);p1.add(bLastYear);p1.add(Year);//年份输入文本框p1.add(jla);p1.add(month);//年份输入文本框p1.add(jla1);p1.add(bNextYear);p1.add(bLastMonth);p1.add(jtfMonth);p1.add(bNextMonth);p1.add(com);p1.add(comb);p2.setLayout(new FlowLayout());p2.add(p4,BorderLayout.EAST);p2.add(sp,BorderLayout.CENTER);p2.add(p5,BorderLayout.WEST);p3.add(l);p3.add(lt);this.add(p3, BorderLayout.SOUTH);this.add(p2, BorderLayout.CENTER);this.add(p1, BorderLayout.NORTH);String [] strDate = DateFormat.getDateInstance().format(newjava.util.Date()).split("-");cal.set(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1])-1,0);showCalendar(Integer.parseInt(strDate[0]),Integer.parseInt(strDate[1]), cal);jtfMonth.setEditable(false);//设置月份的文本框为不可编辑Year.setText(strDate[0]);month.setText(strDate[1]);comb.setToolTipText(strDate[1]);comb.addItemListener(new ItemListener() {public void itemStateChanged(ItemEvent e) {jtfMonth.setText((String) comb.getSelectedItem());month.setText((String) comb.getSelectedItem()) ;int m, y;try//控制输入的年份正确,异常控制{if (Year.getText().length() != 4){ throw new NumberFormatException();}y = Integer.parseInt(Year.getText());m = Integer.parseInt(jtfMonth.getText());}catch (NumberFormatException ex){// JOptionPane.showMessageDialog(this, "请输入4位0-9的数字!", "年份有误", JOptionPane.ERROR_MESSAGE);return;}for (int i = 0; i < lastTime+1; i++){dtm.removeRow(0);}cal.set(y, m-1, 0);showCalendar(y, m, cal);}});jtfMonth.setText("1");month.setText("1");this.setBounds(200,200,700,320);this.setResizable(false);this.setVisible(true);}public static void main(String[] args){new wannianli();}public void showCalendar(int localYear, int localMonth, Calendar cld) {int Days = getDaysOfMonth(localYear, localMonth) +cld.get(Calendar.DAY_OF_WEEK) - 2;Object [] ai = new Object[7];lastTime = 0;for (int i = cld.get(Calendar.DAY_OF_WEEK)-1; i <= Days; i++){ai[i%7] = String.valueOf(i-(cld.get(Calendar.DAY_OF_WEEK)-2));if (i%7 == 6){dtm.addRow(ai);ai = new Object[7];lastTime++;}}dtm.addRow(ai);}public int getDaysOfMonth(int year, int Month) //显示所选月份的天数{if(Month == 1 || Month == 3 || Month == 5 || Month == 7 || Month == 8|| Month == 10 || Month == 12){return 31;}if(Month == 4 || Month == 6 || Month == 9 || Month == 11){return 30;}if(year%4 == 0 && year%100 != 0 || year%400 == 0)//闰年{return 29;}else{return 28;}}public void actionPerformed(ActionEvent e){if(e.getSource() == Year || e.getSource() == bLastYear ||e.getSource() == bNextYear || e.getSource() == bLastMonth || e.getSource() == bNextMonth){int m, y;try//控制输入的年份正确,异常控制{if (Year.getText().length() != 4){ throw new NumberFormatException();}y = Integer.parseInt(Year.getText());m = Integer.parseInt(jtfMonth.getText());} catch (NumberFormatException ex){JOptionPane.showMessageDialog(this, "请输入4位0-9的数字!", "年份有误", JOptionPane.ERROR_MESSAGE);return;}for (int i = 0; i < lastTime+1; i++){dtm.removeRow(0);}if(e.getSource() == bLastYear){Year.setText(String.valueOf(--y));}if(e.getSource() == bNextYear){Year.setText(String.valueOf(++y));}if(e.getSource() == bLastMonth){if(m == 1){Year.setText(String.valueOf(--y));m = 12;jtfMonth.setText(String.valueOf(m)); }else{jtfMonth.setText(String.valueOf(--m));}}if(e.getSource() == bNextMonth){if(m == 12){Year.setText(String.valueOf(++y));m = 1;jtfMonth.setText(String.valueOf(m));}else{jtfMonth.setText(String.valueOf(++m)); }}cal.set(y, m-1, 0);showCalendar(y, m, cal);month.setText(String.valueOf(m));// comb.setToolTipText(String.valueOf(m));}}五、软件测试图1 界面图图2 界面图下拉选择2月份六、课程设计总结本次Java课程设计我们这组做的课题是万年历,刚开始拿到题目我们组员都不知如何下手,经过小组成员一起查找资料,并且开会讨论,我们确定了设计的设计目标以及具体实现方式,包括如何将Java的思想运用到实际系统的详细设计之中。

java课程设计报告-万年历

java课程设计报告-万年历

山西大学Java课程设计报告题目:万年历班级:14 班学号:姓名:2016年12月目录1 绪论 (1)1.1选题目的及意义 (1)1.2 系统概述 (1)1.3 人员组成及分工 (1)2 需求分析 (1)3 总体设计 (1)4 详细设计 (1)5 系统实现 (2)5.1 开发环境 (3)5.2 关键技术 (3)6.运行结果 (6)7.软件测试 (7)8.总结 (7)9 参考文献 (8)1.绪论1.1选题目的及意义选题目的:本次课程设计为课本后设计题目任选一题进行设计。

思考一段时间后,我们组决定做一个万年历的设计。

主要考虑到以前时间少课程内容多,JAVA课程基础内容掌握并不是很抓实,而对于设计一个万年历程序,由于其功能简单设计也相对较易,对于我们每个人的学习情况比较合适,并且通过设计这样的一个日历小组件,也能使自己对JAVA 的一些基础知识掌握的更加牢固。

1.2 系统概述随着电子技术的不断发展,人们的不断创新,万年历已经不再局限于书本形式,而是以电脑软件或者电子产品的形式出现。

让其更加便捷。

在学习了JAVA课程后,将以JAVA 形式编译出一个简易的万年历。

1.3 人员组成及分工:负责搜集查找资料:调试程序最后进行程序的编写与修改2.需求分析本程序的要求为:1.使用图形用户界面;2.本程序能够实现日期与星期的查询。

3.可以添加或者删除日志3.总体设计(1)可以通过图形界面显示日历。

(2)能以月历形式显示日期与星期。

(3)支持用户自己输入年份,可以通过上一年,下一年等按钮来选择年份和月份。

(4)可以添加或者删除并且点击对应日期显示日志。

4.详细设计1. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。

然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。

java课程设计万年历程序设计报告

java课程设计万年历程序设计报告

信息科学与工程学院山东科技大学信息学院JAVA程序设计学院:信息科学与工程学院班级:计算机11-3学号:201101050230姓名:赵乐目录目录 (1)前言 (1)1 需求分析 (2)2.概要设计 (3)3.各模块的功能及程序说明 (5)4.测试分析 (13)5.源程序清单 (13)6.课程设计体会 (22)前言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)通过网页形式运行,实现图形界面。

java课程设计--万年历

java课程设计--万年历

JAVA软件项目设计 (1)项目报告 (1)1.设计分析: (3)1.1需求分析 (3)1.2功能设计 (3)2.程序结构: (4)3.各模块功能及程序说明: (4)3.1 各种包的导入: (4)3.2控件的初始化 (5)3.3绘制万年历的界面 (6)3.4 增加控件 (6)3.5增加监听 (7)3.6封装操作 (8)4.源程序 (8)5.操作方法(流程) (22)6.实验结果 (23)7.心得体会: (25)1.设计分析:1.1需求分析对于万年历系统,其主要功能是:查看当日日期(年、月、日)、查看当时时间、查看其他年月的月历、对选中的日期进行标识。

主要使用流程是:查看万年历系统,查看其他月份或年份日历,选中其他日期查看,查看当日日期。

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

(2)能以月历的形式显示日期与星期。

(3)支持用户自己用下拉形式来选择年份和月份。

(4)通过点击“更新时间”按钮来刷新当前时间。

2.程序结构:3.各模块功能及程序说明:3.1 各种包的导入:import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Calendar;import java.util.GregorianCalendar;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;3.2控件的初始化contentPane = new JPanel(new BorderLayout());// 主面板northPane = new JPanel(new BorderLayout()); // 放按钮面板的面板centerPane = new JPanel(new GridLayout(7, 7)); // 中间的日期(七行七列)面板buttonPane = new JPanel(); // 按钮面板labelYear = new JButton("年份:"); // 显示年份文字labelMonth = new JButton("月份:"); // 显示月份文字buttonPreYear = new JButton("<<"); // 上一年按钮buttonNextYear = new JButton(">>"); // 下一年的按钮buttonPreMonth = new JButton("<<"); // 上一月按钮buttonNextMonth = new JButton(">>");// 下一月按钮newTime = new JButton("更新时间");boxYear = new JComboBox(); // 年的下拉列表boxMonth = new JComboBox(); // 月的下拉列表ca = new GregorianCalendar();Jhour = new JTextField(2);Jminute = new JTextField(2);Jsecond = new JTextField(2);date = new JPanel();dateTime1 = new JLabel("时");dateTime2 = new JLabel("分");dateTime3 = new JLabel("秒");3.3绘制万年历的界面public WanNianLi() {this.setTitle("万年历");this.setSize(500, 400);// 将面板居中处理Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); int screenWidth = d.width;int screenHeight = d.height;this.setLocation((screenWidth - this.getWidth()) / 2,(screenHeight - this.getHeight()) / 2);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(true);}3.4 增加控件// 把按钮放到了按钮面板里buttonPane.add(labelYear);buttonPane.add(buttonPreYear);buttonPane.add(boxYear);buttonPane.add(buttonNextYear);buttonPane.add(labelMonth);buttonPane.add(buttonPreMonth);buttonPane.add(boxMonth);buttonPane.add(buttonNextMonth);// 把按钮面板放到了northPane中northPane.add(buttonPane, BorderLayout.CENTER);// 把northPane和centerPane放到主面板中contentPane.add(northPane, BorderLayout.NORTH);contentPane.add(centerPane, BorderLayout.CENTER); contentPane.add(date,BorderLayout.SOUTH);3.5增加监听//给年份下拉列表添加事件监听器boxYear.addActionListener(new ActionListener())//给月份下拉列表添加事件监听器boxMonth.addActionListener(new ActionListener())//上一年的按钮监听buttonPreYear.addActionListener(new ActionListener())//下一年的按钮监听buttonNextYear.addActionListener(new ActionListener() //上一月的监听buttonPreMonth.addActionListener(new ActionListener() //下一月的监听buttonNextMonth.addActionListener(new ActionListener() //更新时间按钮的监听newTime.addActionListener(new ActionListener() )3.6封装操作// 封装给年份下拉列表赋值的操作private void initBoxYear()//封装给月份下拉列表赋值的操作private void initBoxMonth()4.源程序package 万年历;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import java.util.Calendar;import java.util.GregorianCalendar;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;public class WanNianLi extends JFrame {private int temp0 = 0;private int year = 0;private int month = 0;private int hour = 0;private int minute = 0;private int second = 0;Calendar ca = null;private JTextField Jhour = null;private JTextField Jminute = null;private JTextField Jsecond = null;private JPanel contentPane = null;// 主面板private JPanel northPane = null; // 放按钮面板的面板private JPanel centerPane = null; // 中间的日期面板private JPanel buttonPane = null; // 按钮面板private JPanel time = null; //时钟面板private JPanel date = null;private JButton labelYear = null; // 显示年份文字private JButton labelMonth = null; // 显示月份文字private JButton buttonPreYear = null; // 上一年按钮private JButton buttonNextYear = null; // 下一年的按钮private JButton buttonPreMonth = null; // 上一月按钮private JButton buttonNextMonth = null;// 下一月按钮private JButton newTime = null;private JComboBox boxYear = null; // 年的下拉列表private JComboBox boxMonth = null; // 月的下拉列表private JLabel[] labelDays = null; // 存储天private JLabel dateTime1 = null;private JLabel dateTime2 = null;private JLabel dateTime3 = null;public WanNianLi() {this.setTitle("万年历");this.setSize(500, 400);// 将面板居中处理Dimension d = Toolkit.getDefaultToolkit().getScreenSize();int screenWidth = d.width;int screenHeight = d.height;this.setLocation((screenWidth - this.getWidth()) / 2,(screenHeight - this.getHeight()) / 2);init(); // 封装初始化主控件的操作this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(true);}// 初始化主控件private void init() {contentPane = new JPanel(new BorderLayout());// 主面板northPane = new JPanel(new BorderLayout()); // 放按钮面板的面板centerPane = new JPanel(new GridLayout(7, 7)); // 中间的日期(七行七列)面板buttonPane = new JPanel(); // 按钮面板labelYear = new JButton("年份:"); // 显示年份文字labelMonth = new JButton("月份:"); // 显示月份文字buttonPreYear = new JButton("<<"); // 上一年按钮buttonNextYear = new JButton(">>"); // 下一年的按钮newTime = new JButton("更新时间");boxYear = new JComboBox(); // 年的下拉列表initBoxYear();boxMonth = new JComboBox(); // 月的下拉列表initBoxMonth();ca = new GregorianCalendar();hour = ca.get(Calendar.HOUR_OF_DAY);minute = ca.get(Calendar.MINUTE);second = ca.get(Calendar.SECOND);Jhour = new JTextField(2);Jhour.setText(hour+"");Jminute = new JTextField(2);Jminute.setText(minute+"");Jsecond = new JTextField(2);Jsecond.setText(second+"");date = new JPanel();dateTime1 = new JLabel("时");dateTime2 = new JLabel("分");dateTime3 = new JLabel("秒");date.add(Jhour);date.add(dateTime1);date.add(Jminute);date.add(dateTime2);date.add(Jsecond);date.add(dateTime3);date.add(newTime);// 把按钮放到了按钮面板里buttonPane.add(labelYear);buttonPane.add(buttonPreYear);buttonPane.add(boxYear);buttonPane.add(buttonNextYear);buttonPane.add(labelMonth);buttonPane.add(buttonPreMonth);buttonPane.add(boxMonth);buttonPane.add(buttonNextMonth);// 把按钮面板放到了northPane中northPane.add(buttonPane, BorderLayout.CENTER);// 初始化放日期的labellabelDays = new JLabel[49]; // 存储天for (int i = 0; i < labelDays.length; i++){labelDays[i] = new JLabel("", JLabel.CENTER);centerPane.add(labelDays[i]);}boxYear.setSelectedItem(2013);boxMonth.setSelectedItem(12);YMD();//将第一界面设为系统当前事件setDate();// 把northPane和centerPane放到主面板中contentPane.add(northPane, BorderLayout.NORTH); contentPane.add(centerPane, BorderLayout.CENTER); contentPane.add(date,BorderLayout.SOUTH);this.add(contentPane);//更新时分秒newTime.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {Calendar ca = null;ca = new GregorianCalendar();int a = ca.get(Calendar.HOUR_OF_DAY);int b = ca.get(Calendar.MINUTE);int c = ca.get(Calendar.SECOND);Jhour.setText(a+"");Jminute.setText(b+"");Jsecond.setText(c+"");}});//给年份下拉列表添加事件监听器boxYear.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){year = (Integer)boxYear.getSelectedItem();setDate();}});//给月份下拉列表添加事件监听器boxMonth.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e){month = (Integer)boxMonth.getSelectedItem();setDate();}});//上一年的按钮监听buttonPreYear.addActionListener(new ActionListener() { @Overridepublic void actionPerformed(ActionEvent e) {int resertYear = (Integer)boxYear.getSelectedItem();boxYear.setSelectedItem(resertYear-1);}});//下一年的按钮监听buttonNextYear.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e){int resertYear = (Integer)boxYear.getSelectedItem();boxYear.setSelectedItem(resertYear+1);}});//上一月的监听buttonPreMonth.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e){int resertMonth=(Integer)boxMonth.getSelectedItem();int resertYear = (Integer)boxYear.getSelectedItem();if(resertMonth == 1){if(resertYear == 1901){boxMonth.setSelectedItem(resertMonth);boxYear.setSelectedItem(resertYear);}else{resertMonth = 12;boxMonth.setSelectedItem(resertMonth);boxYear.setSelectedItem(resertYear-1);}}else{boxMonth.setSelectedItem(resertMonth-1);}}});//下一月的监听buttonNextMonth.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e){int resertMonth=(Integer)boxMonth.getSelectedItem();if(resertMonth == 12){resertMonth = 1;boxMonth.setSelectedItem(resertMonth);int resertYear = (Integer)boxYear.getSelectedItem();boxYear.setSelectedItem(resertYear+1);}else{boxMonth.setSelectedItem(resertMonth+1);}}});}// 封装给年份下拉列表赋值的操作private void initBoxYear(){for (int i = 0; i < 1000; i++){boxYear.addItem(1901 + i);}}//封装给月份下拉列表赋值的操作private void initBoxMonth(){for (int i = 1; i <= 12; i++){boxMonth.addItem(i);}}public void setDate() {String[] tempDate = new String[42];tempDate = initDate();// 给前七个label赋属性String[] logs = new String[] { "日", "一", "二", "三", "四", "五", "六" };//将logs数组中的值放到label中for (int i = 0; i < 7; i++){labelDays[i].setText(logs[i]);}//初始化label的颜色for (int i = 0; i < labelDays.length; i++) {labelDays[i].setForeground(Color.BLACK);}// 设置星期日的颜色为红色for (int i = 0; i < labelDays.length; i += 7){labelDays[i].setForeground(Color.red);}// 设置星期六的颜色为蓝色for (int i = 6; i < labelDays.length; i += 7){labelDays[i].setForeground(Color.blue);}//将日期放到label中,并把系统当天的时间设为绿色for (int i = 7; i < 49; i++){int t = 0;t = day();labelDays[i].setText(tempDate[i-7]);if(i ==Calendar.getInstance().get(Calendar.DAY_OF_MONTH)){labelDays[i+t+6].setForeground(Color.GREEN);}}}//设置面板第一次显示的内容void YMD(){year=0;month=0;Calendar c=Calendar.getInstance();//获得系统当前日期year=c.get(Calendar.YEAR);month=c.get(Calendar.MONTH)+1;//系统日期从0开始算起boxYear.setSelectedItem((Integer)year);boxMonth.setSelectedItem((Integer)month);}//将某年某月中的日期放到一个数组中返回,包括前面的空余部分public String[] initDate(){String[] date = new String[42];int sum = 0;int m = 0;for (int i = 1900; i < year; i++) {if (((i % 4 == 0) && (i % 100 != 0)) || (i % 400 == 0)) {sum = sum + 366;} else {sum = sum + 365;}}for (int nomonth = 1; nomonth <= month; nomonth++) {if (nomonth == 1 || nomonth == 3 || nomonth == 5 || nomonth == 7|| nomonth == 8 || nomonth == 10 || nomonth == 12) {m = 31;} else if (nomonth == 2) {if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) {m = 29;} else {m = 28;}} else {m = 30;}if (nomonth < month) {sum = sum + m;}}sum += 1;temp0 = (sum % 7);for (int p = 0; p < temp0; p++) {date[p] = "";}for (int w = 1; w <= m; w++) {date[temp0++] = w + "";}return date;}//获取系统当前月第一天离星期天有几天public int day(){int temp = 0;int sum = 0;int m = 0;for (int i = 1900; i < year; i++) {if (((i % 4 == 0) && (i % 100 != 0)) || (i % 400 == 0)) {sum = sum + 366;} else {sum = sum + 365;}}for (int nomonth = 1; nomonth <= month; nomonth++) {if (nomonth == 1 || nomonth == 3 || nomonth == 5 || nomonth == 7|| nomonth == 8 || nomonth == 10 || nomonth == 12) {m = 31;} else if (nomonth == 2) {if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) {m = 29;} else {m = 28;}} else {m = 30;}if (nomonth < month) {sum = sum + m;}}sum += 1;temp = (sum % 7);return temp;}public static void main(String[] args){new WanNianLi();}}5.操作方法(流程)5.1 制作万年历的界面5.2 在界面上增加控件5.3 给事件增加监听5.4给事件增加命令符5.5运行调试6.实验结果6.1 获取当前时间6.2 获取闰年2月的时间6.3获取平年2月的时间6.4选择2010年2月的时间7.心得体会:通过这次的项目设计,我们学到了很多东西,下面就是这次项目设计的心得体会:在这次的项目设计中,主要是运用Java语言来编写,并可运用其他的技术。

万年历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. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

河北科技大学课程设计报告学生姓名:学号:专业班级:课程名称: Java程序设计课程设计学年学期: 2 014 —2 015 学年第 2 学期指导教师:**2 0 年月课程设计成绩评定表目??录1.课程设计目的?......................................................................... .........................1??2.需求分析.......................................................................... .................................1?3.总体设计...........................................................................................................1?4.详细设计.......................................................................... .................................1?5.软件测试.......................................................................... (10)6.课程设计总结.......................................................................... . (11)一、课程设计目的(1)熟练使用java语言编写程序,解决实际问题。

?(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;?(3)学会自己调试程序的方法并掌握一定的技巧。

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

三、总体设计?(1)可以通过图形界面显示日历。

?(2)能以月历形式显示日期与星期。

?(3)支持用户自己输入年份,可以通过上一年,下一年等按钮来选择年份和月份。

?四、详细设计?1.总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。

2.输出月份第一天为星期几的算法:使总天数除以7取余得几既为星期几,若是0,则为星期日。

?3.算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。

?4.查询年份必须为四位有效数字,否则不予显示。

程序源代码:importimportimportimportimportimport;importimportimport ;importimport ;importimport java.awt.*;importimport java.text.*;import ;import java.util.*;import javax.swing.*;import .*;import javax.swing.*;importpublic class wannianli extends JFrame implements ActionListener{private Calendar cal= Calendar.getInstance();private String [] str = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};private DefaultTableModel dtm = new DefaultTableModel(null,str);private JTable table = new JTable(dtm); //装日期的表格private JScrollPane sp = new JScrollPane(table);private JButton bLastYear = new JButton("上一年");private JButton bNextYear = new JButton("下一年");private JButton bLastMonth = new JButton("上月");private JButton bNextMonth = new JButton("下月");private JTextField Year = new JTextField(4);//jtfYear年份显示和输入文本private JLabel jla=new JLabel("年");private JTextField month = new JTextField(4);private JLabel jla1=new JLabel("月");private JTextField jtfMonth = new JTextField(2);//jtfMonth月份显示文本框private JComboBox comb;private JPanel p1 = new JPanel();//装入控制日期按钮的模块private JPanel p2 = new JPanel();private JPanel p3 = new JPanel(new GridLayout(2,1));private JPanel p4 = new JPanel();private JPanel p5 = new JPanel();private JLabel l = new JLabel("文本框中可直接键入要查找的年份,以提高查询效率");private JLabel lt = new JLabel();private JLabel com = new JLabel("请选择月份:");private int lastTime;privatewannianli(){super("万年历"); //框架命名this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数table.setGridColor(Color.GRAY);//星期之间的网格线是灰色的table.setColumnSelectionAllowed(true);table.setSelectionBackground(Color.BLACK);//当选定某一天时这一天背景黑色table.setSelectionForeground(Color.GREEN);//选定的日期字体是绿色的table.setBackground(new Color(184,207,229));//日期显示表格颜色浅蓝色table.setFont(new Font("黑体",Font.BOLD,24));//日期数字字体格式table.setRowHeight(30);//表格的高度Year.addActionListener(this);//可输入年份的文本框//month.addActionListener(this);//可输入年份的文本框 //为各个按钮添加监听函数bLastYear.addActionListener(this);bNextYear.addActionListener(this);bLastMonth.addActionListener(this);bNextMonth.addActionListener(this); //将按钮添加到String[] str={"1","2","3","4","5","6","7","8","9","10","11","12"};comb = new JComboBox(str);p1.add(bLastYear);p1.add(Year);//年份输入文本框p1.add(jla);p1.add(month);//年份输入文本框p1.add(jla1);p1.add(bNextYear);p1.add(bLastMonth);p1.add(jtfMonth);p1.add(bNextMonth);p1.add(com);p1.add(comb);p2.setLayout(new FlowLayout());p2.add(p4,BorderLayout.EAST);p2.add(sp,BorderLayout.CENTER);p2.add(p5,BorderLayout.WEST);p3.add(l);p3.add(lt);this.add(p3, BorderLayout.SOUTH);this.add(p2, BorderLayout.CENTER);this.add(p1, BorderLayout.NORTH);String [] strDate = DateFormat.getDateInstance().format(new"-");cal.set(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1])-1,0);showCalendar(Integer.parseInt(strDate[0]),Integer.parseInt(strDate[1]), cal);jtfMonth.setEditable(false);//设置月份的文本框为不可编辑Year.setText(strDate[0]);month.setText(strDate[1]);comb.setToolTipText(strDate[1]);comb.addItemListener(new ItemListener() {public void itemStateChanged(ItemEvent e) {jtfMonth.setText((String) comb.getSelectedItem());month.setText((String) comb.getSelectedItem()) ;int m, y;try//控制输入的年份正确,异常控制{if (Year.getText().length() != 4){ throw new NumberFormatException();}y = Integer.parseInt(Year.getText());m = Integer.parseInt(jtfMonth.getText());}catch (NumberFormatException ex){// JOptionPane.showMessageDialog(this, "请输入4位0-9的数字!", "年份有误", JOptionPane.ERROR_MESSAGE);return;}for (int i = 0; i < lastTime+1; i++){dtm.removeRow(0);}cal.set(y, m-1, 0);showCalendar(y, m, cal);}});jtfMonth.setText("1");month.setText("1");this.setBounds(200,200,700,320);this.setResizable(false);this.setVisible(true);}public static void main(String[] args){new wannianli();}public void showCalendar(int localYear, int localMonth, Calendar cld){int Days = getDaysOfMonth(localYear, localMonth) +cld.get(Calendar.DAY_OF_WEEK) - 2;Object [] ai = new Object[7];lastTime = 0;for (int i = cld.get(Calendar.DAY_OF_WEEK)-1; i <= Days; i++){ai[i%7] = String.valueOf(i-(cld.get(Calendar.DAY_OF_WEEK)-2));if (i%7 == 6){dtm.addRow(ai);ai = new Object[7];lastTime++;}}dtm.addRow(ai);}public int getDaysOfMonth(int year, int Month) //显示所选月份的天数{if(Month == 1 || Month == 3 || Month == 5 || Month == 7 || Month == 8 || Month == 10 || Month == 12){return 31;}if(Month == 4 || Month == 6 || Month == 9 || Month == 11){return 30;}if(year%4 == 0 && year%100 != 0 || year%400 == 0)//闰年{return 29;}else{return 28;}}public void actionPerformed(ActionEvent e){if(e.getSource() == Year || e.getSource() == bLastYear ||e.getSource() == bNextYear || e.getSource() == bLastMonth || e.getSource() == bNextMonth){int m, y;try//控制输入的年份正确,异常控制{if (Year.getText().length() != 4){ throw new NumberFormatException();}y = Integer.parseInt(Year.getText());m = Integer.parseInt(jtfMonth.getText());} catch (NumberFormatException ex){JOptionPane.showMessageDialog(this, "请输入4位0-9的数字!", "年份有误", JOptionPane.ERROR_MESSAGE);return;}for (int i = 0; i < lastTime+1; i++){dtm.removeRow(0);}if(e.getSource() == bLastYear){Year.setText(String.valueOf(--y));}if(e.getSource() == bNextYear){Year.setText(String.valueOf(++y));}if(e.getSource() == bLastMonth){if(m == 1){Year.setText(String.valueOf(--y));m = 12;jtfMonth.setText(String.valueOf(m)); }else{jtfMonth.setText(String.valueOf(--m));}}if(e.getSource() == bNextMonth){if(m == 12){Year.setText(String.valueOf(++y));m = 1;jtfMonth.setText(String.valueOf(m));}else{jtfMonth.setText(String.valueOf(++m));}}cal.set(y, m-1, 0);showCalendar(y, m, cal);month.setText(String.valueOf(m));// comb.setToolTipText(String.valueOf(m));}}五、软件测试图1 界面图图2 界面图下拉选择2月份六、课程设计总结本次Java课程设计我们这组做的课题是万年历,刚开始拿到题目我们组员都不知如何下手,经过小组成员一起查找资料,并且开会讨论,我们确定了设计的设计目标以及具体实现方式,包括如何将Java的思想运用到实际系统的详细设计之中。

相关文档
最新文档