收藏 分享(赏)

Java万年历课程设计报告.doc

上传人:精品资料 文档编号:8475344 上传时间:2019-06-29 格式:DOC 页数:34 大小:182KB
下载 相关 举报
Java万年历课程设计报告.doc_第1页
第1页 / 共34页
Java万年历课程设计报告.doc_第2页
第2页 / 共34页
Java万年历课程设计报告.doc_第3页
第3页 / 共34页
Java万年历课程设计报告.doc_第4页
第4页 / 共34页
Java万年历课程设计报告.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、Java课程设计设计题目:万年历系 别: 计算机科学与工程学院 专 业: 信息管理与信息系统 学 号: 1100340116 姓 名: 岑少兵 指导教师: 汪华澄 时 间: 2013-6-29 2目 录摘要3系统功能结构图31 系统模块设计41.1 需求设计41.2 开发和运行环境41.3 功能设计42 万年历详细设计思路42.1 程序设计思路52.2 程序运行主界面52.3 流程图63 各模块功能实现及代码说明63.1 MainFramel 类63.2 Lunar 类143.3 national 类223.4 SetClock 类26 4 小结 345 参考文献 343基于 Myeclips

2、e 的万年历摘要:万年历是日常生活中不可或缺的小工具,用万年历我们可以准确地查到当前,以后或是过去的日期,极大地方便了我们的生活。在万年历上添加了显示本地时间以后会更加准确地显示时间。无论是对于我们学生还是上班族或是自由职业者需要经常查看和查找万年历来规划自己将要做得一些事情,或是回忆在过去的时间里已经做过的事情,使之更加有利于提升我们的学习或是工作进度。系统功能结构图:主要描述系统要实现的各个模块的功能。万年历世界时间闹钟 查询星期 农历北京时间纽约时间设置闹钟时间到,闹铃响查询年月日对应的星期关闭将农历与公历一起实现东京时间41 系统模块设计11 需求分析本程序的要求为:1.使用图形用户界

3、面2.能够实现日期与星期的查询3.能够显示农历4.能够查看世界时间5.能够添加闹钟 12 开发和运行环境开发工具:Myeclipse运行环境: windows 7 13 功能设计本程序要构建的万年历程序,其功能有以下几个方面: (1)通过 MainFrame 类,实现图形界面和公历日期。(2)提供年份、月份的下拉形式菜单来选择年份和月份。(3)通过 Lunar 类实现农历日期。(4)通过 national 类实现世界时间。(5)能以月历形式显示日期与星期。 (6)通过 SetClock 类来实现闹钟功能。(7)通过点击世界时间按钮查询世界时间(8) 通过点击闹钟按钮设置闹钟(9)显示系统当前时

4、间和日期。(10) 显示作者信息。 2 万年历详细设计思路2.1 程序设计思路1. 总天数的算法:首先用 if 语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为 366,否则,为 365。然后判断输入的年是否为定义年,若是,令总天数5S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加 1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。2. 输出月份第一天为星期几的算法:使总天数除以 7 取余加 2 得几既为星期几,若是7,则为星期日。3. 算出输出月份第

5、一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以 7 得 0 换行,即可完整的输出该月的日历。4. 如果年份小于 1900 年则程序不予判断。2.2 程序运行主界面62.3 流程图3 各模块功能实现及代码说明3.1 MainFrame类import java.awt.BorderLayout;import java.awt.Color;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.

6、event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;7import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JP

7、anel;import javax.swing.Timer;import aa.Lunar;public class MainFrame extends JFrame implements ItemListener/建立主界面JPanel panel=new JPanel(new BorderLayout();/建立中层容器并布局JPanel panel1=new JPanel();JPanel panel2=new JPanel(new GridLayout(8,7);JPanel panel3=new JPanel(new GridLayout(4,1);JLabel label=new

8、JLabel49;/标签JLabel y_label=new JLabel(“年“);JLabel m_label=new JLabel(“月“);JLabel dashao =new JLabel(“时间总是在不经意间溜走,我们还得向前走“,JLabel.CENTER);JLabel bing =new JLabel(“希望在回首时候,不带任何遗憾!“,JLabel.CENTER);JLabel feng =new JLabel(“桂电大烧饼制作!“,JLabel.CENTER);JLabel labelTime=new JLabel(“,JLabel.CENTER);JComboBox c

9、om1=new JComboBox();/下拉窗口JComboBox com2=new JComboBox();JButton but1=new JButton(“闹钟“); /按钮JButton but2=new JButton(“世界时间“); Calendar now=Calendar.getInstance();8public MainFrame()/设置主界面,并添加各组件super(“大烧饼万年历“);setSize(500,600);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);panel1.add(but1);panel1.add

10、(y_label);panel1.add(com1);panel1.add(m_label);panel1.add(com2);panel1.add(but2);panel3.add(dashao);panel3.add(bing);panel3.add(feng);panel3.add(labelTime);for(int i=0;i 0x8; i = 1) if (lunarInfoy - 1900 return (sum + leapDays(y);/= 传回农历 y年闰月的天数final private static int leapDays(int y) if (leapMonth(

11、y) != 0) if (lunarInfoy - 1900 elsereturn 29; elsereturn 0;17/= 传回农历 y年闰哪个月 1-12 , 没闰传回 0final private static int leapMonth(int y) return (int) (lunarInfoy - 1900 /= 传回农历 y年m月的总天数final private static int monthDays(int y, int m) if (lunarInfoy - 1900 elsereturn 30;/= 传回农历 y年的生肖final public String ani

12、malsYear() final String Animals = new String“鼠“, “牛“, “虎“, “兔“, “龙“, “蛇“, “马“, “羊“, “猴“, “鸡“, “狗“, “猪“;return Animals(year - 4) % 12;/= 传入 月日的offset 传回干支, 0=甲子final private static String cyclicalm(int num) final String Gan = new String“甲“, “乙“, “丙“, “丁“, “戊“, “己“, “庚“, “辛“, “壬“, “癸“;final String Zhi

13、 = new String“子“, “丑“, “寅“, “卯“, “辰“, “巳“, “午“, “未“, “申“, “酉“, “戌“, “亥“;return (Gannum % 10 + Zhinum % 12);/= 传入 offset 传回干支, 0=甲子final public String cyclical() int num = year - 1900 + 36;return (cyclicalm(num);18public static String getChinaDayString(int day) String chineseTen = “初“, “十“, “廿“, “卅“;

14、int n = day % 10 = 0 ? 9 : day % 10 - 1;if (day 30)return “;if (day = 10)return “初十“;elsereturn chineseTenday / 10 + chineseNumbern;/* */* 传出y年m月d日对应的农历.* yearCyl3:农历年与 1864 的相差数 ?* monCyl4:从 1900 年 1 月 31 日以来,闰月数* dayCyl5:与 1900 年 1 月 31 日相差的天数,再加 40 ?* param cal * return */public String getLunarDa

15、te(int year_log, int month_log, int day_log) /SuppressWarnings(“unused“) int yearCyl, monCyl, dayCyl;int leapMonth = 0;String nowadays;Date baseDate = null;Date nowaday=null;try baseDate = chineseDateFormat.parse(“1900 年 1 月 31 日“);19 catch (ParseException e) e.printStackTrace(); /To change body of

16、catch statement use Options | File Templates.nowadays=year_log+“年“+month_log+“月“+day_log+“日“;try nowaday = chineseDateFormat.parse(nowadays); catch (ParseException e) e.printStackTrace(); /To change body of catch statement use Options | File Templates./求出和 1900 年 1 月 31 日相差的天数int offset = (int) (now

17、aday.getTime() - baseDate.getTime() / 86400000L);dayCyl = offset + 40;monCyl = 14;/用offset减去每农历年的天数/ 计算当天是农历第几天/i最终结果是农历的年份/offset是当年的第几天int iYear, daysOfYear = 0;for (iYear = 1900; iYear 0; iYear+) daysOfYear = yearDays(iYear);offset -= daysOfYear;monCyl += 12;if (offset 0; iMonth+) /闰月if (leapMont

18、h 0 leap = true;daysOfMonth = leapDays(year); elsedaysOfMonth = monthDays(year, iMonth);offset -= daysOfMonth;/解除闰月if (leap if (!leap) monCyl+;/offset为 0 时,并且刚才计算的月份是闰月,要校正if (offset = 0 else leap = true;-iMonth;-monCyl;21/offset小于 0 时,也要校正if (offset 0) offset += daysOfMonth;-iMonth;-monCyl;month =

19、iMonth;day = offset + 1;if(month)=1) else if(month)=1) else if(month)=5)else if(month)=8)else if(day=1)return chineseNumbermonth - 1 + “月“;else return getChinaDayString(day);public String toString() if(chineseNumbermonth - 1=“一“else if(getChinaDayString(day)=“初一“)return chineseNumbermonth - 1 + “月“;

20、else 22return getChinaDayString(day);/return year + “年“ + (leap ? “闰“ : “) + chineseNumbermonth - 1 + “月“ + getChinaDayString(day);3.3 national类package aa;import java.awt.Container;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.text.SimpleDate

21、Format;import java.util.Date;import java.util.TimeZone;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;public class national public national() ComboBoxFrame frame = new ComboBoxFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);fra

22、me.setVisible(true);class ComboBoxFrame extends JFrame public static final int DEFAULT_WIDTH = 430;/设置窗口大小23public static final int DEFAULT_HEIGHT = 200;public ComboBoxFrame() setTitle(“世界时间“);/标题setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);/ add panel to frameComboBoxPanel panel = new ComboBoxPanel();Con

23、tainer contentPane = getContentPane();contentPane.add(panel);Thread t = new Thread(panel);/线程t.start();/线程启动class ComboBoxPanel extends JPanel implements Runnable JLabel label1 = null;/定义各组件JLabel label2 = null;JLabel label3 = null;JLabel label4 = null;JLabel label5 = null;JComboBox combo1 = null;JC

24、omboBox combo2 = null;JComboBox combo3 = null;/默认时间,北京、纽约、东京private String timeZone1 = “Etc/GMT-8“;/北京时间private String timeZone2 = “America/New_York“;/纽约时间private String timeZone3 = “Asia/Tokyo“;/东京时间public ComboBoxPanel() 24label1 = new JLabel();label2 = new JLabel();label3 = new JLabel();label4 =

25、new JLabel(“下面的时间默认为北京,纽约,东京的时间,下拉选择其他地方时间“);/添加标签label5 = new JLabel(“同一个世界,同一个梦想“,JLabel.CENTER);label1.setFont(new Font(“Dialog“, Font.BOLD, 12);/设置字体label2.setFont(new Font(“Dialog“, Font.BOLD, 12);label3.setFont(new Font(“Dialog“, Font.BOLD, 12);combo1 = new JComboBox(TimeZone.getAvailableIDs()

26、;/下拉组件combo2 = new JComboBox(TimeZone.getAvailableIDs();combo3 = new JComboBox(TimeZone.getAvailableIDs();Clock();add(label4);add(label1);add(combo1);add(label2);add(combo2);add(label3);add(combo3);add(label5);JComboBoxAction combo11Action = new JComboBoxAction(1);JComboBoxAction combo12Action = new

27、 JComboBoxAction(2);JComboBoxAction combo13Action = new JComboBoxAction(3);combo1.addActionListener(combo11Action);/监听下拉组件combo2.addActionListener(combo12Action);combo3.addActionListener(combo13Action);25private class JComboBoxAction implements ActionListener /实现下拉组件监听int Type = 0;public JComboBoxAc

28、tion(int type) Type = type;public void actionPerformed(ActionEvent event) if(Type = 1)timeZone1 = (String)combo1.getSelectedItem(); else if(Type = 2)timeZone2 = (String)combo2.getSelectedItem(); else if(Type = 3)timeZone3 = (String)combo3.getSelectedItem();private void Clock() SimpleDateFormat sd =

29、new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss“);/设置时间输出格式sd.setTimeZone(TimeZone.getTimeZone(timeZone1);/初始化标签String strDate = sd.format(new Date();label1.setText(strDate);sd.setTimeZone(TimeZone.getTimeZone(timeZone2);strDate = sd.format(new Date();label2.setText(strDate);sd.setTimeZone(TimeZone.getTim

30、eZone(timeZone3);strDate = sd.format(new Date();label3.setText(strDate);26public void run() /实现方法while (true) Clock();/调用函数try Thread.sleep(1000); catch (Exception e) 3.4 SetClock类package aa;import java.applet.Applet;import java.applet.AudioClip; import java.awt.Container; import java.awt.GridLayout

31、; import java.awt.event.*; import java.io.File; import .MalformedURLException; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.*; public class SetClock extends JFrame implements Runnable JLabel ri, shi, fen, miao, dangqian, guanji; JButton queding, dakai; JTextField musi

32、c, RI, SHI, FEN, MIAO; int h = 0, f = 0, m = 0, r = 0; boolean fo = false, foo = false; 27public AudioClip soumd1; int riqi, shizhong, fenzhong, miaozhong; public SetClock() Container c = getContentPane(); c.setLayout(new GridLayout(4, 1); JPanel jp = new JPanel(); dangqian = new JLabel(); jp.add(da

33、ngqian); c.add(jp); JPanel jp3 = new JPanel(); guanji = new JLabel(“离闹铃时间:0 日 0 时 0 分 0 秒“); jp3.add(guanji); c.add(jp3); JPanel jp1 = new JPanel(); music = new JTextField(20); dakai = new JButton(“选择闹铃音乐“); jp1.add(music); jp1.add(dakai); c.add(jp1); ri = new JLabel(“日“);RI = new JTextField(4); shi

34、 = new JLabel(“时“); SHI = new JTextField(4); fen = new JLabel(“分“); FEN = new JTextField(4); miao = new JLabel(“秒“); MIAO = new JTextField(4); JPanel jp2 = new JPanel(); jp2.add(ri); jp2.add(RI); 28jp2.add(shi); jp2.add(SHI); jp2.add(fen); jp2.add(FEN); jp2.add(miao); jp2.add(MIAO); queding = new JB

35、utton(“确定“); jp2.add(queding);c.add(jp2); setSize(400, 160); setVisible(true); dakai.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) JFileChooser fileChooser = new JFileChooser(); / 实例化文件选择器fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); /

36、设置文件选择模式,此处为文件和目录均可 fileChooser.setCurrentDirectory(new File(“.“); / 设置文件选择器当前目录 fileChooser .setFileFilter(new javax.swing.filechooser.FileFilter() public boolean accept(File file) / 可接受的文件类型String name = file.getName().toLowerCase(); return name.endsWith(“.wav“)| name.endsWith(“.au“)| file.isDirec

37、tory(); public String getDescription() / 文件描述return “音乐文件(*.wav,*.au)“; ); if (fileChooser.showOpenDialog(SetClock.this) = JFileChooser.APPROVE_OPTION) / 弹出文件选择器,并判断是否点击了打开按钮29String fileName = fileChooser.getSelectedFile().getAbsolutePath(); / 得到选择文件或目录的绝对路径music.setText(fileName); ); queding.addAc

38、tionListener(new ActionListener() public void actionPerformed(ActionEvent event) if (queding.getText().equals(“确定“) try r = Integer.parseInt(RI.getText(); h = Integer.parseInt(SHI.getText(); f = Integer.parseInt(FEN.getText(); m = Integer.parseInt(MIAO.getText(); if (1 = r SimpleDateFormat ri = new

39、SimpleDateFormat(“dd“); if (RI.getText() = null | RI.getText().equals(“) r = Integer.parseInt(ri.format(now); RI.setText(ri.format(now); else r = Integer.parseInt(RI.getText(); fo = true; else 30JOptionPane.showMessageDialog(null, “输入时间错误“); catch (Exception e) JOptionPane.showMessageDialog(null,“ 请输入正确的时间“); else try fo = false; RI.setEditable(true); SHI.setEditable(true); FEN.setEditable(true); MIAO.setEditable(true); queding.setText(“确定“); soumd1.stop(); catch(Exception E) JOptionPane.showMessageDialog(null,“ 已关闭!“); ); public void Set() /SetClock s = new SetClock();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报