万年历设计报告_第1页
万年历设计报告_第2页
万年历设计报告_第3页
万年历设计报告_第4页
万年历设计报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、JAVA万年历设计报告学习中心 :西安翻译学院 层 次 :专升本 专 业 :计算机科学与技术 姓 名 : 乔文东 学 号 : 61481610310001 JAVA万年历设计报告一课程实习目的:(1)为用户开发一个便捷的万年历;(2)对java技术的灵活应用;(3)掌握日期处理技术;(4)初步了解软件工程理论知识。二课程实习内容与要求:(1)内容通过本课程设计教学所要求达到的目的是:实现一个简洁的万年历,通过日期的处理,能按照用户的需求查看各年份的日期。(2)课程实习的基本要求(1)使用图形用户界面;(2)实现日期与星期的查询。三系统功能分析:1 系统的主要功能:(1)可以查看当前的年份、月份

2、和日期;(2)增加了时间栏,便于用户查看当前时间;(3)能够查找1至9999年的日期与星期的关系。2 系统功能结构图(1)Clock类:实现了Runnable接口,运用线程,实现时钟的功能,包含了paint方法。 Paint方法:从系统获取当前日期,以设置时钟的初始值。(2)MainFrame类:作为主类实现了JFrame接口,调用Clock类,包含了MainFrame方法,Init方法,use方法,Resetday方法。MainFrame方法:定义各个参数,应用AWT的绘图功能,构建总体框架;获取所要查找的年份和月份,通过调用use方法和Resetday方法,实现“查看”按钮的功能,并得到所

3、需结果。Init方法:调用系统的年份和月份,以设置查看面板和日期面板的初始值。use方法:确定所要查询的年月的第一天的是星期几。Resetday方法:进一步处理所查询的年份月份,确定查询月份的天数;Resetday方法万年历Clock类MainFrame类MainFrame方法Init方法use方法 图1 系统功能结构四 系统运行1.运行界面如下: 用户可根据需要在下拉式菜单中选择所要查询的年份和月份,然后点击“查看”按钮:图2 运行界面2.流程图:图3五 课程设计体会本次课程设计为课本后设计题目任选一题进行设计。思考一段时间后,我决定做一个万年历的设计。因为通过设计这样的一个日历小组件,能使

4、自己对JAVA的一些基础知识掌握的更加牢固。对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用哪些知识点,如相关的类和对象等。最后,就是根据初步设计的功能和布局构架,考虑用源代码进行实现了。经过长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个课程设计。在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。通过这次课程设计,我明白了编写程序,不仅要求对课本知识有深刻的了解,同时要

5、求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题。所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。网络是我们学习的最好的老师之一。有问题,问网络,是一个很好的习惯。(附上源代码)import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.DefaultTableModel;import j

6、ava.io.*;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Locale;import java.util.TimeZone;public class h_main1 extends JFrame implements ActionListener, MouseListener private Calendar cl

7、d = Calendar.getInstance();/获取一个Calendar类的实例对象private String astr = 星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期日 ;private DefaultTableModel dtm = new DefaultTableModel(null, astr);private JTable table = new JTable(dtm);private JScrollPane sp = new JScrollPane(table);private JButton bLastYear = new JButton(上一年)

8、;private JButton bNextYear = new JButton(下一年);private JButton bLastMonth = new JButton(上月);private JButton bNextMonth = new JButton(下月);private JButton bAddClock = new JButton(确定);private JPanel p1 = new JPanel(); / 装入控制日期的按钮模块private JPanel p2 = new JPanel(new GridLayout(3,2);private JPanel p3 = ne

9、w JPanel(new BorderLayout();private JPanel p4 = new JPanel(new GridLayout(2,1);private JPanel p5 = new JPanel(new BorderLayout(); private JPanel p6 = new JPanel(new GridLayout(2,2); private JPanel p7 = new JPanel(new GridLayout(2,1); private JPanel p8 = new JPanel(new BorderLayout(); private JComboB

10、ox timeBox = new JComboBox(TimeZone.getAvailableIDs();/对所有支持时区进行迭代,获取所有的id; private JTextField jtfYear = new JTextField(5);/ jtfYeaar年份显示输入框private JTextField jtfMonth = new JTextField(2);/ jtfMouth月份显示输入框private JTextField timeField=new JTextField();private JTextField h1=new JTextField(5);private J

11、TextField m1=new JTextField(5);private static JTextArea jta = new JTextArea(10,5);private JScrollPane jsp = new JScrollPane(jta);private JTextArea jta1 = new JTextArea(5,4);private JScrollPane jsp1 = new JScrollPane(jta1);private JLabel l = new JLabel(你可以向年份输入框中输入年份,提高查询效率);private JLabel lt = new J

12、Label();private JLabel ld = new JLabel();private JLabel ts=new JLabel(请在右边下拉菜单选择你要选择的城市);private JLabel clock= new JLabel(闹钟);private JLabel notice= new JLabel(备忘录);private JLabel hour = new JLabel(小时);private JLabel minute= new JLabel(分钟);private JLabel lu = new JLabel(农历和节气);private JLabel null1=n

13、ew JLabel();private int lastTime;private String localTime = null;private String s = null;private SimpleDateFormat dateFormat=new SimpleDateFormat(yyyy年MM月dd日 hh时mm分ss秒);public h_main1() super(My Calender);/ 框架命名this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/ 窗口关闭函数this.getContentPane().setLayo

14、ut(new BorderLayout(5, 5);jta.setLineWrap(true);/ 长度大于分配长度时候则换行table.setGridColor(Color.GRAY);/ 星期之间的网格线是灰色的table.setColumnSelectionAllowed(true);/ 将table中的列设置为可选择的table.setSelectionBackground(Color.GRAY);/ 当选定某一天时背景颜色为黑色table.setSelectionForeground(Color.GREEN);table.setBackground(new Color(184,207

15、, 229);/ 日期显示表格为浅蓝色table.setFont(new Font(黑体, Font.BOLD, 24);/ 日期数字字体格式table.setRowHeight(30);/ 表格的高度table.addMouseListener(this); / 鼠标监听器jtfYear.addActionListener(this);/ 可输入年份的文本框/ 为各个按钮添加监听函数bLastYear.addActionListener(this);bNextYear.addActionListener(this);bLastMonth.addActionListener(this);bNe

16、xtMonth.addActionListener(this);bAddClock.addActionListener(this);timeBox.addItemListener(new TimeSelectedChangedListener();/ 将按钮添加到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);p

17、2.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(timeFie

18、ld); 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 st

19、rDate = DateFormat.getDateInstance().format(new Date().split(-);/ 获取日期cld.set(Integer.parseInt(strDate0), Integer.parseInt(strDate1) - 1,0);showCalendar(Integer.parseInt(strDate0),Integer.parseInt(strDate1), cld);jtfMonth.setEditable(false);/ 设置月份文本框为不可编辑jtfYear.setText(strDate0);jtfMonth.setText(st

20、rDate1);this.showTextArea(strDate2);ld.setFont(new Font(新宋体, Font.BOLD, 24);new Timer(lt).start();new TimeThread().start();this.setBounds(200, 200, 700, 350);this.setResizable(false);this.setVisible(true); public void showCalendar(int localYear, int localMonth, Calendar cld) int Days = getDaysOfMont

21、h(localYear, localMonth) + cld.get(Calendar.DAY_OF_WEEK) -2; Object ai = new Object7; lastTime = 0; for (int i = cld.get(Calendar.DAY_OF_WEEK)-1; i = Days; i+) aii%7 = String.valueOf(i-(cld.get(Calendar.DAY_OF_WEEK)-2); if (i%7 = 6) dtm.addRow(ai); ai = new Object7; lastTime+; dtm.addRow(ai); public

22、 int getDaysOfMonth(int Year, int Month) if(Month=1|Month=3|Month=5|Month=7|Month=8|Month=10|Month=12)return 31;if(Month=4|Month=6|Month=9|Month=11)return 30;if(Year%4=0&Year%100!=0|Year%400=0)/闰年return 29;else return 28; public void actionPerformed(ActionEvent e) if(e.getSource() = jtfYear | e.getS

23、ource() = bLastYear | e.getSource() = bNextYear | e.getSource() = bLastMonth | e.getSource() = bNextMonth|e.getSource()=bAddClock) int m, y; try/控制输入的年份正确,异常控制 if (jtfYear.getText().length() != 4) throw new NumberFormatException(); y = Integer.parseInt(jtfYear.getText(); m = Integer.parseInt(jtfMont

24、h.getText(); catch (NumberFormatException ex) JOptionPane.showMessageDialog(this, 请输入4位0-9的数字!, 年份有误, JOptionPane.ERROR_MESSAGE); return; ld.setText(没有选择日期); for (int i = 0; i lastTime+1; i+) dtm.removeRow(0); if(e.getSource() = bLastYear) jtfYear.setText(String.valueOf(-y); if(e.getSource() = bNext

25、Year)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.se

26、tText(String.valueOf(m); else jtfMonth.setText(String.valueOf(+m); cld.set(y, m-1, 0); showCalendar(y, m, cld); if(e.getSource()=bAddClock) try Clock clock=new Clock(); clock.start(); if(Integer.parseInt(h1.getText()23|Integer.parseInt(m1.getText()59) throw(new Exception(); catch(Exception ex) JOpti

27、onPane.showMessageDialog(this, 时数应该为023,分钟数应该为059, 时间有误, JOptionPane.ERROR_MESSAGE); public void mouseClicked(MouseEvent e) jta.setText(null); int r = table.getSelectedRow(); int c = table.getSelectedColumn(); if (table.getValueAt(r,c) = null) ld.setText(没有选择日期); else this.showTextArea(table.getValu

28、eAt(r,c); private void showTextArea(Object selected) /在这里将公历化为农历ld.setText(jtfYear.getText()+年+jtfMonth.getText()+月+selected+日); public static void main(String args)JFrame.setDefaultLookAndFeelDecorated(true);JDialog.setDefaultLookAndFeelDecorated(true);new h_main1(); jta.setText(today(); private vo

29、id updateTimeText(String timeZoneId) if(timeZoneId != null)TimeZone timeZone = TimeZone.getTimeZone(timeZoneId); dateFormat.setTimeZone(timeZone); Calendar calendar = Calendar.getInstance(); calendar.setTimeZone(timeZone); timeField.setText(dateFormat.format(calendar.getTime();elsetimeField.setText(

30、null); private class TimeSelectedChangedListener implements ItemListener public void itemStateChanged(ItemEvent e) if (e.getStateChange()=ItemEvent.SELECTED) if (e.getItem() instanceof String) s = e.getItem().toString(); private class TimeThread extends Threadpublic void run()while(true)updateTimeTe

31、xt(s);tryThread.sleep(100);catch(InterruptedException e)e.printStackTrace(); class Clock extends Thread /闹钟线程 public void run()while(true)Calendar now=Calendar.getInstance();int h=now.get(Calendar.HOUR_OF_DAY);/获取小时int mi=now.get(Calendar.MINUTE);/获取分钟int s=now.get(Calendar.SECOND);/获取秒钟int ss=h*360

32、0+mi*60+s;if(ss(Integer.parseInt(h1.getText()*3600+Integer.parseInt(m1.getText()*60+0)&ss 0x8; i = 1) if (lunarInfoy - 1900 & i) != 0) sum += 1; return (sum + leapDays(y); /* * 传回农历 y年闰月的天数 * * param y * return */ final private static int leapDays(int y) if (leapMonth(y) != 0) if (lunarInfoy - 1900

33、& 0x10000) != 0) return 30; else return 29; else return 0; /* * 传回农历 y年闰哪个月 1-12 , 没闰传回 0 * * param y * return */ final private static int leapMonth(int y) return (int) (lunarInfoy - 1900 & 0xf); /* * 传回农历 y年m月的总天数 * * param y * param m * return */ final private static int monthDays(int y, int m) if

34、 (lunarInfoy - 1900 & (0x10000 m) = 0) return 29; else return 30; /* * 传回农历 y年的生肖 * * param y * return */ final public static String AnimalsYear(int y) return Animals(y - 4) % 12; /* * 传入 月日的offset 传回干支,0=甲子 * * param num * return */ final private static String cyclicalm(int num) return (Gannum % 10

35、 + Zhinum % 12); /* * 传入 offset 传回干支, 0=甲子 * * param y * return */ final public static String cyclical(int y) int num = y - 1900 + 36; return (cyclicalm(num); /* * 传出农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6 * * param y * param m * return */ final private long Lunar(int y, int m) long nongDate = new long7; int i = 0, temp = 0, leap = 0; Date baseDate = new GregorianCalendar(1900 + 1900, 1, 31).getTime(); Date objDate = new GregorianCalendar(y + 1900, m, 1).getTime(); long offset = (objDate.getTime() - baseDate.getTime() / 864000

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论