JAVA实习报告.docx
- 文档编号:3714495
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:13
- 大小:80.99KB
JAVA实习报告.docx
《JAVA实习报告.docx》由会员分享,可在线阅读,更多相关《JAVA实习报告.docx(13页珍藏版)》请在冰豆网上搜索。
JAVA实习报告
目录
一、设计题目1
二、设计性质、目的和任务1
1、设计性质1
2、设计目的1
3、设计任务1
三、设计内容2
1、需求分析2
2、功能设计2
四、设计的具体过程及调试过程3
1、程序设计思路3
2、流程图4
3、各模块的功能及程序说明5
4、测试分析11
五、改进意见及改进打算12
1、改进功能12
2、改进打算13
六、设计总结13
参考文献15
一、设计题目
万年历程序的设计
二、设计性质、目的和任务
1、设计性质
课程设计是完成教学计划实现专业培养目标的一个重要的教学环节;是教学计划中综合性较强的实践性教学环节,它对提高学生综合运用专业知识分析和解决实际问题的能力,及培养学生的严肃认真的科学态度、严谨求实的工作作风和处理问题的能力等方面具有重要的意义,通过课程设计促进学生智能结构的形成和综合素质的提高。
本课程设计是学习Java语言程序设计课程以后,进行的程序设计综合实践。
属于对Java语言程序设计课程的提高部分。
2、设计目的
实施本设计的目的在于:
通过以小组为单位,集体设计,分工合作的组织形式,进行全面的综合训练,使得对Java语言基本知识进一步熟练、程序设计思路与分析方法的进一步训练、程序调试技巧的进一步娴熟,从而达到深化理解Java语言基本知识,强化Java语言程序设计的实战能力,及综合运用Java语言的能力。
为继续学习和程序设计、解决实际问题进行程序设计打好基础。
3、设计任务
(1)熟练运用Java语言基本知识与上机调试技巧的基础上,学习实际应用程序的设计过程与设计方法。
(2)在规定时间内对所承担的设计题目,进行有效的设计,要求得到一个功能满足设计要求、界面友好、使用方便、设计思想合理、程序简练符合结构化要求的程序。
三、设计内容
万年历
1、需求分析
本程序的要求为:
(1)能够显示实现1800-2100年的日期,包括公历、星期。
(2)能够按照月份格式显示,或按照星期格式显示。
(3)能够显示系统时间。
2、功能设计
本程序要构建的万年历程序,其功能有以下几个方面:
(1)设计程序运行界面,具有显示各种功能的面板模块,并对各功能按钮就行时间监听;
(2)程序需要显示1800年到2100年的日历,包括公历、时间所对应的星期。
要求系统能够从界面上的操作获取公历日期,计算其所对应的星期显示到界面上;
(3)对时间的更新,日历显示要求关联系统时间,能在进入程序时显示系统时间对应的日历;
(4)程序界面的美观设计和人性化结构,要求具有良好的人机交互,容易理解界面内容,易操作
四、设计的具体过程及调试过程
1、程序设计思路
(1)总天数的算法:
首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。
然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。
[1]
(2)输出月份第一天为星期几的算法:
使总天数除以7取余加2得几既为星期几,若是7,则为星期日。
(3)算出输出月份第一天为星期几的算法:
算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。
2、流程图
3、各模块的功能及程序说明
(1)初始化组件:
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.table.DefaultTableModel;
importjava.text.DateFormat;
importjava.text.SimpleDateFormat;
importjava.util.Calendar;
importjava.util.Date;
importjava.util.GregorianCalendar;
importjava.util.Locale;
importjava.util.TimeZone;
(2)初始化数据
publicclasswannianliextendsJFrameimplementsActionListener,MouseListener{
privateCalendarcld=Calendar.getInstance();//获取一个Calendar类的实例对象
privateString[]astr={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
privateDefaultTableModeldtm=newDefaultTableModel(null,astr);
privateJTabletable=newJTable(dtm);
privateJScrollPanesp=newJScrollPane(table);
privateJButtonbLastYear=newJButton("<");
privateJButtonbNextYear=newJButton(">");
privateJButtonbLastMonth=newJButton("<");
privateJButtonbNextMonth=newJButton(">");
privateJPanelp1=newJPanel();//设立八个中间容器,装入布局控制日期的按钮模块
privateJPanelp2=newJPanel(newGridLayout(3,2));//网格布局
privateJPanelp3=newJPanel(newBorderLayout());//边界布局
privateJPanelp4=newJPanel(newGridLayout(2,1));
privateJPanelp5=newJPanel(newBorderLayout());
privateJPanelp6=newJPanel(newGridLayout(2,2));
privateJPanelp7=newJPanel(newGridLayout(2,1));
privateJPanelp8=newJPanel(newBorderLayout());
privateJTextFieldjtfYear=newJTextField(5);//jtfYeaar年份显示输入框
privateJTextFieldjtfMonth=newJTextField
(2);//jtfMouth月份显示输入框
privateJLabellt=newJLabel();
privateJLabelld=newJLabel();
privateJLabelnull1=newJLabel();
privateintlastTime;
//privateStringlocalTime=null;
privateStrings=null;
privateSimpleDateFormatdateFormat=newSimpleDateFormat("yyyy年MM月dd日hh时mm分ss秒");
(3)绘制程序界面
publicwannianli(){
super("JAVA万年历BY王昕");//框架命名
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数
this.getContentPane().setLayout(newBorderLayout(9,10));
table.setBackground(Color.white);
table.setGridColor(Color.pink);//星期之间的网格线是灰色的
table.setBackground(Color.white);
table.setColumnSelectionAllowed(true);//将table中的列设置为可选择的
table.setSelectionBackground(Color.pink);//当选定某一天时背景颜色为黑色
table.setSelectionForeground(Color.GREEN);
table.setBackground(newColor(184,207,229));//日期显示表格为浅蓝色
table.setFont(newFont("黑体",Font.BOLD,24));//日期数字字体格式
table.setRowHeight(26);//表格的高度
table.addMouseListener(this);//鼠标监听器、
jtfYear.addActionListener(this);//可输入年份的文本框//为各个按钮添加监听函数
bLastYear.addActionListener(this);
bNextYear.addActionListener(this);
bLastMonth.addActionListener(this);
bNextMonth.addActionListener(this);//将按钮添加到Jpane上
p1.add(bLastYear);
p1.add(jtfYear);//年份输入文本框
p1.add(bNextYear);
p1.add(bLastMonth);
p1.add(jtfMonth);
p1.add(bNextMonth);
p4.add(lt);
p5.add(p4,BorderLayout.SOUTH);
p5.add(sp,BorderLayout.CENTER);
p5.add(p1,BorderLayout.NORTH);
p8.add(p2,BorderLayout.CENTER);
p8.add(p7,BorderLayout.SOUTH);
this.getContentPane().add(p3,BorderLayout.EAST);
this.getContentPane().add(p5,BorderLayout.CENTER);
this.getContentPane().add(p6,BorderLayout.SOUTH);
this.getContentPane().add(p8,BorderLayout.WEST);
String[]strDate=DateFormat.getDateInstance().format(newDate())
.split("-");//获取日期
cld.set(Integer.parseInt(strDate[0]),Integer.parseInt(strDate[1])-1,0);
showCalendar(Integer.parseInt(strDate[0]),
Integer.parseInt(strDate[1]),cld);
jtfMonth.setEditable(false);//设置月份文本框为不可编辑
jtfYear.setText(strDate[0]);
jtfMonth.setText(strDate[1]);
this.showTextArea(strDate[2]);
ld.setFont(newFont("新宋体",Font.BOLD,24));
newTimer(lt).start();
this.setBounds(200,200,700,350);
this.setResizable(false);
this.setVisible(true);
}[2]
(4)计算各个月的天数
运用if语句判断各个月的最大天数
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;
}
f(Year%4==0&&Year%100!
=0||Year%400==0)//闰年{
return29;
}
else{
return28;
}
}
(5)年份输入控制
这个监听事件用于监听程序界面的操作,获取年月的相应数据,用if语句对月份操作进行控制,如当前年月为2013年7月时,点击“<”,年份减1,月份为7,即为2012年7月;当前月份为7月时,点击“>”,月份加1,月份为8,如图3.1
图3.1
publicvoidactionPerformed(ActionEvente)//从界面上获取年月数据{
if(e.getSource()==jtfYear||e.getSource()==bLastYear||e.getSource()==bNextYear||
e.getSource()==bLastMonth||e.getSource()==bNextMonth){
intm,y;
try//控制输入的年份正确,异常控制{
if(jtfYear.getText().length()!
=4){
thrownewNumberFormatException();
}
y=Integer.parseInt(jtfYear.getText());
m=Integer.parseInt(jtfMonth.getText());
}
catch(NumberFormatExceptionex)
{
JOptionPane.showMessageDialog(this,"请输入4位0-9的数字!
","年份有误",JOptionPane.ERROR_MESSAGE);
return;
}
ld.setText("没有选择日期");
for(inti=0;i if(e.getSource()==bLastYear){jtfYear.setText(String.valueOf(--y));} if(e.getSource()==bNextYear){jtfYear.setText(String.valueOf(++y));} if(e.getSource()==bLastMonth){ if(m==1){ jtfYear.setText(String.valueOf(--y)); m=12; jtfMonth.setText(String.valueOf(m)); } else{ jtfMonth.setText(String.valueOf(--m)); } } if(e.getSource()==bNextMonth){ if(m==12){ jtfYear.setText(String.valueOf(++y)); m=1; jtfMonth.setText(String.valueOf(m)); } else{ jtfMonth.setText(String.valueOf(++m)); } } cld.set(y,m-1,0); showCalendar(y,m,cld); } } (6)获取点击表格详细日期 publicvoidmouseClicked(MouseEvente){ intr=table.getSelectedRow(); intc=table.getSelectedColumn(); if(table.getValueAt(r,c)==null){ ld.setText("没有选择日期"); } else{ this.showTextArea(table.getValueAt(r,c)); } } 如图3.2 图3.2 (7)显示当前时间 classTimerextendsThread//显示系统时间{ privateJLabellt; privateSimpleDateFormatfy=newSimpleDateFormat("Gyyyy.MM.ddHH: mm: ss"); publicTimer(JLabellt){ this.lt=lt; } publicvoidrun(){ while(true){ try{ lt.setText(fy.format(newDate())); this.sleep(500); } catch(InterruptedExceptionex){ ex.printStackTrace(); } } } } 如图3.3 图3.3 4、测试分析 (1)开始界面如图4.1 图4.1 (2)输入正常年份如图4.2 图4.2 (2)输入错误年份如图4.3 图4.3 五、改进意见及改进打算 1、改进功能 程序可以改进的功能有: 添加对农历以及所对应的星期和常用的节日、节气的显示;不同时区的时间显示;对时间的更新和返回当前日期的功能;添加闹钟功能,在设置一个或多个时间点,当到达这个时间点时程序可做出相对的反应;添加记事本功能,用户可以在当前日期输入文本保存用以备忘。 2、改进打算 由于时间和所学知识的限制,上述功能在本程序中未能全部实现,在今后的学习生活中,我会努力改进该程序,使其可以当做一个生活中的好帮手 六、设计总结 本次课程设计为课本后设计题目任选一题进行设计。 思考一段时间后,我们组决定做一个万年历的设计。 主要考虑到以前时间少课程内容多,JAVA课程基础内容掌握并不是很抓实,而对于设计一个万年历程序,由于其功能简单设计也相对较易,对于我们组每个人的学习情况比较合适,并且通过设计这样的一个日历小组件,也能使自己对JAVA的一些基础知识掌握的更加牢固。 对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用哪些知识点,如相关的类和对象等。 最后,就是根据初步设计的功能和布局构架,考虑用源代码进行实现了。 经过了长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个课程设计。 在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。 自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。 通过这次课程设计,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。 还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。 还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题。 所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。 网络是我们学习的最好的老师之一。 有问题,问网络,是一个很好的习惯。 参考文献 [1]曾令明索望甘刚宋波,Java程序设计教程,西安电子科技大学出版社,2007.8 [2]赵景晖迟勇,Java语言程序设计,大连理工大学出版社2008.10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 实习 报告