收藏 分销(赏)

java万年历课程设计完成版Applet.doc

上传人:仙人****88 文档编号:11721991 上传时间:2025-08-09 格式:DOC 页数:20 大小:644.50KB 下载积分:10 金币
下载 相关 举报
java万年历课程设计完成版Applet.doc_第1页
第1页 / 共20页
java万年历课程设计完成版Applet.doc_第2页
第2页 / 共20页


点击查看更多>>
资源描述
枣 庄 学 院 信息科学与工程学院 课程设计任务书 题目: 万年历程序的设计与开发 学 号:201312310128、2101312310115、201312310117 姓 名: 彭德强 李昌晋 李瑞玲 专 业: 计算机科学与技术 课 程: JAVA程序设计 指导教师: 王琳琳 职称: 讲师 完成时间: 2013 年11月----2013年12月 枣庄学院信息科学与工程学院制 年 月 日 课程设计任务书及成绩评定 课程设计的任务和具体要求 任务: 熟练使用eclipse,独立开发一些应用程序,要求学生具备较强的自学能力和系统分析、设计能力,较好地进行团队合作。开发出的系统运行稳定,符合实际需求,界面美观大方。 课程设计要求: 1.界面美观大方 2.应完成的基本功能有: 完成年份、月份以及具体日期的更新 指导教师签字: 、 日期: 指导教师评语 成绩: 指导教师签字: 日期: 课程设计所需软件、硬件等 所需软件:eclipse环境,JDK 所需硬件:一台电脑 课程设计进度计划 起至日期 工作内容 备注 2013.11.8-2013.11.15 2013.11.16-2013.11.18 2013.11.20-2013.11.26 2013.11.28-2013.12.3 2013.12.4-2013.12.6 收集相关资料 进行总体规划 编写程序与调试程序 程序测试 撰写课程设计任务书 参考文献、资料索引 序号 文献、资料名称 编著者 出版单位 [1].曾令明 索 望 甘 刚 宋 波,Java程序设计教程,西安电子科技大学出版社,2007.8 [2].孙全党 王吴迪 赵枫朝,Java程序设计应用教程,电子工业出版社,2006.2 [3].赵玉阳,Java从入门到精通,清华大学出版社,2006.8 3 目 录 前言 2 1需求分析 3 1.1需求分析 3 1.2功能设计 3 2.概要设计 3 2.1程序设计思路 3 2.2程序运行界面 4 2.3流程图 4 3.各模块的功能及程序说明 5 3.1.初始化组件 5 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是大多开发工具的基础。以上的每种开发工具都有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种合适的开发工具。 本课程设计是一个JAVA小日历组件的设计,利用Frame框架类、面板类进行图形化界面设计,实现小日历的公历显示等功能。 1需求分析 1.1需求分析 本程序的要求为:1.使用图形用户界面;2.本程序能够实现日期与星期的查询。 1.2功能设计 本程序要构建的万年历程序,其功能有以下几个方面: (1)通过网页形式运行,实现图形界面。 (2)能以月历形式显示日期与星期。 (3)支持用户自己输入年份,并提供月份的下拉形式菜单来选择月份。 (4)通过点击“更新”来刷新日历。 2.概要设计 2.1程序设计思路 1. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。   2. 输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若是7,则为星期日。 3. 算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并从该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除7得0换行,即可完整的输出该月的日历。 4. 如果年份小于1582年则程序不予判断。 2.2程序运行界面 图1程序运行界面 2.3流程图 程序初始化 获取当前系统时间年份等数据 是否输入年份或选择月份 开始 计算,绘制屏幕 结束 提交年月日变更数据 3.各模块的功能及程序说明 3.1.初始化组件 import java.awt.*; import java.util.*; 3.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; TextField tfYear = 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[] = {"一月", "二月", "三月", "四月","五月", "六月", "七月", "八月", "九月","十月", "十一月", "十二月"}; int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //每个月的天数 int searchMonth,searchYear; //查询的年份及月份 3.3.绘制程序界面 public void init(){ setBackground(Color.white); //设置背景颜色 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); //设置所有组件的显示字体 } } 4.测试分析 图2 在年份输入框内输入1582后点击更新后的情况 图3 月份下拉列表框 图4 选择月份后的情况 图5点击更新按钮后显示的结果 5.源程序清单 import java.applet.Applet; import java.awt.*; import java.util.*; 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; TextField tfYear = 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[] = {"一月", "二月", "三月", "四月","五月", "六月", "七月", "八月", "九月","十月", "十一月", "十二月"}; int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //每个月的天数 int searchMonth,searchYear; //查询的年份及月份 public void init(){ setBackground(Color.white); //设置背景颜色 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.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 (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++; } return (firstDay % 7); } private int getFirstDayOfYear(int year){ //计算每年的第一天 int leapYears; int hundreds; int fourHundreds; 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; } } 6.课程设计体会 (1)选题目的:本次课程设计为课本后设计题目任选一题进行设计。思考一段时间后,我们组决定做一个万年历的设计。主要考虑到以前时间少课程内容多,JAVA课程基础内容掌握并不是很抓实,而对于设计一个万年历程序,由于其功能简单设计也相对较易,对于我们组每个人的学习情况比较合适,并且通过设计这样的一个日历小组件,也能使自己对JAVA的一些基础知识掌握的更加牢固。 (2)对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用哪些知识点,如相关的类和对象等。最后,就是根据初步设计的功能和布局构架,考虑用源代码进行实现了。 经过了长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个课程设计。在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。 通过这次课程设计,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题。所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。网络是我们学习的最好的老师之一。有问题,问网络,是一个很好的习惯。 参考文献 [1].曾令明 索 望 甘 刚 宋 波,Java程序设计教程,西安电子科技大学出版社,2007.8 [2].孙全党 王吴迪 赵枫朝,Java程序设计应用教程,电子工业出版社,2006.2 [3].赵玉阳,Java从入门到精通,清华大学出版社,2006.8 17
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服