《【JAVA课程设计】基于JAVA的万年历设计与实现(附源代码).doc》由会员分享,可在线阅读,更多相关《【JAVA课程设计】基于JAVA的万年历设计与实现(附源代码).doc(10页珍藏版)》请在三一文库上搜索。
1、Java课程设计报告课程设计题目:万 年 历指 导 老 师:*学 生 姓 名:*专 业:*学 号:*Java课程设计-万年历1、课程设计目的:这学期我们学习了Java语言,Java语言是面向对象的开发方法是当今世界最流行的开发方法,是当今流行的网络编程语言。它具有面向对象、跨平台、分布应用等特点。它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。很多程序开发人员得第一选择。为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。让学生自己动手动脑,将书本上得知识运用到
2、实践当中去,使知识能更好得融会贯通。为了达到这个目的,我们需要自己动手做一个Java的课程设计,在这个课程设计里我们需要根据我们手中现有得软件与知识基础,独立得将它完成,只有这样,我们才能把理论变成实践,将知识真正得做到学以致用。这次课程设计我主要研究了利用已学的Java知识编辑一个电子万年历。通过此次课程设计,来巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用。并通过自己动手,自主得学习,对Java这门课程有更深得了解与认识。2、需求分析:2.1、本程序要求:1、使用图形用户界面;2、本程序能够实现日期与星期查询,同时
3、显示此时的时间。2.2、功能设计:本程序要构建万年历程序,其功能如下:(1)通过窗口形式运行,实现界面功能;(2)以月历的形式来显示日期与星期;(3)为用户提供年份与月份的下拉形式菜选择年份与月份;(4)同时显示查看时的时刻。3、课程设计的基本算法public class wnl extends JFrame implements ActionListener,ItemListener Date date = new Date(); private GregorianCalendar gregorianCalendar = new GregorianCalendar(); /定义中英文字符数组
4、存储星期信息,用于转换显示 private String stringWeekEn = new String SUN, MON, TUE, WED, THU, FRI, SAT ; private String stringWeekCn = new String 星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六 ; /定义存储月份的信息数组,用于转换显示方式 private String stringMonthEn = new String Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sept, Oct, Nov, Dec ; privat
5、e String stringMonthCn = 1月,2月,3月,4月,5月,6月, 7月,8月,9月,10月,11月,12月;private String sysNowTime = new String6;/sysNowTime 用于存储系统时间的变量 private String sysRunTime = new String6; private JLabel labelWeek = new JLabel7; private JLabel labelDay = new JLabel42; private JLabel labelTime = new JLabel(); private J
6、Panel panel1 = new JPanel(); private JPanel panel2 = new JPanel(); private JPanel panel3 = new JPanel(); private JComboBox combo1 = new JComboBox(); private JComboBox combo2 = new JComboBox(); private JButton buttonToday = new JButton(); private Border border = BorderFactory.createRaisedBevelBorder(
7、); private Border border1 = BorderFactory.createLineBorder(Color.cyan,3);public wnl (String title) super(title); for (int y = 1900; y 2200; y+) combo1.addItem( + new Integer(y).toString()+年); for (int m = 0;m12;m+) combo2.addItem( +stringMonthCnm); buttonToday.setText(现在时刻); setLayout(new FlowLayout
8、(); add(panel1); add(panel2); add(panel3); panel1.setLayout(new GridLayout(2,3,10,2); panel1.add(combo1); combo1.addItemListener(this); panel1.add(combo2); combo2.addItemListener(this); panel1.add(buttonToday); / buttonToday.addActionListener(this); labelTime.setFont(new Font(宋体,Font.PLAIN,16); labe
9、lTime.setForeground(Color.red); panel1.add(labelTime); Timer time = new Timer(1000,new TimerListener(); time.addActionListener(new TimerListener(); /time.setRepeats(true); time.start(); /labelTime.addAncestorListener(new TimerListener(); panel2.setLayout(new GridLayout(7,7,10,10); panel2.setBackgrou
10、nd(Color.white); for(int i=0;i7;i+) labelWeeki = new JLabel(); labelWeeki.setHorizontalAlignment(0); if(i=0|i=6) labelWeeki.setBackground(Color.blue); labelWeeki.setForeground(Color.RED); labelWeeki.setFont(new Font(黑体,Font.BOLD,14); else labelWeeki.setForeground(Color.BLACK); labelWeeki.setFont(new
11、 Font(新宋体,Font.PLAIN,14); labelWeeki.setText(stringWeekCni); panel2.add(labelWeeki); for(int i= 0;i42;i+) labelDayi = new JLabel(); labelDayi.setHorizontalAlignment(0); labelDayi.setText(); panel2.add(labelDayi); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.e
12、xit(0); ); setSize(300,300); setBounds(250, 200, 400, 360); setVisible(true); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getSysDate(); setNowDate(); public void actionPerformed(ActionEvent ae) if(ae.getSource()=buttonToday) setNowDate(); public void itemStateChanged(ItemEve
13、nt aa) setChangeDate(); public int turnWeek(String week) int i; for(i=0;i7;i+) if(week.equalsIgnoreCase(stringWeekEni) break; return i; public int turnMonth(String month) /* *int turnMonth(String month) *month 系统日期中的月,诸如JanFeb *return int *返回一个整数值,用于寻找stringMonthCn数组中对应的中文月份 */ int i; for(i=0;i12;i+
14、) if(month.equalsIgnoreCase(stringMonthEni) break; return i; /* *setNowDate() *设置当前系统日期 */ public void setNowDate() setSysDate(getNowYear(),getNowMonth(); getSysRunDate(); setDateNull(); combo1.setSelectedIndex(getShowYear() - 1900); combo2.setSelectedIndex(getShowMonth(); setDays(getMonthDays(getNo
15、wYear(),getNowMonth(),getInitWeek(sysRunTime0),getNowDay(); labelTime.setText(sysNowTime3); labelTime.setHorizontalAlignment(0); /*Integer getShowYear() *获取组合框中应该显示的年份 */ public void setSysDate(int year,int month) gregorianCalendar.set(year,month,1); public void setDateNull() for(int i=0;i42;i+) lab
16、elDayi.setText( ); public void setChangeDate() setSysDate(getComboYear(),getComboMonth(); getSysRunDate(); setDateNull(); setDays(getMonthDays(getComboYear()+1,getComboMonth()+1),getInitWeek(sysRunTime0),-1); /* *返回所选年月的天数,因为数组中的数值从0开始,所以各月必须加1. *而2月,经过是否为闰年判断,选择返回28或29天. *其余月份为大月,返回31天. */ public i
17、nt getMonthDays(int year, int month) switch (month) case 4: case 6: case 9: case 11: return 30;/小月返回30天 case 2: if (gregorianCalendar.isLeapYear(year) /isLeapYear(year)确定当前纪元中的指定年份是否为闰年。 return 29; else return 28; /闰年的二月返回29天,平年返回28天 default: return 31; /大月返回31天 /* *int getComboYear() *获取组合框中的年份 */
18、public void getSysDate() date = gregorianCalendar.getTime(); sysNowTime = (date.toString().split( ); public void getSysRunDate() date = gregorianCalendar.getTime(); sysRunTime = (date.toString().split( ); public int getComboYear() return combo1.getSelectedIndex()+1900; /*int getComboMonth() *获取月组合框中
19、的整数值, */ public int getComboMonth() return combo2.getSelectedIndex(); public int getInitWeek(String initWeek) /* *getWeekNow(String initWeek) *para nowWeek 系统日期中的星期 *返回当月中的1号是从星期几开始 */ int nowWeek = 0 ; for(int i = 0;i7;i+) if(initWeek.equalsIgnoreCase(stringWeekEni) nowWeek = i; break; return nowWe
20、ek; public int getNowYear() return Integer.parseInt(sysNowTime5); public int getNowMonth() int nowMonth=0; for(int i=0;i12;i+) if(sysNowTime1.equalsIgnoreCase(stringMonthEni); nowMonth=i; break; return nowMonth; public int getNowDay() return Integer.parseInt(sysNowTime2); public Integer getShowYear(
21、) return Integer.parseInt(sysNowTime5); public Integer getShowMonth() /* *Integer getShowMonth() *获取在组给框中显示的中文格式月份:如七月八月等 */ return turnMonth(sysNowTime1); public void setDays(int monthDays,int initWeek,int day) /* *void setDays(int monthDays,int initWeek,int day) *para monthDays 本月天数 *para initWeek
22、 初始星期 *para day 今天日 *设置月历 */ setDateNull(); for(int i=initWeek;iinitWeek+monthDays+1;i+) if(i-initWeek+1)=day) labelDayi.setBorder(border1); labelDayi.setForeground(Color.BLUE); labelDayi.setFont(new Font(黑体,Font.BOLD,20); else if(i%7=0)|(i%7=6) labelDayi.setForeground(Color.RED); else labelDayi.set
23、Foreground(Color.BLACK); labelDayi.setText(String.valueOf(i-initWeek+1); for(int i=initWeek+monthDays;i42;i+) labelDayi.setText(); class TimerListener implements ActionListener /AdapterDemo var=new AdapterDemo(万年历); public void actionPerformed(ActionEvent e) GregorianCalendar g = new GregorianCalend
24、ar(); String clock = new String(g.getTime().toString().split( )3); labelTime.setText(clock); 4、运行结果:在安装有JRE平台的环境下,双击生成的万年历.jar运行: 说明:简洁而明晰的运行结果,足以证明实验的正确性 5、体会心得:经过短暂的一周的Java程序设计,使我又学到了很多的知识,尤其是运用Java知识去解决实际问题的能力又得到了很大的提高。尽管所设计的程序比较简单,但是程序中的每个功能的实现都经过了自己的一定认真的思考。由于把所学的知识做到很灵活的运用在实际中,对于现在的我还有一定的难度,故而
25、,在设计的每个的环节中,都会多多少少的遇到一些问题,这就促使我去查阅各种资料,或者请教老师和同学,极大的提高我的专业素养,同时对在有些书上的理论知识在实际的运用,以及应该注意的问题有了比较深刻的认识。当然,仍然有些理论问题不是很好的去运用,或者是了解的不深刻。这就使的在实践中的所设计的程序有些功能不是自己所想的那样的完美。不过,既然发现了问题的所在,我就不会放弃的,直至问题得到解决。这些也同时反映出了平时运用知识去实践这方面做的太少。太缺乏经验。对所设计中将所面临的问题认识不够。是Java课程设计让我认识到了这些问题的存在。同时给我提供了去面对这些问题的平台。也使我充分的认识到在以后也应该怎样去实践,怎样去学习一门计算机语言,以及如何去运用这门语言去解决实际问题等等。总之,在经过这次Java的课程设计,使我认识到了自己很多的缺点,同时,也是我学到新知识和新方法的一个机会。这给我在以后继续学习好这门语言指明了方向。6、参考文献:1Java2从入门到精通,印旻编、许伟编著,清华大学出版社2Java编程思想,周文龙等著,青年出版社3Java学习指南,寒露、王梅等著,教育出版社4 Java2实用教程(第三版),耿祥义 张跃平 编著,清华大学出版社5Java语言与面向对象程序设计,印旻编著,清华大学出版社
链接地址:https://www.31doc.com/p-11082159.html