用程序编写万年历的设计报告_第1页
用程序编写万年历的设计报告_第2页
用程序编写万年历的设计报告_第3页
用程序编写万年历的设计报告_第4页
用程序编写万年历的设计报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论