Java使用图形用户界面万年历

合集下载

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实现简单的万年历

Java实现简单的万年历本⽂实例为⼤家分享了Java实现简单万年历的具体代码,供⼤家参考,具体内容如下1 要求1、输⼊年份;2、输⼊⽉份;3、输出某年某⽉的⽇历。

2 思路1、实现从控制台接收年和⽉,判断是否是闰年(判断是否是闰年:能被4整除但不能被100整除;或者能被400整除);2、计算输⼊⽉份的天数;3、计算该⽉第⼀天是星期⼏;3.1 计算输⼊年份距离1900年1⽉1⽇的天数;3.2 计算输⼊⽉份之前的天数(从当年年初开始);3.3 将以上两组数据进⾏求和;3.4 已知该⽉之前的天数,计算输⼊⽉份的第⼀天是星期⼏(从1900年1⽉1⽇(星期⼀)开始推算: 星期⼏ = 1 + 天数差 % 7 )。

4、按格式输出该⽉⽇历。

3 源代码import java.util.Scanner;public class index {//每个⽉的天数public static int monthday(int month, int year) {if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {int[] day = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};return day[month];} else {int[] day = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};return day[month];}}//⽉份总天数public static int monthdays(int month, int year) {int totaldays = 0;for (int i = 1; i < month; i++) {totaldays = totaldays + monthday(i, year);}return totaldays;}//距离1900年的年份总天数public static int yeardays(int year){int yeardays = 0;for (int i = 1900;i<year;i++){if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {yeardays = yeardays+366;} else {yeardays = yeardays+365;}}System.out.println(year+"年距离1900年的总天数"+yeardays);return yeardays;}//输出⽇历public static void printCalendar(int month,int year){int totaldays = 0;if (year > 0) {if (month > 0 && month < 13) {//距离1900年1⽉1⽇总天数totaldays = monthdays(month,year)+yeardays(year);System.out.println(year+"年"+month+"⽉1⽇距离1900年的总天数:"+totaldays);System.out.println("\n**********"+year+"年"+month+"⽉的⽇历为**********");System.out.println("⼀\t⼆\t三\t四\t五\t六\t⽇\t");int week = 1+totaldays%7;//根据1⽇为周⼏输出空格for(int i=1;i<week;i++){System.out.print(" \t");}//输⼊具体⽇期for(int i=1;i<=monthday(month,year);i++){System.out.print(i+"\t");if(week==7){week = 1;//重置为星期⼀System.out.println();}else{week++;}}} else {System.out.println("输⼊的⽉份不合法!");}} else {System.out.println("输⼊的年份不合法!");}}//主函数public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("***********************欢迎使⽤万年历**************************");System.out.println("*********请选择你需要进⾏的操作(输⼊进⾏操作之前的数字)**********"); System.out.println("********************1.查询某年某⽉的⽇历************************");System.out.println("********************2.结束操作*********************************");System.out.print("\n请选择你需要进⾏的操作:");int a = scanner.nextInt();for (int i=0;i>=0;i++) {switch (a) {case 1:System.out.print("请选择年份:");int year = scanner.nextInt();System.out.print("请选择⽉份:");int month = scanner.nextInt();printCalendar(month, year);System.out.print("\n请选择你需要进⾏的操作:");a = scanner.nextInt();break;case 2:System.out.println("退出程序成功!");return;}}}}4 结果截图注意:我的周⽇是在最后⼀栏以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

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

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

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

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

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

1997年J2SE1.1发布。

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

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

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

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

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

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

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

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

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

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

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

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

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

JAVA实现的简单万年历代码

JAVA实现的简单万年历代码

JAVA实现的简单万年历代码本⽂实例讲述了JAVA实现的简单万年历。

分享给⼤家供⼤家参考,具体如下:import java.util.Scanner;public class PrintCalendar {public static void main(String[] args) {int years = 0;int month = 0;int days = 0;boolean isRun = false;//從控制台輸⼊年,⽉Scanner input = new Scanner(System.in);System.out.print("請輸⼊年份:");years = input.nextInt();System.out.print("請輸⼊⽉份:");month = input.nextInt();System.out.println("\n*********"+years+"年"+month+"⽉⽇曆表************");//判断是否是闰年if((years % 4 == 0 && years % 100 != 0) || (years % 400 == 0)){isRun = true;}int totalDays = 0; //累計天數//計算距離1900年1⽉1⽇的天數for(int i = 1900; i < years; i++){if((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)){totalDays = totalDays + 366;}else{totalDays = totalDays + 365;}}int beforeDays = 0;//根據⽉份判斷天數for(int j = 1; j <= month; j++){switch(j){case 1:case 3:case 5:case 7:case 8:case 10:case 12:days = 31;break;case 4:case 6:case 9:case 11:days = 30;break;case 2:if(isRun){days = 29;}else{days = 28;}default:System.out.println("输⼊⽉份不正确!!");}if(j < month){beforeDays = beforeDays + days;}}totalDays = totalDays + beforeDays; //統計到⽬前總天數int firstDayOfMonth = 0;int temp = 1 + totalDays % 7 ;if(temp == 7){firstDayOfMonth = 0; //週⽇}else{firstDayOfMonth = temp;}/* 输出⽇历 */System.out.println("星期⽇\t星期⼀\t星期⼆\t星期三\t星期四\t星期五\t星期六");for(int k = 0; k < firstDayOfMonth; k++){System.out.print("\t");}for(int m = 1; m <= days; m++){System.out.print( m + "\t");if((totalDays + m) % 7 == 6){System.out.print("\n");}}}}关于万年历的制作感兴趣的朋友还可参考本站在线⼯具:希望本⽂所述对⼤家Java程序设计有所帮助。

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

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

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

后来它的开发者们发现、可移植和高效能等众多优点。

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)通过网页形式运行,实现图形界面。

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

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

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

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

然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。

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程序编写万年历程序的设计报告,旨在详细介绍该程序的设计思路和实现细节。

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

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

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

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

用JAVA编万年历和记事本

用JAVA编写万年历!万年历其实可分为5步来做,下面我们来详细分析下步骤:a:先输出提示语句,并接受用户输入的年、月。

b:根据用户输入的年,先判断是否是闰年。

C:根据用户输入的月来判断月的天数。

D:用循环计算用户输入的年份距1900年1月1日的总天数。

E:用循环计算用户输入的月份距输入的年份的1月1日共有多少天。

F:相加D与E的天数,得到总天数。

G:用总天数来计算输入月的第一天的星期数。

H:根据G的值,格式化输出这个月的日历!其实有些步骤是可以合并的,这得靠大家自己的习惯了,下面我们就来一步一步来完成万年历。

&lt;这里只提供讲解,没有源码下载哦!其实大家不必去网上下载,那有意思吗?我们学习是为了什么啊!要下载那就不必来这了!呵呵,发表下自己的看法!&gt;这里大家肯定都能看得懂的,1:这是为了美化,我们编的程序是让别人看的,所以就要输出个标题的。

2:这里就是用来接收用户输入的信息,并赋值给两个变量!这个相信大家都能看得懂!3:这里我们就要开始万年历的真正开发了,看完代码大家都知道这是要进行闰年判断了,这里大家要先明白判断闰年的条件是什么?(条件:这个年首先不是整百年就是最后两位是0的年,因为如果是的话就要除以400了,并且还要能被4整除的或者就是整百年能被400除尽的年是闰年)这里声明了一个boolean值,用来储存是否是闰年,因为咱们后面要用得到的!下面就要进行第二步了,来处理用户输入的月了,看完后大家都明白了吧!这里要用if来判断输入的月份,我们给月份分类,有这几种情况:有31天,有30天,有29天,有28天,下面我们就要想明白每个类的判断条件了?(条件:有31天的月是1、3、5、7、8、10、12,有30天的月是4、6、9、11,剩下就是2月了,它有两种情况,就是根据第一步的boolean值来判断了,如果为true就是29天,为false则是28天了。

)这里用到了一个变量tian,因为咱们后面还要用到的,这些变量可以在做到后面再回来补上的。

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

工业职业技术学院课程名称JA V A程序设计班级: 网络技术081姓名:王卉指导老师:目录前言 (2)1需求分析 (2)1。

1需求分析 (2)1。

2功能设计 (2)2。

概要设计 (2)2。

1程序设计思路 (2)2.2程序运行界面 (3)2。

3流程图 (4)3。

各模块的功能及程序说明 (4)3.1。

初始化组件 (4)3.2.初始化数据 (5)3。

3。

绘制程序界面 (6)4.测试分析 (7)5.源程序清单 (9)6.课程设计体会 (17)参考文献 (17)前言Java的前身是Oak,它一开始只是被应用于消费性电子产品中。

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

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

1997年J2SE1.1发布。

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

十多年来,Java编程语言及平台成功地运用在网络计算及移动等各个领域.Java的体系结构由Java语言、Java class、Java API、Java虚拟机组成。

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

Java 支持多线程编程,Java运行时系统在多线程同步方面具有成熟的解决方案.Java 的平台标准有Java ME,Java SE和Java EE。

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

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

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

以上的每种开发工具都有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种合适的开发工具.1需求分析1.1需求分析本程序的要求为:1.使用图形用户界面;2.本程序能够实现日期与星期的查询。

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的思想运用到实际系统的详细设计之中。

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

9、万年历 要求: 使用图形用户界面。 实现日期与星期的查询 import java.awt.*; import java.awt.event.*; import java.text.*; import java.util.*; import javax.swing.*; import javax.swing.table.*; public class test1 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 JPanel p1 = new JPanel(); //装入控制日期按钮的模块 private JPanel p2 = new JPanel(); private JPanel p3 = new JPanel(new BorderLayout()); private JPanel p4 = new JPanel(new GridLayout(2,1)); private JPanel p5 = new JPanel(new BorderLayout()); private JLabel l = new JLabel("文本框中可直接键入要查找的年份,以提高查询效率"); private JLabel lt = new JLabel(); private int lastTime;

public test1() { super("万年历"); //框架命名 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数 this.getContentPane().setLayout(new BorderLayout(10, 0));

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); //将按钮添加到Jpanel上

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); p3.add(p2, BorderLayout.SOUTH); p4.add(l); p4.add(lt); p5.add(p4, BorderLayout.SOUTH); p5.add(sp, BorderLayout.CENTER); p5.add(p1, BorderLayout.NORTH);

this.getContentPane().add(p5, BorderLayout.CENTER); this.getContentPane().add(p3, BorderLayout.EAST);

String [] strDate = DateFormat.getDateInstance().format(new 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]); jtfMonth.setText(strDate[1]); new Timer(lt).start(); this.setBounds(200,200,600,320); this.setResizable(false); this.setVisible(true); }

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)

相关文档
最新文档