万年历设计报告.docx
- 文档编号:26884597
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:33
- 大小:78.93KB
万年历设计报告.docx
《万年历设计报告.docx》由会员分享,可在线阅读,更多相关《万年历设计报告.docx(33页珍藏版)》请在冰豆网上搜索。
万年历设计报告
JAVA万年历设计报告
学习中心:
西安翻译学院
层次:
专升本
专业:
计算机科学与技术
姓名:
乔文东
学号:
61481610310001
JAVA万年历设计报告
一课程实习目的:
(1)为用户开发一个便捷的万年历;
(2)对java技术的灵活应用;
(3)掌握日期处理技术;
(4)初步了解软件工程理论知识。
二课程实习内容与要求:
(1)内容
通过本课程设计教学所要求达到的目的是:
实现一个简洁的万年历,通过日期的处理,能按照用户的需求查看各年份的日期。
(2)课程实习的基本要求
(1)使用图形用户界面;
(2)实现日期与星期的查询。
三系统功能分析:
1系统的主要功能:
(1)可以查看当前的年份、月份和日期;
(2)增加了时间栏,便于用户查看当前时间;
(3)能够查找1至9999年的日期与星期的关系。
2系统功能结构图
(1)Clock类:
实现了Runnable接口,运用线程,实现时钟的功能,包含了paint方法。
Paint方法:
从系统获取当前日期,以设置时钟的初始值。
(2)MainFrame类:
作为主类实现了JFrame接口,调用Clock类,包含了MainFrame方法,Init方法,use方法,Resetday方法。
MainFrame方法:
定义各个参数,应用AWT的绘图功能,构建总体框架;获取所要查找的年份和月份,通过调用use方法和Resetday方法,实现“查看”按钮的功能,并得到所需结果。
Init方法:
调用系统的年份和月份,以设置查看面板和日期面板的初始值。
use方法:
确定所要查询的年月的第一天的是星期几。
Resetday方法:
进一步处理所查询的年份月份,确定查询月份的天数;
图1系统功能结构
四系统运行
1.运行界面如下:
用户可根据需要在下拉式菜单中选择所要查询的年份和月份,然后点击“查看”按钮:
图2运行界面
2.流程图:
图3
五课程设计体会
本次课程设计为课本后设计题目任选一题进行设计。
思考一段时间后,我决定做一个万年历的设计。
因为通过设计这样的一个日历小组件,能使自己对JAVA的一些基础知识掌握的更加牢固。
对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用哪些知识点,如相关的类和对象等。
最后,就是根据初步设计的功能和布局构架,考虑用源代码进行实现了。
经过长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个课程设计。
在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。
自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。
通过这次课程设计,我明白了编写程序,不仅要求对课本知识有深刻的了解,同时要求程序设计者有较强的思维和动手能力。
还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。
还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题。
所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。
网络是我们学习的最好的老师之一。
有问题,问网络,是一个很好的习惯。
(附上源代码)
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.table.DefaultTableModel;
importjava.io.*;
importjava.text.DateFormat;
importjava.text.SimpleDateFormat;
importjava.util.Calendar;
importjava.util.Date;
importjava.util.GregorianCalendar;
importjava.util.Locale;
importjava.util.TimeZone;
publicclassh_main1extendsJFrameimplementsActionListener,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("下月");
privateJButtonbAddClock=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());
privateJComboBoxtimeBox=newJComboBox(TimeZone.getAvailableIDs());//对所有支持时区进行迭代,获取所有的id;
privateJTextFieldjtfYear=newJTextField(5);//jtfYeaar年份显示输入框
privateJTextFieldjtfMonth=newJTextField
(2);//jtfMouth月份显示输入框
privateJTextFieldtimeField=newJTextField();
privateJTextFieldh1=newJTextField(5);
privateJTextFieldm1=newJTextField(5);
privatestaticJTextAreajta=newJTextArea(10,5);
privateJScrollPanejsp=newJScrollPane(jta);
privateJTextAreajta1=newJTextArea(5,4);
privateJScrollPanejsp1=newJScrollPane(jta1);
privateJLabell=newJLabel("你可以向年份输入框中输入年份,提高查询效率");
privateJLabellt=newJLabel();
privateJLabelld=newJLabel();
privateJLabelts=newJLabel("请在右边下拉菜单选择你要选择的城市");
privateJLabelclock=newJLabel("闹钟");
privateJLabelnotice=newJLabel("备忘录");
privateJLabelhour=newJLabel("小时");
privateJLabelminute=newJLabel("分钟");
privateJLabellu=newJLabel("农历和节气");
privateJLabelnull1=newJLabel();
privateintlastTime;
privateStringlocalTime=null;
privateStrings=null;
privateSimpleDateFormatdateFormat=newSimpleDateFormat("yyyy年MM月dd日hh时mm分ss秒");
publich_main1(){
super("MyCalender");//框架命名
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数
this.getContentPane().setLayout(newBorderLayout(5,5));
jta.setLineWrap(true);//长度大于分配长度时候则换行
table.setGridColor(Color.GRAY);//星期之间的网格线是灰色的
table.setColumnSelectionAllowed(true);//将table中的列设置为可选择的
table.setSelectionBackground(Color.GRAY);//当选定某一天时背景颜色为黑色
table.setSelectionForeground(Color.GREEN);
table.setBackground(newColor(184,207,229));//日期显示表格为浅蓝色
table.setFont(newFont("黑体",Font.BOLD,24));//日期数字字体格式
table.setRowHeight(30);//表格的高度
table.addMouseListener(this);//鼠标监听器
jtfYear.addActionListener(this);//可输入年份的文本框
//为各个按钮添加监听函数
bLastYear.addActionListener(this);
bNextYear.addActionListener(this);
bLastMonth.addActionListener(this);
bNextMonth.addActionListener(this);
bAddClock.addActionListener(this);
timeBox.addItemListener(newTimeSelectedChangedListener());
//将按钮添加到Jpane上
p1.add(bLastYear);
p1.add(jtfYear);//年份输入文本框
p1.add(bNextYear);
p1.add(bLastMonth);
p1.add(jtfMonth);
p1.add(bNextMonth);
p2.add(clock);
p2.add(bAddClock);
p2.add(hour);
p2.add(h1);
p2.add(minute);
p2.add(m1);
p3.add(jsp,BorderLayout.SOUTH);
p3.add(lu,BorderLayout.CENTER);
p3.add(ld,BorderLayout.NORTH);
p4.add(l);
p4.add(lt);
p5.add(p4,BorderLayout.SOUTH);
p5.add(sp,BorderLayout.CENTER);
p5.add(p1,BorderLayout.NORTH);
p6.add(ts);
p6.add(timeBox);
p6.add(null1);
p6.add(timeField);
p7.add(notice);
p7.add(jsp1);
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();
newTimeThread().start();
this.setBounds(200,200,700,350);
this.setResizable(false);
this.setVisible(true);
}
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()==jtfYear||e.getSource()==bLastYear||e.getSource()==bNextYear||
e.getSource()==bLastMonth||e.getSource()==bNextMonth||e.getSource()==bAddClock)
{
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); } if(e.getSource()==bAddClock){ try{ Clockclock=newClock(); clock.start(); if(Integer.parseInt(h1.getText())<0||Integer.parseInt(h1.getText())>23|| Integer.parseInt(m1.getText())<0||Integer.parseInt(m1.getText())>59) { throw(newException()); } } catch(Exceptionex){ JOptionPane.showMessageDialog(this,"时数应该为0——23,分钟数应该为0——59","时间有误",JOptionPane.ERROR_MESSAGE); } } } publicvoidmouseClicked(MouseEvente) { jta.setText(null); intr=table.getSelectedRow(); intc=table.getSelectedColumn(); if(table.getValueAt(r,c)==null) { ld.setText("没有选择日期"); } else { this.showTextArea(table.getValueAt(r,c)); } } privatevoidshowTextArea(Objectselected) {//在这里将公历化为农历 ld.setText(jtfYear.getText()+"年"+jtfMonth.getText()+"月"+selected+"日"); } publicstaticvoidmain(String[]args) { JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); newh_main1(); jta.setText(today()); } privatevoidupdateTimeText(StringtimeZoneId){ if(timeZoneId! =null){ TimeZonetimeZone=TimeZone.getTimeZone(timeZoneId); dateFormat.setTimeZone(timeZone); Calendarcalendar=Calendar.getInstance(); calendar.setTimeZone(timeZone); timeField.setText(dateFormat.format(calendar.getTime())); }else{ timeField.setTex
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 万年历 设计 报告