您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Java版万年历设计报告及流程图
Java课程设计题目万年历班级计本0901班姓名秘密学号200908111053指导教师韩瑞峰要求:功能要求:可两人对下(用鼠标操作),判断胜负。界面要求:美观简洁,有简单操作说明。设计方案界面设计界面主要由两部分组成——查询输入部分和结果显示部分。查询输入部分包括一个文本域,用于输入年份:一个选择下拉框,用于选择月份:一个选择按扭,用来出发查询事件。具体使用的方法见注释流程图源代码importjava.applet.Applet;importjava.awt.*;importjava.util.*;publicclassCalendarAppletextendsApplet{staticfinalintTOP=80;//顶端距离staticfinalintCELLWIDTH=50,CELLHEIGHT=50;//单元格尺寸staticfinalintMARGIN=3;//边界距离staticfinalintFEBRUARY=1;TextFieldtfYear=newTextField(2011,6);//显示年份的文本域ChoicemonthChoice=newChoice();//月份选择下拉框ButtonbtUpdate=newButton(选择);//选择按钮GregorianCalendarcalendar=newGregorianCalendar();//日历对象FontsmallFont=newFont(TimesRoman,Font.PLAIN,15);//显示小字体FontbigFont=newFont(TimesRoman,Font.BOLD,50);//显示大字体Stringdays[]={星期日,星期一,星期二,星期三,星期四,星期五,星期六};进入界面获取系统当前的年月日查询输入输入年月得出查询的年月日对应的星期Stringmonths[]={一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月};intdaysInMonth[]={31,28,31,30,31,30,31,31,30,31,30,31};//每个月的天数intsearchMonth,searchYear;//查询的年份及月份publicvoidinit(){setBackground(Color.white);//设置背景颜色searchMonth=calendar.get(Calendar.MONTH);//得到系统年份searchYear=calendar.get(Calendar.YEAR);//得到系统月份add(newLabel(年:));//增加组件到ApplettfYear.setText(String.valueOf(searchYear));//设置文本域文字add(tfYear);add(newLabel(月:));monthChoice.setFont(smallFont);//设置月份选择下拉框的显示字体for(inti=0;i12;i++){monthChoice.addItem(months[i]);//增加下拉框选项}monthChoice.select(searchMonth);//设置下拉框当前选择项add(monthChoice);add(btUpdate);intcomponentCount=this.getComponentCount();//得到Applet中的组件数量for(inti=0;icomponentCount;i++){getComponent(i).setFont(smallFont);//设置所有组件的显示字体}}publicvoidpaint(Graphicsg){FontMetricsfontMetric;//显示字体的FontMetrics对象intfontAscent;intdayPos;inttotalWidth,totalHeight;//总的宽度,高度intnumRows;//行数intxNum,yNum;//水平和垂直方向单元格数量intnumDays;StringdayStr;//显示天数字符串intmargin;g.setColor(Color.red);//设置当前颜色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(inti=0;i7;i++){g.drawString(days[i],(CELLWIDTH-fontMetric.stringWidth(days[i]))/2+i*CELLWIDTH,dayPos-20);//绘制表格标题栏}numRows=getNumberRows(searchYear,searchMonth);//计算需要的行的数量totalHeight=numRows*CELLHEIGHT;//得到总的表格高度for(inti=0;i=totalWidth;i+=CELLWIDTH){g.drawLine(i,TOP,i,TOP+totalHeight);//绘制表格线}for(inti=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(intday=1;day=numDays;day++){dayStr=Integer.toString(day);g.drawString(dayStr,xNum-fontMetric.stringWidth(dayStr),yNum);//绘制字符串xNum+=CELLWIDTH;if(xNumtotalWidth){xNum=CELLWIDTH-MARGIN;yNum+=CELLHEIGHT;}}}publicbooleanaction(Evente,Objecto){intsearchYearInt;if(e.target==btUpdate){searchMonth=monthChoice.getSelectedIndex();//得到查询月份searchYearInt=Integer.parseInt(tfYear.getText(),10);//得到查询年份if(searchYearInt1581){searchYear=searchYearInt;}repaint();//重绘屏幕returntrue;}returnfalse;}privateintgetNumberRows(intyear,intmonth){//得到行数量intfirstDay;intnumCells;if(year1582){//年份小于1582年,则返回-1return(-1);}if((month0)||(month11)){return(-1);}firstDay=getFirstDayOfMonth(year,month);//计算月份的第一天if((month==FEBRUARY)&&(firstDay==0)&&!calendar.isLeapYear(year)){return4;}numCells=firstDay+daysInMonth[month];if((month==FEBRUARY)&&(calendar.isLeapYear(year))){numCells++;}return((numCells=35)?5:6);//返回行数}privateintgetFirstDayOfMonth(intyear,intmonth){//得到每月的第一天intfirstDay;inti;if(year1582){//年份小于1582年,返回-1return(-1);}if((month0)||(month11)){//月份数错误,返回-1return(-1);}firstDay=getFirstDayOfYear(year);//得到每年的第一天for(i=0;imonth;i++){firstDay+=daysInMonth[i];//计算每月的第一天}if((monthFEBRUARY)&&calendar.isLeapYear(year)){firstDay++;}return(firstDay%7);}privateintgetFirstDayOfYear(intyear){//计算每年的第一天intleapYears;inthundreds;intfourHundreds;intfirst;if(year1582){//如果年份小于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;//得到每年第一天returnfirst;}}程序运行效果初始界面选择日期后收获感悟经过这次课程设计使我们对JAVA图形用户界面的有关知识有了更深入了解,理,完成了简单的日历功能,输入查询的年份与月份,单击“选择”按扭,则可得到相应的日历,简单实用。,让我更加熟练的掌握了Java语言的设计能力并且有了实践经验;在设计过程中,学到了老师没有在课堂上没有教授的知识;加强了我对Java语言的学习兴趣和好感。
本文标题:Java版万年历设计报告及流程图
链接地址:https://www.777doc.com/doc-7210315 .html