java日程管理系统.docx
《java日程管理系统.docx》由会员分享,可在线阅读,更多相关《java日程管理系统.docx(25页珍藏版)》请在冰豆网上搜索。
java日程管理系统
软件学院
三级实践课题
课题名称:
日程管理小助手
专业:
软件工程(Java方向)
班级:
学号:
学生姓名:
指导教师:
年月日
摘要
随着经济全球化、管理现代化的到来,信息化建设已提到议事日程。
计算机和网络技术得到了迅速的发展和普及,互联网的应用和发展改变了全球的经济模式,企业管理模式也受到了极大的冲击,使信息资源的共享和超越时空的交换成为了可能。
在这个激烈竞争的社会,人们的杂乱事务越来越多,而且常常因为一些小事情把重要的事情耽误,对个人家庭以及企业造成巨大的损失。
事件提醒也来越成为人们的一个救星,来化解各个事件间的矛盾。
为了迎接残酷的社会竞争,个人管理助手是每个个体都需要实用的一种提醒软件。
因此,毫无疑问的说,日程管理无能对个人还是企业都是非常必要的。
做好了日程管理个人可以更好地规划自己生活,让自己的生活多姿多彩,井然有序;让企业能确保各项工作及时有效推进,在时间以及效率上能够给企业带来最大的受益,能够在规定时间内完成既定任务。
日程管理的重要性在于可以将每天的工作和事务安排在日期中并做一个有效的记录
方便管理日常的工作和事务,达到工作备忘的目的。
同时也具有对员工日常工作进行指导、监督的作用。
关键词:
办公自动化,计算机,日程管理
第1章系统分析
问题描述
在这个激烈竞争的社会,人们的杂乱事务越来越多,而且常常因为一些小事情把重要的事情耽误,对个人家庭以及企业造成巨大的损失。
事件提醒也来越成为人们的一个救星,来化解各个事件间的矛盾。
为了迎接残酷的社会竞争,个人管理助手是每个个体都需要实用的一种提醒软件。
因此,毫无疑问的说,日程管理无能对个人还是企业都是非常必要的。
日程管理个人可以更好地规划自己生活,让自己的生活多姿多彩,井然有序;让企业能确保各项工作及时有效推进,在时间以及效率上能够给企业带来最大的受益,能够在规定时间内完成既定任务。
技术分析
在界面设计上,要尽量简化,是用图形化页面。
在前面利用了上中下三个面板,最外面的布局管理用的是BorderLayout()。
在最上面那一行用的是JMenu(),二级下拉菜单用的是JMenuItem()。
在BorderLayout.CENTER中放的是图形,用来美化外观;BorderLayout.SOUTH放了四个JLabel用来提示已经添加的事件提醒。
在具体的时间选择上要提供日历,即使用Calender类。
用此类可以避免用户在输入的时候输入非法字符以及非法操作等造成异常。
而且,要使用数据库来记录具体的时间,事件信息。
在记录时间的时候,考虑到用Date记录时间要将Date转化成字符串,在记录的时候又得将字符串转化为Date类型较为繁琐。
因此,在时间记录方面,一直使用的字符串类型。
避免相互转化的繁琐,以及在转化石可能抛出的异常,简化了代码,减少了工作量。
事件记录方面也是用的字符串类型,基于事件提醒时,记录字数较少,用Text格式的又较为麻烦,因此选择了字符串。
但是,在帮助的通告项方面使用的为Text,字数较多,需要选择该格式。
在细节方面,一定要捕捉异常,用到try()、catch(){},捕捉并处理异常。
在时间输入时,默认不输入时间为本地时间。
后又一个时间判断,用到if语句,当获得的时间与本地时间相同时,提示用户未输入时间且重新输入。
事件提醒内容(equals(“”)),提示用户输入事件提醒内容。
在异常处理方面做到捕捉异常,处理异常,并且合理;在操作性方面,要人性化。
当提示用户输入的内容,或操作非法时,用重新返回到原页面,而不是异常或退出。
用到dispose()让本页面“消失”,在重新调用原来的页面。
在提醒用户方面,获得本地的时间与提醒时间相同时,用到ShowMessageDialog()提示,用户在某时间要做某事。
本课题小组共两人,一个主要负责前期的需求分析,中期的一些异常处理、具体的修改,最后的一些总结,代码优化。
另外,我主要负责部分功能的实现,对部分代码的修改、优化。
在三周内可以基本结束课题的所有内容,完成知道老师对本课题的指导,安排的具体的修改工作。
当然,在三周的时间里,肯定不是刚开始就立即着手开始进入课题实践阶段。
在第一周内,主要对课程管理小助手需要完成的必要功能、参考别人做过的功能以及其他人做的优点以及不足的地方、综合我们学过的知识选择我们要完成的功能,总结我们需要实现的方法以及复习或者学习实现该功能的方法。
第二周开始着手进入代码编译阶段,具体的代码完成后,部分要修改或优化的由我的同伴完成。
第三周前段时间,主要对已完成的系统进行测试,对一些未处理的异常进行捕捉并处理。
后段时间进行课题报告的完成以及总结三周里的实践心得,系统的完成满意度以及学习方法的总结。
第2章系统功能设计
2.1功能分析
日程管理
帮
助
图2-1
如图2-1所示,用户使用本系统时,可以根据日历表选择事件提醒的时间,输入事件提醒的内容。
用户可以选择按时间删除和全部删除两种删除方式,也可以通过帮助,来了解本软件的功能以及操作步骤。
查看事件提醒可以通过时间或查询全部两种查询方式查询,在设置方面,可以设置系统的字体颜色,大小以及背景色。
在美化系统首页方面,用了Icon对象,添加了图片,利用JPanel,JLabel,JMenu,JMenuItem来图形化界面。
在面板的下方,有四个JLabel来显示要提示的事件提醒内容。
根据事件的紧急程度来定义不同的颜色来区分等级,在添加完事件提醒内容之后,会显示到系统主业的下方JLabel上。
也可以调节字体的大小,颜色,背景色。
查询、删除事件提醒可以选择全部或对单一对象进行操作,可以在日历中选择事件提醒的事件以及提示所有非法的操作以及提示用户再次输入。
2.2系统设计
数据库表的设计
表2-2Schedule日程安排配置表
字段名称
类型
大小
约束
说明
No.
int
20
1
时间编号
things
VARCHAR
90
0
事件提醒
daytime
VARCHAR
30
0
提醒时间
图2-2
如图2-2所示,数据库中有一张表,其属性为时间编号,事件提醒内容,提醒时间等内容。
No.定义为int类型,为事件的序号,设置为主键。
用数据库来记录具体的时间,事件信息。
在记录时间的时候,考虑到用Date记录时间要将Date转化成字符串,在记录的时候又得将字符串转化为Date类型较为繁琐。
因此,在时间记录方面,一直使用的字符串类型。
避免相互转化的繁琐,以及在转化石可能抛出的异常,简化了代码,减少了工作量。
事件记录方面也是用的字符串类型,基于事件提醒时,记录字数较少,用Text格式的又较为麻烦,因此选择了字符串。
但是,在帮助的通告项方面使用的为Text,字数较多,需要选择该格式。
在细节方面,一定要捕捉异常,用到try()、catch(){},捕捉并处理异常。
第3章系统实现
3.1功能模块
图3-1
如图3-1所示,在主界面方面,添加了一张背景图片来美化桌面,下面是事件消息的提醒,按照时间的先后顺序根据颜色的不同不区分事件要处理的紧急度。
最上面一行是菜单栏,主要是简化按钮所占用的空间。
在界面设计上,要尽量简化,是用图形化页面。
在前面利用了上中下三个面板,最外面的布局管理用的是BorderLayout()。
在最上面那一行用的是JMenu(),二级下拉菜单用的是JMenuItem()。
在BorderLayout.CENTER中放的是图形,用来美化外观;BorderLayout.SOUTH放了四个JLabel用来提示已经添加的事件提醒。
在具体的时间选择上要提供日历,即使用Calender类。
用此类可以避免用户在输入的时候输入非法字符以及非法操作等造成异常。
在操作性方面,要人性化。
当提示用户输入的内容,或操作非法时,用重新返回到原页面,而不是异常或退出。
用到dispose()让本页面“消失”,在重新调用原来的页面。
在提醒用户方面,获得本地的时间与提醒时间相同时,用到ShowMessageDialog()提示,用户在某时间要做某事。
在细节方面,一定要捕捉异常,用到try()、catch(){},捕捉并处理异常。
在时间输入时,默认不输入时间为本地时间。
后又一个时间判断,用到if语句,当获得的时间与本地时间相同时,提示用户未输入时间且重新输入。
事件提醒内容(equals(“”)),提示用户输入事件提醒内容。
在异常处理方面做到捕捉异常,处理异常,并且合理;在操作性方面,要人性化。
当提示用户输入的内容,或操作非法时,用重新返回到原页面,而不是异常或退出。
用到dispose()让本页面“消失”,在重新调用原来的页面。
在提醒用户方面,获得本地的时间与提醒时间相同时,用到ShowMessageDialog()提示,用户在某时间要做某事。
1.
图3-2-1
图3-2-2
添加界面,是可以根据日历的方式来进行时间的选择;如果不惊醒时间选择的话,默认时间是本地时间。
如果不输入事件信息的话,利用if判断,若等于本地时间,则提示,没有输入时间提醒的时间,会返回时间选择页面,重新进行时间的获取。
在事件提醒内容方面,如果输入的信息提示为空,会提示未输入,返回页面重新输入。
在具体的时间选择上要提供日历,即使用Calender类。
用此类可以避免用户在输入的时候输入非法字符以及非法操作等造成异常。
而且,要使用数据库来记录具体的时间,事件信息。
在记录时间的时候,考虑到用Date记录时间要将Date转化成字符串,在记录的时候又得将字符串转化为Date类型较为繁琐。
因此,在时间记录方面,一直使用的字符串类型。
避免相互转化的繁琐,以及在转化石可能抛出的异常,简化了代码,减少了工作量。
事件记录方面也是用的字符串类型,基于事件提醒时,记录字数较少,用Text格式的又较为麻烦,因此选择了字符串。
但是,在帮助的通告项方面使用的为Text,字数较多,需要选择该格式。
在细节方面,一定要捕捉异常,用到try()、catch(){},捕捉并处理异常。
在时间输入时,默认不输入时间为本地时间。
后又一个时间判断,用到if语句,当获得的时间与本地时间相同时,提示用户未输入时间且重新输入。
事件提醒内容(equals(“”)),提示用户输入事件提醒内容。
在异常处理方面做到捕捉异常,处理异常,并且合理;在操作性方面,要人性化。
当提示用户输入的内容,或操作非法时,用重新返回到原页面,而不是异常或退出。
用到dispose()让本页面“消失”,在重新调用原来的页面。
在提醒用户方面,获得本地的时间与提醒时间相同时,用到ShowMessageDialog()提示,用户在某时间要做某事。
2.删除界面
3-3
如图3-3所示,在删除方式方面,可以选择全部删除或者单一删除。
在删除方式选择方面用的是JOptionPane.ShowOptionDialog(),利用if判断选择的序号,根据用户选择的功能,执行相应的方法。
当选择的内容为“按时间删除”内容时,在数据库方面用到的sql语句为(“deletefromSchedulewheredaytime=‘”+date+”’”);可以根据时间删除事件提醒的内容,在首页面板的JLabel上显示的就没有本条事件提醒内容;
而在选择的内容为“删除所有事件提醒”内容时,在数据库方面用到的sql语句为(“deletefromSchedule“);可以根据删除全部的事件提醒的内容,在首页面板的JLabel上显示的就为空;
3.查询界面
3-4
如图3-3所示,在删除方式方面,可以选择全部查询或者单一查询。
在删除方式选择方面用的是JOptionPane.ShowOptionDialog(),利用if判断选择的序号,根据用户选择的功能,执行相应的方法。
当选择的内容为“按时间查询”内容时,在数据库方面用到的sql语句为(“selectNo,daytime,thingsfromSchedulewheredaytime=‘”+date+”’”);可以根据时间查询事件提醒的内容,在showMessageDialog消息弹出一个消息对话框,会提示查询成功以及查询的结果;
而在选择的内容为“查询所有事件提醒”内容时,在数据库方面用到的sql语句为(“select*fromSchedule“);可以查询全部的事件提醒的内容,在弹出的面板中会显示所查询的内容;
3.3部分功能实现的源代码
importjava.util.Date;
importjava.util.Calendar;
importjava.text.SimpleDateFormat;
importjava.text.ParseException;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Point;
importjava.awt.Dimension;
importjava.awt.BorderLayout;
importjava.awt.FlowLayout;
importjava.awt.GridLayout;
importjava.awt.Cursor;
importjava.awt.Frame;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
//importjavax.swing.JFrame;
importjavax.swing.JButton;
importjavax.swing.JDialog;
importjavax.swing.JFrame;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JLabel;
importjavax.swing.JSpinner;
import;
importjavax.swing.JTextField;
importjavax.swing.SpinnerNumberModel;
importjavax.swing.SwingUtilities;
importjavax.swing.SwingConstants;
importjavax.swing.event.ChangeListener;
importjavax.swing.event.ChangeEvent;
importjavax.swing.border.LineBorder;
@SuppressWarnings("serial")
publicclassCalextendsJFrame{
finalStringshowMessageDialog="未添加时间信息,请重新添加!
!
";
privateStringgetDate(){
//TODOAuto-generatedmethodstub
Dated=newDate();
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddkk");
Stringstr=sdf.format(d);//System.out.println("Thedateis:
"+str);
returnstr;
}
publicCal(){
finalDateChooserJButtonbtn=newDateChooserJButton();
finalJTextFieldjt1=newJTextField(30);
finalJButtonbtn2=newJButton("确定");
finalJLabeljl=newJLabel("请输入事件提醒的内容:
");
if(btn.getText()==getDate()){
JOptionPane.showMessageDialog(null,showMessageDialog);
}
if((jt1.getText()).equals(null)){
JOptionPane.showMessageDialog(null,"未添加提示信息,请重新添加!
!
");
}
btn2.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(btn.getText()==getDate()){
JOptionPane.showMessageDialog(null,"未添加时间信息,请重新添加!
!
");
}
//System.out.print(getDate());
if(jt1.getText()==null){
JOptionPane.showMessageDialog(null,"未添加提示信息,请重新添加!
!
");
}
JOptionPane.showMessageDialog(null,"未添加提示信息,请重新添加!
!
");
JOptionPane.showMessageDialog(null,"事件提醒时间"+btn.getText()+"获取成功。
");
dispose();
System.out.println(jt1.getText());
ScheduleManagementsm=newScheduleManagement();
sm.setSize(600,500);
sm.setLocation(400,200);
}
});
this.getContentPane().setLayout(newBorderLayout());
this.getContentPane().add(btn,newBorderLayout().NORTH);
this.getContentPane().add(jl,newBorderLayout().WEST);
this.getContentPane().add(jt1,newBorderLayout().EAST);
this.getContentPane().add(btn2,newBorderLayout().SOUTH);
this.setSize(500,400);
this.setLocation(400,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@SuppressWarnings("unused")
publicstaticvoidmain(String[]args){
Calcal=newCal();
}
}
@SuppressWarnings("serial")
classDateChooserJButtonextendsJButton{
privateDateChooserdateChooser=null;
privateStringpreLabel="";
publicDateChooserJButton(){
this(getNowDate());
}
publicDateChooserJButton(SimpleDateFormatdf,StringdateString){
this();
setText(df,dateString);
}
publicDateChooserJButton(Datedate){
this("",date);
}
publicDateChooserJButton(StringpreLabel,Datedate){
if(preLabel!
=null)this.preLabel=preLabel;
setDate(date);
setBorder(null);
setCursor(newCursor(Cursor.HAND_CURSOR));
super.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(dateChooser==null)dateChooser=newDateChooser();
Pointp=getLocationOnScreen();
p.y=p.y+30;
dateChooser.showDateChooser(p);
}
});
}
privatestaticDategetNowDate(){
returnCalendar.getInstance().getTime();
}
privatestaticSimpleDateFormatgetDefaultDateFormat(){
returnnewSimpleDateFormat("yyyy-MM-ddHH");
}
//覆盖父类的方法
publicvoidsetText(Strings){
Datedate;
try{
date=getDefaultDateFormat().parse(s);
}catch(ParseExceptione){
date=getNowDate();
}
setDate(date);
}
publicvoidsetText(SimpleDateFormatdf,Strings){
Datedate;
try{
date=df.parse(s);
}catch(ParseExceptione){
date=getNowDate();
}
setDate(date);
}
publicvoidsetDate(Datedate){
super.setText(preLabel+getDefaultDateFormat().format(date));
}
publicDategetDate(){
StringdateString=getText().substring(preLabel.length());
try{
returngetDefaultDateFormat().parse(dateString);
}catch(ParseExceptione){
returngetNowDate();
}
}
//覆盖父类的方法使之无效
publicvoidaddActionListener(ActionListen