222详细设计文档.docx
《222详细设计文档.docx》由会员分享,可在线阅读,更多相关《222详细设计文档.docx(18页珍藏版)》请在冰豆网上搜索。
222详细设计文档
时钟日历程序
详细设计说明书
文档名称:
时钟日历详细设计说明书
小组成员:
殷鑫,黄丹,邓伟,张鸿俊,庞玉涛,刘陈
界面设计与美术资料搜集:
庞玉涛
程序设计与实现:
殷鑫,黄丹
文档资料收集与编写:
刘陈,张鸿俊
编写时间:
2009年12月23日星期三
文档和程序审核:
邓伟
审核时间:
2009年12月27日星期日
目录
第一章引言6
第一节编写目的6
第二节编写背景6
1.2.1组件名称及版本号6
1.2.2任务提出者6
1.2.3任务承接者及实施者6
1.2.4使用者6
1.2.5所使用到的其他组件6
第三节文档概述7
1.3.1文档结构说明7
1.3.2电子文档编写工具7
1.3.3定义说明与符号7
1.3.4参考资料7
第二章功能概述8
第一节功能模块命名原则8
第二节用例图8
第三节功能模块与部门的对应关系9
第四节本子系统的外部接口10
第三章功能模块详述15
第一节模块115
第二节模块216
第三节模块316
第一章引言
第一节编写目的
设计对象:
时钟日历组件
预期读者:
我方与用户方的开发人员、双方的系统维护人员。
作用:
承上启下。
基于概要设计,为下一阶段的程序编码工作提供依据。
它是项
目验收的重要内容和后期维护的必备资料。
第二节编写背景
1.2.1系统名称及版本号
时钟日历组件原始版本
1.2.2任务提出者
指承担《质量保证计划》中规定的我方领导机构或项目负责人。
1.2.3任务承接者及实施者
承担本组件详细设计的负责人及工作人员为:
殷鑫,黄丹,邓伟,张鸿俊,庞玉涛,刘陈
1.2.4使用者
1.2.5与其它子系统的关系
【说明】给本子系统在整个系统中准确定位,用功能层次图及相应的文字予以说明。
第三节文档概述
1.3.1文档结构说明
【说明】章节划分原则、内容的取舍、重点的确定等。
1.3.2电子文档编写工具
【说明】工具名、版本号、操作系统平台。
使用多种工具时,应分别说明。
形如:
MicrosoftWord97forWindows98
Power-Designor6.0forWindows95
PhotoShop4.0forWindows95
Visio或PowerPoint
1.3.3定义说明与符号
【说明】包括对专用术语及缩略语的解释、所用到的图(物理数据模型图/功能层次图/逻辑框图/流程图等)中图符的表示与解释、屏幕界面中图标与按钮的表示与含义等。
1.3.4参考资料
【说明】格式:
作者,[版本号],资料来源,日期,[起止页号]。
其中,《需求规格说明书》与《概要设计说明书》是必选的参考资料。
第二章功能概述
第一节功能模块命名原则
第二节用例图
用户
第三节功能与部门对应关系
第四节本子系统的外部接口
第三章功能模块详述
模块一时钟显示模块
3.1.1模块编号与中文注释
模块编号:
模块一。
注释:
在软件界面右方显示时钟。
3.1.2功能描述与性能描述
功能描述:
显示时间功能:
在组件弹出框的右边显示一个表示当前时间的时钟。
性能描述:
时间精确度高,精确到秒。
并且误差小,与操作系统时钟同步。
3.1.3输入信息
用一个Calendar的实例ca接收系统时间,初始化时钟。
3.1.4输出信息
图形化界面显示当前时间。
3.1.5算法
Canlendar类的实例ca接受系统时间。
在利用相关函数算出时针、分针以及秒针终点坐标。
Calendarca=Calendar.getInstance();
doublehour=ca.get(Calendar.HOUR)*Math.PI*2/12;
doubleminute=ca.get(Calendar.MINUTE)*Math.PI*2/60;
doublesecond=ca.get(Calendar.SECOND)*Math.PI*2/60;
g2.draw(draw_pointline(hour,30));//画出时针
g2.draw(draw_pointline(minute,60));//画出分针
g2.draw(draw_pointline(second,90));//画出秒针
3.1.6处理流程
3.1.7应说明的问题与限制
改时钟与系统时钟同步,无法直接修改该时钟。
如须修改,要通过修改系统时钟以完成修改。
3.1.8屏幕布局设计与说明
Clock类的中的方法paintComponent()该方法完成了整个时钟的刻画。
首先调用父类的paintComponent(g);然后设置颜色为黄色(Color.orange),接着调用creat_clock_frame()方法画出时钟的外接圆然后设置颜色为黑色(Color.black)。
接着用一个for循环,其中调用creat_clock_pointline(j,10)方法画出秒针刻度,然后同理再用一个for循环和该方法画出时针刻度。
publicvoidpaintComponent(Graphicsg)
{
super.paintComponent(g);
Graphics2Dg2=(Graphics2D)g;
g2.setPaint(Color.orange);//设置绘画颜色为黄色
g2.fill(creat_clock_frame());//画出一个时钟的外接圆
g2.setPaint(Color.black);//设置绘画颜色为黑色
for(inti=1;i<=60;i++)//画出秒针刻度
{
doublej=i*Math.PI/30;
g2.draw(creat_clock_pointline(j,10));
}
for(inti=1;i<=12;i++)//画出时针刻度
{
doublej=i*Math.PI/6;
g2.draw(creat_clock_pointline(j,20));
}
}
时钟完整界面如下:
模块二日历显示模块
3.2.1模块编号与中文注释
模块编号:
模块二。
注释:
此模块包含一个类mypanel1扩展与JPanel。
其中包了myJSpinner.addChangeListener、myJComboBox.addItemListener两个用于事件处理的监听器类。
3.2.2功能描述与性能描述
功能描述
此模块从系统、子模块JSpinner、子模块JCombobox获取输入,显示和更新日历面板。
此模块用于绘制日历面板、显示对应年月的每天对应的星期。
性能描述
该模块要能在JSpinner和JCombobox中值改变几乎同时要能看到日历显示当年当月的日历。
3.2.3输入信息
从日历修改模块接收信息。
3.2.4输出信息
将所选日期在日历上的对应格底色改为紫色。
3.2.5算法
为了使当前日期的Button显示为其他颜色,获得当前日期后,利用一个FOR循环,找出与cu_day的值相等的Button。
然后将其Background改成BLUE。
使用以下代码:
if((Integer)myJSpinner.getValue()==cu_year&&myJComboBox.getSelectedIndex()==cu_month)
{
Stringa=newInteger(cu_day).toString();
System.out.println(a);
for(intz=0;z<=41;z++)
{
if(myJButton[z].getText().equals(a))
{
myJButton[z].setBackground(Color.BLUE);
}
}
}
非选被选
3.2.6处理流程
3.2.7应说明的问题与限制
在setgridBagConstraints()方法中使用的对每个Button的布局管理有点问题,使得有显示数字和没显示数字的Button之间存在间隙,对美观有一定影响。
3.2.8屏幕布局设计与说明
1.JComboBox组件
通过方法getMyJComboBox()实现,用于返回JComboBox,并对其设置初始值,以及加入事件监听,监听对JComboBox的操作和改变,并且将改变的值放入相应变量,重新刷新日历的显示。
在此组件中,通过使用以下代码加入可选项:
myJComboBox.addItem("一月");
myJComboBox.addItem("二月");
myJComboBox.addItem("三月");
myJComboBox.addItem("四月");
myJComboBox.addItem("五月");
myJComboBox.addItem("六月");
myJComboBox.addItem("七月");
myJComboBox.addItem("八月");
myJComboBox.addItem("九月");
myJComboBox.addItem("十月");
myJComboBox.addItem("十一月");
myJComboBox.addItem("十二月");
2.JPanel组件
通过方法getMypanel2()实现,用于返回盛放日历中显示具体日子的组件的Panel,并在此Panel中加入许多相同Button,以作为具体显示日期的容器。
在此组件中,通过调用setgridBagConstraints()和add_date()方法对所有用于显示具体日期的Button进行布局设置和显示值设置。
setgridBagConstraints()方法用于设置每个Button的布局的gridBagConstraints,被getMypanel2()调用。
在setgridBagConstraints()方法中通过使用for循环,在for循环中使用下面代码产生每个Button的容器:
gridBagConstraints[n]=newGridBagConstraints()
并且在后面的for循环中对每个Button的容器进行设置.
gridBagConstraints[i].gridx=x;
gridBagConstraints[i].gridy=y;
add_date()方法用于设置Mypanel2中所有组件的初始值。
在add_date()方法中通过使用for循环,在for循环中使用下面代码设置每个Button和Label
复选框的初始状态如图(左边的数值代表年份):
而用户将鼠标移到左边的方框内,则可以直接输入数值来修改年份。
剩下的部分为日期界面,整个界面是一个红色的按钮。
使用以下代码完成Button的添加,完成日历界面。
myJLabel[0].setText("日")
myJLabel[1].setText("一")
myJLabel[2].setText("二")
myJLabel[3].setText("三")
myJLabel[4].setText("四")
myJLabel[5].setText("五")
myJLabel[6].setText("六")
mypanel2.add(myJLabel[0],gridBagConstraints[0])
mypanel2.add(myJLabel[1],gridBagConstraints[1])
mypanel2.add(myJLabel[2],gridBagConstraints[2])
mypanel2.add(myJLabel[3],gridBagConstraints[3])
mypanel2.add(myJLabel[4],gridBagConstraints[4])
mypanel2.add(myJLabel[5],gridBagConstraints[5])
mypanel2.add(myJLabel[6],gridBagConstraints[6])
在先后两个for循环中使用,加入Button和剩余的Label:
日历完整界面如下:
模块三日历修改模块
3.3.1模块编号与中文注释
模块编号:
模块三。
注释:
通过方法getMyJSpinner()实现,用于返回JSpinner,并对其设置初始值,以及加入事件监听,监听对JSpinner的操作和改变,并且将改变的值放入相应变量,重新刷新日历的显示。
3.3.2功能描述与性能描述
功能描述
根据用户输入信息更改日历日期。
性能描述
该模块要能在JSpinner和JCombobox中值改变几乎同时要能看到日历显示当年当月的日历。
3.3.3输入信息
JComboBox的值与JSpinner的值
3.3.4输出信息
日历上对应日期背景色为紫色
3.3.5算法
YES
NO
NO
YES
NO
YES
YES
通过方法getMyJSpinner()实现,用于返回JSpinner,并对其设置初始值,以及加入事件监听,监听对JSpinner的操作和改变,并且将改变的值放入相应变量,重新刷新日历的显示。
在此组件中,通过使用以下代码设置初值:
myJSpinner.setValue(year);
通过加入监听器myJSpinner.addChangeListener,监听对JSpinner的操作和改变,并且将改变的值放入相应变量,重新刷新日历的显示:
3.3.6处理流程
YES
NO
NO
YES
NO
YES
YES
3.3.7应说明的问题与限制
在setgridBagConstraints()方法中使用的对每个Button的布局管理有点问题,使得有显示数字和没显示数字的Button之间存在间隙,对美观有一定影响.