毕业设计(论文)-基于Java开发的万年历程序设计.doc_第1页
毕业设计(论文)-基于Java开发的万年历程序设计.doc_第2页
毕业设计(论文)-基于Java开发的万年历程序设计.doc_第3页
毕业设计(论文)-基于Java开发的万年历程序设计.doc_第4页
毕业设计(论文)-基于Java开发的万年历程序设计.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

学 年 论 文题 目: 基于Java开发的万年历程序设计 学 院: 数学与统计学院 专 业: 信息与计算科学 班 级: 11级(1)班 学生姓名: 郝玉霞 学 号: 201171020107 指导教师: 吴红萍 基于Java开发的万年历程序设计 郝玉霞 (西北师范大学数学与统计学院 兰州 730070)摘要: 本文是在Java的基础上,使用了Mycalendar、JFrame、Clock、TimeThread、Timer等类和showCalendar、getDaysOfMonth、mouseClicked、run、today等方法,运用了if-else、try-catch等基本的Java语句,使用图形用户界面为用户开发了一个便捷的万年历。关键字: Java 语言;万年历;图形界面 Calendar program design based on Java development HAOYuxia (College of Mathematics and Statistics, Northwest Normal University, Lanzhou 730070)Abstract: This article is based on Java, use the Mycalendar, JFrame, Clock, TimeThread, Timer, etc and theshowCalendar、getDaysOfMonth、run、today mouseClicked methods, and using the if - else, try-catch basic Java statements, such as using a graphical user interface for users to develop a convenient Calendar. Key Words :Java language; Calendar; The graphical interface 引言在当代繁忙的工作与生活中,时间与我们每一个人都有非常亲密的关系,每个人都受到时间的影响,为了更好的利用我们自己的时间,我们必须对时间有一个度量,因此产生了钟表。随着社会、科技的发展,人类得知时间,从观看太阳、摆钟到现在电子钟,不断研究、创新。为了在观测时间的同时能够了解其他与人类密切相关的信息,比如阴阳历、星期、日期等,而后万年历被人们所发明,在此我在原来万年历的基础上做个改进,为大家设计了能够为大家提供更多服务的万年历,它集时间、日期、星期和时区于一身,而且还具有闹钟和备忘录功能,方便你设置查看日程,防止你在每天忙忙碌碌的工作中忘记一些关键事情或重大事件,并且具有读取方便、显示直观、功能多样 使用寿命长,误差小诸多优点,符合众多人们的需求,具有广阔的使用前景。 1 简要概述1.1用户需求 (1)能够提供时区选择。 (2)能够实现日期与星期的查询。 (3)可显示1-9999年的日历信息 (4)显示准确、完整,界面美观。1.2设计目的 (1)为用户开发一个便捷的万年历; (2)对java技术的灵活应用; (3)掌握日期处理技术; (4)初步了解软件工程理论知识。1.3主要特点 (1)清楚直观,便于查询 (2)功能齐全2 功能分析2.1功能设计本程序要构建的万年历程序,其功能有以下几个方面: (1) 能够查找1至9999年的日期与星期的关系。 (2)能以阳历和阴历形式显示日期与星期。 (3)支持用户自己输入年份及月份。 (4)本程序能够实现闹钟提示。 (5)本程序具有备忘录功能。 (6)本程序能够提供时区选择,以便查看不同时区的时间。2 .2 系统功能结构图 (1)Clock类:运用线程,包含了run方法,实现时钟的功能。(2)Mycalendar类:作为主类实现了ActionListener, MouseListener 接口,继承了JFrame类,包含了showCalendar,actionPerformed, showTextArea,updateTimeText和main等方法。showCalendar方法:定义各个参数,应用AWT的绘图功能,构建总体框架;获取所要查找的年份和月份,通过调用getDaysOfMonth方法,实现日历模块功能,并得到所需结果;actionPerformed方法:控制年月份的正确输入;showTextArea方法:其主要功能是将功力化为农历;updateTimeText方法:设置时区查询,以便用户查询不同时区的时间;updateTimeText方法万年历Clock类Mycalendar类showCalendar方法main方法showTextArea方法图1 系统功能结构3 总体设计3.1程序设计思路本程序主要分为以下几个模块:(1)闹钟模块:此模块的主要功能为:在用户设置的闹钟提示时间5分钟内,进行闹钟提示。(2)备忘录模块:此模块的主要为用户提供记录重要事件功能,减少用户所面临的不必要的烦恼。(3)日期模块 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,若是闰年,该年的总天数为366,否则为365,然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若是7,则为星期日。算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该 日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该 月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。 如果年份大于9999年则程序不予判断。(4)农历和气节显示模块:其主要功能是方便用户查询当天的农历、星期、节气、生肖等。(5)温馨提示模块:此模块主要内容为惜时励志名言,主要功能是激励广大用户珍惜时间,把握好生命中的每一天。(6)时区选择模块:此模块的主要功能是方便用户查看不同时区的时间。3.2程序运行界面 运行界面如下:图2 运行界面3.3流程图:图3 流程图4 各模块的功能及程序说明4.1初始化组件private Calendar cld = Calendar.getInstance(); private String week = 星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六 ;private DefaultTableModel dtm = new DefaultTableModel(null, week);private JTable table = new JTable(dtm);private JScrollPane sp = new JScrollPane(table);private JButton bLastYear = new JButton(上一年);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 = new 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 JPanel p9 = new JPanel(new BorderLayout(); private JPanel p10 = new JPanel(new GridLayout(6,1); private JPanel p11 = new JPanel(new BorderLayout(); private JTextField jtfYear = new JTextField(5); private JTextField jtfMonth = new JTextField(2); private JTextField timeField=new JTextField(); private JTextField h1=new JTextField(5); private JTextField m1=new JTextField(5);private static JTextArea jta = new JTextArea(4,5);private JScrollPane jsp = new JScrollPane(jta);private JTextArea jta1 = new JTextArea(1,4);private JTextArea bwl = new JTextArea(5,4);private JScrollPane jsp1 = new JScrollPane(jta1);private JLabel l = new JLabel(你可以向年份和月份输入框中输入正确的年份和月份,提高查询效率);private JLabel lt = new JLabel();private JLabel ld = new JLabel();private JLabel ts=new JLabel( 请在右边下拉菜单选择你要选择的城市);private JLabel clock= new JLabel(闹钟,JLabel.CENTER);private JLabel notice= new JLabel(闹钟提示,JLabel.CENTER);private JLabel beiwl= new JLabel(备忘录,JLabel.CENTER);private JLabel hour = new JLabel(小时,JLabel.CENTER);private JLabel minute= new JLabel(分钟,JLabel.CENTER);private JLabel lu = new JLabel(农历和节气,JLabel.CENTER);private JLabel lizhi0 = new JLabel(温馨提示,JLabel.CENTER);private JLabel lizhi = new JLabel( 明日复明日,明日何其多);private JLabel lizhi1 = new JLabel( 花开有落时,人生容易老);private JLabel lizhi2 = new JLabel( 成 功 立 业 在 今 日);private JLabel lizhi3 = new JLabel( 莫 待 明 朝 悔 今 朝);private JLabel lizhi4 = new JLabel( 珍惜时间,从你我做起!);private JLabel null1=new JLabel();private int lastTime;private String localTime = null;private String s = null;private SimpleDateFormat dateFormat=new SimpleDateFormat(yyyy年MM月dd日 hh时mm分ss秒);4.2闹钟线程 class Clock extends Threadpublic void run() 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*3600+mi*60+s; if(ss(Integer.parseInt(h1.getText()*3600+Integer.parseInt(m1.getText()*60-300)ssInteger.parseInt(h1.getText()*3600+(Integer.parseInt(m1.getText()*60)jta1.setText( 闹钟启动); else jta1.setText( 没有正在提示的闹钟); 4.3绘制图形界面 public Mycalendar() super(My Calendar 郝玉霞制作);/ 框架命名this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/ 窗口关闭函数this.getContentPane().setLayout(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, 229);/ 日期显示表格为浅蓝色table.setFont(new Font(黑体, Font.BOLD, 24);/ 日期数字字体格式table.setRowHeight(32);/ 表格的高度table.addMouseListener(this); / 鼠标监听器结束语本次学年论文题目为万年历,通过设计这样的一个日历小组件,使我对Java语言有了更进一步的认识。不仅对基础知识掌握的更加牢固,而且运用Java知识去解决实际问题的能力得到了很大的提高。对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用到哪些知识点,如相关的类和对象等。然后根据初步设计的功能和布局构架,考虑用源代码进行实现。经过长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个论文设计。在这个过程中,在把书本上的知识给系统的复习了一下的同时,也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。在设计的每个的环节中,都会多多少少的遇到一些问题,这就促使我去查阅各种资料,或者请教同学,极大的提高我的专业素养,同时对在有些书上的理论知识在实际的运用,以及应该注意的问题有了比较深刻的认识。当然,仍然有些理论问题不是很好的去运用,或者是了解的不深刻。这就使的在实践中的所设计的程序有些功能不是自己所想的那样的完美。不过,既然发现了问题的所在,我就不会放弃的,直至问题得到解决。这些也同时反映出了平时运用知识去实践这方面做的太少,太缺乏经验。对所设计中将所面临的问题认识不够,是学年论文让我认识到了这些问题的存在,同时给我提供了去面对这些问题的平台,也使我充分的认识到在以后也应该怎样去实践,怎样去学习一门计算机语言,以及如何去运用这门语言去解决实际问题等等。总之,通过这次论文设计,我明白了编写程序,不仅要求对课本知识有深刻的了解,同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。是这次论文设计,使我认识到了自己很多的缺点,同时,也是我学到新知识和新方法的一个机会,这给我在以后继续学习好这门语言指明了方向。参考文献1 耿祥义,张跃平.Java面向对象程序设计M,清华大学出版社,2009.112 孙全党,王吴迪 ,赵枫朝.Java程序设计应用教程M,电子工业出版社,2006.23 赵玉阳.Java从入门到精通M,清华大学出版社,2006.84 李兴华.Java开发实战经典M,清华大学出版社,2009.85 曾令明,索望,甘刚,宋波.Java程序设计教程M,西安电子科技大学出版社,2007.86 席国钦.深入体验Java项目开发M,清华大学出版社,2011.7附录(程序源代码)import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.DefaultTableModel;import java.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 Mycalendar extends JFrame implements ActionListener, MouseListener private Calendar cld = Calendar.getInstance();/获取一个Calendar类的实例对象private String week = 星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六 ;private DefaultTableModel dtm = new DefaultTableModel(null, week);private JTable table = new JTable(dtm);private JScrollPane sp = new JScrollPane(table);private JButton bLastYear = new JButton(上一年);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 = new 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 JPanel p9 = new JPanel(new BorderLayout(); private JPanel p10 = new JPanel(new GridLayout(6,1); private JPanel p11 = new JPanel(new BorderLayout();private JComboBox 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 JTextField m1=new JTextField(5);private static JTextArea jta = new JTextArea(4,5);private JScrollPane jsp = new JScrollPane(jta);private JTextArea jta1 = new JTextArea(1,4);private JTextArea bwl = new JTextArea(5,4);private JScrollPane jsp1 = new JScrollPane(jta1);private JLabel l = new JLabel(你可以向年份和月份输入框中输入正确的年份和月份,提高查询效);private JLabel lt = new JLabel();private JLabel ld = new JLabel();private JLabel ts=new JLabel( 请在右边下拉菜单选择你要选择的城市);private JLabel clock= new JLabel(闹钟,JLabel.CENTER);private JLabel notice= new JLabel(闹钟提示,JLabel.CENTER);private JLabel beiwl= new JLabel(备忘录,JLabel.CENTER);private JLabel hour = new JLabel(小时,JLabel.CENTER);private JLabel minute= new JLabel(分钟,JLabel.CENTER);private JLabel lu = new JLabel(农历和节气,JLabel.CENTER);private JLabel lizhi0 = new JLabel(温馨提示,JLabel.CENTER);private JLabel lizhi = new JLabel( 明日复明日,明日何其多);private JLabel lizhi1 = new JLabel( 花开有落时,人生容易老);private JLabel lizhi2 = new JLabel( 成 功 立 业 在 今 日);private JLabel lizhi3 = new JLabel( 莫 待 明 朝 悔 今 朝);private JLabel lizhi4 = new JLabel( 珍惜时间,从你我做起!);private JLabel null1=new JLabel();private int lastTime;private String localTime = null;private String s = null;private SimpleDateFormat dateFormat=new SimpleDateFormat(yyyy年MM月dd日 hh时mm分ss秒);public Mycalendar() super(My Calendar 郝玉霞制作);/ 框架命名this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/ 窗口关闭函数this.getContentPane().setLayout(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, 229);/ 日期显示表格为浅蓝色table.setFont(new Font(黑体, Font.BOLD, 24);/ 日期数字字体格式table.setRowHeight(32);/ 表格的高度table.addMouseListener(this); / 鼠标监听器jtfYear.addActionListener(this);/ 可输入年份的文本框/ 为各个按钮添加监听函数bLastYear.addActionListener(this);bNextYear.addActionListener(this);bLastMonth.addActionListener(this);bNextMonth.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);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.NORTH);p8.add(p7,BorderLayout.CENTER);p8.add(p9,BorderLayout.SOUTH);p9.add(bwl, BorderLayout.SOUTH);p9.add(beiwl, BorderLayout.NORTH); p10.add(lizhi0);p10.add(lizhi);p10.add(lizhi1); p10.add(lizhi2); p10.add(lizhi3);p10.add(lizhi4);p11.add(p10, BorderLayout.SOUTH);p11.add(p3, BorderLayout.NORTH);this.getContentPane().add(p11, 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(new Date().split(-);/ 获取日期cld.set(Integer.parseInt(strDate0), Integer.parseInt(strDate1) - 1,0);showCalendar(Integer.parseInt(strDate0),Integer.parseInt(strDate1), cld);jtfMonth.setEditable(true);/ 设置月份文本框为可编辑jtfYear.setText(strDate0);jtfMonth.setText(strDate1);this.showTextArea(strDate2);ld.setFont(new Font(新宋体, Font.BOLD, 24); jta.setFont(new Font(隶书, Font.BOLD, 13); lu.setFont(new Font(隶书, Font.BOLD, 14);lizhi.setFont(new Font(Dialog, Font.PLAIN, 13);lizhi1.setFont(new Font(Dialog, Font.PLAIN, 13);lizhi2.setFont(new Font(Dialog, Font.PLAIN, 13);lizhi3.setFont(new Font(Dialog, Font.PLAIN, 13);lizhi4.setFont(new Font(Dialog, Font.PLAIN, 13);new Timer(lt).start();new TimeThread().start();this.setBounds(200, 200, 700, 350);this.setResizable(true);this.setVisible(true);public void showCalendar(int localYear, int localMonth, Calendar cld) int Days = getDaysOfMonth(localYear, localMonth) + cld.get(Calendar.DAY_OF_WEEK) -1; Object ai = new Object7; lastTime = 0; for (int i = cld.get(Calendar.DAY_OF_WEEK); i = Days; i+) aii%7 = String.valueOf(i-(cld.get(Calendar.DAY_OF_WEEK)-1); if (i%7 = 6) dtm.addRow(ai); ai = new Object7; lastTime+; dtm.addRow(ai); public 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=0Year%100!=0|Year%400=0)/闰年return 29;else return 28; public void actionPerformed(ActionEvent e) if(e.getSource() = jtfYear | e.getSource() = 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(jtfMonth.getText(); catch (NumberFormatException ex) JOptionPane.showMessageDialog(this, 请输入4位0-9的数字!, 年份有误, JOptionPane.ERROR_MESSAGE); return; try/控制输入的月份正确,异常控制 if (Integer.parseInt(jtfMonth.getText()1|Integer.parseInt(jtfMonth.getText()12) throw new NumberFormatException(); y = Integer.parseInt(jtfYear.getText(); m = Integer.parseInt(jtfMonth.getText();catch (NumberFormatException ex) JOptionPane.showMessageDialog(this, 月数应该为112, 月份有误, 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() = 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 Clock clock=new Clock(); clock.start(); if(Integer.parseInt(h1.getText()0|Integer.parseInt(h1.getText()23|Integer.parseInt(m1.getText()0|Integer.parseInt(m1.g

温馨提示

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

评论

0/150

提交评论