1、本科生课程设计课程名称Java程序设计B课程设计题目学号学生姓名所在专业所在班级指导老师成绩老师签字 评语:课程设计时间:12月31日-1月6日目 录摘要21引言22. 设计目标和任务23设计方案33.1总体设计33.2设计要求33.3系统关键功效33.4各个类组合结构图43.5各个类说明4 3.5.1 CalendarWindow类4 3.5.2 CalendarMessage类11 3.5.3 CalendarPad类13 3.5.4 NotePad类14 3.5.5 CalendarImage类19 3.5.6 Clock类204多种功效截图245. 课程设计总结26Java程序设计B课
2、程设计 日历记事本 摘 要本课程设计经过代码实现将理论知识和具体实践相结合,巩固提升了对JAVA相关方法和概念了解,使学生发散思维及动手能力深入加强,加强对计算机及软件工程深入了解。在这个课程设计中,我们做成了一个有日历标识记事本软件,日历记事本面板由日历、记事本、图片、时钟四部分组成。日历部分能够选择不一样年份、月份、日期和星期;记事本模块能够实现查看,保留,删除日志等操作;而且每一步操作全部有对应提醒;图片模块能够显示预设图片;时钟模块能够用时钟来显示目前时间。本软件是一个实用性较强,简练,美观,方便功效软件。1. 引言Java是一个纯面向对象、网络编程首选语言。Java技术作为软件一个革
3、命性技术,已被列为当今世界信息技术主流之一。为了适应时代时尚,我们应该加强对Java学习,愈加好掌握这门课程。为此,我们成了一个课程小组,经过小组成商讨以后,我们决定以“日历记事本”为设 题材,借此巩固加深我们对Java了解。此次课程设计实例即使比较简单,程序设计也不是很复杂,但在此程序设计过程也是一个学习过程,更是对复杂程序一个学习过程,还能培养我们数抽象能力。所以,我们认为这次课程设计是很有意义,能为我们以后学习面向过程程序设计作部分铺垫。2.设计目标和任务本课程设计所要求达成目标和任务:经过Java程序设计部分关键理论基础来实现“日历记事本”“日历”和“记事本”双重功效。并经过此次课程设
4、计训练,使学生巩固和加深对Java这门课程了解,经过利用所学到计算科学理论知识,提升处理实际问题能力,增强运算、编程和使用技术资料技能,经过实际问题分析设计、编程和调试,掌握应用软件分析方法和工程设计方法,能正确叙述设计和试验结果。经过这次课程设计,培养实事求是、认真、严谨科学态度和刻苦钻研不停创新精神,逐步建立正确全局观念。3.设计方案3.1 总体设计(1)问题定义:创建日历记事本,实现对某日期事情进行统计这关键功效,并能显示设置图片和时钟,增加美观。(2)问题分析:经过对“日历记事本”这一题材分析,我需要四个类来实现其“日历”和“记事本”这两大功效。经过主类CalendWindow创建动日
5、历记事本软件主窗口,该类含有main方法,程序从该类开始实施。再用余下CalendarPad、CalendarMessage 、NotePad类来显示并改变日期和实现记事本功效。而CalendarImage和Clock这两个类用来显示图片和时钟。(3)研究意义:经过此次课程设计,我们掌握了Java语言基础利用,提升了理论结合实际能力。 3.2设计要求 (1)界面左侧是日历和一幅图。该日历能够按年前后翻动,用鼠标鼠标单击“上年”按钮时,目前日历年份将减一;当鼠标左键单击“下年”按钮,目前日历年份将加一。该日历还能够在某年内按月前月后翻动,当鼠标左键单击“上月”按钮时,目前日历月份将减一;当鼠标左
6、键单击“下月” 目前日历表月份将加一。图片是为了增加美观而加进去。 (2)系统界面右侧是记事本和一个闹钟。用鼠标单击日历上日期,就能够经过该记事本编辑相关日志,并将日志保留到一个文件,该文件名字由该日期组成字符序列命名。用户能够查看,删除某个日期日志,也能够继续向某个日志添加新内容。时钟能够实时显示目前时间。 (3)当某个日期有日志时,在日历表该日期外观上就会出现“yes”标识,表明这个日期有日志,当用户删除某个日期日志后,该日期外观上“yes”标志就会消失。3.3系统关键功效 (1)能够对个人日志进行添加、查阅、删除;(2)能够方便地在任何日期记载个人日志和查看某个日期记载日志 ;(3)能够
7、显示目前日期和时间。3.4各个类组合结构图CalendarWindowCalendarMessageCalendarImageCalendarPad JTextFieldFileNotePad JTextArea Clock3.5 各个类说明(1)主函数CalendarWindow类该类是整个程序主框架,是javax.swing包中Jframe一个子类。并实现了ActionListener、MouseListener和FocusListener接口。以下是该类相关数听说明!1) 组员变量l year,month和day是int型变量。它们值分别确定年份、月份和日期。l calendarMess
8、age是CalnedarMessage对象,该对象用来处理和日期相关数据。l calendarPad是CalendarPad对象,该对象能够显示和日期相关数据。l notPad是NotPad对象。含有编辑、读取、保留和删除日志功效。l showYear和showMonth是JtextField类创建文本框,用来显示年月。l showDay数组每个单元是JtextField类创建用来显示日期文本框。l calendarImage是CalendarImage创建对象,用来显示图像。l clock是Clock创建对象,用来显示时钟。l nextYear,PreviousYear,nextMonth和
9、PreviousMonth是JButton创建按钮对象,名字依次为“下年、上年、下月、上月”。这些按钮全部将目前窗口注册为自己ActionEvent事件监视器。l savaDailyRecord,deleteDailyRecord和readDailyRecord是JButton创建按钮对象,名字依次为“保留日志、删除日志、读取日志”。这些按钮全部将目前窗口注册为自己ActionEvent事件监视器。2) 方法l CalendarWindow()是结构方法,负责完成窗口初始化。l actionPerformed(ActionEvent)方法是CalendarWindow类实现ActionList
10、ener接口中方法。CalendarWindow创建窗口是nextYear,previousYear,nextMonth,previousMonth,saveDailyRecord,deleteDailyRecord和readDailyRecord按钮ActionEvent事件监视器,当用户单击其中按钮时,窗口将实施actionPerformed(ActionEvent)方法进行对应操作。l mousePressed(MouseEvent)方法是CalendarWindow类实现MouseListener接口中方法。CalendarWindow创建窗口时showDay数组中JtextField
11、文本框MouseEvent事件监视器,当用户在某个显示日期文本框上按下鼠标左键时,窗口将实施mousePress(MouseEvent)方法进行对应操作。l focusGained(FocusEvent)和focusLost(FocusEvent)方法是CalendarWindow类实现FocusListener接口中方法。CalendarWindow创建窗口是showDay数组中JtextField文本框FocusEvent事件监视器,当用户操作造成某个显示日期文本框焦点发生改变时,窗口将实施focusGained(FocusEvent)或focusLost(FocusEvent)方法进行对
12、应操作。l doMark()方法负责对有日志日期作出标志。l main方法是程序运行入口方法。具体代码:import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;import java.io.*;public class CalendarWindow extends JFrame implements ActionListener,MouseListener,FocusListenerint year,month,day;CalendarMessage calendarMessage;Ca
13、lendarPad calendarPad;NotePad notePad;JTextField showYear,showMonth;JTextField showDay;CalendarImage calendarImage;Clock clock;JButton nextYear,previousYear,nextMonth,previousMonth;JButton saveDailyRecord,deleteDailyRecord,readDailyRecord;File dir;Color backColor=Color.white;public CalendarWindow()d
14、ir= new File(./dailyRecord);dir.mkdir();showDay = new JTextField42;for(int i=0;i12) month=1;showMonth.setText(+month);calendarPad.setCalendarMessage(calendarMessage);calendarPad.showMonthCalendar();notePad.setShowMessage(year,month,day);doMark();else if (e.getSource()=previousMonth)month-;if(month1)
15、 month=12;showMonth.setText(+month);calendarPad.setCalendarMessage(calendarMessage);calendarPad.showMonthCalendar();notePad.setShowMessage(year,month,day);doMark();else if (e.getSource()=showYear)String s = showYear.getText().trim();char a = s.toCharArray();boolean boo = false;for(int i = 0;i a.leng
16、th;i+)if(!(Character.isDigit(ai)boo = true;if(boo=true)JOptionPane.showMessageDialog(this,你输入了非法年份,警告!, JOptionPane.WARNING_MESSAGE);else if(boo=false)year = Integer.parseInt(s);showYear.setText(+year);calendarMessage.setYear(year);calendarPad.setCalendarMessage(calendarMessage);calendarPad.showMont
17、hCalendar();notePad.setShowMessage(year,month,day);doMark();else if (e.getSource()= saveDailyRecord)notePad.save(dir,year,month,day);doMark();else if(e.getSource()=deleteDailyRecord)notePad.delete(dir,year,month,day);doMark();else if (e.getSource()=readDailyRecord)notePad.read(dir,year,month,day);do
18、Mark();public void mousePressed(MouseEvent e)JTextField text = (JTextField)e.getSource();String str = text.getText().trim();tryday = Integer.parseInt(str);catch (NumberFormatException exp)calendarMessage.setDay(day);notePad.setShowMessage(year,month,day);public void mouseReleased(MouseEvent e)public
19、 void mouseEntered(MouseEvent e)public void mouseExited(MouseEvent e)public void mouseClicked(MouseEvent e)public void focusGained(FocusEvent e)Component com = (Component)e.getSource();com.setBackground(Color.pink);public void focusLost(FocusEvent e)Component com = (Component)e.getSource();com.setBa
20、ckground(backColor);public void doMark()for(int i=0;ishowDay.length;i+)showDayi.removeAll();String str = showDayi.getText().trim();tryint n = Integer.parseInt(str);if(isHaveDailyRecord(n)=true)JLabel mess = new JLabel(yes);mess.setFont(new Font(TimesRoman,Font.PLAIN,11);mess.setForeground(Color.blue
21、);showDayi.add(mess);catch (Exception exp)calendarPad.repaint();calendarPad.validate();public boolean isHaveDailyRecord(int n)String key = +year+month+n;String dayFile = dir.list();boolean boo = false;for(int k = 0;kdayFile.length;k+)if(dayFilek.equals(key+.txt)boo = true;break;return boo;public sta
22、tic void main(String args) new CalendarWindow();(2)CalendarMessage类CalendarMessage类创建对象calendarMessage是CalendarWindow窗口关键组员对象之一,负责处理和日期相关数据。该类相关数听说明以下:1) 组员变量 year,month,day是int型数据,它们值分别确定年份、月份和日期。2) 方法l setYear(int)和getYear()方法分别用来设置year和获取year值。l setMonth(int)和getMonth()方法分别用来设置month和获取month值。l se
23、tDay(int)和getDay()方法分别用来设置和获取day值。l getMonthCalendar()方法是用来处理日期数据,使其按着习惯来显示。即日历牌中每行第一列为“星期天”。getMonthCalendar()方法依据year,month和day值返回一个存放着“日历”数据String类型数组,比如,假如某月有30天,而且该月第一天是星期三,那么返回String类型数组是:“”,“”,“”,“1”,“2”,“30”。具体代码:import java.util.Calendar;public class CalendarMessage int year=-1,month=-1,day
24、=-1;public void setYear(int year)this.year=year;public int getYear()return year;public void setMonth(int month)if(month=1)this.month=month;elsethis.month=1;public int getMonth()return month;public void setDay(int day)this.day=day;public int getday()return day;public String getMonthCalendar()String d
25、ay=new String42;Calendar rili=Calendar.getInstance();rili.set(year,month-1,1);/将日历翻到year年month月1日int 星期几=rili.get(Calendar.DAY_OF_WEEK)-1;int dayAmount=0;if(month=1|month=3|month=5|month=7|month=8|month=10|month=12)dayAmount=31;if(month=4|month=6|month=9|month=11)dayAmount=30;if(month=2)if(year%4=0)
26、&(year%100!=0)|year%400=0)dayAmount=29;else dayAmount=28;for(int i=0;i星期几;i+)dayi= ;for(int i=星期几,n=1;i星期几+dayAmount;i+)dayi=String.valueOf(n);n+;for (int i=星期几+dayAmount;i42;i+ ) dayi= ;return day;(3)CalendarPad类CalendarPad类是javax.swing包中Jpanel容器子类,所创建对象:calendarPad是CalendarWindow类中最关键组员之一,负责显示经Cal
27、endarMessage类处理后日期数据,被添加到CalendarWindow窗口左上侧。以下是该类相关说明:1) 组员变量l year,month和day是int型数据,它们值分别确定年份、月份和日期l calendarMessage是CalendarMessage对象,该对象能够处理和日期相关数据。l showDay数组每个单元是JtextField类创建用来显示日期文本框。l “星期”是String数组,单元值依次为“SUN日”、“MON一”、“TUE二”、“WED三”、“THU四”、“FRI五”、“SAT六”。2) 方法l CalendarPad()是结构方法,用来创建calendar
28、Pad对象。l setShowDayTextField(JtextField)方法负责设置showDay数组。l setCalendarMessage(CalendarMessage)方法负责设置calendarMessage对象。l showMonthCalendar()方法负责显示“日历”。具体代码:import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;public class CalendarPad extends JPanelint year,month,day; Calend
29、arMessage calendarMessage;JTextField showDay;JLabel title ;String 星期=SUN 日,MON 一,TUE 二,WED 三,THU 四,FRI 五,SAT 六;JPanel north,center;public CalendarPad()setLayout(new BorderLayout();north=new JPanel();north.setLayout(new GridLayout(1,7);center=new JPanel();center.setLayout(new GridLayout(6,7);add(cent
30、er,BorderLayout.CENTER);add(north,BorderLayout.NORTH);title=new JLabel7;for(int j=0;j7;j+)titlej=new JLabel();titlej.setFont(new Font(TimesRoman,Font.BOLD,12);titlej.setText(星期j);titlej.setHorizontalAlignment(JLabel.CENTER);titlej.setBorder(BorderFactory.createRaisedBevelBorder();north.add(titlej);t
31、itle0.setForeground(Color.red);title6.setForeground(Color.blue);public void setShowDayTextField(JTextField text)showDay=text;for(int i=0;ishowDay.length;i+)showDayi.setFont(new Font(TimesRoman,Font.BOLD,15);showDayi.setHorizontalAlignment(JTextField.CENTER);showDayi.setEditable(false);center.add(showDayi);
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100