日历记事本实验报告.docx

上传人:b****7 文档编号:9252352 上传时间:2023-02-03 格式:DOCX 页数:33 大小:448.43KB
下载 相关 举报
日历记事本实验报告.docx_第1页
第1页 / 共33页
日历记事本实验报告.docx_第2页
第2页 / 共33页
日历记事本实验报告.docx_第3页
第3页 / 共33页
日历记事本实验报告.docx_第4页
第4页 / 共33页
日历记事本实验报告.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

日历记事本实验报告.docx

《日历记事本实验报告.docx》由会员分享,可在线阅读,更多相关《日历记事本实验报告.docx(33页珍藏版)》请在冰豆网上搜索。

日历记事本实验报告.docx

日历记事本实验报告

题目:

日历记事本

一、实验内容

用所学的Java知识,设计出日历记事本程序。

(其中:

保存、读取和删除过程)

二、需求分析

◆建立日历记事本界面,其中包括时钟、日历和记事大部分操作、显示、清除

◆所编写的程序可以正常运算;

◆所编写的程序可以正确记事;

三、实验目的

★1、加深对Java语言的了解,增强Java的编写能力;

★2、巩固专业知识,Java复习语言的类及其他基础内容;

★3、增强学生的动手实践能力,开拓学生的视野;

★4、丰富学生的想象力及独立思考能力。

四、组员及分工

廖俊军:

CalendarMessage、CalendarPad、NotePad

刘伟才:

CalendarWindow

伍星:

Clock

 

五、系统总体设计:

主要功能模块的算法设计思路如下:

1、主类(CalendarWindow.java)

主要功能介绍:

(1)运行的标志;

(2)调用包中的各种类。

(3)界面代码及主函数的书写

(4)窗口的排版及按钮的位置摆放

(5)实现各按钮和标签的创建和功能

2、数据类(CalendarMessage.java)

主要功能介绍:

用来刻画和“日期”有关的数据。

3、数据显示和修改类(CalendarPad.java)

主要功能介绍:

用来表示“日历”,即负责显示和修改CalendarMessage对象中的日期数据。

4、记事本类(NotePad.java)

主要功能介绍:

创建以提供编辑、读取、保存和删除日志的功能。

5、时钟类(Clock.java)

主要功能介绍:

负责显示时钟。

6、图像类(CalendarImage.java)

主要功能介绍:

负责绘制图像。

六、程序详细设计:

代码如下:

1、主类(CalendarWindow.java)

importjavax.swing.*;

importjava.awt.*;

importjava.awt.event.*;

importjava.util.*;

importjava.io.*;

publicclassCalendarWindowextendsJFrameimplementsActionListener,

MouseListener,FocusListener{

intyear,month,day;

CalendarMessagecalendarMessage;

CalendarPadcalendarPad;

NotePadnotePad;

JTextFieldshowYear,showMonth;

JTextField[]showDay;

CalendarImagecalendarImage;

Clockclock;

JButtonnextYear,previousYear,nextMonth,previousMonth;

JButtonsaveDailyRecord,deleteDailyRecord,readDailyRecord;

Filedir;

ColorbackColor=Color.white;

publicCalendarWindow(){

dir=newFile("./dailyRecord");

dir.mkdir();

showDay=newJTextField[42];

for(inti=0;i

showDay[i]=newJTextField();

showDay[i].setBackground(backColor);

showDay[i].setLayout(newGridLayout(3,3));

showDay[i].addMouseListener(this);

showDay[i].addActionListener(this);

showDay[i].addFocusListener(this);

}

calendarMessage=newCalendarMessage();

calendarPad=newCalendarPad();

notePad=newNotePad();

Calendarcalendar=Calendar.getInstance();

calendar.setTime(newDate());

year=calendar.get(Calendar.YEAR);

month=calendar.get(Calendar.MONTH)+1;

day=calendar.get(Calendar.DAY_OF_MONTH);

calendarMessage.setYear(year);

calendarMessage.setMonth(month);

calendarMessage.setDay(day);

calendarPad.setCalendarMessage(calendarMessage);

calendarPad.setShowDayTextField(showDay);

notePad.setShowMessage(year,month,day);

calendarPad.showMonthCalendar();

doMark();//给有日志的号码做标记,见后面的doMark()方法

calendarImage=newCalendarImage();

calendarImage.setImageFile(newFile("flower.jpg"));

clock=newClock();

JSplitPanesplitV1=

newJSplitPane(JSplitPane.VERTICAL_SPLIT,calendarPad,calendarImage);

JSplitPanesplitV2=

newJSplitPane(JSplitPane.VERTICAL_SPLIT,notePad,clock);

JSplitPanesplitH=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,splitV1,splitV2);

add(splitH,BorderLayout.CENTER);

showYear=newJTextField(""+year,6);

showYear.setFont(newFont("TimesRoman",Font.BOLD,12));

showYear.setHorizontalAlignment(JTextField.CENTER);

showMonth=newJTextField(""+month,4);

showMonth.setFont(newFont("TimesRoman",Font.BOLD,12));

showMonth.setHorizontalAlignment(JTextField.CENTER);

nextYear=newJButton("下年");

previousYear=newJButton("上年");

nextMonth=newJButton("下月");

previousMonth=newJButton("上月");

nextYear.addActionListener(this);

previousYear.addActionListener(this);

nextMonth.addActionListener(this);

previousMonth.addActionListener(this);

showYear.addActionListener(this);

JPanelnorth=newJPanel();

north.add(previousYear);

north.add(showYear);

north.add(nextYear);

north.add(previousMonth);

north.add(showMonth);

north.add(nextMonth);

add(north,BorderLayout.NORTH);

saveDailyRecord=newJButton("保存日志");

deleteDailyRecord=newJButton("删除日志");

readDailyRecord=newJButton("读取日志");

saveDailyRecord.addActionListener(this);

deleteDailyRecord.addActionListener(this);

readDailyRecord.addActionListener(this);//怎么实现的按钮上附加的日记读取功能?

JPanelpSouth=newJPanel();

pSouth.add(saveDailyRecord);

pSouth.add(deleteDailyRecord);

pSouth.add(readDailyRecord);

add(pSouth,BorderLayout.SOUTH);

setVisible(true);

setBounds(60,60,660,480);

validate();

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

publicvoidactionPerformed(ActionEvente){//鼠标获取按钮内容的动作函数

if(e.getSource()==nextYear){//“下一年”

year++;

showYear.setText(""+year);

calendarMessage.setYear(year);

calendarPad.setCalendarMessage(calendarMessage);

calendarPad.showMonthCalendar();

notePad.setShowMessage(year,month,day);

doMark();

}

elseif(e.getSource()==previousYear){//“上一年”

year--;

showYear.setText(""+year);

calendarMessage.setYear(year);

calendarPad.setCalendarMessage(calendarMessage);

calendarPad.showMonthCalendar();

notePad.setShowMessage(year,month,day);

doMark();

}

elseif(e.getSource()==nextMonth){//“下一月”

month++;

if(month>12)month=1;

showMonth.setText(""+month);

calendarMessage.setMonth(month);

calendarPad.setCalendarMessage(calendarMessage);

calendarPad.showMonthCalendar();

notePad.setShowMessage(year,month,day);

doMark();

}

elseif(e.getSource()==previousMonth){//、“上一月”

month--;

if(month<1)month=12;

showMonth.setText(""+month);

calendarMessage.setMonth(month);

calendarPad.setCalendarMessage(calendarMessage);

calendarPad.showMonthCalendar();

notePad.setShowMessage(year,month,day);

doMark();

}

elseif(e.getSource()==showYear){

Strings=showYear.getText().trim();

chara[]=s.toCharArray();

booleanboo=false;

for(inti=0;i

if(!

(Character.isDigit(a[i])))

boo=true;

if(boo==true)//弹出“警告”消息对话框

JOptionPane.showMessageDialog(this,"您输入了非法年份","警告",

JOptionPane.WARNING_MESSAGE);

elseif(boo==false)

year=Integer.parseInt(s);

showYear.setText(""+year);

calendarMessage.setYear(year);

calendarPad.setCalendarMessage(calendarMessage);

calendarPad.showMonthCalendar();

notePad.setShowMessage(year,month,day);

doMark();

}

elseif(e.getSource()==saveDailyRecord){//“保存日记”

notePad.save(dir,year,month,day);

doMark();

}

elseif(e.getSource()==deleteDailyRecord){//“删除日记”

notePad.delete(dir,year,month,day);

doMark();

}

elseif(e.getSource()==readDailyRecord)//“读取日记”

notePad.read(dir,year,month,day);

}

publicvoidmousePressed(MouseEvente){

JTextFieldtext=(JTextField)e.getSource();

Stringstr=text.getText().trim();

try{day=Integer.parseInt(str);

}

catch(NumberFormatExceptionexp){

}

calendarMessage.setDay(day);

notePad.setShowMessage(year,month,day);

}

publicvoidmouseReleased(MouseEvente){}

publicvoidmouseEntered(MouseEvente){}

publicvoidmouseExited(MouseEvente){}

publicvoidmouseClicked(MouseEvente){}

publicvoidfocusGained(FocusEvente){

Componentcom=(Component)e.getSource();

com.setBackground(Color.pink);

}

publicvoidfocusLost(FocusEvente){//此事件指示Component不再是焦点所有者。

指示Component已获得或失去输入焦点的低级别事件。

Componentcom=(Component)e.getSource();

com.setBackground(backColor);

}

publicvoiddoMark(){

for(inti=0;i

showDay[i].removeAll();

Stringstr=showDay[i].getText().trim();

try{

intn=Integer.parseInt(str);

if(isHaveDailyRecord(n)==true){//见后面的isHaveDailyRecord()方法

JLabelmess=newJLabel("有");

mess.setFont(newFont("TimesRoman",Font.PLAIN,11));

mess.setForeground(Color.blue);

showDay[i].add(mess);

}

}

catch(Exceptionexp){}

}

calendarPad.repaint();

calendarPad.validate();

}

publicbooleanisHaveDailyRecord(intn){

Stringkey=""+year+""+month+""+n;

String[]dayFile=dir.list();

booleanboo=false;

for(intk=0;k

if(dayFile[k].equals(key+".txt")){

boo=true;

break;

}

}

returnboo;

}

publicstaticvoidmain(Stringargs[]){

newCalendarWindow();

}

}

2、数据类(CalendarMessage.java)

importjava.util.Calendar;

publicclassCalendarMessage{

intyear=-1,month=-1,day=-1;//为什么要附上负值?

publicvoidsetYear(intyear){

this.year=year;

}

publicintgetYear(){

returnyear;

}

publicvoidsetMonth(intmonth){

if(month<=12&&month>=1)

this.month=month;

else

this.month=1;

}

publicintgetMonth(){

returnmonth;

}

publicvoidsetDay(intday){

this.day=day;

}

publicintgetDay(){

returnday;

}

publicString[]getMonthCalendar(){

String[]day=newString[42];

Calendarrili=Calendar.getInstance();

rili.set(year,month-1,1);//将日历翻到year年month月1日,注意0表示一月...11表示十二月

int星期几=rili.get(Calendar.DAY_OF_WEEK)-1;//星期天对应是0,以此类推星期一是1....星期六是6。

intdayAmount=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)&&(year%100!

=0))||(year%400==0))

dayAmount=29;

else

dayAmount=28;

//*********************************日对应星期**********************************//

for(inti=0;i<星期几;i++)//Calendar所得到的星期几和i对比,小于它的为空标签

day[i]="";

for(inti=星期几,n=1;i<星期几+dayAmount;i++){

day[i]=String.valueOf(n);

n++;

}

for(inti=星期几+dayAmount;i<42;i++)//当月所存在日数之后的都是空标签

day[i]="";

returnday;

}

}

3、数据显示和修改类(CalendarPad.java)

importjavax.swing.*;

importjava.awt.*;

importjava.awt.event.*;

importjava.util.*;

publicclassCalendarPadextendsJPanel{

intyear,month,day;

CalendarMessagecalendarMessage;

JTextField[]showDay;

JLabeltitle[];//定义标签组

String[]星期={"SUN日","MON一","TUE二","WED三","THU四","FRI五","SAT六"};

JPanelnorth,center;//定义面板

publicCalendarPad(){

setLayout(newBorderLayout());//实现边界布局

north=newJPanel();//创建靠上边的面板

north.setLayout(newGridLayout(1,7));//网格布局管理一行七列

center=newJPanel();//创建靠下边的面板

center.setLayout(newGridLayout(6,7));//网格布局管理六行七列

add(center,BorderLayout.CENTER);

add(north,BorderLayout.NORTH);

title=newJLabel[7];

for(intj=0;j<7;j++){

tit

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

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1