日历记事本 - Java SE课程设计.doc_第1页
日历记事本 - Java SE课程设计.doc_第2页
日历记事本 - Java SE课程设计.doc_第3页
日历记事本 - Java SE课程设计.doc_第4页
日历记事本 - Java SE课程设计.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java SE程序设计期末课程设计报告题 目: 日历记事本 班 级: 学 号: 姓 名: 成 绩: 完成时间: 2015 年 6 月目 录第一章 引言21.1开发背景21.2需求分析2第二章 系统设计32.1 功能设计32.2 流程(或算法)设计42.3 类与接口设计42.4 类与接口设计5第三章 系统实现9程序截图9第四章 设计总结9参考文献10附 录(核心代码)10日历记事本第一章 引言1.1开发背景目前,很多新的技术领域都涉及到了Java语言,Java语言是面向对象编程,并涉及到网络、多线程等重要的基础知识,因此Java语言也是学习面向对象编程和网络编程的首选语言。按照教学培养计划要求,学生在学习完课本中指定课时的知识后,应安排一定课时的课程设计。其主要目的是使学生深入理解并实践在本课程中所学的有关JAVA程序设计方面的语言基础、异常处理、事件处理、小应用程序以及图形用户界面设计等。故此“日历记事本”应运而生。本课程设计是为了配合Java程序设计课程,帮助学生深入学习掌握Java语言,熟练运用这个工具而设立的课程。通过课程设计各个项目的综合训练,加强学生对Java语言的理解,检验学生对专业理论知识理解与掌握的程度,锻炼学生综合运用Java程序设计处理所学的知识实际分析问题、解决问题的能力,使课堂上的理论在实践中得到运用,提高学生的综合素质,为学生毕业后的实际工作打好基础。同时也满足了大多数同学对于一款简单易用的日记本软件的需求。1.2需求分析随着社会的发展,越来越多的人依靠电子产品生活,而他们的日常工作也是离不开这些电子产品的,所以开发出一款日历备忘录就显得必不可少了。利用面向对象的程序设计语言Java来实现具有图形界面的日历记事本。日历具有基本的浏览和日期修改的功能。记事本具有输入、保存、删除、查看等基本功能。第二章 系统设计2.1 功能设计日历记事本的包括日历和日志记事本两部分:日历部分采用公历历法,界面设计:日期部分每行7天,每列 5天,可完全 记录一个月中的所有天数。星期采用中文显示,每行的第一天为星期日。星期六显示为蓝色,星期日显示为红色,当前日期显示为绿色,其它日期显示为黑色。年份通过负数表示公元前,正数表示公元后。用户可通过使用鼠标点击按钮的方式改变日历的年份和月份。记事本部分提供输入、保存、显示、删除日志的功能。用户输入的日志记录在本系统所在的目录保存为后缀名为.txt的文本文件。 用户只要选定要查看日志的日期,即可以通过鼠标点击显示日志的按钮来实现。2.2 流程(或算法)设计是 显示窗口界面保存日志 删除日志读取日志保存日志显示日志 选择日期删除并去掉“有” 否 是 是是 否否结束程序 开始 图2.2.2 系统流程实现2.3 类与接口设计本日历记事本共有4个java源文件。CalendarPad.java:该java文件生成的类负责创建本日历记事本程序主窗口。该类含有main方法,程序从该类开始执行。Year.java:该文件负责创建管理年份的对象。Month.java:该文件负责创建管理月份对象。NotePad.java:该文件负责创建记事本。CalendarPad(主类)NotePadYearMonth图2.2.1 类之间的关系设置日历牌 CalendarPad 排列号码mousePressed 事件图2.2.2 系统功能结构CalendarPad作为主函数的入口。调用NotePad类的方法完善自己的窗口。当对窗口的年份和月份进行改变时就会触发Year类和Month类里的触发器和方法,从而达到日历备忘录的目的。2.4 类与接口设计在设计日历记事本时,需要编写3个Java类:CalendarPad.java、Year.java、NotePad.java、month.java。日历记事本除了需要编写的上述3个Java所给出的类外,还需要Java系统提供的一些重要的类,如JTextField、JTextArea和File类。图形界面至少要有一个顶级Swing容器顶级Swing容器为其它Swing组件在屏幕上的绘制和处理事件提供支持;常用的顶级容器:Frame(框架):表示主程序窗口JDialog(对话框):每个JDialog对象表示一个对话框,对话框属于二级窗口JApplet(小程序):在浏览器内显示一个小程序界面一个框架包括边界、菜单栏、工具栏、状态栏,以及中间占主要部分的窗格窗格也可以看作是一种面板,但它是框架的一个组成部分组件不会直接放到框架上,而是放在若干个面板上,这些面板再放到窗格上用框架对象的getContentPane()函数来获得窗格,再调用窗格的add()函数放置面板public static void main(String args)JFrame frame=new JFrame(SwingApplication);JPanel panel1=new JPanel();frame.getContentPane().add(panel1,BorderLayout.CENTER);关键是java.awt.*里面的两个与显示设备有关的类:GraphicsEnvironment和GraphicsDevice。GraphicsEnvironment为Java应用程序提供了特定平台的 GraphicsDevice对象和 Font 对象集合。这些GraphicsDevice可以是各种本机和远端机器的资源,如屏幕、打印机或者是Image Buffer,甚至是Graphics2D绘图方法的目标对象。而GraphicsDevice就是指特定的图形环境了,如屏幕和打印设备等。这样,我们就可以用GraphicsDevice来操纵屏幕了。GraphicsDevice提供的setFullScreenWindow()方法就是设置全屏幕用的。监听器actionlistion:方 法:actionPerformed事 件:ActionEvent String getActionCommand()actioncommand是控件内部的一个字符串,用于标识控件的状态。此函数可以取得控件的状态,从而决定到底该做什么。 int getModifiers()取得“产生此事件时,用户同时按下的组合键” long getWhen()取得“产生此事件时的时间戳”事件产生原因:点击按钮,在列表框中选择内容,在文本框中点回车,计时器到期。1.CalendarPad类 表2.4.1 主要成员变量(属性) 成员变量描述变量类型名称年、月、日intYear,month,day保存日志的散列表Hashtablehashtable存放散列表的文件Filefile显示日期JTextFieldshowDay日历对象Calendar日历记事本对象NotePadnotepad月Month负责改变月年Year负责改变年 表2.4.2 主要方法 名称功能备注CalendarPad创建程序主窗口构造方法设置日历牌设置日历的年份、月份排列号码排列月份中的号码mousePressed处理MouseEvent事件接口方法mian程序开始运行2.记事本NotePad 表2.4.3 主要成员变量(属性) 描述变量类型名称文本输入区JTextAreatext保存、删除日志的按钮Button保存日志、删除日志保存日志的散列表Hashtabletable保存散列表的文件Filefile记录日志的年、月、日intyear,month,day 表2.4.4 主要方法名称功能备注NotePad创建记事本对象构造方法setYear设置年份getYear获取年份setMonth设置月份getMonth获取月份setDay设置日期getDay获取日期获取日志内容获取日志内容保存日志保存日志删除日志删除日志actionPerformed处理ActionEvent事件接口方法3.年Year 表2.4.5 主要成员变量(属性)描述变量类型名称表示年份的整数(负数表示公元前)intyear显示年份的文本条JTextFieldshowYear负责增减年份的按钮JButton明年,去年 表2.4.6 主要方法名称功能备注Year创建“年”对象构造方法setYear设置年份getYear获取年份actionPerformed处理ActionEvent事件接口方法4.月Month 表2.4.7 主要成员变量(属性)描述变量类型名称表示月份的整数(负数表示公元前)intmonth显示月份的文本条JTextFieldShowMonth负责增减月份的按钮JButton上月,下月 表2.4.8主要方法名称功能备注 Month创建“月”对象构造方法set Month 设置月份get Month 获取月份actionPerformed处理ActionEvent事件接口方法第3章 系统实现程序截图图3.1 程序运行图3.2 保存日志图3.3 查看日志图3.4 删除记事第四章 设计总结 通过这次的课程设计,基本上将书本上的知识运用到实践上,从而进一步巩固和丰富所学知识,也让我更加深层次的认识了Java及其功能的强大。为了更好地完成这次课程设计,我做了很多准备,上网查阅资料,不断咨询同学。这个过程中也锻炼了我的思维分析、遇到问题及想法设法通过各种途径解决问题的能力。 从理论到实践,不仅巩固了以前的知识,而且学到了许多书上学不到的知识。通过这次课程设计使我懂得了理论与实践相结合是很重要的,只有理论知识是不够的,只有把所学的理论知识和实践结合起来,从理论中得出结论,才能真正服务社会,从而提高自己的实际动手能力和独立思考能力。通过这次课程设计,了解到了自己的不足之处,对以前的知识没有掌握到位,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。参考文献1耿祥义,张跃平Java2实用教程(第四版)M.北京:清华大学出版社,2012.2耿祥义 Java课程设计(第三版)M.北京:清华大学出版社, 2012附 录(核心代码)主类 CalendarPad:CalendarPad。Javaimport java.util.Calendar;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.Hashtable;public class CalendarPad extends JFrame implements MouseListener int year,month,day; Hashtable hashtable; File file; JTextField showDay; JLabel title; Calendar 日历; int 星期几; NotePad notepad=null; Month 负责改变月; Year 负责改变年; String 星期=星期日,星期一,星期二,星期三,星期四,星期五,星期六; JPanel leftPanel,rightPanel; public CalendarPad(int year,int month,int day) leftPanel=new JPanel(); JPanel leftCenter=new JPanel(); JPanel leftNorth=new JPanel(); leftCenter.setLayout(new GridLayout(7,7); rightPanel=new JPanel(); this.year=year; this.month=month; this.day=day; 负责改变年=new Year(this); 负责改变年.setYear(year); 负责改变月=new Month(this); 负责改变月.setMonth(month); title=new JLabel7; showDay=new JTextField42; for(int j=0;j7;j+) titlej=new JLabel(); titlej.setText(星期j); titlej.setBorder(BorderFactory.createRaisedBevelBorder(); leftCenter.add(titlej); title0.setForeground(Color.red); title6.setForeground(Color.blue); for(int i=0;i42;i+) showDayi=new JTextField(); showDayi.addMouseListener(this); showDayi.setEditable(false); leftCenter.add(showDayi); 日历=Calendar.getInstance(); Box box=Box.createHorizontalBox(); box.add(负责改变年); box.add(负责改变月); leftNorth.add(box); leftPanel.setLayout(new BorderLayout(); leftPanel.add(leftNorth,BorderLayout.NORTH); leftPanel.add(leftCenter,BorderLayout.CENTER); leftPanel.add(new Label(请在年份输入框输入所查年份(负数表示公元前),并回车确定), BorderLayout.SOUTH) ; leftPanel.validate(); Container con=getContentPane(); JSplitPane split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel,rightPanel); con.add(split,BorderLayout.CENTER); con.validate(); hashtable=new Hashtable(); file=new File(日历记事本.txt); if(!file.exists() try FileOutputStream out=new FileOutputStream(file); ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut.writeObject(hashtable); objectOut.close(); out.close(); catch(IOException e) notepad=new NotePad(this); rightPanel.add(notepad); 设置日历牌(year,month); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); setVisible(true); setBounds(100,50,524,285); validate(); public void 设置日历牌(int year,int month) 日历.set(year,month-1,1); 星期几=日历.get(Calendar.DAY_OF_WEEK)-1; if(month=1|month=2|month=3|month=5|month=7 |month=8|month=10|month=12) 排列号码(星期几,31); else if(month=4|month=6|month=9|month=11) 排列号码(星期几,30); else if(month=2) if(year%4=0&year%100!=0)|(year%400=0) 排列号码(星期几,29); else 排列号码(星期几,28); public void 排列号码(int 星期几,int 月天数) for(int i=星期几,n=1;i星期几+月天数;i+) showDayi.setText(+n); if(n=day) showDayi.setForeground(Color.green); showDayi.setFont(new Font(TimesRoman,Font.BOLD,20); else showDayi.setFont(new Font(TimesRoman,Font.BOLD,12); showDayi.setForeground(Color.black); if(i%7=6) showDayi.setForeground(Color.blue); if(i%7=0) showDayi.setForeground(Color.red); n+; for(int i=0;i星期几;i+) showDayi.setText(); for(int i=星期几+月天数;i42;i+) showDayi.setText(); public int getYear() return year; public void setYear(int y) year=y; notepad.setYear(year); public int getMonth() return month; public void setMonth(int m) month=m; notepad.s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论