Java课程设计万年历.docx
《Java课程设计万年历.docx》由会员分享,可在线阅读,更多相关《Java课程设计万年历.docx(12页珍藏版)》请在冰豆网上搜索。
Java课程设计万年历
河北科技大学
课程设计报告
学生姓名:
学号:
专业班级:
课程名称:
Java程序设计课程设计
学年学期:
2014—2015学年第2学期
指导教师:
刘伟
20年月
课程设计成绩评定表
学生姓名
学号
成绩
专业班级
起止时间
设计题目
指
导
教
师
评
语
学习态度:
端正□较端正□一般□较差□
学习纪律:
好□较好□一般□较差□
出勤情况:
好□较好□一般□较差□
程序设计:
好□较好□一般□较差□
动手能力:
强□较强□一般□较差□
团队精神:
好□较好□一般□较差□
创新意识:
强□较强□一般□较差□
课程设计完成情况:
优秀□好□一般□较差□
课程设计报告完成情况:
优秀□好□一般□较差□
指导教师:
年月日
目 录
1.课程设计目的 ..................................................................................................1
2.需求分析...........................................................................................................1
3.总体设计...........................................................................................................1
4.详细设计...........................................................................................................1
5.软件测试...........................................................................................................10
6.课程设计总结...................................................................................................11
一、课程设计目的
(1)熟练使用java语言编写程序,解决实际问题。
(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
(3)学会自己调试程序的方法并掌握一定的技巧。
二、需求分析
本程序的要求为:
1.使用图形用户界面;
2.本程序能够实现日期与星期的查询。
三、总体设计
(1)可以通过图形界面显示日历。
(2)能以月历形式显示日期与星期。
(3)支持用户自己输入年份,可以通过上一年,下一年等按钮来选择年份和月份。
四、详细设计
1.总天数的算法:
首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。
2.输出月份第一天为星期几的算法:
使总天数除以7取余得几既为星期几,若是0,则为星期日。
3.算出输出月份第一天为星期几的算法:
算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。
4.查询年份必须为四位有效数字,否则不予显示。
程序源代码:
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.FlowLayout;
importjava.awt.Font;
importjava.awt.GridLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.ItemEvent;
importjava.sql.Date;
importjava.text.DateFormat;
importjava.text.SimpleDateFormat;
importjava.util.Calendar;
importjava.awt.*;
importjava.awt.event.*;
importjava.text.*;
importjava.time.Clock;
importjava.util.*;
importjavax.swing.*;
importjavax.swing.table.*;
importjavax.swing.*;
importjavax.swing.table.DefaultTableModel;
publicclasswannianliextendsJFrameimplementsActionListener{
privateCalendarcal=Calendar.getInstance();
privateString[]str={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
privateDefaultTableModeldtm=newDefaultTableModel(null,str);
privateJTabletable=newJTable(dtm);//装日期的表格
privateJScrollPanesp=newJScrollPane(table);
privateJButtonbLastYear=newJButton("上一年");
privateJButtonbNextYear=newJButton("下一年");
privateJButtonbLastMonth=newJButton("上月");
privateJButtonbNextMonth=newJButton("下月");
privateJTextFieldYear=newJTextField(4);//jtfYear年份显示和输入文本
privateJLabeljla=newJLabel("年");
privateJTextFieldmonth=newJTextField(4);
privateJLabeljla1=newJLabel("月");
privateJTextFieldjtfMonth=newJTextField
(2);//jtfMonth月份显示文本框
privateJComboBoxcomb;
privateJPanelp1=newJPanel();//装入控制日期按钮的模块
privateJPanelp2=newJPanel();
privateJPanelp3=newJPanel(newGridLayout(2,1));
privateJPanelp4=newJPanel();
privateJPanelp5=newJPanel();
privateJLabell=newJLabel("文本框中可直接键入要查找的年份,以提高查询效率");
privateJLabellt=newJLabel();
privateJLabelcom=newJLabel("请选择月份:
");
privateintlastTime;
private
wannianli(){
super("万年历");//框架命名
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数
table.setGridColor(Color.GRAY);//星期之间的网格线是灰色的
table.setColumnSelectionAllowed(true);
table.setSelectionBackground(Color.BLACK);//当选定某一天时这一天背景黑色
table.setSelectionForeground(Color.GREEN);//选定的日期字体是绿色的
table.setBackground(newColor(184,207,229));//日期显示表格颜色浅蓝色
table.setFont(newFont("黑体",Font.BOLD,24));//日期数字字体格式
table.setRowHeight(30);//表格的高度
Year.addActionListener(this);//可输入年份的文本框
//month.addActionListener(this);//可输入年份的文本框//为各个按钮添加监听函数
bLastYear.addActionListener(this);
bNextYear.addActionListener(this);
bLastMonth.addActionListener(this);
bNextMonth.addActionListener(this);//将按钮添加到
String[]str={"1","2","3","4","5","6","7","8","9","10","11","12"};
comb=newJComboBox(str);
p1.add(bLastYear);
p1.add(Year);//年份输入文本框
p1.add(jla);
p1.add(month);//年份输入文本框
p1.add(jla1);
p1.add(bNextYear);
p1.add(bLastMonth);
p1.add(jtfMonth);
p1.add(bNextMonth);
p1.add(com);
p1.add(comb);
p2.setLayout(newFlowLayout());
p2.add(p4,BorderLayout.EAST);
p2.add(sp,BorderLayout.CENTER);
p2.add(p5,BorderLayout.WEST);
p3.add(l);
p3.add(lt);
this.add(p3,BorderLayout.SOUTH);
this.add(p2,BorderLayout.CENTER);
this.add(p1,BorderLayout.NORTH);
String[]strDate=DateFormat.getDateInstance().format(newjava.util.Date()).split("-");
cal.set(Integer.parseInt(strDate[0]),Integer.parseInt(strDate[1])-1,0);
showCalendar(Integer.parseInt(strDate[0]),Integer.parseInt(strDate[1]),cal);
jtfMonth.setEditable(false);//设置月份的文本框为不可编辑
Year.setText(strDate[0]);
month.setText(strDate[1]);
comb.setToolTipText(strDate[1]);
comb.addItemListener(newItemListener(){
publicvoiditemStateChanged(ItemEvente){
jtfMonth.setText((String)comb.getSelectedItem());
month.setText((String)comb.getSelectedItem());
intm,y;
try//控制输入的年份正确,异常控制
{
if(Year.getText().length()!
=4)
{thrownewNumberFormatException();
}
y=Integer.parseInt(Year.getText());
m=Integer.parseInt(jtfMonth.getText());
}
catch(NumberFormatExceptionex)
{
//JOptionPane.showMessageDialog(this,"请输入4位0-9的数字!
","年份有误",JOptionPane.ERROR_MESSAGE);
return;
}
for(inti=0;i{
dtm.removeRow(0);
}
cal.set(y,m-1,0);
showCalendar(y,m,cal);
}
});
jtfMonth.setText("1");
month.setText("1");
this.setBounds(200,200,700,320);
this.setResizable(false);
this.setVisible(true);
}
publicstaticvoidmain(String[]args)
{
newwannianli();
}
publicvoidshowCalendar(intlocalYear,intlocalMonth,Calendarcld){
intDays=getDaysOfMonth(localYear,localMonth)+cld.get(Calendar.DAY_OF_WEEK)-2;
Object[]ai=newObject[7];
lastTime=0;
for(inti=cld.get(Calendar.DAY_OF_WEEK)-1;i<=Days;i++)
{
ai[i%7]=String.valueOf(i-(cld.get(Calendar.DAY_OF_WEEK)-2));
if(i%7==6)
{
dtm.addRow(ai);
ai=newObject[7];
lastTime++;
}
}
dtm.addRow(ai);
}
publicintgetDaysOfMonth(intyear,intMonth)//显示所选月份的天数
{
if(Month==1||Month==3||Month==5||Month==7||Month==8||Month==10||Month==12)
{
return31;
}
if(Month==4||Month==6||Month==9||Month==11)
{
return30;
}
if(year%4==0&&year%100!
=0||year%400==0)//闰年
{
return29;
}
else
{
return28;
}
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==Year||e.getSource()==bLastYear||e.getSource()==bNextYear||e.getSource()==bLastMonth||e.getSource()==bNextMonth)
{
intm,y;
try//控制输入的年份正确,异常控制
{
if(Year.getText().length()!
=4)
{thrownewNumberFormatException();
}
y=Integer.parseInt(Year.getText());
m=Integer.parseInt(jtfMonth.getText());
}catch(NumberFormatExceptionex)
{
JOptionPane.showMessageDialog(this,"请输入4位0-9的数字!
","年份有误",JOptionPane.ERROR_MESSAGE);
return;
}
for(inti=0;i{
dtm.removeRow(0);
}
if(e.getSource()==bLastYear)
{
Year.setText(String.valueOf(--y));
}
if(e.getSource()==bNextYear)
{
Year.setText(String.valueOf(++y));
}
if(e.getSource()==bLastMonth)
{
if(m==1)
{
Year.setText(String.valueOf(--y));
m=12;
jtfMonth.setText(String.valueOf(m));
}
else
{
jtfMonth.setText(String.valueOf(--m));
}
}
if(e.getSource()==bNextMonth)
{
if(m==12)
{
Year.setText(String.valueOf(++y));
m=1;
jtfMonth.setText(String.valueOf(m));
}
else
{
jtfMonth.setText(String.valueOf(++m));
}
}
cal.set(y,m-1,0);
showCalendar(y,m,cal);
month.setText(String.valueOf(m));
//comb.setToolTipText(String.valueOf(m));
}
}
五、软件测试
图1界面图
图2界面图下拉选择2月份
六、课程设计总结
本次Java课程设计我们这组做的课题是万年历,刚开始拿到题目我们组员都不知如何下手,经过小组成员一起查找资料,并且开会讨论,我们确定了设计的设计目标以及具体实现方式,包括如何将Java的思想运用到实际系统的详细设计之中。
实验过程中,首先要将系统要实现的功能分为几大模块,然后每个组员分别完成,在此过程中使我加深了对Java的理解,以及如何进行团队工作的划分,学会发现各组员的长处并将其发挥出来。
虽然大家没怎么学过Java,但大家都有C语言基础,所以通过努力实验,进一步培养我们利用Java语言进行编程和调试程序的能力,同时使我们能够学会将C语言与Java语言结合起来编写较复杂具有实际意义和算法复杂度较小的程序。
与此同时熟练掌握Java语言的编辑,编译,调试程序,并将算法转变为程序实现。
正确理解各种数据结构的逻辑特性和存储表示和基本操作的算法实现。
掌握算法的时间分析和空间分析的技术。
针对问题的特点选择合适的数据结构,设计实用高效的算法,提高大家的算法设计的能力和动手实验的技能。
通过这次课程设计,使我灵活应用所学Java知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。
初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;并用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养我们严谨的科学态度和良好的工作作风。
同时在这次课设中,培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
而这是日后最实用的。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
这对于我的将来也有很大的帮助。
以后,不管有多苦,我想我都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。
就像中国提倡的艰苦奋斗一样,我都可以在实验结束之后变的更加成熟,会面对需要面对的事情,以及学会遇到问题,不急不慌,慢慢解决它
这次课程设计本人主要编写了控件的单击事件跟选择事件,还有参与小组共同完成的流布局管理。
历时两个星期终于在大家的一起努力下顺利完成了。
虽然过程辛苦是不可避免,但收获还是令人感到尤其的欣慰。
在这次的课程设计中不仅检验了我所学习的知识,也培养了我的实践能力,让我知道遇到一个问题,如何去寻找思路,如何去解决问题,最终完成整个事情。
在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。
学会了合作,学会了宽容,学会了理解,也学会了做人与处世。
课程设计是我们专业课程知识综合应用的实践训练,是我们迈向社会,从事职业工作前一个必不少的过程。
实验过程中,也十分感谢实验指导老师刘伟老师的指点与教导。
这次课程设计不仅是对这学期所学知识的一种综合检验,而且也是对自己动手能力的一种提高,增强了自己实践能力。
通过这次课程设计使我明白了自己知识还比较欠缺,只是学习书本知识还是远远不够的,自己不会的东西还有太多,学习需要自己长期的积累,在以后的学习、工作中都应该不断的学习,将课本的理论知识与生活中的实践知识相结合,不断提高自己文化知识和实践能力。