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

杭州师范大学钱江学院课程设计题目万年历学院钱江学院专业信电分院计算机科学与技术班级计算机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的万年历设计与实现

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课程设计报告之万年历程序设计报告(1)11

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

工业职业技术学院课程名称JA V A程序设计班级: 网络技术081 :指导老师:目录前言 (2)1需求分析 (2)1.1需求分析 (2)1.2功能设计 (2)2.概要设计 (2)2.1程序设计思路 (2)2.2程序运行界面 (4)2.3流程图 (5)3.各模块的功能及程序说明 (5)3.1.初始化组件 (5)3.2.初始化数据 (5)3.3.绘制程序界面 (6)4. 测试分析 (8)5. 源程序清单 (10)6. 课程设计体会 (18)参考文献 (18)前言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万年历设计报告

陕西师范大学远程教育学院课程名称计算机科学与技术学习中心(点):彬县职教中心专业:计算机层次:专升本姓名:孟坤批次: 141JA V A万年历设计报告一课程实习目的:(1)为用户开发一个便捷的万年历;(2)对java技术的灵活应用;(3)掌握日期处理技术;(4)初步了解软件工程理论知识。

二课程实习内容与要求:(1)内容通过本课程设计教学所要求达到的目的是:实现一个简洁的万年历,通过日期的处理,能按照用户的需求查看各年份的日期。

(2)课程实习的基本要求(1)使用图形用户界面;(2)实现日期与星期的查询。

三系统功能分析:1 系统的主要功能:(1)可以查看当前的年份、月份和日期;(2)增加了时间栏,便于用户查看当前时间;(3)能够查找1至9999年的日期与星期的关系。

2 系统功能结构图(1)Clock类:实现了Runnable接口,运用线程,实现时钟的功能,包含了paint方法。

Paint方法:从系统获取当前日期,以设置时钟的初始值。

(2)MainFrame类:作为主类实现了JFrame接口,调用Clock类,包含了MainFrame方法,Init方法,use方法,Resetday方法。

MainFrame方法:定义各个参数,应用AWT的绘图功能,构建总体框架;获取所要查找的年份和月份,通过调用use方法和Resetday方法,实现“查看”按钮的功能,并得到所需结果。

Init方法:调用系统的年份和月份,以设置查看面板和日期面板的初始值。

use方法:确定所要查询的年月的第一天的是星期几。

Resetday方法:进一步处理所查询的年份月份,确定查询月份的天数;四系统运行1.运行界面如下:用户可根据需要在下拉式菜单中选择所要查询的年份和月份,然后点击“查看”按钮:图2 运行界面2.流程图:图3五课程设计体会本次课程设计为课本后设计题目任选一题进行设计。

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

因为通过设计这样的一个日历小组件,能使自己对JA V A 的一些基础知识掌握的更加牢固。

万年历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 应用程序。

万年历 课程设计报告书

万年历 课程设计报告书
}
2)查询事件的设计
Event类的target属性可得到事件源,用它与按钮的实例进行比较,可得知时间是否来源于按扭。
事件以后,分别调用getText方法和getSelectedIndex方法从年份输入文本域得到待查询的年份与月份。需要注意的是,从文本域得到的结果为字符串,需要调用Integer类的parseInt方法将其转换为整型值。GregorianCalenda类的时间计算从1900年开始,当用户输入时间早于这个时间时,需要处理。程序最早调用repaint方法重绘屏幕,把日期信息显示出来。源程序代码如下:
//判断当年是否为闰年,为了计算当年2月份的天数
for(j=1;j<=28;j++){
if((j-1)%7==0){
day1=1;day2=1;day3=1; //设置连续3个月日期均从1号开始
//分别设置一年中每个月1日的星期,和当月的总天数
switch(j/7){
case 12:
spa1=Ospa3; cou1=31; //1月
spa2=(spa1+cou1)%7; cou2=leap?29:28; //2月
spa3=(spa2+cou2)%7 cou3=31 //3月
Ospa3=spa3;
break;
case13:
spa1=(Ospa3+cou3)%7;cou1=30; //4月
spa2=(spa1+cou1)%7; cou2=31; //5月
tfYear.setText (String.valueOf (searchYear));
for(int i = 0; i < 12; i ++){
monthChoice.addItem (months [i] );//增加下拉框选项

万年历课程设计任务书

万年历课程设计任务书
public JCalendar() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
} //异常抛出
}
//带日期设置的构造函数
public JCalendar(int year, int month, int day) {
cal.set(year, month, day);
//初始化年、月、日
iniCalender();
this.setLayout(new BorderLayout());
this.setBorder(BorderFactory.createRaisedBevelBorder());
this.setMaximumSize(new Dimension(200, 200));
另外值得一提的是,我认为合作也是很有价值的一件事,这也是我感悟的。
大家都知道术业有专攻之说。确实如此,不同的人对不同的领域有不同的领悟能力。
要完成一件综合性的任务,并非那么简单,不单指这任务内容多么难,而是指它所涉及的知识点很广。这次任务书,不仅仅是要求我们写一个程序,打几个字,还要求我们画流程图。对于计算机,我是个们外汉。流程图,前所未闻,更别提画了。面对这个难题,我开始很疑惑,很郁闷。天无绝人之路,我碰到一计算机高手,在他的帮助之下,我现在不光画出了所需流程图,还懂的流程图的基本作图方法。
//主日历
private GregorianCalendar cal=new GregorianCalendar(l);
//星期面板
private JPanel weekPanel=new JPanel();
//日期按钮组
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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

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

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

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

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

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

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

(4)运行调试与分析讨论---给出运行屏幕截图,分析运行结果,有何改进想法等。

(5 )设计体会与小结---设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。

(6 )参考文献(必须按标准格式列出,可参考教材后面的参考文献格式)(7) 报告按规定排版打印,要求装订平整,否则要求返工;(8) 课设报告的装订顺序如下:封面---任务书---中文摘要---目录----正文---附录(代码及相关图片)2012年12 月日(9 )严禁抄袭,如有发现,按不及格处理。

2012年12 月24 日课程设计(论文)评审意见讲师中文摘要Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems 公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME )的总称。

Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

Java平台由Java虚拟机(Java Virtual Machine,简称JVM )和Java应用编程接口( Applicatio n Programmi ng In terface,简称API)构成。

Java 应用编程接口为Java 应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。

在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。

现在Java平台已经嵌入了几乎所有的操作系统。

这样Java程序可以只编译一次,就可以在各种系统中运行。

Java应用编程接口已经从1.1x版发展到1.2版。

目前常用的Java平台基于Java1.4, 最近版本为Java1.7。

Java优势,是适合团队开发,软件工程可以相对做到规范,这是一个很难比拟的优势。

java 劣势,是j2ee的架构很完美,第一版软件可以做满意,但是很不适合互联网模式的持续不断修改。

互联网软件工程管理上的不足,持续的修修补补导致架构的破坏。

系统更新需要重启web服务,很难接受。

Java是一种应用前景很广的语言,应该好好学习,通过课程设计巩固学过的知识,为今后的学习打下坚实的基础。

2012年12 月日目录一、课程设计任务及要求 (1)二、需求分析 (1)三、设计思路 (2)四、详细设计 (3)五、运行调试与分析讨论 (10)六、设计体会与小结 (12)七、参考文献 (13)、课程设计任务及要求1)任务:1、万年历是一个强大的日历系统,通过它可以实现对过去, 现在以及将来日期的查找, 通过在年份对话框中输入要查询的年份,再相应的在月份对应的下拉菜单选择要查询的月份,则可得到相应的日历。

本实验是对图形用户界面,布局管理器的综合运用,理解JAVA的时间处理机制,编写独立运行的窗口。

2)要求:1. 使用图形用户界面。

2. 本程序能够实现任意年份月份的查询。

二、需求分析1). 随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。

文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java 语言之后,我决定使用Java 语言编写一个简单的万年历,可以实现查询日期和显示时间的功能,满足日常基本的工作学习和娱乐需要。

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

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

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

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

4) 如果年份小于1582 年则程序不予判断。

1 )流程图:2)代码:import java.applet.Applet;import java.awt.*;import java.util.*;public class Cale ndarApplet exte nds Applet{ static final int TOP = 70; // 顶端距离static final int CELLWIDTH=50,CELLHEIGHT = 30; //单元格尺寸static final int MARGIN = 5; //边界距离static final int FEBRUARY = 1;TextField tfYear = new TextField("2004", 5); //显示年份的文本域Choice monthChoice = new Choice(); // 月份选择下拉框Button btUpdate = new Butt on ("查看");// 更新按钮GregorianCalendar calendar=new GregorianCalendar();日历对象Font smallFont = new Font("TimesRoman", Font.PLAIN, 15); //显示小字体Font bigFont = new Font("TimesRoman", Font.BOLD, 50); //显示大字体String days[] = {" 星期日", "星期一", "星期二", "星期三","星期四", "星期五", "星期六"};String months[] = {" 一月", "二月", "三月", "四月","五月", "六月", "七月", "八月", "九月","十月", "十一月", "十二月"};int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 每个月的天数int searchMonth,searchYear; /查/ 询的年份及月份public void init(){ setBackground(Color.yellow); //设置背景颜色searchMonth = calendar.get(Calendar.MONTH); /得/ 到系统年份searchYear =calendar.get(Calendar.YEAR); //得到系统月份add(new Label(" 年:")); //增加组件到Applet tfYear.setText(String.valueOf(searchYear)); 设// 置文本域文字add(tfYear);add(new Label(" 月:"));monthChoice.setFont(smallFont); //设置月份选择下拉框的显示字for (int i= 0; i < 12; i++) { monthChoice.addItem(months[i]); //增加下拉框选项}monthChoice.select(searchMonth); /设/ 置下拉框当前选择项add(monthChoice);add(btUpdate);int componentCount=this.getComponentCount(); /得/ 到Applet 中的组件数量for (int i=0;i<componentCount;i++){ getComponent(i).setFont(smallFont); //设置所有组件的显示字体}}public void paint(Graphics g){FontMetrics fontMetric; // 显示字体的FontMetrics 对象int fontAscent;int dayPos;int totalWidth, totalHeight; // 总的宽度,高度int numRows; //行数int xNum, yNum; //水平和垂直方向单元格数量int numDays;String dayStr; //显示天数字符串int margin;g.setColor(Color.lightGray); //设置当前颜色g.setFont(bigFont); //设置当前使用字体g.drawStri ng(searchYea 叶年",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 (int i = 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 (int i = 0; i <= totalWidth; i += CELLWIDTH) { g.drawLine(i, TOP , i, TOP+ totalHeight); // 绘制表格线}for (int i = 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;}}public boolean action(Event e, Object o){int searchYearInt;if (e.target==btUpdate){searchMonth = monthChoice.getSelectedIndex(); // 得到查询月份searchYearInt = Integer.parseInt(tfYear.getText(), 10); //得到查询年份if (searchYearInt > 1581){ searchYear =searchYearInt;} repaint(); // 重绘屏幕return true;} return false;}private int getNumberRows(int year, int month) { //得到行数量int firstDay;int numCells;if (year < 1582) { //年份小于1582年,则返回-1 return (-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 int getFirstDayOfMonth(int year, int month) { // 得到每月的第一天int firstDay;int i;if (year < 1582) { //年份小于1582 年,返回-1 return (-1);}if ((month < 0) || (month > 11)) { // 月份数错误,返回-1 return (-1);}firstDay = getFirstDayOfYear(year); //得到每年的第一天for (i = 0; i < month; i++) { firstDay += daysInMonth[i]; // 计算每月的第一天}if ((month > FEBRUARY) && calendar.isLeapYear(year)) { firstDay++;「efum(firsfDay%7=private infgefFi 「sfDayofyear(infyeaw斗wa ^s Minf-eapYears 八infhundreds 八 inffourHundreds八in二「sc- 宀二&>书序宁B 1「efum(二)八二岚回二-eapYears H(year 二581)、4八hundredsH(year二52)二00八-eapYears —H hundreds八fourHundreds H(year-122)、400八-eapYears +H fourHundreds八f i 「sll 5+(year -1582) + -eapYears % 7八注®a^M「efumfi 「sc五、运行调试与分析讨论1)背景显示当前日期:(小府用CalendarApplerclass, 口回「小应用程序年:2013|月:一月 T 查看已倉动小应用程玮「2 )月份下拉菜单:[全I 小应用耳序楚書毒CalendarAppletchs^ I = I 回 小应用程序13 14 20 21 27281 015 22 292013 月:月=4 5 111 12 18 192526'期五星期六〔月月月月月月月月三一四五六七八九3)年份框输入2015,月份选择3,点击查看: 曰小应冃谟孚童#H Calends ^Applet, class <1 ■■应用程序六、设计体会与小结JAVA课程基础内容掌握并不是很抓实,而对于设计一个万年历程序,由于其功能简单设计也相对较易,对于我个人的学习情况比较合适,并且通过设计这样的一个日历小组件,也能使自己对JAVA的一些基础知识掌握的更加牢固。

相关文档
最新文档