1、目录1 设计时间32 设计目的33设计任务34 设计内容34.1概念设计34.1.1 系统功能图34.1.2 需求分析44.1.3设计思路64.2详细设计74.2.1类设计74.2.2界面设计74.2.3功能实现94.3运行调试与分析讨论124.3.1运行结果和分析124.3.2改进想法135 总结与展望14参考文献15成绩评定151 设计时间2011年12月19日2011年12月22日2 设计目的面向对象程序设计是学习完Java 6 程序设计课程之后,进行的一次全面的综合性练习,是学习完理论课程之后的必要的集中实践环节。面向对象程序设计的课程设计的目的在于是提高学生对所学知识综合应用能力的一
2、种方式,要求我们对理论课中所学习到的知识综合运用,实现有一定规模的Java应用。此次课程设计也为我们将来的毕业设计和具体工作实践奠定了坚实的基础。3设计任务Java日历设计一个java日历,要求用java编写简单日历,只需要输入年、月就可打印出对应月的日历。要求有简单的用户界面。4 设计内容 4.1概念设计4.1.1 系统功能图该系统主要实现的功能如图一所示:查询指定年份日历查询相邻年份日历查询相邻月份日历查看今日万年历系统显示日期选择其他日期查询指定月份日历图一1、 当用户需要查询指定年月的日历时,用户将选择框内年月改变,系统获取信息并设置月历,具体流程如图二所示:选择年份月份获取年月份并转
3、化为英文格式获得该月1号所在位置和该月天数设置系统为该年月生成日历界面图二2、用户用鼠标点击选择一个日期后,系统可用蓝色方框框住该日期,表示系统已选择该日,具体流程如图三所示:用户点击某一日期系统判断用户已点击标签的下标清除上一个方框对被点击的标签设一个蓝色方框图三4.1.2 需求分析对于万年历系统,其主要功能是:查看当日日期(年、月、日)、查看当时时间、查看其他年月的月历、对选中的日期进行标识。主要使用流程是:查看万年历系统,查看其他月份或年份日历,选中其他日期查看,查看当日日期。主要功能的用例描述如下:(1)查看万年历1、进入万年历系统;2、系统获取当日日期并设置日历为当月,蓝框选中当日日
4、期;(2)查询当月其他年份改变年份有两张方法,一种是选择年份,一种是摁按键选择上一年或下一年。下拉菜单选择年份:1、点击选择年份的下拉菜单,选择年份;2、系统获取已选择的年份;3、系统设置为已选年份当月的月历并显示在界面显示。 按键选择上一年(或下一年):1、点击选择“年”(或“年+”)的按键;2、系统获取选择框内的年份;3、将系统获取年份的数字减去1(或加上1);4、将选择框内的年份设为已更改的年份;5、系统设置为已更改年份当月的月历并显示在界面显示。(3)查询当年的其他月份改变月份有两张方法,一种是选择月份,一种是摁按键选择上一月或下一月。下拉菜单选择月份:1、点击选择月份的下拉菜单,选择
5、年份;2、系统获取已选择的月份;3、系统设置已选月份为当年的月历并在界面显示。按键选择上一月(或下一月):1、点击选择“月”(或“月+”)的按键,;2、系统获取选择框内的月份;3、将系统获取月份的数字减去1(或加上1);4、将选择框内的月份设为已更改的月份;5、系统设置为已更改月份当年的月历并在界面显示。(4)选择其他日期查看1、点击其他日期;2、系统对所有日期的label进行监听,判断点击的那个label;3、返回被点击的label的数组下标;4、对该下标的label设置蓝色边框,表示选中。(5)查看当日日期1、点击“今日”按键;2、系统获取今日日期;3、设置年份和月份选择框为当日年月;4、
6、系统设置为当日年月的月历并在界面显示;5、判断当日日期在哪个label上;6、返回被点击的label的数组下标;7、对该下标的label设置蓝色边框,表示选中。4.1.3设计思路本课程设界面由两个模块构成,主要有表头模块和日历模块两部分。(1) 表头模块上有查询输入部分和时间显示部分:1、两个下拉列表用于选择的年份和月份,如改变年份后系统用getShowYear()获得组合框中的中文年份,getCombYear()转换成英文格式,得到用户选择的年份,同时用getMonthDays()和getInitWeek()得到界面的设定,最终,用setDays()设置出用户所要求的月历,改变月份同理;2、
7、四个button按钮用于实现年、年+、月、月+,如选择了“年+”后,系统用getShowYear()和getCombYear()获得组合框中的年份,在其年份上加1,将改变的年份显示在组合框里,计算出该年月日历的安排,并用setDays()设置出用户所要求得月历,其他按钮同理;3、一个button按钮用于实现对今日日期的查找,当用户选择了“今日”后,系统用getNowYear()和getNowMonth()得到当日年月,并调用setNowDay()将系统组合框内年月设为当日年月,显示当月月历,同时系统用getNowDay()获得当日日期,用labelDayi.setBorder(border1)
8、语句将当日的日期用蓝色的边框框住表示选定;4、创建一个标签用于显示时间,监听系统时间并显示。(2)日历模块上添加系统的结果显示部分:1、该部分最初显示为当日年月的月历,改变年月后,获得需要显示的月份天数m和当月1号是从labelDayn开始后按顺序从添加到labelDaym+n,遇到周末用setForeground(Color.red)设定字体显示为红色;2、对labelDay标签进行监听,如果鼠标点击某个label,判断该标签的的序号,用setBorder()为该label设置蓝色边框并用setBordr(null)将上一个边框清除。4.2详细设计4.2.1类设计本程序创建了一个AidyCa
9、lender类,该类包括了改变年月对月历界面显示的改变和时间的显示,主要包括函数如表1所示:表-1 AidyCalenderpublic AidyCalender(String title) 界面设计public void actionPerformed(ActionEvent ae) 判断button按键public int turnWeek(String week) 将系统中的英文周转化成中文周public int getNowDay( ) 获得现在的日期public Integer getShowYear( ) 获取组合框中显示的中文格式年份public int getComboYear
10、( ) 获取组合框中的年份public int getInitWeek(String initWeek) 返回当月中的1号是从星期几开始public int getMonthDays(int year, int month) 返回所选年月的天数public void setSysDate(int year,int month) 设置系统日期public void setChangeDate( ) 改变显示日期public void setDays(int monthDays,int initWeek,int day) 设置月历 4.2.2界面设计界面该界面由上表头模块输入选择部分和中央的结果显
11、示部分组成。输入部分创建两个下拉列表选择年月及5个功能按键用于实现日历的基本操作;结果显示部分根据该月1号所属星期和该月的天数设置出该月月历界面。主要的界面设置代码如下:加上星期日到六for(int i=0;i7;i+) labelWeeki = new JLabel();labelWeeki.setHorizontalAlignment(0);if(i=0|i=6)labelWeeki.setForeground(Color.red); /设置周末为红色labelWeeki.setFont(new Font(新宋体,Font.BOLD,18);elselabelWeeki.setForegr
12、ound(Color.BLACK);labelWeeki.setFont(new Font(新宋体,Font.PLAIN,18);labelWeeki.setText(stringWeekCni); panel2.add(labelWeeki);加上日期的labelfor(int i= 0;i42;i+) labelDayi = new JLabel();labelDayi.setHorizontalAlignment(0); /设置文本的水平对齐方式labelDayi.setText();panel2.add(labelDayi);labelDayi.addMouseListener(lis
13、tener); /对label进行监听设置月历public void setDays(int monthDays,int initWeek,int day) setDateNull();for(int i=initWeek;iinitWeek+monthDays+1;i+) /initWeek 初始星期labelDayi.setFont(new Font(黑体,Font.BOLD,18); /设置日期的字体 if(i-initWeek+1)=day) /如果日期为今天for(int j=0;j42;j+)labelDayj.setBorder(null);labelDayi.setBorder
14、(border1); /选中当日日期if(i%7=0)|(i%7=6)labelDayi.setForeground(Color.red);else labelDayi.setForeground(Color.BLACK);labelDayi.setText(String.valueOf(i-initWeek+1);for(int i=initWeek+monthDays;i42;i+)labelDayi.setText();4.2.3功能实现1、实现指定年月查询的主要代码如下:获取组合框中的年份和月份public int getComboYear() return combo1.getSel
15、ectedIndex()+1;public int getComboMonth() return combo2.getSelectedIndex();返回当月中的1号是从星期几开始public int getInitWeek(String initWeek) int nowWeek = 0 ; /nowWeek系统日期中的星期for(int i = 0;i7;i+)if(initWeek.equalsIgnoreCase(stringWeekEni)nowWeek = i; break;return nowWeek;返回所选年月的天数public int getMonthDays(int ye
16、ar, int month) switch (month)case 3:case 5:case 8:case 10:return 30;/小月返回30天case 1:if (gregorianCalendar.isLeapYear(year) /isLeapYear(year)确定当前纪元中的指定年份是否为闰年。return 29;else return 28; /闰年的二月返回29天,平年返回28天default:return 31; /大月返回31天设置月历public void setDays(int monthDays,int initWeek,int day)setDateNull(
17、);for(int i=initWeek;iinitWeek+monthDays+1;i+) /initWeek 初始星期labelDayi.setFont(new Font(黑体,Font.BOLD,18); /设置日期的字体if(i-initWeek+1)=day) /如果日期为今天for(int j=0;j42;j+);labelDayj.setBorder(null);labelDayi.setBorder(border1); /选中当日日期if(i%7=0)|(i%7=6)labelDayi.setForeground(Color.red);else labelDayi.setFor
18、eground(Color.BLACK);labelDayi.setText(String.valueOf(i-initWeek+1);for(int i=initWeek+monthDays;i42;i+)labelDayi.setText();2、实现选择日期功能的主要代码如下:设置蓝色边框private Border border = BorderFactory.createRaisedBevelBorder();private Border border1 = BorderFactory.createLineBorder(Color.cyan,8); /蓝色选择边框判断点击了哪个lab
19、el,然后做相应的响应MouseListener listener = new MouseAdapter() public void mouseClicked(MouseEvent e)for(int j=0;j42;j+)labelDayj.setBorder(null);if(JLabel)e.getSource()=labelDayj)labelDayj.setBorder(border1); ;4.3运行调试与分析讨论4.3.1运行结果和分析图四为系统初始界面,系统自动设置为当日年月的月历,并且用蓝框框住当日日期。图四图五为用户选择查看日历,用户通过下拉列表选择自己需要的年月查看月历,
20、如图用下拉菜单选择查看2011年7月份月历。图五 图六为摁“年”按钮改变年月,用户可以通过按键改变用户所查看的年份,如图用按钮“年”查看2009年12月份的月历。图六4.3.2改进想法该万年历程序只能显示阳历,可在其基础上加上阴历的显示,当鼠标点击了某一日的日期时,该日期被框住并且显示出其阴历日期;每年一些固定的节日如“五一”、“十一”可在日历上用红色数字显示出来;月历上其他未填日期的空白label可用加上上个月和下个月的部分日期,用灰色表示方便区别。5 总结与展望面向对象课程设计的主要目标就是利用将课堂上学到的Java理论知识和实践操作方法应用于实际的Java应用软件中,去制作各种小程序。通
21、过这次面向对象课程设计,可以加深我们对面向对象程序设计理论知识的理解,掌握面向对象应用程序设计和开发的基本方法,以提高我们运用理论知识的能力。最初确定课程设计任务时,先考虑其功能有哪些,需要显示什么,如何进行窗口布局,需要用哪些知识点,如相关的类和对象等,最后就是根据初步设计的功能和布局构架,考虑用源代码进行实现了。本小日历程序。在设计过程中遇到障碍时,老师的指导,和同学的帮助都给予了我很大的启发,同时,我也在网络上搜寻相关知识之后,最终完成了这项设计。在课程设计的实际操作中,不仅巩固了之前所学习的知识,同时也不可避免的遇到了一些问题,通过问题发现了自己对一些知识的片面理解甚至是错误的认识。针
22、对课程设计中遇到的问题,我作出如下总结,作为以后学习的经验和教训。(一) 实际操作能力的欠缺由于条件所限,平时我们大家都是在课堂上对理论知识进行学习,所以实践能力相对比较薄弱,这在实际操作中就出现了操作不流畅。(二) 常忽略细节问题对于细节,输入代码的时候不够细心总是因为打错字母或者漏打“;”“”符号使代码常常出现错误或者警告,导致整个代码无法运行成功。经过一周的课程设计结束了,在这短短的一周里,通过我们自身的实践我们学习到了更多的知识,将此与课堂上所学习的理论知识相结合,我们将面向对象理论及操作诠释的更加深刻。实训中,遇到的问题和老师同学互相讨论,将所遇的困难各个击破,使自己对于一些问题的理解更加深刻了。课程设计是我们整个学习过程中的一个重要的实践环节,是我们运用所学知识分析问题解决问题以及培养我们自己动手操作实践能力的一个重要过程,也是我们在校学习时间学习成果的总结。课程设计对于培养学生的综合能力和全面素质具有非常重要的作用。参考文献1 java 6 程序设计实践教程.清华大学出版社2009.5 刘万军,郑少京,王松波,梁清华等编著. 2 JAVA 语言程序设计基础篇 机械工业出版社 (美) Y.Daniel Liang著 王镁,新夫,李娜 等译3 JAVA 案例开发集锦 电子工业出版社 袁然,郑自国,邹丰义 编著 成绩评定 成绩 教师签字.忽略此处.15