版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.java课程设计设计题目:万年历系 别: 计算机科学与工程学院 专 业: 信息管理与信息系统 学 号: 1100340116 姓 名: 岑少兵 指导教师: 汪华澄 时 间: 2013-6-29 精品.目 录摘要3系统功能结构图31 系统模块设计41.1 需求设计41.2 开发和运行环境41.3 功能设计42 万年历详细设计思路4 2.1 程序设计思路5 2.2 程序运行主界面52.3 流程图63 各模块功能实现及代码说明6 3.1 mainframel类6 3.2 lunar类14 3.3 national类22 3.4 setclock类26 4 小结 345 参考文献 34精品.基于my
2、eclipse的万年历摘要:万年历是日常生活中不可或缺的小工具,用万年历我们可以准确地查到当前,以后或是过去的日期,极大地方便了我们的生活。在万年历上添加了显示本地时间以后会更加准确地显示时间。无论是对于我们学生还是上班族或是自由职业者需要经常查看和查找万年历来规划自己将要做得一些事情,或是回忆在过去的时间里已经做过的事情,使之更加有利于提升我们的学习或是工作进度。系统功能结构图:主要描述系统要实现的各个模块的功能。精品.万年历世界时间闹钟查询星期农历北京时间纽约时间设置闹钟时间到,闹铃响查询年月日对应的星期关闭将农历与公历一起实现东京时间1系统模块设计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。然后判断输入的年是否为定义年,若是,令总天数s=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。 2. 输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若是7,则为星期日。3. 算出输出月份第一天为
5、星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。4. 如果年份小于1900年则程序不予判断。2.2程序运行主界面精品.2.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.event.
6、actionlistener;import java.awt.event.itemevent;import java.awt.event.itemlistener;import 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.jpanel
7、;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 com1
9、=new jcombobox();/下拉窗口 jcombobox com2=new jcombobox(); jbutton but1=new jbutton(闹钟); /按钮 jbutton but2=new jbutton(世界时间); calendar now=calendar.getinstance(); public mainframe()/设置主界面,并添加各组件 精品. super(大烧饼万年历); setsize(500,600); setdefaultcloseoperation(jframe.exit_on_close); panel1.add(but1); panel1.
10、add(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;i49;i+)/日期标签 labeli=new jlabel(,jlabel.center); panel2.add(labeli); panel.add(panel1,borderlayout.north);/中层容器布局 panel.a
11、dd(panel2,borderlayout.center); panel.add(panel3,borderlayout.south); setcontentpane(panel); setvisible(true); init(); com1.additemlistener(this);/对下拉组件监听 com2.additemlistener(this); but1.addactionlistener(new actionlistener() /按钮动作监听精品.public void actionperformed(actionevent e) new aa.setclock(); /
12、闹钟类 ); but2.addactionlistener(new actionlistener() public void actionperformed(actionevent e) new aa.national();/世界时间类 ); timer timer = new timer(1000, new actionlistener()/获得系统时间,并将其显示在主界面下方 public void actionperformed(actionevent evt) string s1= new simpledateformat(yyyy-mm-dd hh:mm:ss).format(new
13、 date(); labeltime.settext(现在时间是:+s1); ); timer.start();/线程启动 public void init()/设置日期标签函数 int year,month,first_day_num; string log= 星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六; for(int i=0;i7;i+) 精品. labeli.settext(logi); for(int i=0;i49;i=i+7) labeli.setforeground(color.red);/将星期天设置为红色 for(int i=6;i49;i=i+7)
14、 labeli.setforeground(color.red);/将星期六设置为红色 for(int i=1800;i=2100;i+)/将年份的下拉设置为1800-2100年 com1.additem(+i); for(int i=1;i13;i+)/讲月份下拉设置为12月 com2.additem(+i); first_day_num=(int)(now.get(calendar.day_of_week);/获得日期 month=(int)(now.get(calendar.month);/获得月份 year=(int)(now.get(calendar.year);/获得年份 com1
15、.setselectedindex(year-1800);/将年份设置为当前年份 com2.setselectedindex(month);/将月份设置为当前月 resetday(first_day_num,year,month);/调用resetday函数 public int use(int year2,int month2)/use函数 int first_day;精品. now.set(year2, month2,1); first_day=(int)(now.get(calendar.day_of_week); return first_day; public void statec
16、hanged() int year3,month3,week3; year3=integer.parseint(com1.getselecteditem().tostring(); month3=integer.parseint(com2.getselecteditem().tostring()-1; week3=use(year3,month3); resetday(week3,year3,month3);/调用函数 public void resetday(int week_log, int year_log, int month_log) /resetday函数 int month_da
17、y_score; / 存储月份的天数 int count; lunar lunar;/定义lunar int month_day; string lunardate=new string49;/农历标签 month_day_score = 0; count = 1; for (int i = 0; i 49; i +) /将农历跟公历一起显示 for(int j=0;j49;j=j+7) if(i!=j&i!=j+6) labeli.setforeground(color.black); for(int j=0;i49;i=i+7) labeli.setforeground(color.red
18、);精品. for(int j=6;i49;i=i+7) labeli.setforeground(color.red); date date = new date(year_log, month_log + 1, 1); / now month是从0开始的, 对于一月第几天来说,day_of_month第一天就是1. 对于一年第几个月来说,month一月份是0,二月份是1. calendar cal = calendar.getinstance(); cal.settime(date); cal.add(calendar.month, -1); / 前个月 month_day_score =
19、 cal.getactualmaximum(calendar.day_of_month);/ 最后一天 month_day=month_day_score; for (int i = 7; i 49; i+) / 初始化标签 labeli.settext(); week_log = week_log + 6; / 将星期数加6,使显示正确 month_day_score = month_day_score + week_log; lunar=new aa.lunar();/调用lunar类 for(int i=0;imonth_day;i+) lunardatei=lunar.getlunar
20、date( year_log, month_log+1, i+1);/农历的实现 for (int i = week_log; i 0x8; i = 1) if (lunarinfoy - 1900 & i) != 0) sum += 1;精品. return (sum + leapdays(y); /= 传回农历 y年闰月的天数 final private static int leapdays(int y) if (leapmonth(y) != 0) if (lunarinfoy - 1900 & 0x10000) != 0) return 30; else return 29; els
21、e return 0; /= 传回农历 y年闰哪个月 1-12 , 没闰传回 0 final private static int leapmonth(int y) return (int) (lunarinfoy - 1900 & 0xf); /= 传回农历 y年m月的总天数 final private static int monthdays(int y, int m) if (lunarinfoy - 1900 & (0x10000 m) = 0) return 29; else return 30; /= 传回农历 y年的生肖 final public string animalsye
22、ar() 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 = new string子, 丑, 寅, 卯, 辰, 巳, 午, 未, 申, 酉,
23、戌, 亥; return (gannum % 10 + zhinum % 12); /= 传入 offset 传回干支, 0=甲子 final public string cyclical() int num = year - 1900 + 36; return (cyclicalm(num); public static string getchinadaystring(int day) string chineseten = 初, 十, 廿, 卅; int n = day % 10 = 0 ? 9 : day % 10 - 1; if (day 30) return ; if (day =
24、 10) return 初十; else return chinesetenday / 10 + chinesenumbern; /* */* * 传出y年m月d日对应的农历. * yearcyl3:农历年与1864的相差数 ? * moncyl4:从1900年1月31日以来,闰月数精品. * daycyl5:与1900年1月31日相差的天数,再加40 ? * param cal * return */ public string getlunardate(int year_log, int month_log, int day_log) /suppresswarnings(unused) i
25、nt yearcyl, moncyl, daycyl; int leapmonth = 0; string nowadays; date basedate = null; date nowaday=null; try basedate = chinesedateformat.parse(1900年1月31日); catch (parseexception e) e.printstacktrace(); /to change body of catch statement use options | file templates. nowadays=year_log+年+month_log+月+
26、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) (nowaday.gettime() - basedate.gettime() / 86400000l); daycyl = offset + 40; moncyl = 14; /
27、用offset减去每农历年的天数 / 计算当天是农历第几天精品. /i最终结果是农历的年份 /offset是当年的第几天 int iyear, daysofyear = 0; for (iyear = 1900; iyear 0; iyear+) daysofyear = yeardays(iyear); offset -= daysofyear; moncyl += 12; if (offset 0) offset += daysofyear; iyear-; moncyl -= 12; /农历年份 year = iyear; yearcyl = iyear - 1864; leapmont
28、h = leapmonth(iyear); /闰哪个月,1-12 leap = false; /用当年的天数offset,逐个减去每月(农历)的天数,求出当天是本月的第几天 int imonth, daysofmonth = 0; for (imonth = 1; imonth 0; imonth+) /闰月 if (leapmonth 0 & imonth = (leapmonth + 1) & !leap) -imonth; leap = true; daysofmonth = leapdays(year); else daysofmonth = monthdays(year, imont
29、h); offset -= daysofmonth;精品. /解除闰月 if (leap & imonth = (leapmonth + 1) leap = false; if (!leap) moncyl+; /offset为0时,并且刚才计算的月份是闰月,要校正 if (offset = 0 & leapmonth 0 & imonth = leapmonth + 1) if (leap) leap = false; else leap = true; -imonth; -moncyl; /offset小于0时,也要校正 if (offset 0) offset += daysofmont
30、h; -imonth; -moncyl; month = imonth; day = offset + 1; if(month)=1)&day=1) return 春节; else if(month)=1)&day=15) return 元宵; else if(month)=5)&day=5)精品. return 端午; else if(month)=8)&day=15) return 中秋; else if(day=1) return chinesenumbermonth - 1 + 月; else return getchinadaystring(day); public string t
31、ostring() if(chinesenumbermonth - 1=一&getchinadaystring(day)=初一) return 农历+year + 年; else if(getchinadaystring(day)=初一) return chinesenumbermonth - 1 + 月; else return getchinadaystring(day); /return year + 年 + (leap ? 闰 : ) + chinesenumbermonth - 1 + 月 + getchinadaystring(day); 3.3 national类package
32、aa;import java.awt.container;import java.awt.font;import java.awt.event.actionevent;import java.awt.event.actionlistener;import java.text.simpledateformat;import java.util.date;import java.util.timezone;import javax.swing.jcombobox;精品.import javax.swing.jframe;import javax.swing.jlabel;import javax.
33、swing.jpanel;public class national public national() comboboxframe frame = new comboboxframe();frame.setdefaultcloseoperation(jframe.exit_on_close);frame.setvisible(true);class comboboxframe extends jframe public static final int default_width = 430;/设置窗口大小public static final int default_height = 20
34、0;public comboboxframe() settitle(世界时间);/标题setsize(default_width, default_height);/ add panel to framecomboboxpanel panel = new comboboxpanel();container contentpane = getcontentpane();contentpane.add(panel);thread t = new thread(panel);/线程t.start();/线程启动class comboboxpanel extends jpanel implements
35、 runnable 精品.jlabel label1 = null;/定义各组件jlabel label2 = null;jlabel label3 = null;jlabel label4 = null;jlabel label5 = null;jcombobox combo1 = null;jcombobox combo2 = null;jcombobox combo3 = null;/默认时间,北京、纽约、东京private string timezone1 = etc/gmt-8;/北京时间private string timezone2 = america/new_york;/纽约时
36、间private string timezone3 = asia/tokyo;/东京时间public comboboxpanel() label1 = new jlabel();label2 = new jlabel();label3 = new jlabel();label4 = new jlabel(下面的时间默认为北京,纽约,东京的时间,下拉选择其他地方时间);/添加标签label5 = new jlabel(同一个世界,同一个梦想,jlabel.center);label1.setfont(new font(dialog, font.bold, 12);/设置字体label2.setf
37、ont(new font(dialog, font.bold, 12);label3.setfont(new font(dialog, font.bold, 12);combo1 = new jcombobox(timezone.getavailableids();/下拉组件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 jcomboboxaction(2);jcomboboxaction combo13action = new jcomboboxaction(3);combo1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高职建筑(建筑工程测量)试题及答案
- 2025年大三(风景园林)园林工程施工考核题
- 2025年中职机械(机械基础应用)试题及答案
- 2025年高职旅游管理(行程规划)试题及答案
- 2025年高职(绿色食品生产技术)绿色食品加工阶段测试试题及答案
- 临床抗生素耐药性与合理用药护理
- 深度解析(2026)《GBT 18268.23-2010测量、控制和实验室用的电设备 电磁兼容性要求 第23部分:特殊要求 带集成或远程信号调理变送器的试验配置、工作条件和性能判据》
- 深度解析(2026)《GBT 17980.30-2000农药 田间药效试验准则(一) 杀菌剂防治黄瓜白粉病》
- 深度解析(2026)《GBT 6609.18-2004氧化铝化学分析方法和物理性能测定方法 NN-二甲基对苯二胺分光光度法测定硫酸根含量》
- 关节炎症用药管理规则
- DB42-T 2051-2023 文物保护单位保护标志及保护界桩设置规范
- 音乐节演出项目承办合同书
- 《智能优化算法解析》 课件 第1-3章-绪论、基于进化规律的智能优化算法、基于物理原理的智能优化算法
- 建筑工程质量问题的整改与改进措施
- 第十八届“地球小博士”全国地理知识科普竞赛题库(附答案)
- 【MOOC】《线性代数与空间解析几何(二)》电子科技大学-中国大学慕课MOOC答案
- 北京市石景山区2020-2021学年三年级下学期期末考试语文试卷
- 《MATLAB编程及应用》全套教学课件
- 国开机考答案-钢结构(本)(闭卷)
- 纪委谈话笔录模板经典
- 消防安全制度和操作规程
评论
0/150
提交评论