收藏 分享(赏)

《面向对象程序设计》课程设计java日历.doc

上传人:dreamzhangning 文档编号:2737301 上传时间:2018-09-26 格式:DOC 页数:16 大小:646.50KB
下载 相关 举报
《面向对象程序设计》课程设计java日历.doc_第1页
第1页 / 共16页
《面向对象程序设计》课程设计java日历.doc_第2页
第2页 / 共16页
《面向对象程序设计》课程设计java日历.doc_第3页
第3页 / 共16页
《面向对象程序设计》课程设计java日历.doc_第4页
第4页 / 共16页
《面向对象程序设计》课程设计java日历.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、软 件 学 院课程设计报告书课程名称 面向对象程序设计课程设计 设计题目 java 日历 专业班级 学 号 姓 名 指导教师 徐娇月 2011 年 12 月2目录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成绩评定 1531 设计时间2011 年 12

2、 月 19 日2011 年 12 月 22 日2 设计目的面向对象程序设计是学习完Java 6 程序设计课程之后,进行的一次全面的综合性练习,是学习完理论课程之后的必要的集中实践环节。面向对象程序设计的课程设计的目的在于是提高学生对所学知识综合应用能力的一种方式,要求我们对理论课中所学习到的知识综合运用,实现有一定规模的 Java 应用 。此次课程设计也为我们将来的毕业设计和具体工作实践奠定了坚实的基础。3 设计任务Java 日历设计一个 java 日历,要求用 java 编写简单日历,只需要输入年、月就可打印出对应月的日历。要求有简单的用户界面。4 设计内容 4.1 概念设计4.1.1 系统

3、功能图该系统主要实现的功能如图一所示:图一万年历系统查询指定年份日历查询指定月份日历查询相邻年份日历选择其他日期查看今日查询相邻月份日历显示日期41、当用户需要查询指定年月的日历时,用户将选择框内年月改变,系统获取信息并设置月历,具体流程如图二所示:选择年份月份 获取年月份并转化为英文格式获得该月 1 号所在位置和该月天数设置系统为该年月生成日历界面图二2、用户用鼠标点击选择一个日期后,系统可用蓝色方框框住该日期,表示系统已选择该日,具体流程如图三所示:用户点击某一日期系统判断用户已点击标签的下标清除上一个方框对被点击的标签设一个蓝色方框图三4.1.2 需求分析对于万年历系统,其主要功能是:查

4、看当日日期(年、月、日) 、查看当时时间、查看其他年月的月历、对选中的日期进行标识。主要使用流程是:查看万年历系统,查看其他月份或年份日历,选中其他日期查看,查看当日日期。主要功能的用例描述如下:(1)查看万年历1、进入万年历系统;2、系统获取当日日期并设置日历为当月,蓝框选中当日日期;(2)查询当月其他年份5改变年份有两张方法,一种是选择年份,一种是摁按键选择上一年或下一年。下拉菜单选择年份:1、点击选择年份的下拉菜单,选择年份;2、系统获取已选择的年份;3、系统设置为已选年份当月的月历并显示在界面显示。按键选择上一年(或下一年):1、点击选择“年” (或“年+” )的按键;2、系统获取选择

5、框内的年份;3、将系统获取年份的数字减去 1(或加上 1) ;4、将选择框内的年份设为已更改的年份;5、系统设置为已更改年份当月的月历并显示在界面显示。(3)查询当年的其他月份改变月份有两张方法,一种是选择月份,一种是摁按键选择上一月或下一月。下拉菜单选择月份:1、点击选择月份的下拉菜单,选择年份;2、系统获取已选择的月份;3、系统设置已选月份为当年的月历并在界面显示。按键选择上一月(或下一月):1、点击选择“月” (或“月+” )的按键, ;2、系统获取选择框内的月份;3、将系统获取月份的数字减去 1(或加上 1) ;4、将选择框内的月份设为已更改的月份;5、系统设置为已更改月份当年的月历并

6、在界面显示。(4)选择其他日期查看1、点击其他日期;2、系统对所有日期的 label 进行监听,判断点击的那个 label;3、返回被点击的 label 的数组下标;4、对该下标的 label 设置蓝色边框,表示选中。(5)查看当日日期61、点击“今日”按键;2、系统获取今日日期;3、设置年份和月份选择框为当日年月;4、系统设置为当日年月的月历并在界面显示;5、判断当日日期在哪个 label 上;6、返回被点击的 label 的数组下标;7、对该下标的 label 设置蓝色边框,表示选中。4.1.3 设计思路本课程设界面由两个模块构成,主要有表头模块和日历模块两部分。(1)表头模块上有查询输入

7、部分和时间显示部分:1、两个下拉列表用于选择的年份和月份,如改变年份后系统用 getShowYear()获得组合框中的中文年份,getCombYear()转换成英文格式,得到用户选择的年份,同时用 getMonthDays()和 getInitWeek()得到界面的设定,最终,用 setDays()设置出用户所要求的月历,改变月份同理;2、四个 button 按钮用于实现年、年+、月、月+,如选择了“年+ ”后,系统用getShowYear()和 getCombYear()获得组合框中的年份,在其年份上加 1,将改变的年份显示在组合框里,计算出该年月日历的安排,并用 setDays()设置出用

8、户所要求得月历,其他按钮同理;3、一个 button 按钮用于实现对今日日期的查找,当用户选择了“今日”后,系统用getNowYear()和 getNowMonth()得到当日年月,并调用 setNowDay()将系统组合框内年月设为当日年月,显示当月月历,同时系统用 getNowDay()获得当日日期,用labelDayi.setBorder(border1)语句将当日的日期用蓝色的边框框住表示选定;4、创建一个标签用于显示时间,监听系统时间并显示。(2)日历模块上添加系统的结果显示部分:1、该部分最初显示为当日年月的月历,改变年月后,获得需要显示的月份天数 m 和当月 1 号是从 labe

9、lDayn开始后按顺序从添加到 labelDaym+n,遇到周末用7setForeground(Color.red)设定字体显示为红色;2、对 labelDay 标签进行监听,如果鼠标点击某个 label,判断该标签的的序号,用setBorder()为该 label 设置蓝色边框并用 setBordr(null)将上一个边框清除。4.2 详细设计4.2.1 类设计本程序创建了一个 AidyCalender 类,该类包括了改变年月对月历界面显示的改变和时间的显示,主要包括函数如表 1 所示:表-1 AidyCalender4.2.2 界面设计界面该界面由上表头模块输入选择部分和中央的结果显示部分

10、组成。输入部分创建两个下拉列表选择年月及 5 个功能按键用于实现日历的基本操作;结果显示部分根据该月 1 号所属星期和该月的天数设置出该月月历界面。主要的界面设置代码如下:加上星期日到六for(int i=0;i7;i+) public AidyCalender(String title) 界面设计public void actionPerformed(ActionEvent ae) 判断 button 按键public int turnWeek(String week) 将系统中的英文周转化成中文周public int getNowDay( ) 获得现在的日期public Integer g

11、etShowYear( ) 获取组合框中显示的中文格式年份public int getComboYear( ) 获取组合框中的年份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 in

12、itWeek,int day) 设置月历8labelWeeki = new JLabel();labelWeeki.setHorizontalAlignment(0);if(i=0|i=6)labelWeeki.setForeground(Color.red); /设置周末为红色labelWeeki.setFont(new Font(“新宋体“,Font.BOLD,18);elselabelWeeki.setForeground(Color.BLACK);labelWeeki.setFont(new Font(“新宋体“,Font.PLAIN,18);labelWeeki.setText(st

13、ringWeekCni); panel2.add(labelWeeki);加上日期的 labelfor(int i= 0;i42;i+) labelDayi = new JLabel();labelDayi.setHorizontalAlignment(0); /设置文本的水平对齐方式labelDayi.setText(“);panel2.add(labelDayi);labelDayi.addMouseListener(listener); /对 label 进行监听设置月历public void setDays(int monthDays,int initWeek,int day) set

14、DateNull();for(int i=initWeek;iinitWeek+monthDays+1;i+) /initWeek 初始星期labelDayi.setFont(new Font(“黑体“,Font.BOLD,18); /设置日期的字体 if(i-initWeek+1)=day) /如果日期为今天9for(int j=0;j42;j+)labelDayj.setBorder(null);labelDayi.setBorder(border1); /选中当日日期if(i%7=0)|(i%7=6)labelDayi.setForeground(Color.red);else labe

15、lDayi.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.getSelectedIndex()+1;public int getComboMonth() return combo2.getSelectedIndex();返回

16、当月中的 1 号是从星期几开始public int getInitWeek(String initWeek) int nowWeek = 0 ; /nowWeek 系统日期中的星期for(int i = 0;i7;i+)if(initWeek.equalsIgnoreCase(stringWeekEni)10nowWeek = i; break;return nowWeek;返回所选年月的天数public int getMonthDays(int year, int month) switch (month)case 3:case 5:case 8:case 10:return 30;/小月返

17、回 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();for(int i=initWeek;iinitWeek+monthDays+1;i+)/initWeek 初始星期labe

18、lDayi.setFont(new Font(“黑体“,Font.BOLD,18);/设置日期的字体if(i-initWeek+1)=day) /如果日期为今天for(int j=0;j42;j+);11labelDayj.setBorder(null);labelDayi.setBorder(border1); /选中当日日期if(i%7=0)|(i%7=6)labelDayi.setForeground(Color.red);else labelDayi.setForeground(Color.BLACK);labelDayi.setText(String.valueOf(i-initWe

19、ek+1);for(int i=initWeek+monthDays;i42;i+)labelDayi.setText(“);2、实现选择日期功能的主要代码如下:设置蓝色边框private Border border = BorderFactory.createRaisedBevelBorder();private Border border1 = BorderFactory.createLineBorder(Color.cyan,8); /蓝色选择边框判断点击了哪个 label,然后做相应的响应MouseListener listener = new MouseAdapter() publi

20、c void mouseClicked(MouseEvent e)for(int j=0;j42;j+)labelDayj.setBorder(null);if(JLabel)e.getSource()=labelDayj)labelDayj.setBorder(border1); ;124.3 运行调试与分析讨论4.3.1 运行结果和分析图四为系统初始界面,系统自动设置为当日年月的月历,并且用蓝框框住当日日期。图四图五为用户选择查看日历,用户通过下拉列表选择自己需要的年月查看月历,如图用下拉菜单选择查看 2011 年 7 月份月历。图五13图六为摁“年”按钮改变年月,用户可以通过按键改变用户

21、所查看的年份,如图用按钮“年”查看 2009 年 12 月份的月历。图六4.3.2 改进想法该万年历程序只能显示阳历,可在其基础上加上阴历的显示,当鼠标点击了某一日的日期时,该日期被框住并且显示出其阴历日期;每年一些固定的节日如“五一” 、 “十一”可在日历上用红色数字显示出来;月历上其他未填日期的空白 label 可用加上上个月和下个月的部分日期,用灰色表示方便区别。145 总结与展望面向对象课程设计的主要目标就是利用将课堂上学到的 Java 理论知识和实践操作方法应用于实际的 Java 应用软件中,去制作各种小程序。通过这次面向对象课程设计,可以加深我们对面向对象程序设计理论知识的理解,掌

22、握面向对象应用程序设计和开发的基本方法,以提高我们运用理论知识的能力。最初确定课程设计任务时,先考虑其功能有哪些,需要显示什么,如何进行窗口布局,需要用哪些知识点,如相关的类和对象等,最后就是根据初步设计的功能和布局构架,考虑用源代码进行实现了。本小日历程序。在设计过程中遇到障碍时,老师的指导,和同学的帮助都给予了我很大的启发,同时,我也在网络上搜寻相关知识之后,最终完成了这项设计。在课程设计的实际操作中,不仅巩固了之前所学习的知识,同时也不可避免的遇到了一些问题,通过问题发现了自己对一些知识的片面理解甚至是错误的认识。针对课程设计中遇到的问题,我作出如下总结,作为以后学习的经验和教训。(一)

23、 实际操作能力的欠缺由于条件所限,平时我们大家都是在课堂上对理论知识进行学习,所以实践能力相对比较薄弱,这在实际操作中就出现了操作不流畅。(二) 常忽略细节问题对于细节,输入代码的时候不够细心总是因为打错字母或者漏打“;” “”符号使代码常常出现错误或者警告,导致整个代码无法运行成功。经过一周的课程设计结束了,在这短短的一周里,通过我们自身的实践我们学习到了更多的知识,将此与课堂上所学习的理论知识相结合,我们将面向对象理论及操作诠释的更加深刻。实训中,遇到的问题和老师同学互相讨论,将所遇的困难各个击破,使自己对于一些问题的理解更加深刻了。课程设计是我们整个学习过程中的一个重要的实践环节,是我们运用所学知识分析问题解决问题以及培养我们自己动手操作实践能力的一个重要过程,也是我们在校学习时间学习成果的总结。课程设计对于培养学生的综合能力和全面素质具有非常重要的作用。15参考文献1 java 6 程序设计实践教程.清华大学出版社 2009.5 刘万军 ,郑少京,王松波,梁清华等编著. 2 JAVA 语言程序设计基础篇 机械工业出版社 (美) Y.Daniel Liang 著 王镁,新夫,李娜 等译3 JAVA 案例开发集锦 电子工业出版社 袁然,郑自国,邹丰义 编著 成绩评定成绩 教师签字16

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

当前位置:首页 > 高等教育 > 大学课件

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


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

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

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