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课程设计 万年历 源代码

测试用例设计:根据 需求文档和功能描述, 设计出能够覆盖所有 功能的测试用例
测试工具:使用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课程设计

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课程设计 万年历
}
}
3.4代码实现
package ss2;
import java.applet.Applet;
import java.awt.*;
import java.util.*;
public class WanNianLi extends Applet{
static final int TOP = 70; //顶端距离
int searchMonth,searchYear; //查询的年份及月份
}
(4)绘制程序的界面
public void init(){
setBackground(Color.green); //设置背景颜色
searchMonth = calendar.get(Calendar.MONTH); //得到系统年份,当前的年份
add(monthChoice);
add(btUpdate);
int componentCount=this.getComponentCount(); //得到Applet中的组件数量
for (int i=0;i<componentCount;i++){
getComponent(i).setFont(smallFont); //设置所有组件的显示字体
monthChoice.addItem(months[i]); //增加下拉框选项
}
monthChoice.select(searchMonth); //设置下拉框当前选择项
add(monthChoice);
add(btUpdate);
int componentCount=this.getComponentCount(); //得到Applet中的组件数量

万年历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-万年历课程设计报告

西安科技大学程序设计综合实训课程设计报告题目:万年历班级:学号:姓名:2103年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万年历制作

XXXX学院软件工程专业JAVA程序设计设计名称:java软件开发课程设计设计题目:《万年历》学生学号:专业班级:学生姓名:学生成绩:指导教师(职称):课题工作时间:2017.03.07 至2016.03.10设计要求:改机日历程序,要求是,从命令行输入整数年,程序自动输出1-12月历。

格式要求,做成word文件,写出重点步骤的说明,附上运行截图,附上源码;文件名:年级专业班级学号_姓名.doc源代码class CalenderTest1 {public static void main(String[] args){/*使用命令行参数,运行程序时输入数据*/String str1=args[0];/*只要能把命令行输入的字符串,转化成int数据"2017"->2017*/int year=Integer.parseInt(str1);//System.out.println("year="+year);//System.out.println("month="+month);int totalDays=0;//计算总天数//先计算从当年到1年的总天数for(int i=1;i<year;i++){//要判断闰年if(i%4==0&&i%100!=0 || i%400==0){totalDays=totalDays+366;}else{totalDays=totalDays+365;}}/*再加当月的1号if(month==1){totalDays=totalDays+1;}else{//当月1号是星期几int weekDay=totalDays%7;} */ //System.out.println("weekDay="+weekDay);//存储当前月的天数int days=totalDays;int weekDay=0;int mDays=0;for(int month=1;month<13;month++){if(month==1||month==3||month==5||month==7||month==8| |month==10||month==12){mDays=31;}else{if(month==4||month==6||month==9||month==11){mDays=30;}else{if(year%4==0&&year%100!=0 || year%400==0){mDays=29;}else{mDays=28;}}}totalDays=days;//加上当年1号到当月之间的天数for(int i=1;i<month;i++){//根据不同的月,查找相应的天数,进行加运算switch(i){case 1:case 3:case 5:case 7:case 8:case 10:case 12:totalDays=totalDays+31;break;case 4:case 6:case 9:case 11:totalDays=totalDays+30;break;case 2:if(year%4==0&&year%100!=0 || year%400==0){totalDays=totalDays+29;}else{totalDays=totalDays+28;}break;}}//再加当月的1号totalDays=totalDays+1;weekDay=totalDays%7;String title[]={"天","一","二","三","四","五","六"};String space=" "; //月历中的分隔空格//数组的黄金搭档就是for循环//JA V A的数组对象,有个属性length直接可以得到长度System.out.println();System.out.print(""+month+"月");System.out.println();for(int i=0;i<title.length;i++){System.out.print(space+title[i]);}//换行,把插入点放在下一行System.out.println();/*这里要有输出内容时的控制单元着这里,一个输出单元就是"空隙"+标题字符的宽度要让1号输出到正确位置,就需要事先用空格将其挤到该出现的位置,是星期几,就向后挤几个单元*/for(int i=0;i<weekDay;i++){//中文的标题字符,一个宽度是两个空格字符System.out.print(space+" ");}/*从1号到mDays循环输出月历,要注意换行条件注意每个日期的输出单元*/for(int d=1;d<=mDays;d++){//如果输出的日期小于10则左侧补空格/*当前的月历格式,指星期天是起始换行(开始下一周)条件就是(d+weekDay-1)%7==0, 就输出换行符if((d+weekDay-1)%7==0){System.out.println();}if(d<10){System.out.print(space+" "+d);}else {System.out.print(space+d);}}System.out.println();}}}在原有代码的基础上,对月份进行循环,并且将月份的循环放在,寻找月份天数的循环之前。

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)。

J a v a课程设计万年历 Revised by Chen Zhen in 2021
河北科技大学
课程设计报告学生姓名:学号:
专业班级:
课程名称: 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
import
import
import
import
import;
import
import
import ;
import
import ;
import
import .*;
import
import .*;
import ;
import .*;
import .*;
import .*;
import .*;
import
public class wannianli extends JFrame implements ActionListener{
private Calendar cal= ();
private String [] str = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};
private DefaultTableModel dtm = new DefaultTableModel(null,str);
private JTable table = new JTable(dtm);
ormat(new"-");
(strDate[0]), (strDate[1])-1, 0);
showCalendar(strDate[0]), (strDate[1]), cal);
(false);ength() != 4)
{ throw new NumberFormatException();
}
y = ());
m = ());
}
catch (NumberFormatException ex)
{
ength() != 4)
{ throw new NumberFormatException();
}
y = ());
m = ());
} catch (NumberFormatException ex)
{
(this, "请输入4位0-9的数字!", "年份有误", ;
return;
}
for (int i = 0; i < lastTime+1; i++)
{
(0);
}
if() == bLastYear)
{
(--y));
}
if() == bNextYear)
{
(++y));
}
if() == bLastMonth)
{
if(m == 1) {
(--y));
m = 12;
(m));
}
else
{
(--m));
}
}
if() == bNextMonth)
{
if(m == 12)
{
(++y));
m = 1;
(m));
}
else
{
(++m));
}
}
(y, m-1, 0);
showCalendar(y, m, cal);
(m));
// (m));
}
}
五、软件测试
图1 界面图
图2 界面图下拉选择2月份
六、课程设计总结
本次Java课程设计我们这组做的课题是万年历,刚开始拿到题目我们组员都不知如何下手,经过小组成员一起查找资料,并且开会讨论,我们确定了设计的设计目标以及具体实现方式,包括如何将Java的思想运用到实际系统的详细设计之中。

实验过程中,首先要将系统要实现的功能分为几大模块,然后每个组员分别完成,在此过程中使我加深了对Java的理解,以及如何进行团队工作的划分,学会发现各组员的长处并将其发挥出来。

虽然大家没怎么学过Java,但大家都有C语言基础,所以通过努力实验,进一步培养我们利用Java语言进行编程和调试程序的能力,同时使我们能够学会将C语言与Java语言结合起来编写较复杂具有实际意义和算法复杂度较小的程序。

与此同时熟练掌握Java语言的编辑,编译,调试程序,并将算法转变为程序实现。

正确理解各种数据结构的逻辑特性和存储表示和基本操作的算法实现。

掌握算法的时间分析和空间分析的技术。

针对问题的特点选择合适的数据结构,设计实用高效的算法,提高大家的算法设计的能力和动手实验的技能。

通过这次课程设计,使我灵活应用所学Java知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。

初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;并用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养我们严谨的科学态度和良好的工作作风。

同时在这次课设中,培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。

而这是日后最实用的。

要面对社会的挑战,只有不断的学习、实践,再学习、再实践。

这对于我的将来也有很大的帮助。

以后,不管有多苦,我想我都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。

就像中国提倡的艰苦奋斗一样,我都可以在实验结束之后变的更加成熟,会面对需要面对的事情,以及学会遇到问题,不急不慌,慢慢解决它
这次课程设计本人主要编写了控件的单击事件跟选择事件,还有参与小组共同完成的流布局管理。

历时两个星期终于在大家的一起努力下顺利完成了。

虽然过程辛苦是不可避免,但收获还是令人感到尤其的欣慰。

在这次的课程设计中不仅检验了我所学习的知识,也培养了我的实践能力,让我知道遇到一个问题,如何去寻找思路,如何去解决问题,最终完成整个事情。

在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。

学会了合作,学会了宽容,学会了理解,也学会了做人与处世。

课程设计是我们专业课程知识综合应用的实践训练,是我们迈向社会,从事职业工作前一个必不少的过程。

实验过程中,也十分感谢实验指导老师刘伟老师的指点与教导。

这次课程设计不仅是对这学期所学知识的一种综合检验,而且也是对自己动手能力的一种提高,增强了自己实践能力。

通过这次课程设计使我明白了自己知识还比较欠缺,只是学习书本知识还是远远不够的,自己不会的东西还有太多,学习需
要自己长期的积累,在以后的学习、工作中都应该不断的学习,将课本的理论知识与生活中的实践知识相结合,不断提高自己文化知识和实践能力。

相关文档
最新文档