java课程设计实验报告.docx
《java课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《java课程设计实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
java课程设计实验报告
Java课程设计实验报告
学院:
信息科学与工程学院
专业:
网络工程2011-1
学号:
201101050425
姓名:
衣艳丽
1、需求分析
1、引言
万年历是我国古代传说中最古老的一部太阳历。
为纪念历法编撰者万年功绩,便将这部历法命名为“万年历”。
而现在所使用的万年历,实际上就是记录一定时间范围内的具体阳历或阴历的日期的年历,方便有需要的人查询使用,与原始历法并无直接联系。
当今的世界是一个科技化,智能化的社会。
自新中国成立以来,中国早已加入世界的潮流,加快对科学技术尤其是电子技术的学习。
随着社会的进步和科技的发展,人们的生活环境中充斥各种各样的电子设备,例如电脑,手机,电视等等。
为了能使家中所挂的万年历能够让人随身携带而并不造成什么不便,我打算设计 一种数码万年历软件。
将设计的软件在不影响原有软件的运行的基础上能查询日期与星期。
2、本程序要构建的万年历程序,其功能有以下几个方面:
(1)实现图形界面。
(2)能以月历形式显示日期与星期。
(3)提供年、月份的下拉形式菜单来选择。
3、流程图
2、概要设计
程序设计思路:
1、输出月份第一天为星期几的算法:
使总天数除以7取余加2得几既为星期几,若是7,则为星期日。
2、算出输出月份第一天为星期几的算法:
算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。
3、如果年份小于1900年则程序不予判断。
4、该程序在eclipse环境下编写运行。
程序编写界面:
程序运行界面:
3、详细设计
各模块的功能及程序说明:
1、初始化组件:
importjava.awt.*;
importjava.text.*;
importjavax.swing.*;
importjava.awt.event.*;
importjava.util.*;
2、初始化数据:
publicclassDataSimpleimplementsItemListener
{
JFramemainFrame;
JLabelyearLabel,monthLabel,showTextLabel,timeLabel;
JTextAreashowArea;
JComboBoxyearBox,monthBox;
JPanelpanel_top,panel_down;
Containercon;
Stringyear[]=newString[9000];
Stringmonth[]=newString[13];
Datetoday;
GregorianCalendarcal;
inttotalDays,startDay,i;
StringselectYear,selectMonth;
Object[][]day=newObject[4][6];
staticfinalStringhead[]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
SimpleDateFormattimeFormat=newSimpleDateFormat("yyyy年MM月dd日HH:
mm:
ss");
3、绘制程序界面:
publicDataSimple()
{
mainFrame=newJFrame("万年历");
con=mainFrame.getContentPane();
yearLabel=newJLabel("年份:
");
monthLabel=newJLabel("月份:
");
for(inti=1900;i<10000;i++)
{
try
{
year[i-1900]=String.valueOf(i);
}
catch(Exceptione)
{
JOptionPane.showMessageDialog(mainFrame,"出现异常");
}
}
yearBox=newJComboBox(year);
yearBox.setSelectedItem("2010");
yearBox.addItemListener(this);
for(inti=1;i<=12;i++)
{
month[i]=(newInteger(i)).toString();
}
monthBox=newJComboBox(month);
monthBox.setSelectedItem("1");
monthBox.addItemListener(this);
panel_top=newJPanel();
panel_top.setLayout(newFlowLayout());
panel_top.add(yearLabel);
panel_top.add(yearBox);
panel_top.add(monthLabel);
panel_top.add(monthBox);
con.add(panel_top,BorderLayout.NORTH);
showArea=newJTextArea();
showArea.setEditable(false);
showDate(2010,1);
con.add(showArea,BorderLayout.CENTER);
showTextLabel=newJLabel("现在时间是:
");
today=newDate();
timeLabel=newJLabel(timeFormat.format(today));
panel_down=newJPanel();
panel_down.setLayout(newFlowLayout());
panel_down.add(showTextLabel);
panel_down.add(timeLabel);
con.add(panel_down,BorderLayout.SOUTH);
mainFrame.setSize(400,300);
mainFrame.setVisible(true);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicvoidshowDate(intyear,intmonth)
{
showArea.setText("");
cal=newGregorianCalendar(year,month-1,1);
totalDays=cal.getActualMaximum(Calendar.DAY_OF_MONTH);
startDay=cal.get(Calendar.DAY_OF_WEEK)-1;
for(i=0;i
showArea.append(head[i]+"");
showArea.append("\n");
//输出第一天之前的空格,每个输出项8个空格
for(i=0;i{
showArea.append("");
}
//依次输出每一天,每一个输出项占8个字符宽度
for(intdays=1;days<=totalDays;days++)
{
if(days<10)
{
showArea.append(""+days+"");
}
elseif(days>=10)
{
showArea.append(""+days+"");
}
i++;
if(i==7)
{
showArea.append("\n");
i=0;
}
}
}
4、测试分析
图1.月份下拉列表
图2.选择年、月份后的情况
图3.年、月份改变后的情况
5、课程设计体会
(1)选题目的:
本次课程设计为课本后设计题目任选一题进行设计。
思考一段时间后,我决定做一个万年历的设计。
主要考虑到以前时间少课程内容多,JAVA课程基础内容掌握并不是很扎实,而对于设计一个万年历程序,由于其功能简单设计也相对较易,对于我的学习情况比较合适,并且通过设计这样的一个日历小组件,也能使自己对JAVA的一些基础知识掌握的更加牢固。
(2)对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用哪些知识点,如相关的类和对象等。
最后,就是根据初步设计的功能和布局构架,考虑用源代码进行实现了。
经过了长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个课程设计。
在这个过程中,在把书本上的知识给系统的复习了一下,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。
自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。
通过这次课程设计,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。
还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。
还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题。
所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。
网络是我们学习的最好的老师之一。
有问题,问网络,是一个很好的习惯。
六、参考文献
[1].曾令明索望甘刚宋波,Java程序设计教程,西安电子科技大学出版社,2007.8
[2].孙全党王吴迪赵枫朝,Java程序设计应用教程,电子工业出版社,2006.2
[3].赵玉阳,Java从入门到精通,清华大学出版社,2006.8