1、Java万年历软件工程学院JAVA程序设计课程实训报告( 2012 2013)学年第 1 学期)姓 名: 学 号: 专 业: 班 级: 指导教师: JAVA程序设计课程实训报告日 期2012-9-3至2012-9-14地 点项目名称Java程序设计课程综合训练实训目的能力目标1、 熟悉JAVA开发工具的操作界面2、 掌握JAVA程序语法规则3、 较好完成布置的各实训课题内容实训要求: 【程序】编写一个万年历的软件。(1). 掌握Eclipse中工程的使用,项目的调试、编译、链接、运行。 (2). 面向对象程序设计中类的组织和类之间的关系分析。 (3). 构造函数的应用。 (4) 继承和派生的使
2、用 (5). 多态性和接口的使用。(6). 网络编程的组织与使用。学会Eclipse完成工程的创建;掌握面向对象中类、继承、多态性的开发思想;掌握网络编程的概念; 独立设计B/S螃蟹过街游戏;考试管理管理系统;C/S网络。实训内容(过程及步骤):1、创建文件目录:在E盘下新建以文件夹万年历,将程序保存到此文件下。2、运行程序:双击打开eclipse.exe软件,打开文件新建项目,新建java项目,创建项目名,”wannianli”;点击 下一步,之后完成,则这个项目就创建好了,如图所示:4、 在新建的项目上单击右键创建包,如图所示: 4、在包上单击右键创建类,输入程序,运行程序, 查看结果,保
3、存java程序。5、 输入程序:package myCalendar;/ Download by import java.awt.Color;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class Lunar private int year; private int month; private int day; private boolean leap; final static String
4、chineseNumber = 一, 二, 三, 四, 五, 六, 七, 八, 九, 十, 十一, 十二; static SimpleDateFormat chineseDateFormat = new SimpleDateFormat(yyyy年MM月dd日); final static long lunarInfo = new long 0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x
5、1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2
6、b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, 0x095b0,
7、 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x
8、055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b2
9、55, 0x06d20, 0x0ada0; /= 传回农历 y年的总天数 final private static int yearDays(int y) int i, sum = 348; for (i = 0x8000; 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 &
10、 0x10000) != 0) return 30; else return 29; else 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 3
11、0; /= 传回农历 y年的生肖 final public String animalsYear() 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
12、 = new String子, 丑, 寅, 卯, 辰, 巳, 午, 未, 申, 酉, 戌, 亥; 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 : d
13、ay % 10 - 1; if (day 30) return ; if (day = 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,
14、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日); catch (ParseException e) e.printStackTrace(); /To change body of catch statement use Options | File Tem
15、plates. 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) (nowaday.getTime() - baseDate.getTime() / 86400000
16、L); 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) offset += daysOfYear; iYear-; monCyl -= 12; /农历年份 year = iY
17、ear; yearCyl = iYear - 1864; leapMonth = 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); els
18、e daysOfMonth = monthDays(year, iMonth); 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时,也要校正
19、if (offset 0) offset += daysOfMonth; -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 getChina
20、DayString(day); public String toString() if(chineseNumbermonth - 1=一&getChinaDayString(day)=初一) return 农历+year + 年; else if(getChinaDayString(day)=初一) return chineseNumbermonth - 1 + 月; else return getChinaDayString(day); /return year + 年 + (leap ? 闰 : ) + chineseNumbermonth - 1 + 月 + getChinaDayStr
21、ing(day); 6、如四五 所示,创建Clock.java和MainFrame.java类,并且 添加代码;7、Clock.java 代码如下:package myCalendar;/ Download by import java.awt.Canvas;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.text.SimpleDateFormat;import java.util.Calendar; class Clock extends Canvas implements Run
22、nable /* * */ private static final long serialVersionUID = 3660124045489727166L; MainFrame mf; Thread t; String time; public Clock(MainFrame mf) this.mf=mf; setSize(280,40); setBackground(Color.white); t=new Thread(this); /实例化线程 t.start(); /调用线程 public void run() while(true) try Thread.sleep(1000);
23、/休眠1秒钟 catch(InterruptedException e) System.out.println(异常); this.repaint(100); public void paint(Graphics g) Font f=new Font(宋体,Font.BOLD,16); SimpleDateFormat SDF=new SimpleDateFormat(yyyy年MM月dd日HH:mm:ss);/格式化时间显示类型 Calendar now=Calendar.getInstance(); time=SDF.format(now.getTime(); /得到当前日期和时间 g.s
24、etFont(f); g.setColor(Color.black); g.drawString(time,45,25); 8、MainFrame.java 代码如下:package myCalendar;import java.awt.BorderLayout;import java.awt.Color;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Date;imp
25、ort java.util.Calendar;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JButton; class MainFrame extends JFrame /* * */ private static final long serialVersionUID = 1L; JPanel panel = new JPanel(new BorderLayout(); JPanel p
26、anel1 = new JPanel(); JPanel panel2 = new JPanel(new GridLayout(7, 7); JPanel panel3 = new JPanel(); JLabel label = new JLabel49; JLabel y_label = new JLabel(年份); JLabel m_label = new JLabel(月份); JComboBox com1 = new JComboBox(); JComboBox com2 = new JComboBox(); JButton but1=new JButton(上个月); JButt
27、on but2=new JButton(下个月); int re_year, re_month; int x_size, y_size; String year_num; Calendar now = Calendar.getInstance(); / 实例化Calendar MainFrame() super(万年历); setSize(600, 700); x_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth(); y_size = (int) (Toolkit.getDefaultToolkit().ge
28、tScreenSize().getHeight(); setLocation(x_size - 300) / 2, (y_size - 350) / 2); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel1.add(but1); panel1.add(y_label); panel1.add(com1); panel1.add(m_label); panel1.add(com2); panel1.add(but2); for (int i = 0; i 49; i+) labeli = new JLabel(, JLabel.CENTER);/ 将显示的字符设置为居中 panel2.add(labeli); panel3.add(new Clock(this); panel.add(panel1, BorderLayout.NORTH); panel.add(panel2, BorderLayout.CENTER); panel.add(panel3, BorderLayout.SOUTH); panel.setBackground(Color.white); panel1.setBackground(Color.white);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1