




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用 Java 程序编写万年历程序的设计报告学习中心(点):泾阳学习中心专业:计算机科学与技术层次:专升本姓名:李永固批次:112目录一、设计分析 11、需求分析 12、功能设计 13、概要设计 13.1 程序设计思路13.2 程序运行界面2二、程序结构 3三、各模块的功能及程序说明 41、初始化组件 42、初始化数据 43、绘制程序界面 5四、源程序 6五、操作14六、试验结果 14七、设计体会 16用 Java 程序编写万年历程序的设计报告一、设计分析1、需求分析本程序的要求为:1.使用图形用户界面;2.实现日期与的。2、功能设计本程序要构建的万年历程序,其功能有以下几个方面:(1)通过网页
2、形式运行,实现图形界面。(2)能以月历形式显示日期与。(3)支持用户输入年份,并提供月份的下拉形式菜单来选择月份。(4)通过点击“更新”来刷新日历。3、概要设计3.1 程序设计思路1、总天数的算法:首先用 if 语句定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为 366,否则,为 365。然后输入的年是否为定义年,若是,天数 S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加 1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。2、输出月份第一天为几的算法:使总
3、天数除以 7 取2 得几既为几,若是 7,则为日。3、算出输出月份第一天为几的算法:算出输出月份第一天为几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以 7 得 0 换行,即可完整的输出该月的日历。4、如果年份小于 1582 年则程序不予。- 1 -3.2 程序运行界面- 2 -二、程序结构流程图:开始 结束- 3 -是否输入年份或选择月份计算,绘制屏幕获取当前系统时间年份等数据程序初始化三、各模块的功能及程序说明1、初始化组件import java.applet.Applet;import java.awt.*;import j
4、ava.util.*;2、初始化数据public class CalendarApplet extends Appletstatic 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();/月份选择下拉框Bu
5、tton 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 = 日, 一, 二, 三,四, 五, 六;- 4 -String months = 一月, 二月, 三月, 四月,五月, , 七月, 八月, 九月,十月,
6、十一月, 十二月;int daysInMonth = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31; /每的天数int searchMonth,searchYear; /的年份及月份3、绘制程序界面public void init()setBackground(Color.white);/设置背景颜色searchMonth = calendar.get(Calendar.MONTH); /得到系统年份searchYear = calendar.get(Calendar.YEAR); /得到系统月份add(new Label( 年:); /增加组件
7、到 ApplettfYear.setText(String.valueOf(searchYear); /设置文本域文字add(tfYear);add(new Label( 月:);monthChoice.setFont(smallFont);/设置月份选择下拉框的显示字体for (int i = 0; i 12; i+) monthChoice.addItem(monthsi); /增加下拉框选项monthChoice.select(searchMonth); /设置下拉框当前选择项add(monthChoice);add(btUpdate);int componentCount=this.g
8、etComponentCount(); /得到 Applet 中的组件数量- 5 -for (int i=0;icomponentCount;i+)getComponent(i).setFont(smallFont); /设置所有组件的显示字体四、源程序import java.applet.Applet;import java.awt.*;import java.util.*;public class CalendarApplet extends Appletstatic final int TOP = 70;/顶端距离static final int CELLWIDTH=50,CELLHEI
9、GHT = 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(TimesRoma
10、n, Font.PLAIN, 15);/显示小字体Font bigFont = new Font(TimesRoman, Font.BOLD, 50);/显示大字体String days = 日, 一, 二, 三,四, 五, 六;String months = 一月, 二月, 三月, 四月,五月, , 七月, 八月, 九月,- 6 -十月, 十一月, 十二月;int daysInMonth = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31; /每的天数int searchMonth,searchYear; /的年份及月份public void i
11、nit()setBackground(Color.white);/设置背景颜色searchMonth = calendar.get(Calendar.MONTH); /得到系统年份searchYear = calendar.get(Calendar.YEAR); /得到系统月份add(new Label( 年:); /增加组件到 ApplettfYear.setText(String.valueOf(searchYear); /设置文本域文字add(tfYear);add(new Label( 月:);monthChoice.setFont(smallFont);/设置月份选择下拉框的显示字体
12、for (int i = 0; i 12; i+) monthChoice.addItem(monthsi); /增加下拉框选项monthChoice.select(searchMonth); /设置下拉框当前选择项add(monthChoice);add(btUpdate);int componentCount=this.getComponentCount(); /得到 Applet 中的组件数量for (int i=0;icomponentCount;i+)getComponent(i).setFont(smallFont); /设置所有组件的显示字体- 7 -public void pa
13、int(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+年,
14、60,TOP+70); /绘制字g.drawString(searchMonth+1)+月,200,TOP+130);g.setColor(Color.black);g.setFont(smallFont);- 8 -fontMetric = g.getFontMetrics(); /获取变量初值fontAscent = fontMetric.getAscent();dayPos = TOP + fontAscent / 2;totalWidth = 7 * CELLWIDTH;/得到总的表格宽度for (int i = 0; i 7; i+) g.drawString(daysi,(CELL
15、WIDTH-fontMetric.stringWidth(daysi)/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 =
16、numRows; i+, j += CELLHEIGHT) g.drawLine(0, j, totalWidth, j); /绘制表格线xNum = (getFirstDayOfMonth(searchYear, searchMonth) + 1)* CELLWIDTH-MARGIN;yNum = TOP +MARGIN + fontAscent;numDays=daysInMonthsearchMonth+(calendar.isLeapYear(searchYear)&(searchMonth = FEBRUARY) ? 1 : 0);- 9 -for (int day = 1; day
17、 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;r
18、epaint();/重绘屏幕return true;- 10 -return false;private int getNumberRows(int year, int month) /得到行数量int firstDay;int numCells;if (year 1582) /年份小于 1582 年,则返回-1return (-1);if (month 11) return (-1);firstDay = getFirstDayOfMonth(year, month); /计算月份的第一天if (month = FEBRUARY) & (firstDay = 0) & !calendar.i
19、sLeapYear(year) return 4;numCells = firstDay + daysInMonthmonth;if (month = FEBRUARY) & (calendar.isLeapYear(year) numCells+;- 11 -return (numCells = 35) ? 5 : 6); /返回行数private intgetFirstDayOfMonth(int year, int month) /得到每月的第一天int firstDay;int i;if (year 1582) /年份小于 1582 年,返回-1return (-1);if (mont
20、h 11) /月份数错误,返回-1return (-1);firstDay = getFirstDayOfYear(year);/得到每年的第一天for (i = 0; i FEBRUARY) & calendar.isLeapYear(year) firstDay+;return (firstDay % 7);- 12 -private int getFirstDayOfYear(int year) /计算每年的第一天int leapYears;int hundreds;int fourHundreds;int first;if (year 1582) /如果年份小于 1582 年return (-1); /返回-1leapYears = (ye
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数学等比数列试题及答案
- 2025年数字出版与电子信息知识考试测试题及答案
- 拍卖基础知识试题及答案
- 西方国家的文化政策对政治的影响试题及答案
- 西方网络政治与公民参与试题及答案
- 今日头条java校招面试题及答案
- 招聘护士试题及答案
- 南瑞集团java面试题及答案
- 2025年建筑材料与结构力学考试题及答案
- 软件设计师考试2025年专业技巧试题及答案
- 办公用品供应合同模板
- DLT 5285-2018 输变电工程架空导线(800mm以下)及地线液压压接工艺规程
- 军事训练夏令营合同样本
- 2024年国家保安员资格考试题库及参考答案(完整版)
- 2023-2024学年江苏省连云港市新海实验中学英语七年级第二学期期末达标检测试题含答案
- 2024年南昌市高三二模(第二次模拟测试)物理试卷(含答案)
- 基础有机化学实验智慧树知到期末考试答案2024年
- 项目攻关方案
- 2024年北京控股集团有限公司招聘笔试参考题库含答案解析
- 劳动创造幸福主题班会
- 2024年移动网格经理(认证考试)备考试题库大全-下(判断题汇总)
评论
0/150
提交评论