JAVA课程设计报告-万年历.pdf

上传人:叶*** 文档编号:36104767 上传时间:2022-08-25 格式:PDF 页数:16 大小:423.84KB
返回 下载 相关 举报
JAVA课程设计报告-万年历.pdf_第1页
第1页 / 共16页
JAVA课程设计报告-万年历.pdf_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《JAVA课程设计报告-万年历.pdf》由会员分享,可在线阅读,更多相关《JAVA课程设计报告-万年历.pdf(16页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、徐州工业职业技术学院第 1页目目录录前言前言.21 1 需求分析需求分析.21.11.1 需求分析需求分析.21.21.2 功能设计功能设计.22.概要设计概要设计.22.12.1 程序设计思路程序设计思路.22.22.2 程序运行界面程序运行界面.32.32.3 流程图流程图.43.3.各模块的功能及程序说明各模块的功能及程序说明. 43.1.3.1.初始化组件初始化组件.43.2.3.2.初始化数据初始化数据.43.3.3.3.绘制程序界面绘制程序界面.54测试分析测试分析.65源程序清单源程序清单.86 6课程设计体会课程设计体会.16参考文献.错误!未定义书签。错误!未定义书签。徐州工

2、业职业技术学院第 2页前言前言Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台 (即JavaSE, JavaEE,JavaME)的总称。Java 最初被命名为 Oak,目标设置在家用电器等小型系统的程序语言,应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun 公司放弃了该项计划。随着 1990 年代互联网的发展,Sun 公司看见 Oak 在互联网上应用的前景,于是改造了 Oak,于 1995 年 5 月以 Java 的名称正式发

3、布。Java 编程语言的风格十分接近 C、C+语言。Java 是一个纯的面向对象的程序设计语言,它继承了 C+语言面向对象技术的核心。Java 舍弃了 C +语言中容易引起错误的指针(以引用取代) 、运算符重载(operator overloading) 、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming) 、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。1 1 需求分析需求分析1.11.1 需求分析需求分析本程序的

4、要求为:1.使用图形用户界面;2.本程序能够实现日期与星期的查询。1.21.2 功能设计功能设计本程序要构建的万年历程序,其功能有以下几个方面:(1)通过网页形式运行,实现图形界面。(2)能以月历形式显示日期与星期。(3)支持用户自己输入年份,并提供月份的下拉形式菜单来选择月份。(4)通过点击“更新”来刷新日历。2.概要设计概要设计2.12.1 程序设计思路程序设计思路1. 总天数的算法:首先用 if 语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为 366,否则,为 365。然后判断输入的年是否为定义年,若是,令徐州工业职业技术学院第 3页总天数 S=1,否则,用累加法计算

5、出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加 1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。2. 输出月份第一天为星期几的算法:使总天数除以 7 取余加 2 得几既为星期几,若是 7,则为星期日。3. 算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以 7 得 0 换行,即可完整的输出该月的日历。4. 如果年份小于 1582 年则程序不予判断。2.22.2 程序运行界面

6、程序运行界面图 1手动调节屏幕大小后的样子徐州工业职业技术学院第 4页2.32.3 流程图流程图3.3.各模块的功能及程序说明各模块的功能及程序说明3.1.3.1.初始化组件初始化组件import java.applet.Applet;import java.awt.*;import java.util.*;3.2.3.2.初始化数据初始化数据public class CalendarApplet extendsAppletstatic final int TOP = 70;/顶端距离static final int CELLWIDTH=50,CELLHEIGHT = 30;/单元格尺寸sta

7、tic final int MARGIN = 3;/边界距离static final int FEBRUARY= 1;程序初始化获取当前系统时间年份等数据提交年月变更数据是否输入年份或选择月份开始计算,绘制屏幕结束徐州工业职业技术学院第 5页TextField tfYear = new TextField(2004, 5); /显示年份的文本域Choice monthChoice = new Choice();/月份选择下拉框Button btUpdate = new Button(更新);/更新按钮GregorianCalendar calendar=new GregorianCalenda

8、r(); /日历对象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, 3

9、1; /每个月的天数int searchMonth,searchYear; /查询的年份及月份3.3.3.3.绘制程序界面绘制程序界面public void init()setBackground(Color.white);/设置背景颜色searchMonth = calendar.get(Calendar.MONTH); /得到系统年份searchYear = calendar.get(Calendar.YEAR); /得到系统月份add(new Label( 年:); /增加组件到 ApplettfYear.setText(String.valueOf(searchYear); /设置文本

10、域文字add(tfYear);add(new Label( 月:);monthChoice.setFont(smallFont);/设置月份选择下拉框的显示字体徐州工业职业技术学院第 6页for (int i = 0; i 12; i+) monthChoice.addItem(monthsi); /增加下拉框选项monthChoice.select(searchMonth); /设置下拉框当前选择项add(monthChoice);add(btUpdate);int componentCount=this.getComponentCount(); /得到 Applet 中的组件数量for (

11、int i=0;icomponentCount;i+)getComponent(i).setFont(smallFont); /设置所有组件的显示字体4测试分析测试分析图 2在年份输入框内输入 2014 后点击更新后的情况徐州工业职业技术学院第 7页图 3月份下拉列表框图 4选择月份后的情况徐州工业职业技术学院第 8页图 5点击更新按钮后显示的结果5源程序清单源程序清单import java.applet.Applet;import java.awt.*;import java.util.*;public class CalendarApplet extendsAppletstatic fin

12、al 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); /显示年份的文本域徐州工业职业技术学院第 9页Choice monthChoice = new Choice();/月份选择下拉框Button btUpdate = new Button(更新);/更新按钮GregorianCalendar c

13、alendar=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, 3

14、1, 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( 年:); /增加组件到 ApplettfYear.setText(String.valueOf(searchYear

15、); /设置文本域文字add(tfYear);add(new Label( 月:);monthChoice.setFont(smallFont);/设置月份选择下拉框的显示字体for (int i = 0; i 12; i+) 徐州工业职业技术学院第 10页monthChoice.addItem(monthsi); /增加下拉框选项monthChoice.select(searchMonth); /设置下拉框当前选择项add(monthChoice);add(btUpdate);int componentCount=this.getComponentCount(); /得到 Applet 中的

16、组件数量for (int i=0;icomponentCount;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

17、 margin;徐州工业职业技术学院第 11页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();dayPo

18、s = TOP + fontAscent / 2;totalWidth = 7 * CELLWIDTH;/得到总的表格宽度for (int i = 0; i 7; i+) g.drawString(daysi,(CELLWIDTH-fontMetric.stringWidth(daysi)/2+i*CELLWIDTH,dayPos-20);/绘制表格标题栏numRows = getNumberRows(searchYear, searchMonth); /计算需要的行的数量totalHeight = numRows * CELLHEIGHT; /得到总的表格高度for (int i = 0;

19、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); /绘制表格线徐州工业职业技术学院第 12页xNum = (getFirstDayOfMonth(searchYear, searchMonth) + 1) * CELLWIDTH -MARGIN;yNum = TOP +MARGIN + fontAsce

20、nt;numDays = daysInMonthsearchMonth + (calendar.isLeapYear(searchYear) &(searchMonth = FEBRUARY) ? 1 : 0);for (int day = 1; day totalWidth) xNum = CELLWIDTH - MARGIN;yNum += CELLHEIGHT;public boolean action(Event e, Object o)int searchYearInt;if (e.target=btUpdate)徐州工业职业技术学院第 13页searchMonth = monthC

21、hoice.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 年,则返回-1ret

22、urn (-1);if (month 11) return (-1);firstDay = getFirstDayOfMonth(year, month); /计算月份的第一天徐州工业职业技术学院第 14页if (month = FEBRUARY) & (firstDay = 0) & !calendar.isLeapYear(year) return 4;numCells = firstDay + daysInMonthmonth;if (month = FEBRUARY) & (calendar.isLeapYear(year) numCells+;return (numCells = 3

23、5) ? 5 : 6); /返回行数private intgetFirstDayOfMonth(int year, int month) /得到每月的第一天int firstDay;int i;if (year 1582) /年份小于 1582 年,返回-1return (-1);if (month 11) /月份数错误,返回-1return (-1);firstDay = getFirstDayOfYear(year);/得到每年的第一天for (i = 0; i FEBRUARY) & calendar.isLeapYear(year) firstDay+;return (firstDay

24、 % 7);private int getFirstDayOfYear(int year) /计算每年的第一天int leapYears;int hundreds;int fourHundreds;int first;if (year 1582) /如果年份小于 1582 年return (-1); /返回-1leapYears = (year - 1581) / 4;hundreds = (year - 1501) / 100;leapYears -= hundreds;fourHundreds = (year - 1201) / 400;leapYears += fourHundreds;

25、徐州工业职业技术学院第 16页first=5 + (year - 1582) + leapYears % 7; /得到每年第一天return first;6 6课程设计体会课程设计体会通过这次课程设计,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。还有通过设计过程中大量地利用网络查询,对一些关键知识点逐个地了解并解决相关问题。所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。网络是我们学习的最好的老师之一。有问题,问网络,是一个很好的习惯。参考文献:JAVA 程序设计教程(第二版) 雍俊海清华大学出版社

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 公文通知

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com